<?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>204955</bug_id>
          
          <creation_ts>2019-12-06 12:07:21 -0800</creation_ts>
          <short_desc>Implement canvas remote rendering</short_desc>
          <delta_ts>2020-03-02 16:39:33 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>204970</dependson>
    
    <dependson>206516</dependson>
    
    <dependson>206519</dependson>
    
    <dependson>206541</dependson>
    
    <dependson>206621</dependson>
    
    <dependson>207048</dependson>
    
    <dependson>207109</dependson>
    
    <dependson>207134</dependson>
    
    <dependson>207198</dependson>
    
    <dependson>207221</dependson>
    
    <dependson>207233</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>alecflett</cc>
    
    <cc>annulen</cc>
    
    <cc>beidson</cc>
    
    <cc>bfulgham</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>clord</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jonlee</cc>
    
    <cc>jsbell</cc>
    
    <cc>justin_fan</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mkwst</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
    
    <cc>youennf</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1596309</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-06 12:07:21 -0800</bug_when>
    <thetext>The short team goal is to make this IOSurface accessed by GPU and Web processes. GPU should be able to write to this IOSurface by executing drawing commands or putting data. The Web process should have a read-only access to this IOSurface. So Web process can draw it to a GraphicsContext through an ImageBuffer.

The long term plan is to have this IOSurface is accessible only by the GPU process. The Web process can reference it to the GPU process by its ID but does not have access to its memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596437</commentid>
    <comment_count>1</comment_count>
      <attachid>385057</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-06 16:40:09 -0800</bug_when>
    <thetext>Created attachment 385057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596467</commentid>
    <comment_count>2</comment_count>
      <attachid>385071</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-06 17:41:40 -0800</bug_when>
    <thetext>Created attachment 385071
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596468</commentid>
    <comment_count>3</comment_count>
      <attachid>385072</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-06 18:01:45 -0800</bug_when>
    <thetext>Created attachment 385072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596469</commentid>
    <comment_count>4</comment_count>
      <attachid>385071</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-12-06 18:04:14 -0800</bug_when>
    <thetext>Comment on attachment 385071
Patch

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

&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:654
&gt; -        colorSpace = ColorSpaceSRGB;
&gt; +        colorSpace = ColorSpace::SRGB;

Can you do the enum class change in a different patch?

&gt; Source/WebCore/platform/graphics/RenderingBackend.h:41
&gt; +    virtual std::pair&lt;uint64_t, std::unique_ptr&lt;IOSurface&gt;&gt; createSharedIOSurface(const IntSize&amp;, const IntSize&amp; contextSize, ColorSpace) = 0;
&gt; +    virtual bool releaseSharedIOSurface(uint64_t surfaceID) = 0;

Please use ObjectIdentifier&lt;&gt; rather than a bare uint64_t.

&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:86
&gt; +    auto result = IOSurfaceManager::sharedManager().createSharedIOSurface(size, contextSize, colorSpace);
&gt; +
&gt; +    ASSERT(!!result.first == !!result.second);
&gt; +    if (result.second)
&gt; +        reply(result.first, result.second-&gt;createSendRight());
&gt; +    else
&gt; +        reply(0, { });

I think you need a RenderingBackend-type proxy thing in the GPU process that does this part.

&gt; Source/WebKit/GPUProcess/IOSurfaceManager.h:36
&gt; +class IOSurfaceManager {

Can we not call it a Manager? IOSurfaceSet?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596475</commentid>
    <comment_count>5</comment_count>
      <attachid>385072</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-06 18:28:12 -0800</bug_when>
    <thetext>Comment on attachment 385072
Patch

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

IOSurface is an macOS/iOS class/concept, so I don&apos;t think it should be used in these ostensibly cross platform classes.  In most other cases we create an abstraction around it and use IOSurface as the implementation of that abstraction on Apple platforms.

&gt; Source/WebCore/ChangeLog:4
&gt; +        Make GPU process create/release a shared IOSurface
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=204955

How are you testing this?

&gt; Source/WebCore/page/Page.h:280
&gt; +#if ENABLE(GPU_PROCESS)
&gt; +    RefPtr&lt;RenderingBackend&gt; renderingBackend();
&gt; +#endif

Leaking the notion of a GPU process into the page seems very unfortunate. I think this would be much cleaner/clearer if all pages had a RenderingBackend, and one implementation of the backend was a GPU process.

&gt; Source/WebCore/platform/graphics/ColorSpace.h:33
&gt; +enum class ColorSpace : uint8_t {
&gt; +    SRGB,
&gt; +    LinearRGB,
&gt; +    DisplayP3

Can you make this change in its own change prior to this?

&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:26
&gt; +    void CreateSharedIOSurface(WebCore::IntSize size, WebCore::IntSize contextSize, enum:uint8_t WebCore::ColorSpace colorSpace) -&gt; (uint64_t surfaceID, MachSendRight sendRight) Synchronous

Please do not introduce any new sync messages, they almost always cause performance issues down the line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596540</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-07 01:53:42 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #5)
&gt; Comment on attachment 385072 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385072&amp;action=review
&gt; 
&gt; IOSurface is an macOS/iOS class/concept, so I don&apos;t think it should be used
&gt; in these ostensibly cross platform classes.  In most other cases we create
&gt; an abstraction around it and use IOSurface as the implementation of that
&gt; abstraction on Apple platforms.

Agreed, it should have a more &quot;ImageBuffer&quot;y name (but not that obviously). RenderingSurface?

&gt; &gt; Source/WebCore/ChangeLog:4
&gt; &gt; +        Make GPU process create/release a shared IOSurface
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=204955
&gt; 
&gt; How are you testing this?

Other folks are bringing up the testing story.

&gt; &gt; Source/WebCore/page/Page.h:280
&gt; &gt; +#if ENABLE(GPU_PROCESS)
&gt; &gt; +    RefPtr&lt;RenderingBackend&gt; renderingBackend();
&gt; &gt; +#endif
&gt; 
&gt; Leaking the notion of a GPU process into the page seems very unfortunate. I
&gt; think this would be much cleaner/clearer if all pages had a
&gt; RenderingBackend, and one implementation of the backend was a GPU process.

This was my intent when suggesting this design, indeed.

&gt; &gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:26
&gt; &gt; +    void CreateSharedIOSurface(WebCore::IntSize size, WebCore::IntSize contextSize, enum:uint8_t WebCore::ColorSpace colorSpace) -&gt; (uint64_t surfaceID, MachSendRight sendRight) Synchronous
&gt; 
&gt; Please do not introduce any new sync messages, they almost always cause
&gt; performance issues down the line.

We add sync messages /out/ from the Web Content process all the time. We do need to come up with a plan that isn&apos;t sync here, but don&apos;t know what it is yet (since currently these things happen during painting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596618</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-07 13:42:34 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #6)
&gt; (In reply to Sam Weinig from comment #5)
&gt; &gt; &gt; Source/WebCore/ChangeLog:4
&gt; &gt; &gt; +        Make GPU process create/release a shared IOSurface
&gt; &gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=204955
&gt; &gt; 
&gt; &gt; How are you testing this?
&gt; 
&gt; Other folks are bringing up the testing story.
&gt; 

Boo. Do it together or do it first. :)

&gt; 
&gt; &gt; &gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:26
&gt; &gt; &gt; +    void CreateSharedIOSurface(WebCore::IntSize size, WebCore::IntSize contextSize, enum:uint8_t WebCore::ColorSpace colorSpace) -&gt; (uint64_t surfaceID, MachSendRight sendRight) Synchronous
&gt; &gt; 
&gt; &gt; Please do not introduce any new sync messages, they almost always cause
&gt; &gt; performance issues down the line.
&gt; 
&gt; We add sync messages /out/ from the Web Content process all the time. We do
&gt; need to come up with a plan that isn&apos;t sync here, but don&apos;t know what it is
&gt; yet (since currently these things happen during painting).

Assuming painting doesn&apos;t do much/any read back of the surface (and that be a big assumption), you could buffer the painting calls until the surface has been created, and then send the batch of buffered painting calls all at once. If read back is needed, and can&apos;t be implemented otherwise, you could do the sync wait only at that point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1596619</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-07 13:44:12 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #6)
&gt; (In reply to Sam Weinig from comment #5)
&gt; 
&gt; &gt; &gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:26
&gt; &gt; &gt; +    void CreateSharedIOSurface(WebCore::IntSize size, WebCore::IntSize contextSize, enum:uint8_t WebCore::ColorSpace colorSpace) -&gt; (uint64_t surfaceID, MachSendRight sendRight) Synchronous
&gt; &gt; 
&gt; &gt; Please do not introduce any new sync messages, they almost always cause
&gt; &gt; performance issues down the line.
&gt; 
&gt; We add sync messages /out/ from the Web Content process all the time. We do
&gt; need to come up with a plan that isn&apos;t sync here, but don&apos;t know what it is
&gt; yet (since currently these things happen during painting).

Just because we do it already, doesn&apos;t mean it is a good pattern, or something we should add more of. For sure, it isn&apos;t as bad as blocking the main thread of the UI process with a sync call, but it still is something that we should work hard to avoid, and not build into our designs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597464</commentid>
    <comment_count>9</comment_count>
      <attachid>385330</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-10 17:57:28 -0800</bug_when>
    <thetext>Created attachment 385330
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597482</commentid>
    <comment_count>10</comment_count>
      <attachid>385337</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-10 18:46:49 -0800</bug_when>
    <thetext>Created attachment 385337
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597483</commentid>
    <comment_count>11</comment_count>
      <attachid>385071</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-10 18:53:58 -0800</bug_when>
    <thetext>Comment on attachment 385071
Patch

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

&gt;&gt; Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:654
&gt;&gt; +        colorSpace = ColorSpace::SRGB;
&gt; 
&gt; Can you do the enum class change in a different patch?

Done in r253268.

&gt;&gt; Source/WebCore/platform/graphics/RenderingBackend.h:41
&gt;&gt; +    virtual bool releaseSharedIOSurface(uint64_t surfaceID) = 0;
&gt; 
&gt; Please use ObjectIdentifier&lt;&gt; rather than a bare uint64_t.

Fixed.

&gt;&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp:86
&gt;&gt; +        reply(0, { });
&gt; 
&gt; I think you need a RenderingBackend-type proxy thing in the GPU process that does this part.

Done.

&gt;&gt; Source/WebKit/GPUProcess/IOSurfaceManager.h:36
&gt;&gt; +class IOSurfaceManager {
&gt; 
&gt; Can we not call it a Manager? IOSurfaceSet?

I changed the name to RenderingSurfaceSet to be platform independent. It still returns IOSurface only. But the plan is to make it return a platform independent surface e.g. &apos;RenderingSurface&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597485</commentid>
    <comment_count>12</comment_count>
      <attachid>385072</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-10 19:23:58 -0800</bug_when>
    <thetext>Comment on attachment 385072
Patch

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

&gt;&gt;&gt; Source/WebCore/ChangeLog:4
&gt;&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=204955
&gt;&gt; 
&gt;&gt; How are you testing this?
&gt; 
&gt; Other folks are bringing up the testing story.

With this patch, we can&apos;t. But we just need to make the ImageBuffer of the CanvasRenderingContext2D be backed by a GPUProcess IOSurface. I think I can do this in the next patch through an internal setting.

&gt;&gt;&gt; Source/WebCore/page/Page.h:280
&gt;&gt;&gt; +#endif
&gt;&gt; 
&gt;&gt; Leaking the notion of a GPU process into the page seems very unfortunate. I think this would be much cleaner/clearer if all pages had a RenderingBackend, and one implementation of the backend was a GPU process.
&gt; 
&gt; This was my intent when suggesting this design, indeed.

We discussed this and Simon even suggested having a RenderingBackend per Document or Frame. The reason was in some cases, like frame animation throttling, we may want to have control over flushing the GraphicsContext for this frame. But I really don&apos;t know the best owner of RenderingBackend, so I think we can leave it in the page for now and we can change it later if we have to.

&gt;&gt; Source/WebCore/platform/graphics/ColorSpace.h:33
&gt;&gt; +    DisplayP3
&gt; 
&gt; Can you make this change in its own change prior to this?

Done in r253268.

&gt;&gt;&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:26
&gt;&gt;&gt; +    void CreateSharedIOSurface(WebCore::IntSize size, WebCore::IntSize contextSize, enum:uint8_t WebCore::ColorSpace colorSpace) -&gt; (uint64_t surfaceID, MachSendRight sendRight) Synchronous
&gt;&gt; 
&gt;&gt; Please do not introduce any new sync messages, they almost always cause performance issues down the line.
&gt; 
&gt; We add sync messages /out/ from the Web Content process all the time. We do need to come up with a plan that isn&apos;t sync here, but don&apos;t know what it is yet (since currently these things happen during painting).

Creating an IOSurface does not happen very often. We definitely have to make the painting asynchronous but it requires very careful synchronization. If creating the IOSurface appears in the traces, which I doubt,  we can make it also asynchronous message. But please let us have a simple interface for now till we start measuring the perf implication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597491</commentid>
    <comment_count>13</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-10 21:26:12 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #12)
&gt; Comment on attachment 385072 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=385072&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/ChangeLog:4
&gt; &gt;&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=204955
&gt; &gt;&gt; 
&gt; &gt;&gt; How are you testing this?
&gt; &gt; 
&gt; &gt; Other folks are bringing up the testing story.
&gt; 
&gt; With this patch, we can&apos;t. But we just need to make the ImageBuffer of the
&gt; CanvasRenderingContext2D be backed by a GPUProcess IOSurface. I think I can
&gt; do this in the next patch through an internal setting.
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/page/Page.h:280
&gt; &gt;&gt;&gt; +#endif
&gt; &gt;&gt; 
&gt; &gt;&gt; Leaking the notion of a GPU process into the page seems very unfortunate. I think this would be much cleaner/clearer if all pages had a RenderingBackend, and one implementation of the backend was a GPU process.
&gt; &gt; 
&gt; &gt; This was my intent when suggesting this design, indeed.
&gt; 
&gt; We discussed this and Simon even suggested having a RenderingBackend per
&gt; Document or Frame. The reason was in some cases, like frame animation
&gt; throttling, we may want to have control over flushing the GraphicsContext
&gt; for this frame. But I really don&apos;t know the best owner of RenderingBackend,
&gt; so I think we can leave it in the page for now and we can change it later if
&gt; we have to.

I think there was a misunderstanding here.

Sam&apos;s point is not that Page shouldn&apos;t own it, it&apos;s that *all* Pages should have a RenderingBackend (even ones that don&apos;t use a GPU process), with a sensible in-process implementation that is used in the GPU-process-disabled case.

&gt; &gt;&gt; Source/WebCore/platform/graphics/ColorSpace.h:33
&gt; &gt;&gt; +    DisplayP3
&gt; &gt; 
&gt; &gt; Can you make this change in its own change prior to this?
&gt; 
&gt; Done in r253268.
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:26
&gt; &gt;&gt;&gt; +    void CreateSharedIOSurface(WebCore::IntSize size, WebCore::IntSize contextSize, enum:uint8_t WebCore::ColorSpace colorSpace) -&gt; (uint64_t surfaceID, MachSendRight sendRight) Synchronous
&gt; &gt;&gt; 
&gt; &gt;&gt; Please do not introduce any new sync messages, they almost always cause performance issues down the line.
&gt; &gt; 
&gt; &gt; We add sync messages /out/ from the Web Content process all the time. We do need to come up with a plan that isn&apos;t sync here, but don&apos;t know what it is yet (since currently these things happen during painting).
&gt; 
&gt; Creating an IOSurface does not happen very often.

This is not true on pages where e.g. a layer changes size frequently, though it might be true with canvas.

&gt; We definitely have to make the painting asynchronous but it requires very careful synchronization. If
&gt; creating the IOSurface appears in the traces,

It already does.

&gt; which I doubt,  we can make it
&gt; also asynchronous message. But please let us have a simple interface for now
&gt; till we start measuring the perf implication.

Sam is right that we should avoid it if possible. On the other hand, I understand why it&apos;s hard to do async things under painting code. BUT, since we&apos;re going to have to figure it out for painting, we might as well start thinking about it now. Maybe we should have a brainstorming session about this tomorrow.

It would be /amazing/ if we could avoid adding handleSyncMessage to the GPU process entirely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597493</commentid>
    <comment_count>14</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2019-12-10 21:29:47 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #13)
&gt; 
&gt; It would be /amazing/ if we could avoid adding handleSyncMessage to the GPU
&gt; process entirely.

It would indeed! 

I hope you aren&apos;t holding your breath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597495</commentid>
    <comment_count>15</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-10 21:31:43 -0800</bug_when>
    <thetext>(In reply to Eric Carlson from comment #14)
&gt; (In reply to Tim Horton from comment #13)
&gt; &gt; 
&gt; &gt; It would be /amazing/ if we could avoid adding handleSyncMessage to the GPU
&gt; &gt; process entirely.
&gt; 
&gt; It would indeed! 
&gt; 
&gt; I hope you aren&apos;t holding your breath.

Don&apos;t worry, I complained at you too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1597532</commentid>
    <comment_count>16</comment_count>
      <attachid>385359</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-10 23:24:42 -0800</bug_when>
    <thetext>Created attachment 385359
Patch

Fix gtk, wpe, wincairo and win EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598599</commentid>
    <comment_count>17</comment_count>
      <attachid>385670</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-13 19:56:56 -0800</bug_when>
    <thetext>Created attachment 385670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598605</commentid>
    <comment_count>18</comment_count>
      <attachid>385673</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-13 20:45:33 -0800</bug_when>
    <thetext>Created attachment 385673
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598618</commentid>
    <comment_count>19</comment_count>
      <attachid>385682</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-13 22:41:19 -0800</bug_when>
    <thetext>Created attachment 385682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598621</commentid>
    <comment_count>20</comment_count>
      <attachid>385684</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-13 22:57:28 -0800</bug_when>
    <thetext>Created attachment 385684
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598640</commentid>
    <comment_count>21</comment_count>
      <attachid>385689</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-14 10:16:24 -0800</bug_when>
    <thetext>Created attachment 385689
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598760</commentid>
    <comment_count>22</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-15 11:42:40 -0800</bug_when>
    <thetext>(In reply to Tim Horton from comment #13)
&gt; (In reply to Said Abou-Hallawa from comment #12)
&gt; &gt; Comment on attachment 385072 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=385072&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebCore/ChangeLog:4
&gt; &gt; &gt;&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=204955
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; How are you testing this?
&gt; &gt; &gt; 
&gt; &gt; &gt; Other folks are bringing up the testing story.
&gt; &gt; 
&gt; &gt; With this patch, we can&apos;t. But we just need to make the ImageBuffer of the
&gt; &gt; CanvasRenderingContext2D be backed by a GPUProcess IOSurface. I think I can
&gt; &gt; do this in the next patch through an internal setting.
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebCore/page/Page.h:280
&gt; &gt; &gt;&gt;&gt; +#endif
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Leaking the notion of a GPU process into the page seems very unfortunate. I think this would be much cleaner/clearer if all pages had a RenderingBackend, and one implementation of the backend was a GPU process.
&gt; &gt; &gt; 
&gt; &gt; &gt; This was my intent when suggesting this design, indeed.
&gt; &gt; 
&gt; &gt; We discussed this and Simon even suggested having a RenderingBackend per
&gt; &gt; Document or Frame. The reason was in some cases, like frame animation
&gt; &gt; throttling, we may want to have control over flushing the GraphicsContext
&gt; &gt; for this frame. But I really don&apos;t know the best owner of RenderingBackend,
&gt; &gt; so I think we can leave it in the page for now and we can change it later if
&gt; &gt; we have to.
&gt; 
&gt; I think there was a misunderstanding here.
&gt; 
&gt; Sam&apos;s point is not that Page shouldn&apos;t own it, it&apos;s that *all* Pages should
&gt; have a RenderingBackend (even ones that don&apos;t use a GPU process), with a
&gt; sensible in-process implementation that is used in the GPU-process-disabled
&gt; case.
&gt; 

The GPU process painting through RenderingBackend is based on replaying back the DisplayList. It will be hard to make the GPU-process-disabled case rely on RenderingBackend especially if DisplayList is not used.

&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/ColorSpace.h:33
&gt; &gt; &gt;&gt; +    DisplayP3
&gt; &gt; &gt; 
&gt; &gt; &gt; Can you make this change in its own change prior to this?
&gt; &gt; 
&gt; &gt; Done in r253268.
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in:26
&gt; &gt; &gt;&gt;&gt; +    void CreateSharedIOSurface(WebCore::IntSize size, WebCore::IntSize contextSize, enum:uint8_t WebCore::ColorSpace colorSpace) -&gt; (uint64_t surfaceID, MachSendRight sendRight) Synchronous
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Please do not introduce any new sync messages, they almost always cause performance issues down the line.
&gt; &gt; &gt; 
&gt; &gt; &gt; We add sync messages /out/ from the Web Content process all the time. We do need to come up with a plan that isn&apos;t sync here, but don&apos;t know what it is yet (since currently these things happen during painting).
&gt; &gt; 
&gt; &gt; Creating an IOSurface does not happen very often.
&gt; 
&gt; This is not true on pages where e.g. a layer changes size frequently, though
&gt; it might be true with canvas.
&gt; 

All the messages are made asynchronous. Generating the SurfaceIdentifier happens in the WebProcess. Sending the &quot;CreateSurface&quot; message does not need to wait for a reply from the GPUProcess. However two cases the WebProcess may be blocked later only for &quot;sometime&quot; to make sure everything is synchronized correctly:

1. Flushing the surface.
2. Getting the platform surface.

&gt; &gt; We definitely have to make the painting asynchronous but it requires very careful synchronization. If
&gt; &gt; creating the IOSurface appears in the traces,
&gt; 
&gt; It already does.
&gt; 
&gt; &gt; which I doubt,  we can make it
&gt; &gt; also asynchronous message. But please let us have a simple interface for now
&gt; &gt; till we start measuring the perf implication.
&gt; 
&gt; Sam is right that we should avoid it if possible. On the other hand, I
&gt; understand why it&apos;s hard to do async things under painting code. BUT, since
&gt; we&apos;re going to have to figure it out for painting, we might as well start
&gt; thinking about it now. Maybe we should have a brainstorming session about
&gt; this tomorrow.
&gt; 
&gt; It would be /amazing/ if we could avoid adding handleSyncMessage to the GPU
&gt; process entirely.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598780</commentid>
    <comment_count>23</comment_count>
      <attachid>385689</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-15 17:41:59 -0800</bug_when>
    <thetext>Comment on attachment 385689
Patch

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

&gt; Source/WebCore/page/Page.h:280
&gt; +#if ENABLE(GPU_PROCESS)
&gt; +    RefPtr&lt;RenderingBackend&gt; renderingBackend();
&gt; +#endif

It doesn&apos;t seem like this should be guarded by ENABLE(GPU_PROCESS). The point of having an abstraction like this is so WebCore doesn&apos;t have to know that there is a GPU process or not.

&gt; Source/WebCore/platform/graphics/RenderingBackend.h:48
&gt; +    // These function send IPC async messages but they do not block the main thread.
&gt; +    virtual SurfaceIdentifier createProxySurface(const IntSize&amp;, const IntSize&amp; contextSize, ColorSpace) = 0;

Presumably this comment is only correct for an implementation of RenderingBackend that uses an external process, and should be in the concrete implementation, not the base class. The base class should only express the requirements, e.g. &quot;Implementations of this function must not block the main thread&quot;, or whatever invariant you want upheld.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598783</commentid>
    <comment_count>24</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-15 17:52:38 -0800</bug_when>
    <thetext>I&apos;m really not clear on what the plan is here, so it&apos;s a bit hard to review this change. I know we don&apos;t often write out plans ahead of time for WebKit, but given the scope of this change, it might make sense to outline a plan/design, at least in broad strokes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598785</commentid>
    <comment_count>25</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-15 18:00:37 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #22)
&gt; (In reply to Tim Horton from comment #13)
&gt; &gt; (In reply to Said Abou-Hallawa from comment #12)
&gt; &gt; &gt; Comment on attachment 385072 [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=385072&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/ChangeLog:4
&gt; &gt; &gt; &gt;&gt;&gt; +        https://bugs.webkit.org/show_bug.cgi?id=204955
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; How are you testing this?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Other folks are bringing up the testing story.
&gt; &gt; &gt; 
&gt; &gt; &gt; With this patch, we can&apos;t. But we just need to make the ImageBuffer of the
&gt; &gt; &gt; CanvasRenderingContext2D be backed by a GPUProcess IOSurface. I think I can
&gt; &gt; &gt; do this in the next patch through an internal setting.
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/page/Page.h:280
&gt; &gt; &gt; &gt;&gt;&gt; +#endif
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; Leaking the notion of a GPU process into the page seems very unfortunate. I think this would be much cleaner/clearer if all pages had a RenderingBackend, and one implementation of the backend was a GPU process.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; This was my intent when suggesting this design, indeed.
&gt; &gt; &gt; 
&gt; &gt; &gt; We discussed this and Simon even suggested having a RenderingBackend per
&gt; &gt; &gt; Document or Frame. The reason was in some cases, like frame animation
&gt; &gt; &gt; throttling, we may want to have control over flushing the GraphicsContext
&gt; &gt; &gt; for this frame. But I really don&apos;t know the best owner of RenderingBackend,
&gt; &gt; &gt; so I think we can leave it in the page for now and we can change it later if
&gt; &gt; &gt; we have to.
&gt; &gt; 
&gt; &gt; I think there was a misunderstanding here.
&gt; &gt; 
&gt; &gt; Sam&apos;s point is not that Page shouldn&apos;t own it, it&apos;s that *all* Pages should
&gt; &gt; have a RenderingBackend (even ones that don&apos;t use a GPU process), with a
&gt; &gt; sensible in-process implementation that is used in the GPU-process-disabled
&gt; &gt; case.
&gt; &gt; 
&gt; 
&gt; The GPU process painting through RenderingBackend is based on replaying back
&gt; the DisplayList. It will be hard to make the GPU-process-disabled case rely
&gt; on RenderingBackend especially if DisplayList is not used.

Then it seems like this is the wrong abstraction point. 

Taking just the case of HTML canvas, it seems like all WebCore should need to do / know about is how to create an ImageBuffer, with that ImageBuffer exposing a GraphicsContext that makes sense for the mode it is in. If the GPU process is in use, an ImageBuffer backed by a display list recorder style GraphicsContext, a connection to the GPU Process, etc would be used. If the GPU process is not in use, the traditional ImageBuffer would be used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1598915</commentid>
    <comment_count>26</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2019-12-16 08:59:57 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #25)
&gt; 
&gt; Then it seems like this is the wrong abstraction point. 
&gt; 
&gt; Taking just the case of HTML canvas, it seems like all WebCore should need
&gt; to do / know about is how to create an ImageBuffer, with that ImageBuffer
&gt; exposing a GraphicsContext that makes sense for the mode it is in. If the
&gt; GPU process is in use, an ImageBuffer backed by a display list recorder
&gt; style GraphicsContext, a connection to the GPU Process, etc would be used.
&gt; If the GPU process is not in use, the traditional ImageBuffer would be used.

I agree and I mentioned the same thing in the latest WebCore/ChangeLog. ImageBuffer will be the ideal abstraction since it encapsulates different and platform dependent backing store for the image buffer/surface. But I mentioned also this will require code refactoring for the ImageBuffer class especially it is difficult to hack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599954</commentid>
    <comment_count>27</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-12-18 13:09:32 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #26)
&gt; (In reply to Sam Weinig from comment #25)
&gt; &gt; 
&gt; &gt; Then it seems like this is the wrong abstraction point. 
&gt; &gt; 
&gt; &gt; Taking just the case of HTML canvas, it seems like all WebCore should need
&gt; &gt; to do / know about is how to create an ImageBuffer, with that ImageBuffer
&gt; &gt; exposing a GraphicsContext that makes sense for the mode it is in. If the
&gt; &gt; GPU process is in use, an ImageBuffer backed by a display list recorder
&gt; &gt; style GraphicsContext, a connection to the GPU Process, etc would be used.
&gt; &gt; If the GPU process is not in use, the traditional ImageBuffer would be used.
&gt; 
&gt; I agree and I mentioned the same thing in the latest WebCore/ChangeLog.
&gt; ImageBuffer will be the ideal abstraction since it encapsulates different
&gt; and platform dependent backing store for the image buffer/surface. But I
&gt; mentioned also this will require code refactoring for the ImageBuffer class
&gt; especially it is difficult to hack.

Seems like that refactoring should be done first then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602001</commentid>
    <comment_count>28</comment_count>
      <attachid>385689</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2019-12-31 12:22:56 -0800</bug_when>
    <thetext>Comment on attachment 385689
Patch

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

&gt; Source/WebCore/platform/graphics/cg/RenderingSurfaceCG.h:41
&gt; +    std::unique_ptr&lt;IOSurface&gt;&amp; platformSurface() { return m_platfromSurface; }

Minor nit - m_platfromSurface =&gt; m_platformSurface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602903</commentid>
    <comment_count>29</comment_count>
      <attachid>386801</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-05 16:17:16 -0800</bug_when>
    <thetext>Created attachment 386801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602910</commentid>
    <comment_count>30</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-05 16:25:54 -0800</bug_when>
    <thetext>(In reply to Sam Weinig from comment #27)
&gt; (In reply to Said Abou-Hallawa from comment #26)
&gt; &gt; (In reply to Sam Weinig from comment #25)
&gt; &gt; &gt; 
&gt; &gt; &gt; Then it seems like this is the wrong abstraction point. 
&gt; &gt; &gt; 
&gt; &gt; &gt; Taking just the case of HTML canvas, it seems like all WebCore should need
&gt; &gt; &gt; to do / know about is how to create an ImageBuffer, with that ImageBuffer
&gt; &gt; &gt; exposing a GraphicsContext that makes sense for the mode it is in. If the
&gt; &gt; &gt; GPU process is in use, an ImageBuffer backed by a display list recorder
&gt; &gt; &gt; style GraphicsContext, a connection to the GPU Process, etc would be used.
&gt; &gt; &gt; If the GPU process is not in use, the traditional ImageBuffer would be used.
&gt; &gt; 
&gt; &gt; I agree and I mentioned the same thing in the latest WebCore/ChangeLog.
&gt; &gt; ImageBuffer will be the ideal abstraction since it encapsulates different
&gt; &gt; and platform dependent backing store for the image buffer/surface. But I
&gt; &gt; mentioned also this will require code refactoring for the ImageBuffer class
&gt; &gt; especially it is difficult to hack.
&gt; 
&gt; Seems like that refactoring should be done first then.

I did the refactoring but I also include all the other classes which allow remote rendering. In fact if the following statement in HTMLCanvasElement::createImageBuffer()

    bool usesRemoteDrawing = false;

is changed to be 

    bool usesRemoteDrawing = true;

The canvas drawing will be carried out by the GPU process.

I can split the patch into smaller patches once the refactoring is approved. I preferred putting things in one patch so I make the design for the old and the new requirements.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602920</commentid>
    <comment_count>31</comment_count>
      <attachid>386801</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-05 17:56:35 -0800</bug_when>
    <thetext>Comment on attachment 386801
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBuffer.cpp:38
&gt; +    return RenderingBackend::sharedBackend().createImageBuffer(size, renderingMode, resolutionScale, colorSpace, hostWindow);

Rather than going through yet another singleton, createImageBuffer would probably make more sense as function on HostWindow, that can call out to the ChromeClient for an implementation.

&gt; Source/WebCore/platform/graphics/RenderingBackend.cpp:55
&gt; +    return RenderingBackend::ensureSharedBackend();

Seems like this will fail if it&apos;s the first call to ensureSharedBackend(), since ensureSharedBackend() requires the page pointer to non-null to not crash in that case.

&gt; Source/WebCore/platform/graphics/RenderingBackend.h:41
&gt; +    static RenderingBackend&amp; ensureSharedBackend(Page* = nullptr);

It&apos;s a layering violation to use Page from platform code. Instead, the idiomatic way to go is to use HostWindow, which is 1-to-1 with Page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602921</commentid>
    <comment_count>32</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-01-05 17:56:49 -0800</bug_when>
    <thetext>Looking much better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602947</commentid>
    <comment_count>33</comment_count>
      <attachid>386813</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-05 22:42:12 -0800</bug_when>
    <thetext>Created attachment 386813
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602951</commentid>
    <comment_count>34</comment_count>
      <attachid>386816</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-05 23:13:59 -0800</bug_when>
    <thetext>Created attachment 386816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603434</commentid>
    <comment_count>35</comment_count>
      <attachid>386929</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-06 20:53:52 -0800</bug_when>
    <thetext>Created attachment 386929
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603605</commentid>
    <comment_count>36</comment_count>
      <attachid>386979</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-07 09:28:11 -0800</bug_when>
    <thetext>Created attachment 386979
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603648</commentid>
    <comment_count>37</comment_count>
      <attachid>386993</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-07 10:43:53 -0800</bug_when>
    <thetext>Created attachment 386993
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603687</commentid>
    <comment_count>38</comment_count>
      <attachid>387006</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-07 11:36:13 -0800</bug_when>
    <thetext>Created attachment 387006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603758</commentid>
    <comment_count>39</comment_count>
      <attachid>387023</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-07 13:23:11 -0800</bug_when>
    <thetext>Created attachment 387023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603804</commentid>
    <comment_count>40</comment_count>
      <attachid>387023</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-01-07 14:47:34 -0800</bug_when>
    <thetext>Comment on attachment 387023
Patch

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

&gt; Source/WebCore/ChangeLog:12
&gt; +            -- ImageBufferBackned

Backned!

&gt; Source/WebCore/ChangeLog:13
&gt; +            -- DrawingContext

GraphicsContext?

&gt; Source/WebCore/ChangeLog:52
&gt; +                WebPorcess: RemotePhysicalImageBuffer&lt;ImageBufferIOSurfaceBackend&gt;
&gt; +                GPUPorcess: RemotePhysicalImageBufferProxy&lt;ImageBufferIOSurfaceBackend&gt;

Porcess!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603911</commentid>
    <comment_count>41</comment_count>
      <attachid>387059</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-07 19:01:48 -0800</bug_when>
    <thetext>Created attachment 387059
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603945</commentid>
    <comment_count>42</comment_count>
      <attachid>387072</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-07 21:40:49 -0800</bug_when>
    <thetext>Created attachment 387072
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604410</commentid>
    <comment_count>43</comment_count>
      <attachid>387171</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-08 17:37:59 -0800</bug_when>
    <thetext>Created attachment 387171
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604478</commentid>
    <comment_count>44</comment_count>
      <attachid>387181</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-08 19:28:50 -0800</bug_when>
    <thetext>Created attachment 387181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604508</commentid>
    <comment_count>45</comment_count>
      <attachid>387191</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-01-08 22:00:40 -0800</bug_when>
    <thetext>Created attachment 387191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604509</commentid>
    <comment_count>46</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-01-08 22:01:32 -0800</bug_when>
    <thetext>This patch should fix the gtk build. No promises. Not sure that all changes were correct, either. That’s why we have tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604510</commentid>
    <comment_count>47</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-01-08 22:02:12 -0800</bug_when>
    <thetext>Also a review comment from fiddling with this: the children of the Cairo backend should also have Cairo in their names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604520</commentid>
    <comment_count>48</comment_count>
      <attachid>387193</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-01-08 22:23:18 -0800</bug_when>
    <thetext>Created attachment 387193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604521</commentid>
    <comment_count>49</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-01-08 22:23:30 -0800</bug_when>
    <thetext>Now with WPE too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604876</commentid>
    <comment_count>50</comment_count>
      <attachid>387276</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-09 14:52:01 -0800</bug_when>
    <thetext>Created attachment 387276
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604889</commentid>
    <comment_count>51</comment_count>
      <attachid>387281</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-09 15:08:32 -0800</bug_when>
    <thetext>Created attachment 387281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604904</commentid>
    <comment_count>52</comment_count>
      <attachid>387283</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-09 15:39:01 -0800</bug_when>
    <thetext>Created attachment 387283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1604975</commentid>
    <comment_count>53</comment_count>
      <attachid>387302</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-09 18:21:06 -0800</bug_when>
    <thetext>Created attachment 387302
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605522</commentid>
    <comment_count>54</comment_count>
      <attachid>387432</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-11 09:09:42 -0800</bug_when>
    <thetext>Created attachment 387432
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605533</commentid>
    <comment_count>55</comment_count>
      <attachid>387434</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-11 09:56:57 -0800</bug_when>
    <thetext>Created attachment 387434
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605541</commentid>
    <comment_count>56</comment_count>
      <attachid>387436</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-11 10:31:30 -0800</bug_when>
    <thetext>Created attachment 387436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605551</commentid>
    <comment_count>57</comment_count>
      <attachid>387440</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-11 12:11:59 -0800</bug_when>
    <thetext>Created attachment 387440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605667</commentid>
    <comment_count>58</comment_count>
      <attachid>387474</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-12 10:39:35 -0800</bug_when>
    <thetext>Created attachment 387474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605672</commentid>
    <comment_count>59</comment_count>
      <attachid>387478</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-12 11:02:36 -0800</bug_when>
    <thetext>Created attachment 387478
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605752</commentid>
    <comment_count>60</comment_count>
      <attachid>387503</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-12 23:49:23 -0800</bug_when>
    <thetext>Created attachment 387503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605842</commentid>
    <comment_count>61</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-13 07:54:47 -0800</bug_when>
    <thetext>To help seeing the sequence of calls when rendering on an ImageBuffer, remotely consider this example. It creates an ImageBuffer, fill a rectangle on it and then draws the ImageBuffer on a destination rectangle:

C++ code:

1. auto buffer = ImageBuffer::create(RenderingMode::Remote, ...)
2. auto context = buffer-&gt;context()
3. context.fillRect(...)
4. buffer-&gt;draw(destContext, ...)

Calling sequence:


WebPorcess                                  GPUProcess

1.1. ImageBuffer::create()
    1.2. RemoteRenderingBackend::createImageBuffer()
        1.3. RemotePhysicalImageBuffer::create()
            1.4 IPC::MessageSender::send(RemoteRenderingBackendProxy::CreateImageBuffer, ...)

                                            1.5. RemoteRenderingBackendProxy::createImageBuffer()
                                                1.6. RemotePhysicalImageBufferProxy::create()
                                                    1.7. ImageBufferShareableBitmapBackend::create()
                                                        1.8 IPC::MessageSender::send(RemoteImageBuffer::CreateImageBufferBackend, ...)

            1.9. RemotePhysicalImageBuffer::createImageBufferBackend()
                1.10. ImageBufferShareableBitmapBackend::create()


2.1. DisplayListImageBuffer::context()
    2.2 DrawingContext::context()

3.1. GraphicsContext::fillRect()
    3.1. DisplayList::Recorder::fillRect()
        3.2. DisplayList::DisplayList::appendItem()

4.1. PhysicalImageBuffer::draw()
    4.2. RemotePhysicalImageBuffer::flushDrawingContext()
        4.3. IPC::MessageSender::send(RemoteImageBufferProxy::FlushContext, ...)

                                            4.4. RemoteImageBufferProxy::flushContext()
                                                4.5. RemotePhysicalImageBufferProxy::localFlushContext()
                                                    4.6. DisplayList::Replayer::replay()
                                                4.6. IPC::MessageSender::send(Messages::RemoteImageBuffer::SetFlushIdentifier, ...)


            4.7. RemoteImageBuffer::setFlushIdentifier()

    4.8. ImageBufferCGBackend::draw()   
        4.9. ImageBufferShareableBitmapBackend::copyNativeImage()
            4.10. GraphicsContext::drawNativeImage()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605952</commentid>
    <comment_count>62</comment_count>
      <attachid>387503</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-01-13 11:05:30 -0800</bug_when>
    <thetext>Comment on attachment 387503
Patch

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

&gt; Source/WebKit/ChangeLog:22
&gt; +        -- ImageBufferShareableIOSurfaceBackend is a CG only accelerated ImageBuffer
&gt; +           backed by ImageBufferIOSurfaceBackend

All IOSurfaces are shareable, so what&apos;s the difference?

&gt; Source/WebKit/WebProcess/GPU/RenderingBackend/PlatformImageBufferShareableBackend.h:38
&gt; +#if USE(CG) &amp;&amp; (USE(IOSURFACE_CANVAS_BACKING_STORE) || ENABLE(ACCELERATED_2D_CANVAS))

Probably just HAVE(IOSURFACE)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1605974</commentid>
    <comment_count>63</comment_count>
      <attachid>387503</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-01-13 11:54:48 -0800</bug_when>
    <thetext>Comment on attachment 387503
Patch

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

This patch would be smaller if the enum class changes were done separately.

&gt; Source/WebCore/platform/graphics/AlphaPremultiplication.h:32
&gt; +enum class AlphaPremultiplication : uint8_t {

This could go into GraphicsTypes.h

&gt; Source/WebCore/platform/graphics/DisplayListImageBuffer.h:34
&gt; +class DisplayListImageBuffer : public PhysicalImageBuffer&lt;BackendType&gt; , public DisplayList::DrawingContext {

space before comma

I wonder if this would be better with composition rather than inheritance. DisplayListImageBuffer could own a DrawingContext (or just own the GraphicsContext and DisplayList directly).

&gt; Source/WebCore/platform/graphics/GraphicsTypes.h:28
&gt; +#include &quot;RenderingMode.h&quot;

Why did you move this into its own header?

&gt; Source/WebCore/platform/graphics/PhysicalImageBuffer.h:33
&gt; +class PhysicalImageBuffer : public ImageBuffer {

I don&apos;t really like the term &quot;physical&quot; for this. Maybe PixelImageBuffer? Or MemoryBackedImageBuffer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606020</commentid>
    <comment_count>64</comment_count>
      <attachid>387503</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-13 13:11:06 -0800</bug_when>
    <thetext>Comment on attachment 387503
Patch

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

&gt;&gt; Source/WebKit/ChangeLog:22
&gt;&gt; +           backed by ImageBufferIOSurfaceBackend
&gt; 
&gt; All IOSurfaces are shareable, so what&apos;s the difference?

ImageBufferShareableIOSurfaceBackend can be created from an ImageBufferBackendHandle and also it can create an ImageBufferBackendHandle. This is how the IOSurface backends of the RemoteImageBuffer and RemoteImageBufferProxy are created.

But the ImageBufferBackendHandle is defined in WebKit as

using ImageBufferBackendHandle = Variant&lt;
#if PLATFORM(COCOA)
    MachSendRight,
#endif
    ShareableBitmap::Handle
&gt;;

It is defined in WebKit because ShareableBitmap is defined in WebKit. So dealing with ShareableBitmap can&apos;t be not done in WebCore..

&gt;&gt; Source/WebCore/platform/graphics/AlphaPremultiplication.h:32
&gt;&gt; +enum class AlphaPremultiplication : uint8_t {
&gt; 
&gt; This could go into GraphicsTypes.h

I think messages.py generates a forward declaration for every type in the messages.in file unless you add an entry in types_that_cannot_be_forward_declared. In this case, it will add an #include statement for this type. This file is not currently included in the WebKit2 derived sources but it will be needed to implement the remote getImageData() and putImageData().

&gt;&gt; Source/WebCore/platform/graphics/DisplayListImageBuffer.h:34
&gt;&gt; +class DisplayListImageBuffer : public PhysicalImageBuffer&lt;BackendType&gt; , public DisplayList::DrawingContext {
&gt; 
&gt; space before comma
&gt; 
&gt; I wonder if this would be better with composition rather than inheritance. DisplayListImageBuffer could own a DrawingContext (or just own the GraphicsContext and DisplayList directly).

I copied DisplayList::DrawingContext from DisplayListDrawingContext and I was planning to replace DisplayListDrawingContext by DisplayList::DrawingContext but it seemed it would.a big change and it is not in the scope of this patch. So I kept both for now. And I think the inheritance can be replaced by composition

&gt;&gt; Source/WebCore/platform/graphics/GraphicsTypes.h:28
&gt;&gt; +#include &quot;RenderingMode.h&quot;
&gt; 
&gt; Why did you move this into its own header?

Because RenderingMode is included in RemoteRenderingBackendProxy.messages.in. messages.py needs to include it otherwise it will generate a wrong forward declaration 

namespace WebCore {
class RenderingMode
};

&gt;&gt; Source/WebKit/WebProcess/GPU/RenderingBackend/PlatformImageBufferShareableBackend.h:38
&gt;&gt; +#if USE(CG) &amp;&amp; (USE(IOSURFACE_CANVAS_BACKING_STORE) || ENABLE(ACCELERATED_2D_CANVAS))
&gt; 
&gt; Probably just HAVE(IOSURFACE)

I copied it from

bool CanvasRenderingContext2DBase::isAccelerated() const
{
#if USE(IOSURFACE_CANVAS_BACKING_STORE) || ENABLE(ACCELERATED_2D_CANVAS)
    auto* context = canvasBase().existingDrawingContext();
    return context &amp;&amp; context-&gt;isAcceleratedContext();
#else
    return false;
#endif
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606178</commentid>
    <comment_count>65</comment_count>
      <attachid>387503</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2020-01-13 18:13:01 -0800</bug_when>
    <thetext>Comment on attachment 387503
Patch

Just sharing some layout test results

1) GTK Layout tests results for canvas and fast/canvas on r254446 (1 failure)
https://people.igalia.com/clopez/wkbug/204955/canvas_layout_results_r254446/results.html

2) GTK Layout tests results for canvas and fast/canvas on r254446 + attachment 387503 (this patch) (132 failures)
https://people.igalia.com/clopez/wkbug/204955/canvas_layout_results_attachment_387503/results.html


Hope this helps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606485</commentid>
    <comment_count>66</comment_count>
      <attachid>387678</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-14 11:23:20 -0800</bug_when>
    <thetext>Created attachment 387678
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606523</commentid>
    <comment_count>67</comment_count>
      <attachid>387688</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-14 12:20:37 -0800</bug_when>
    <thetext>Created attachment 387688
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606652</commentid>
    <comment_count>68</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-14 16:01:36 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #65)
&gt; Comment on attachment 387503 [details]
&gt; Patch
&gt; 
&gt; Just sharing some layout test results
&gt; 
&gt; 1) GTK Layout tests results for canvas and fast/canvas on r254446 (1 failure)
&gt; https://people.igalia.com/clopez/wkbug/204955/canvas_layout_results_r254446/
&gt; results.html
&gt; 
&gt; 2) GTK Layout tests results for canvas and fast/canvas on r254446 +
&gt; attachment 387503 [details] (this patch) (132 failures)
&gt; https://people.igalia.com/clopez/wkbug/204955/
&gt; canvas_layout_results_attachment_387503/results.html
&gt; 
&gt; 
&gt; Hope this helps

Yes. This was helpful and promising as well. Can you please try the latest patch and see if most of the failures were fixed or not? This is the change I made:

diff --git a/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.h b/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.h
index 03ea1662017..23b919ad522 100644
--- a/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.h
+++ b/Source/WebCore/platform/graphics/cairo/ImageBufferCairoBackend.h
@@ -50,6 +50,7 @@ public:
 protected:
     using ImageBufferBackend::ImageBufferBackend;
 
+    ColorFormat backendColorFormat() const override { return ColorFormat::BGRA; }
     virtual void platformTransformColorSpace(const std::array&lt;uint8_t, 256&gt;&amp;) { }
 };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606938</commentid>
    <comment_count>69</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2020-01-15 08:52:43 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #68)
&gt; Yes. This was helpful and promising as well. Can you please try the latest
&gt; patch and see if most of the failures were fixed or not?

Its a big patch and I&apos;m getting rejects when trying to apply it. Can you comment in which revision you have based it so I can apply it over the same revision than you to avoid patch-apply rejects? Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1606944</commentid>
    <comment_count>70</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-01-15 09:11:25 -0800</bug_when>
    <thetext>(In reply to Carlos Alberto Lopez Perez from comment #69)
&gt; (In reply to Said Abou-Hallawa from comment #68)
&gt; &gt; Yes. This was helpful and promising as well. Can you please try the latest
&gt; &gt; patch and see if most of the failures were fixed or not?
&gt; 
&gt; Its a big patch and I&apos;m getting rejects when trying to apply it. Can you
&gt; comment in which revision you have based it so I can apply it over the same
&gt; revision than you to avoid patch-apply rejects? Thanks

Thanks Carlos for helping out.

The revision I based this patch on is r254519. Alternatively if you can apply the previous patch, which you may still have it built, and just add the following line in ImageBufferCairoBackend.h

ColorFormat backendColorFormat() const override { return ColorFormat::BGRA; }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607002</commentid>
    <comment_count>71</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2020-01-15 10:51:21 -0800</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #70)
&gt; (In reply to Carlos Alberto Lopez Perez from comment #69)
&gt; &gt; (In reply to Said Abou-Hallawa from comment #68)
&gt; &gt; &gt; Yes. This was helpful and promising as well. Can you please try the latest
&gt; &gt; &gt; patch and see if most of the failures were fixed or not?
&gt; &gt; 
&gt; &gt; Its a big patch and I&apos;m getting rejects when trying to apply it. Can you
&gt; &gt; comment in which revision you have based it so I can apply it over the same
&gt; &gt; revision than you to avoid patch-apply rejects? Thanks
&gt; 
&gt; Thanks Carlos for helping out.
&gt; 
&gt; The revision I based this patch on is r254519. Alternatively if you can
&gt; apply the previous patch, which you may still have it built, and just add
&gt; the following line in ImageBufferCairoBackend.h
&gt; 
&gt; ColorFormat backendColorFormat() const override { return ColorFormat::BGRA; }

Much better now! Only 1 new failure.
The new failure is fast/canvas/canvas-putImageData-zero-alpha.html

New results: 

1) GTK Layout tests results for canvas and fast/canvas on r254519 (1 failure)
https://people.igalia.com/clopez/wkbug/204955/canvas_layout_results_r254519/results.html

2) GTK Layout tests results for canvas and fast/canvas on r254519 + attachment 387688 (2 failures)
https://people.igalia.com/clopez/wkbug/204955/canvas_layout_results_attachment_387688/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614943</commentid>
    <comment_count>72</comment_count>
      <attachid>389770</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-04 22:36:21 -0800</bug_when>
    <thetext>Created attachment 389770
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614971</commentid>
    <comment_count>73</comment_count>
      <attachid>389783</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-05 00:54:36 -0800</bug_when>
    <thetext>Created attachment 389783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614974</commentid>
    <comment_count>74</comment_count>
      <attachid>389784</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-05 01:13:19 -0800</bug_when>
    <thetext>Created attachment 389784
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615035</commentid>
    <comment_count>75</comment_count>
      <attachid>389804</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-05 07:38:46 -0800</bug_when>
    <thetext>Created attachment 389804
Patch  for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615254</commentid>
    <comment_count>76</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-05 13:46:46 -0800</bug_when>
    <thetext>&lt;rdar://problem/57177349&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620330</commentid>
    <comment_count>77</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-02-18 14:37:37 -0800</bug_when>
    <thetext>Rename ContextualImageBuffer&lt;&gt; to ConcreteImageBuffer&lt;&gt;
Drop &quot;concrete&quot; in the derived classes.
Rename &quot;RemoteImageBuffer[Proxy]&quot; to something (it&apos;s not an image buffer).


using UnacceleratedImageBuffer = ContextualImageBuffer&lt;PlatformUnacceleratedImageBufferBackend&gt;;
using AcceleratedImageBuffer = ContextualImageBuffer&lt;PlatformAcceleratedImageBufferBackend&gt;;
using UnacceleratedDisplayListImageBuffer = DisplayListImageBuffer&lt;PlatformUnacceleratedImageBufferBackend&gt;;
using AcceleratedDisplayListImageBuffer = DisplayListImageBuffer&lt;PlatformAcceleratedImageBufferBackend&gt;;


Can you do this?
using AcceleratedDisplayListImageBuffer = ContextualImageBuffer&lt;Accelerated, DisplayList&gt;;


RemoteImageBuffer -&gt; RemoteImageBufferChannel?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1620982</commentid>
    <comment_count>78</comment_count>
      <attachid>391230</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-19 17:43:37 -0800</bug_when>
    <thetext>Created attachment 391230
Complete Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1621000</commentid>
    <comment_count>79</comment_count>
      <attachid>391238</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-19 18:39:00 -0800</bug_when>
    <thetext>Created attachment 391238
perf patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622426</commentid>
    <comment_count>80</comment_count>
      <attachid>389804</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2020-02-24 16:57:27 -0800</bug_when>
    <thetext>Comment on attachment 389804
Patch  for review

restoring r? on the final sub-patch needed to complete this task.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622459</commentid>
    <comment_count>81</comment_count>
      <attachid>389804</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-02-24 17:51:13 -0800</bug_when>
    <thetext>Comment on attachment 389804
Patch  for review

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

&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:78
&gt; +    AffineTransform baseTransform() const override { return ensureBackend() ? ensureBackend()-&gt;baseTransform() : AffineTransform(); }

This ensureBackend() ? ensureBackend() : pattern is weird. What if ensureBackend() is very expensive? Also, is the backend created lazily? Should it be?

&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:182
&gt; +        if (auto* backend = ensureBackend()) {

Can we just make the backend eagerly?

&gt; Source/WebKit/GPUProcess/RenderingBackend/RemoteContextualImageBufferProxy.h:37
&gt; +class RemoteContextualImageBufferProxy : public WebCore::ContextualImageBuffer&lt;BackendType&gt;, public RemoteImageBufferProxy {

Does RemoteImageBufferProxy exist now? I think we talked about changing how it works.

&gt; Source/WebKit/GPUProcess/RenderingBackend/RemoteContextualImageBufferProxy.h:39
&gt; +    using BaseContextualImageBuffer::m_backend;

A bit odd.

&gt; Source/WebKit/WebProcess/GPU/RenderingBackend/RemoteImageBuffer.cpp:86
&gt; +    constexpr const unsigned MaxWaitsCount = 3;

&quot;Waits count&quot; is unclear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622864</commentid>
    <comment_count>82</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-25 17:47:44 -0800</bug_when>
    <thetext>After making HostWindow be the creator of the remote ImageBuffer, there is no need for this bug.

*** This bug has been marked as a duplicate of bug 207134 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1622867</commentid>
    <comment_count>83</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-02-25 17:49:57 -0800</bug_when>
    <thetext>Wrong bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624466</commentid>
    <comment_count>84</comment_count>
      <attachid>392118</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-01 23:56:32 -0800</bug_when>
    <thetext>Created attachment 392118
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624537</commentid>
    <comment_count>85</comment_count>
      <attachid>392140</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-02 07:27:30 -0800</bug_when>
    <thetext>Created attachment 392140
Patch  for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624598</commentid>
    <comment_count>86</comment_count>
      <attachid>392140</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2020-03-02 10:14:19 -0800</bug_when>
    <thetext>Comment on attachment 392140
Patch  for review

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

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.h:58
&gt; +    // Blockers

I find this comment a little odd; I&apos;d rather have the nature of the function be explicitly in the name.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.h:59
&gt; +    void ensureBackendCreated();

In a followup patch:
waitForBackendToBeCreated
waitForBackendCreation

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h:67
&gt; +    // Blockers

Please remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624748</commentid>
    <comment_count>87</comment_count>
      <attachid>392194</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-02 14:37:41 -0800</bug_when>
    <thetext>Created attachment 392194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624768</commentid>
    <comment_count>88</comment_count>
      <attachid>392140</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-02 14:56:19 -0800</bug_when>
    <thetext>Comment on attachment 392140
Patch  for review

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

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.h:59
&gt;&gt; +    void ensureBackendCreated();
&gt; 
&gt; In a followup patch:
&gt; waitForBackendToBeCreated
&gt; waitForBackendCreation

Functions&apos; names were changed to 

    void waitForCreateImageBufferBackend();
    void waitForCommitImageBufferFlushContext();

&gt;&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h:67
&gt;&gt; +    // Blockers
&gt; 
&gt; Please remove.

Comment was removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624784</commentid>
    <comment_count>89</comment_count>
      <attachid>392201</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-02 15:27:28 -0800</bug_when>
    <thetext>Created attachment 392201
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624793</commentid>
    <comment_count>90</comment_count>
      <attachid>389804</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-02 15:50:01 -0800</bug_when>
    <thetext>Comment on attachment 389804
Patch  for review

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

&gt;&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:78
&gt;&gt; +    AffineTransform baseTransform() const override { return ensureBackend() ? ensureBackend()-&gt;baseTransform() : AffineTransform(); }
&gt; 
&gt; This ensureBackend() ? ensureBackend() : pattern is weird. What if ensureBackend() is very expensive? Also, is the backend created lazily? Should it be?

Inline pattern was removed. Instead I&apos;m using the pattern 

if (auto* backend = ensureBackend())
   return  backend-&gt;...

The backend of the RemoteImageBuffer should be &quot;asynchronous&quot;. Here are the steps for creating it:

1. RemoteRenderingBackend creates RemoteImageBuffer.
2. RemoteImageBuffer sends the message &quot;CreateImageBuffer&quot; to RemoteRenderingBackendProxy via RemoteRenderingBackend.
3. RemoteRenderingBackendProxy creates RemoteImageBufferProxy
4. RemoteImageBufferProxy sends the message &quot;CreateImageBufferBackend&quot; to RemoteImageBuffer via RemoteRenderingBackendProxy and RemoteRenderingBackend
5. RemoteImageBuffer creates its backend using the handle sent from RemoteImageBufferProxy. Both RemoteImageBuffer and RemoteImageBufferProxy backends have to share the same memory for the backend data.

If any of the functions of this class is called before the backend is created, execution will be halted till the message is received or one second period is elapsed.

&gt;&gt; Source/WebCore/platform/graphics/ContextualImageBuffer.h:182
&gt;&gt; +        if (auto* backend = ensureBackend()) {
&gt; 
&gt; Can we just make the backend eagerly?

This would require RemoteImageBuffer to send a synchronous message for CreateImageBuffer message.

&gt;&gt; Source/WebKit/GPUProcess/RenderingBackend/RemoteContextualImageBufferProxy.h:37
&gt;&gt; +class RemoteContextualImageBufferProxy : public WebCore::ContextualImageBuffer&lt;BackendType&gt;, public RemoteImageBufferProxy {
&gt; 
&gt; Does RemoteImageBufferProxy exist now? I think we talked about changing how it works.

Yes it exists but it is the name of the remote ImageBuffer in GPUProcess.

&gt;&gt; Source/WebKit/GPUProcess/RenderingBackend/RemoteContextualImageBufferProxy.h:39
&gt;&gt; +    using BaseContextualImageBuffer::m_backend;
&gt; 
&gt; A bit odd.

Because the base class is a template class, I have to to include this using statement before referencing any member in it.

&gt;&gt; Source/WebKit/WebProcess/GPU/RenderingBackend/RemoteImageBuffer.cpp:86
&gt;&gt; +    constexpr const unsigned MaxWaitsCount = 3;
&gt; 
&gt; &quot;Waits count&quot; is unclear.

The variable and the loop below were removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624823</commentid>
    <comment_count>91</comment_count>
      <attachid>392201</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-02 16:39:29 -0800</bug_when>
    <thetext>Comment on attachment 392201
Patch

Clearing flags on attachment: 392201

Committed r257747: &lt;https://trac.webkit.org/changeset/257747&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1624824</commentid>
    <comment_count>92</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-03-02 16:39:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385057</attachid>
            <date>2019-12-06 16:40:09 -0800</date>
            <delta_ts>2019-12-06 17:41:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191206164008.patch</filename>
            <type>text/plain</type>
            <size>76199</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMTk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGJjMzQ3ZGRmNzI1NjQ4
MDk1ZTEzMzNiYTFmM2NiZGU1NTA4ZWMyNS4uMTcwNTcwNGJjYjQ4Y2MxOWExZjFiOWMyMThlYWM2
ZWQzYzg4NmM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAxOS0xMi0wNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
R1BVIHByb2Nlc3MgY3JlYXRlL3JlbGVhc2UgYSBzaGFyZWQgSU9TdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgdGhlIGNsYXNz
IFJlbmRlcmluZ0JhY2tlbmQgd2hpY2ggd2lsbCBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24KKyAg
ICAgICAgd2l0aCB0aGUgR1BVIHByb2Nlc3MgZm9yIHJlbmRlcmluZy4gVGhpcyBjbGFzcyB3aWxs
IGJlIHVzZWQgdG8gaGlkZSB0aGUKKyAgICAgICAgY29tcGxleGl0eSBvZiBzZW5kaW5nIG1lc3Nh
Z2VzIHRvIGFuZCByZWNlaXZpbmcgcmVwbGllcyBmcm9tIHRoZSBHUFUgcHJvY2Vzcy4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCBhIHNpbmdsZSBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIFJl
bmRlcmluZ0JhY2tlbmQ6CisgICAgICAgIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgYSBzaGFyZWQg
SU9TdXJmYWNlLgorCisgICAgICAgIFdlYktpdCB3aWxsIGhhdmUgdG8gY3JlYXRlIGEgY29uY3Jl
dGUgY2xhc3Mgb2YgUmVuZGVyaW5nQmFja2VuZCB0aHJvdWdoCisgICAgICAgIFdlYkNocm9tZUNs
aWVudC4KKworICAgICAgICBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUgb3du
ZWQgYnkgdGhlIHBhZ2UuCisKKyAgICAgICAgQ29sb3JTcGFjZSBuZWVkcyB0byBiZSAiZW51bSBj
bGFzcyIgc28gaXQgY2FuIGJlIGVuY29kZWQvZGVjb2RlZCB0aHJvdWdoCisgICAgICAgIHRoZSBJ
UEMgbWVzc2FnZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVu
Y3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6
CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd0ltYWdlKToKKyAg
ICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
ICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNwYWNlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJ
bWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y3NzVGV4dCBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bGVha0NHQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmg6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yU3BhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhp
Yyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6VGhlbWVNYWM6OmRyYXdDZWxsT3JGb2N1c1JpbmdXaXRoVmlld0ludG9Db250ZXh0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGF0
dGVybkZvclRvdWNoQWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcik6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5n
VG9Db250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWls
ZFByaW1pdGl2ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFz
a0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6Y3JlYXRlVGlsZUltYWdlIGNvbnN0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lt
YWdlOjpkcmF3UGF0dGVybkZvckNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorCiAyMDE5LTEyLTA1ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2Fy
ZG5lckBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSBtZW1iZXIgdmFyaWFibGUgdGhhdCBzaG91
bGQgYmUgcHJpdmF0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiZjE2YTAxMjUxZDZiNDY2NzQ2YWMyMzdkM2NlZGQ5
ZjdlNjg2MDVhLi4yNDgwODQ0ZmRmYTg2NDE3NzY2NWIzMjU1YjkxOWY2MDhjZmViMDRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5LTEyLTA2ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBHUFUgcHJvY2VzcyBjcmVhdGUv
cmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgaXMgaW50cm9kdWNlZCB0
byBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24gd2l0aAorICAgICAgICB0aGUgR1BVIHByb2Nlc3Mg
Zm9yIHJlbmRlcmluZyBvcGVyYXRpb25zLgorCisgICAgICAgIElPU3VyZmFjZU1hbmFnZXIgd2ls
bCBtYW5hZ2UgY3JlYXRpbmcgYW4gSU9TdXJmYWNlLCBpbml0aWFsaXppbmcgaXRzCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dCBmb3IgZHJhd2luZywgYXNzaWduaW5nIGFuIElELCBhbmQgY2FjaGlu
ZyBpdCBmb3IgbGF0ZXIKKyAgICAgICAgcmVmZXJlbmNlcy4gSU9TdXJmYWNlTWFuYWdlciB3aWxs
IGFsc28gZ2l2ZSB0aGUgYWJpbGl0eSB0byByZW1vdmUgdGhlCisgICAgICAgIElPU3VyZmFjZSBm
cm9tIHRoZSBjYWNoZS4KKworICAgICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHdpbGwg
YmUgdXNlZCBhcyBhIHByb3h5IG9iamVjdCBmb3IgdGhlCisgICAgICAgIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuIEl0IHdpbGwgcmVwbHkgdGhlIGNyZWF0ZVNoYXJlZElPU3VyZmFjZSB3aXRoIHRo
ZQorICAgICAgICBzdXJmYWNlSUQgYW5kIHRoZSBzaWduUmlnaHQgb2YgdGhlIElPU3VyZmFjZS4K
KworICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVNoYXJlZElP
U3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJl
bGVhc2VTaGFyZWRJT1N1cmZhY2UpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFn
ZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oLgorICAgICAgICAoV2ViS2l0OjpJT1N1cmZhY2VNYW5hZ2VyOjpzaGFy
ZWRNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6c3VyZmFjZU1hcCk6CisgICAgICAgIChXZWJL
aXQ6OklPU3VyZmFjZU1hbmFnZXI6OnJlbGVhc2VTaGFyZWRJT1N1cmZhY2UpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvSU9TdXJmYWNlTWFuYWdlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmguCisgICAgICAgIChXZWJLaXQ6OklPU3Vy
ZmFjZU1hbmFnZXI6Om5leHRTdXJmYWNlSUQpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNs
aWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmguCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZVNoYXJlZElPU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VTaGFyZWRJT1N1
cmZhY2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
U3BhY2UuaC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
KToKKwogMjAxOS0xMi0wNSAgWW91c3VrZSBLaW1vdG8gIDx5b3VzdWtlLmtpbW90b0Bzb255LmNv
bT4KIAogICAgICAgICBbV2luQ2Fpcm9dIEltcHJvdmUgSW5zcGVjdGFibGUgVGFyZ2V0IFBhZ2Ug
dG8gYWRhcHQgYSBsb25nIHRpdGxlIGFuZCBVUkwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyYjYxZjM1YTIzYWRmNjVkNjg5NGEw
YzljMDZhMmU3NGMzMDg1ZGQzLi4yNDhjMmEwNDQwNDUwNmFjNDc0MjUxMzgzNTE2NjY3OWNhNmI5
ZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xNzQxLDYgKzE3NDEsNyBAQAogCQk1NUFGMTRFNjFFQUFDNTlCMDAyNkVFQUEg
LyogVVRJUmVnaXN0cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1QUYxNEU0MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1RENDNTI4MjI0MDdC
MjAwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NURDQzUyNTIyNDA3NDlFMDBDMjZFMzIgLyogU1ZHUHJp
bWl0aXZlTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTU1RENDNTI5MjI0MDdCMkEwMEMyNkUzMiAvKiBTVkdMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NURDQzUyMzIyNDA3M0ZFMDBDMjZF
MzIgLyogU1ZHTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTU1RENGQUE0MjM5OUM5QTYwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NURDRkFBMjIz
OTlDNEQ4MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1RUM5NTk5MjA2QUE3QTAwMDdERDBBOSAv
KiBQYWludEZyZXF1ZW5jeVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1RUM5NTk3MjA2OUM5MkQwMDdERDBBOSAvKiBQYWludEZyZXF1ZW5j
eVRyYWNrZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NUZBN0ZGQjIxMTBFQ0Q3MDA1QUVGRTcgLyogU1ZHWm9vbUFuZFBhblR5cGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RkE3RkZBMjExMEVD
RDcwMDVBRUZFNyAvKiBTVkdab29tQW5kUGFuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MDQ0MDVBMUU1MzkzNjIwMDM1NjYwMSAvKiBK
U0Flc0NiY0NmYlBhcmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTcwNDQwNTkxRTUzOTM2MjAwMzU2NjAxIC8qIEpTQWVzQ2JjQ2ZiUGFyYW1zLmgg
Ki87IH07CkBAIC04NjUzLDYgKzg2NTQsNyBAQAogCQk1NURDQzUyNTIyNDA3NDlFMDBDMjZFMzIg
LyogU1ZHUHJpbWl0aXZlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVMaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RENDNTI2MjI0MDc0RkEwMEMyNkUzMiAv
KiBTVkdQcm9wZXJ0eUFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QWNjZXNz
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MjcyMjQwNzUwQjAwQzI2
RTMyIC8qIFNWR1Byb3BlcnR5QWNjZXNzb3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3Bl
cnR5QWNjZXNzb3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUEy
MjM5OUM0RDgwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVFQzk1OTcy
MDY5QzkyRDAwN0REMEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYWludEZyZXF1ZW5jeVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVFRTUzNTQyMjNCMjlFOTAwRkJBOTQ0IC8qIFNWR01lbWJlckFjY2Vzc29yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR01lbWJlckFjY2Vzc29yLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU1RUU1MzU2MjIzQjI5RjcwMEZCQTk0NCAvKiBTVkdBbmltYXRl
ZFByb3BlcnR5QW5pbWF0b3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvckltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI1MDU5LDYgKzI1MDYxLDcgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFB
RjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90
ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVt
b3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk1NURDRkFBMjIzOTlDNEQ4MDA1MENEMjIgLyogUmVu
ZGVyaW5nQmFja2VuZC5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3Vu
ZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRS
ZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3Bw
ICovLApAQCAtMzE4NDIsNiArMzE4NDUsNyBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAw
RENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQx
RDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNTVEQ0ZBQTQyMzk5QzlBNjAwNTBDRDIyIC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBS
ZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OTVG
RjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVs
cGVycy5jcHAKaW5kZXggMWUwOTIyYjMwOTVlOWFmN2UxMmJiNDVjMWRjOTEwNzZlNjI0YzVmMC4u
ZjUwMmM2ZmNhZjE0MGY5Njk5ZDcxZTllZWEwZjE0OTYwMmVhYmU4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcApA
QCAtNjUxLDEwICs2NTEsMTAgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFt
ZXRlcnMoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgQ29sb3JTcGFjZSBjb2xvclNw
YWNlOwogICAgIHN3aXRjaCAoYXJncy5wZWVrKCkuaWQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVT
UkdCOgotICAgICAgICBjb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0I7CisgICAgICAgIGNvbG9y
U3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1Zh
bHVlRGlzcGxheVAzOgotICAgICAgICBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURpc3BsYXlQMzsK
KyAgICAgICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCmluZGV4IDQzZDZhNWE0MDQwODFiYmNjZjNlN2Ji
ZmQxYzRjNDliOTM5MTg3NjIuLmY0Yjc3MDdlOTdhOGZlNTFmOGUyNTc3NThhZGU0YjZkZGZmNTAy
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCkBAIC05Myw3
ICs5Myw3IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAog
ICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgbV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2Nl
bGVyYXRlZCwgMSwgQ29sb3JTcGFjZVNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIG51bGxwdHIpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3Bw
CmluZGV4IGVlYTk2NGFjMTFhOTk5M2RiNjRkZjY4Y2QxMTZmNTIyNDMwNTExMDMuLjIzZDliMzRl
ODQ4ZjZkMDFkMzRhOWRhZmZiYTMwNTBmYzdhNzEzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC04ODgsNyArODg4LDcgQEAgdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IEFjY2VsZXJhdGVkIDogVW5h
Y2NlbGVyYXRlZDsKIAogICAgIGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAm
JiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCkt
Pmhvc3RXaW5kb3coKSA6IG51bGxwdHI7Ci0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2VTUkdCLCBob3N0V2lu
ZG93KSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAogI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKaW5kZXggMzIzZGQ0ZTAzYmFjZGIyZDhmN2Y4ZGVmYmFkNWNmMDgwM2IxNWViOS4u
ZDc2ZjE3ZDhlZTFlZWM0OWRlMmRjYzNjODE5YjI2MTAwZDQ1YTdjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CkBAIC01NDUsNyArNTQ1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdU
ZXh0SW50ZXJuYWwoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG8KICAgICAgICAgICAg
IGZvbnRQcm94eS5kcmF3QmlkaVRleHQoKmMsIHRleHRSdW4sIGxvY2F0aW9uICsgb2Zmc2V0LCBG
b250Q2FzY2FkZTo6VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KG1hc2tSZWN0LnNpemUoKSwgQ29sb3JTcGFjZVNSR0IsICpjKTsKKyAgICAgICAgYXV0byBtYXNr
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXpl
KCksIENvbG9yU3BhY2U6OlNSR0IsICpjKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAg
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggOTI4Mjg4NDU2YjM1
ODIxNGYzZmRlMWU1YzAyNDgxYmU5NWRlODg5My4uZTJjYjcyOWEyNmU2OTRhODFmMDM1NDA1ZDQ4
Mzk1Y2Q3Y2RkM2M5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE2NDAsNyArMTY0MCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJ
bWFnZShDYW52YXNCYXNlJiBzb3VyY2VDYW52CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMo
KTsKICAgICB9IGVsc2UgaWYgKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZU9w
ZXJhdG9yOjpDb3B5KSB7CiAgICAgICAgIGlmICgmc291cmNlQ2FudmFzID09ICZjYW52YXNCYXNl
KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGNvcHkgPSBidWZmZXItPmNvcHlSZWN0VG9CdWZm
ZXIoc3JjUmVjdCwgQ29sb3JTcGFjZVNSR0IsICpjKSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
Y29weSA9IGJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihzcmNSZWN0LCBDb2xvclNwYWNlOjpTUkdC
LCAqYykpIHsKICAgICAgICAgICAgICAgICBjbGVhckNhbnZhcygpOwogICAgICAgICAgICAgICAg
IGMtPmRyYXdJbWFnZUJ1ZmZlcigqY29weSwgZHN0UmVjdCwgeyB7IH0sIHNyY1JlY3Quc2l6ZSgp
IH0sIHsgc3RhdGUoKS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7CiAg
ICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBkNzgxZjM1Y2I1
Mzg4NzI1ZmRiMzBkYmQzMjU0NGIyZGM1MWMwZDEyLi40NDE5NzNjNDVlNWQzYTIwNTUwNzA4NTEx
ZjNlZjRiNjgwZDUwZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3Ry
YWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIK
QEAgLTMwNCw2ICszMDUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlS
ZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxh
eUlEKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKyAgICB2aXJ0dWFsIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICAv
LyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBs
YXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBH
cmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdy
YXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDIy
NzFjMTkxYjY2MjVjNGVjNDU5Njg0MWRhZWM2YWZjOTMzZGU5ZmIuLmQyY2I2NGZjZjkyZWRkOTZk
NzhhZGIwMWI3MDU0YzMwNmQ2NmJmMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMjkwNSw2ICsy
OTA1LDE1IEBAIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlciYgUGFnZTo6cmVuZGVyaW5nVXBkYXRl
U2NoZWR1bGVyKCkKICAgICByZXR1cm4gKm1fcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyOwogfQog
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFBhZ2U6
OnJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAg
ICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBjaHJvbWUoKS5jbGllbnQoKS5jcmVhdGVSZW5kZXJp
bmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZDsKK30KKyNlbmRpZgor
CiB2b2lkIFBhZ2U6OmZvckVhY2hEb2N1bWVudChjb25zdCBGdW5jdGlvbjx2b2lkKERvY3VtZW50
Jik+JiBmdW5jdG9yKQogewogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBjb2xsZWN0RG9jdW1l
bnRzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IDA1OTA1NmUwZTI5ZDllZWI0ZGIyYWIyZTQ2NjEwYzg3
NDBkYTMxNjIuLjViYTU1N2EwMzM1ZjViMTBmNmU2MWFmMzFhNWUxZDQ5OWE0NWY2OTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUlRDQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCisjaW5j
bHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1VwZGF0ZVNjaGVk
dWxlci5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU3VwcGxlbWVudGFi
bGUuaCIKQEAgLTI2OSw2ICsyNzAsMTAgQEAgcHVibGljOgogICAgIFBlcmZvcm1hbmNlTW9uaXRv
ciogcGVyZm9ybWFuY2VNb25pdG9yKCkgeyByZXR1cm4gbV9wZXJmb3JtYW5jZU1vbml0b3IuZ2V0
KCk7IH0KIAogICAgIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlciYgcmVuZGVyaW5nVXBkYXRlU2No
ZWR1bGVyKCk7CisgICAgCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIFJlZlB0cjxSZW5k
ZXJpbmdCYWNrZW5kPiByZW5kZXJpbmdCYWNrZW5kKCk7CisjZW5kaWYKIAogICAgIFZhbGlkYXRp
b25NZXNzYWdlQ2xpZW50KiB2YWxpZGF0aW9uTWVzc2FnZUNsaWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQuZ2V0KCk7IH0KICAgICB2b2lkIHVwZGF0ZVZhbGlk
YXRpb25CdWJibGVTdGF0ZUlmTmVlZGVkKCk7CkBAIC04OTIsNiArODk3LDEwIEBAIHByaXZhdGU6
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyPiBtX3JlbmRl
cmluZ1VwZGF0ZVNjaGVkdWxlcjsKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBSZWZQ
dHI8UmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOworI2VuZGlmCisKICAgICBI
YXNoU2V0PFJlbmRlck9iamVjdCo+IG1fcmVsZXZhbnRVbnBhaW50ZWRSZW5kZXJPYmplY3RzOwog
ICAgIFJlZ2lvbiBtX3RvcFJlbGV2YW50UGFpbnRlZFJlZ2lvbjsKICAgICBSZWdpb24gbV9ib3R0
b21SZWxldmFudFBhaW50ZWRSZWdpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggMjc2MWE1MmYyMzIyMWI3YzY5MGQ5MWUzZGI5
NjM0NWFjY2JjZGY0ZC4uM2NlMTM4MTYwMTNlZWVjMjBlYTQzZTI2MjY0ZGFhYzBiZjJkZGQwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cApAQCAtMzAxLDcgKzMwMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwKICAgICB9CiAKICAg
ICBpZiAoIW1fY2FjaGVkSW1hZ2UpIHsKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUodGlsZVJlY3Quc2l6ZSgp
KSwgQ29sb3JTcGFjZVNSR0IsIGN0eHQpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZSh0aWxlUmVjdC5zaXpl
KCkpLCBDb2xvclNwYWNlOjpTUkdCLCBjdHh0KTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcAppbmRleCA1Zjk0NTI5OTViYTE4ODUwZTk2MjQ0MGUxZjk1Yjg0Mjg4YWQyYjUwLi5lYzE0
M2EwYTNmYzA0NmIwMTE4NTFjZGI3MWIwMGZmNDY0Mjc2NGY1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC02NTAsMTMgKzY1MCwxMyBAQCBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCiBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CiB7CiAgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlU1JHQjoK
KyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CiAgICAgICAgIHRzIDw8ICJzUkdCIjsKICAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvclNwYWNlTGluZWFyUkdCOgorICAgIGNhc2UgQ29sb3JT
cGFjZTo6TGluZWFyUkdCOgogICAgICAgICB0cyA8PCAiTGluZWFyUkdCIjsKICAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDb2xvclNwYWNlRGlzcGxheVAzOgorICAgIGNhc2UgQ29sb3JTcGFjZTo6
RGlzcGxheVAzOgogICAgICAgICB0cyA8PCAiRGlzcGxheVAzIjsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggNjA1MzU3
Y2VhZTZmNDJkOGU2Nzg0NWFhZmI5MDRmODk3Mjk5NGQyYS4uOGUzNWUwOTllNGFmMzJkNjk3N2Vl
YmQyYzcwNWNhNzY2YTQzZWY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCkBAIC0zODUsNyArMzg1LDcgQEAgaW5saW5lIGJvb2wgUkdCQTo6aGFzQWxwaGEoKSBj
b25zdAogaW5saW5lIENvbG9yOjpDb2xvcihSR0JBIGNvbG9yLCBDb2xvclNwYWNlIHNwYWNlKQog
ewogICAgIHNldFJHQihjb2xvci5tX2ludGVnZXIpOwotICAgIEFTU0VSVF9VTlVTRUQoc3BhY2Us
IHNwYWNlID09IENvbG9yU3BhY2VTUkdCKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNwYWNlLCBzcGFj
ZSA9PSBDb2xvclNwYWNlOjpTUkdCKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Db2xvclNwYWNlLmgKaW5kZXggMTFkMDE3ZmFhOGYyY2Y0NGNkYmUyOWNmNThkNzU3
NTA1ZGVlMTU4ZC4uMGFhMjc0YTFjNTA5NTM1MjZhODhlZTRhNGVmYTNmOWM4ZDIzN2IzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaApAQCAtMjcs
MTAgKzI3LDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb2xvclNwYWNlIHsK
LSAgICBDb2xvclNwYWNlU1JHQiwKLSAgICBDb2xvclNwYWNlTGluZWFyUkdCLAotICAgIENvbG9y
U3BhY2VEaXNwbGF5UDMKK2VudW0gY2xhc3MgQ29sb3JTcGFjZSA6IHVpbnQ4X3QgeworICAgIFNS
R0IsCisgICAgTGluZWFyUkdCLAorICAgIERpc3BsYXlQMwogfTsKICAgICAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0N1c3RvbVBhaW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q3VzdG9tUGFpbnRJbWFnZS5jcHAKaW5kZXggNjU5MDQxNWNjMDM3Nzk2ZjE0ZDAzMjZiOTE2OWZl
MjFhMTJlZWZkOS4uODQwMDUxNWY5ZjY5ZDE2N2E1Y2U2ZTgzOTM5NzVlOWQ2NjI4MjdmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHAKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIEN1c3RvbVBhaW50SW1hZ2U6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdAogICAg
IGFkanVzdGVkUGF0dGVybkNUTS5zY2FsZSgxLjAgLyB4U2NhbGUsIDEuMCAvIHlTY2FsZSk7CiAg
ICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHhTY2FsZSwgeVNjYWxlKTsKIAotICAgIGF1dG8gYnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBD
b2xvclNwYWNlU1JHQiwgZGVzdENvbnRleHQpOworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBDb2xvclNwYWNlOjpTUkdC
LCBkZXN0Q29udGV4dCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBk
b0N1c3RvbVBhaW50KGJ1ZmZlci0+Y29udGV4dCgpLCBhZGp1c3RlZFNpemUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAppbmRleCAy
YTNjODNlNTNlY2ZjNjcwNjc4NDczOTllNjE1OWFkOWJlZDM0YjIyLi4wNDFkYThmNGQ5ODY2MWI3
YzIwNTRkNmNiZDEwNDIwOGQyOTNlMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcApAQCAtNDUsMTAgKzQ1LDEwIEBAIFN0cmlu
ZyBFeHRlbmRlZENvbG9yOjpjc3NUZXh0KCkgY29uc3QKICAgICBidWlsZGVyLmFwcGVuZExpdGVy
YWwoImNvbG9yKCIpOwogCiAgICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENv
bG9yU3BhY2VTUkdCOgorICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKICAgICAgICAgYnVpbGRl
ci5hcHBlbmRMaXRlcmFsKCJzcmdiICIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbG9y
U3BhY2VEaXNwbGF5UDM6CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CiAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kTGl0ZXJhbCgiZGlzcGxheS1wMyAiKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0V4dGVuZGVkQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVu
ZGVkQ29sb3IuaAppbmRleCAzN2M2OGVkYzMwZWFhODY1Y2Q5ZjM5YzM5MmFiNmEzMTRjNjgwZjA1
Li5iOWZmMzgzZTUxMTVjNTk2Yzk5ZDAyMjg5NTlkMmQyMDYyZDUyNmFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCkBAIC0zNSw3ICsz
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXh0ZW5kZWRDb2xvciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEV4
dGVuZGVkQ29sb3I+IGNyZWF0ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhLCBD
b2xvclNwYWNlID0gQ29sb3JTcGFjZTo6Q29sb3JTcGFjZVNSR0IpOworICAgIHN0YXRpYyBSZWY8
RXh0ZW5kZWRDb2xvcj4gY3JlYXRlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEs
IENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCKTsKIAogICAgIGZsb2F0IHJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVkOyB9CiAgICAgZmxvYXQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2dy
ZWVuOyB9CkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9ibHVlIHsgMCB9
OwogICAgIGZsb2F0IG1fYWxwaGEgeyAwIH07CiAKLSAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFj
ZSB7IENvbG9yU3BhY2U6OkNvbG9yU3BhY2VTUkdCIH07CisgICAgQ29sb3JTcGFjZSBtX2NvbG9y
U3BhY2UgeyBDb2xvclNwYWNlOjpTUkdCIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCmluZGV4IGYzZWMwYTFhZDQ2
MDQxMjg3MmQ5MjBlN2UxZTAxMTY3NjZjYTYzZmIuLjA4YmE5YzllYThkNTc4NjMxODZlMjQ1ZjVk
ODJlMjA4ODM0NDc3M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYWRpZW50SW1hZ2UuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgR3JhZGllbnRJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkCiAgICAgdW5zaWduZWQgZ2VuZXJhdG9ySGFzaCA9IG1fZ3JhZGllbnQtPmhhc2goKTsK
IAogICAgIGlmICghbV9jYWNoZWRJbWFnZSB8fCBtX2NhY2hlZEdlbmVyYXRvckhhc2ggIT0gZ2Vu
ZXJhdG9ySGFzaCB8fCBtX2NhY2hlZEFkanVzdGVkU2l6ZSAhPSBhZGp1c3RlZFNpemUgfHwgIWFy
ZUVzc2VudGlhbGx5RXF1YWwoZGVzdENvbnRleHQuc2NhbGVGYWN0b3IoKSwgbV9jYWNoZWRTY2Fs
ZUZhY3RvcikpIHsKLSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGFkanVzdGVkU2l6ZSwgQ29sb3JTcGFjZVNSR0IsIGRlc3RDb250
ZXh0KTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGFkanVzdGVkU2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgZGVzdENvbnRleHQp
OwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXgg
ZmI1MzZiM2Q2MjhmMjZhZTRmZjU5OTFkOTFmYmRkYWIzZGMxYWY2NS4uMGU4ZGFmMWVhOTU1ODlj
NTM0MGUwMjZlNDQ2ODU1YTUxMTJiYzA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMTI2LDExICsxMjYsMTEgQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q28KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gb25seSBzUkdCIDwt
PiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xv
clNwYWNlICE9IENvbG9yU3BhY2VMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNw
YWNlU1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZUxpbmVhclJH
QiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2VTUkdCKSkKKyAgICBpZiAoKHNyY0NvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VMaW5lYXJSR0IpIHsK
KyAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKICAgICAg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBb
XSB7CiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTE0MSw3ICsxNDEs
NyBAQCB2b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3Jj
Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDbwogICAgICAgICAgICAgcmV0dXJuIGFycmF5Owog
ICAgICAgICB9KCk7CiAgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJS
Z2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlU1JHQikg
eworICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVU
PSBbXSB7CiAgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDJiYWE4ZTJiMjA5
ZWNmZTI0N2FjOGQ4ZTNhMDY4YzBkMDZmOWY3NmIuLjExODgwY2ExODU2ODJlMzQwYTA1ODVkZjFl
MDFlNTE1OTlkMDIxNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaApAQCAtNjksOSArNjksOSBAQCBjbGFzcyBJbWFnZUJ1ZmZlciB7CiAgICAg
ZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1YmxpYzoKICAgICAvLyBXaWxsIHJldHVybiBhIG51
bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBD
b2xvclNwYWNlU1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29s
b3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7
CiAjaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2Rl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xv
clNwYWNlID0gQ29sb3JTcGFjZVNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpT
UkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwogI2VuZGlmCiAKICAgICAvLyBDcmVh
dGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSBy
ZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODMxOTBhOGY0MjI2NDIwYmQyMGYzY2YwNzFlOWQzYmUxM2U1MTU5YwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApA
QCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50U2l6ZTsK
K2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgUmVuZGVyaW5nQmFja2VuZCA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxSZW5kZXJpbmdCYWNrZW5kPiB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6cGFpcjx1
aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4+IGNyZWF0ZVNoYXJlZElPU3VyZmFj
ZShjb25zdCBJbnRTaXplJiwgY29uc3QgSW50U2l6ZSYgY29udGV4dFNpemUsIENvbG9yU3BhY2Up
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgcmVsZWFzZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBz
dXJmYWNlSUQpID0gMDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKaW5k
ZXggMTA5YzY0MGM1MjY2MWExODdlZDUxMGFkMmYyNzAwMGRlNTNiNzgzOS4uY2RmZmEzZjYwZTlh
ZDE4ZjJhNDBhOGU4OTg1MmEzNmEzMzdmNTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRp
YyBDR0NvbG9yUmVmIGxlYWtDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgY29t
cG9uZW50c1syXSA9IGV4dGVuZGVkQ29sb3IuYmx1ZSgpOwogICAgICAgICBjb21wb25lbnRzWzNd
ID0gZXh0ZW5kZWRDb2xvci5hbHBoYSgpOwogICAgICAgICBzd2l0Y2ggKGV4dGVuZGVkQ29sb3Iu
Y29sb3JTcGFjZSgpKSB7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZVNSR0I6CisgICAgICAgIGNh
c2UgQ29sb3JTcGFjZTo6U1JHQjoKICAgICAgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNS
R0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICBjYXNlIENvbG9yU3BhY2VE
aXNwbGF5UDM6CisgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgogICAgICAgICAg
ICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpLCBjb21wb25l
bnRzKTsKLSAgICAgICAgY2FzZSBDb2xvclNwYWNlTGluZWFyUkdCOgorICAgICAgICBjYXNlIENv
bG9yU3BhY2U6OkxpbmVhclJHQjoKICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBldmVyIGNy
ZWF0ZSBDR0NvbG9yUmVmcyBpbiB0aGVzZSBzcGFjZXM/IEl0IG1heSBvbmx5IGJlIEltYWdlQnVm
ZmVycy4KICAgICAgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVm
KCksIGNvbXBvbmVudHMpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCBkMDM3MDQwNWZj
NzkwNTUyZTEwMjhiZWNhY2Y4MTk4MGRlZjJiNThiLi41ZDU5ZDE1ZGJlZGY1ZTM1MjM5YjM3YWI1
MmVjNDQ5YTkxMmJkNGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTQxLDExICs0MSwxMSBAQCBDR0Fm
ZmluZVRyYW5zZm9ybSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZik7CiBzdGF0aWMgaW5s
aW5lIENHQ29sb3JTcGFjZVJlZiBjYWNoZWRDR0NvbG9yU3BhY2UoQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQogewogICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZVNS
R0I6CisgICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgogICAgICAgICByZXR1cm4gc1JHQkNvbG9y
U3BhY2VSZWYoKTsKLSAgICBjYXNlIENvbG9yU3BhY2VMaW5lYXJSR0I6CisgICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6CiAgICAgICAgIHJldHVybiBsaW5lYXJSR0JDb2xvclNwYWNlUmVm
KCk7Ci0gICAgY2FzZSBDb2xvclNwYWNlRGlzcGxheVAzOgorICAgIGNhc2UgQ29sb3JTcGFjZTo6
RGlzcGxheVAzOgogICAgICAgICByZXR1cm4gZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpOwogICAg
IH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggNDhjMzFhMDZlZjQxMDdjMGE1
NjBjOGRjMWM2MDJkODc1YTVhODRhOC4uZjY2OTFlNDY0ZGFkODM1YTAxZmQ4MDY5NDQ5NWJlYjRi
M2ZhYzdjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUZsb29kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUZsb29kLmgKQEAgLTQwLDggKzQwLDggQEAgcHVibGljOgogI2lmICFVU0UoQ0cpCiAg
ICAgLy8gZmVGbG9vZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVycG9sYXRpb24gb2YgYW55
IGtpbmQsIHNvIHRoZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJyZW50CiAgICAgLy8gY29s
b3Igc3BhY2UgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3ItaW50ZXJwb2xhdGlvbi1m
aWx0ZXJzLgotICAgIHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShDb2xvclNwYWNlKSBvdmVy
cmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7
IH0KLSAgICB2b2lkIHNldFJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZSkgb3ZlcnJpZGUgeyBG
aWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZVNSR0IpOyB9CisgICAg
dm9pZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2UpIG92ZXJyaWRlIHsgRmlsdGVy
RWZmZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOyB9CisgICAgdm9p
ZCBzZXRSZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0
OjpzZXRSZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOyB9CiAjZW5kaWYKIAogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDcwN2VhZDlhYWNhNjYyNmQ3MzRiYmZiMmU4Y2I1ZjM5
ZWQwYmYzYTEuLjBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUzYzJlNzQyZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcApAQCAtNDAzLDcgKzQwMyw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0
aW5nKFVpbnQ4Q2xhbXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAg
ICBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgRmxvYXRDb21wb25lbnRzIGxp
Z2h0Q29sb3IgPSAob3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2VMaW5lYXJSR0Ip
ID8gc1JHQkNvbG9yVG9MaW5lYXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcikgOiBGbG9hdENv
bXBvbmVudHMobV9saWdodGluZ0NvbG9yKTsKKyAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xv
ciA9IChvcGVyYXRpbmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHNS
R0JDb2xvclRvTGluZWFyQ29tcG9uZW50cyhtX2xpZ2h0aW5nQ29sb3IpIDogRmxvYXRDb21wb25l
bnRzKG1fbGlnaHRpbmdDb2xvcik7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0Rh
dGEuY29sb3JWZWN0b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRzWzBdLCBs
aWdodENvbG9yLmNvbXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7CiAgICAg
bV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRp
bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUu
Y3BwCmluZGV4IDcwN2M2ZWI0NmM4MzI5N2ZiZjZlMmQ5MGY1ZGZmNDdlNjkzNmQ4NTQuLjFhODAx
ODVkZjRjMThjMzJlZmNkMjEyZDBkNzJlMjFiNGJiZmE3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTY0LDcgKzY0
LDcgQEAgdm9pZCBGRVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHRpbGVS
ZWN0LnNjYWxlKGZpbHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRl
clJlc29sdXRpb24oKS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3Qs
IENvbG9yU3BhY2VTUkdCLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGF1dG8gdGls
ZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3Qs
IHRpbGVSZWN0LCBDb2xvclNwYWNlOjpTUkdCLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwog
ICAgIGlmICghdGlsZUltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4
IDE5ZjZmYjRkZGJmMmM0MzY2YjhlNWIwNjVkMTc4ZWE2NTZlYzQxMDMuLmM5NjZmY2MyMTYzOWRl
NWE0MDRhN2M2MmYzZWEyYjZlOTMzMmZlNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjExLDggKzIx
MSw4IEBAIHByaXZhdGU6CiAgICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJp
bWl0aXZlIHJlZ2lvbiwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0
cyBpbnB1dHMuCiAgICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07CiAKLSAgICBDb2xv
clNwYWNlIG1fb3BlcmF0aW5nQ29sb3JTcGFjZSB7IENvbG9yU3BhY2VMaW5lYXJSR0IgfTsKLSAg
ICBDb2xvclNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IENvbG9yU3BhY2VTUkdCIH07CisgICAg
Q29sb3JTcGFjZSBtX29wZXJhdGluZ0NvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpMaW5lYXJSR0Ig
fTsKKyAgICBDb2xvclNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0Ig
fTsKIH07CiAKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXgg
MzYxNWYwZTliNjFhODMzYWIxZDQ2ODdhYmE2OGFiMzIxNDU1OGZkZi4uNDI4NjI5YmUzNTViYzk5
NTQ1ZTBmMmM0N2QxZmYwMmEyOWEzYWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTM2LDcgKzM2
LDcgQEAgcHJpdmF0ZToKICAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQogICAgICAg
ICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCiAgICAgewotICAgICAgICBzZXRPcGVyYXRpbmdDb2xv
clNwYWNlKENvbG9yU3BhY2VTUkdCKTsKKyAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShD
b2xvclNwYWNlOjpTUkdCKTsKICAgICB9CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvVGhlbWVNYWMubW0KaW5kZXggMjcyODI0ZWM4OGJiYmMxMDM2OTQ3N2VkMDk4YWM0
ODQ0MTNhYjlhZi4uNjZjYjY5YmNmNDUwOTA4NjYyNGM0YTE1YjE4MWY2MWRhNzY4ZTAzYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQpAQCAtNjk4LDcgKzY5OCw3IEBA
IGJvb2wgVGhlbWVNYWM6OmRyYXdDZWxsT3JGb2N1c1JpbmdXaXRoVmlld0ludG9Db250ZXh0KE5T
Q2VsbCAqY2VsbCwgR3JhcGhpY3NDb250CiAgICAgYm9vbCBuZWVkc1JlcGFpbnQgPSBmYWxzZTsK
ICAgICBpZiAodXNlSW1hZ2VCdWZmZXIpIHsKICAgICAgICAgTlNSZWN0IGltYWdlQnVmZmVyRHJh
d1JlY3QgPSBOU1JlY3QoRmxvYXRSZWN0KGJ1dHRvbkZvY3VzUmVjdE91dGxpbmVXaWR0aCwgYnV0
dG9uRm9jdXNSZWN0T3V0bGluZVdpZHRoLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
LSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKHJlY3Quc2l6ZSgpICsgMiAqIEZsb2F0U2l6ZShidXR0b25Gb2N1c1JlY3RPdXRsaW5l
V2lkdGgsIGJ1dHRvbkZvY3VzUmVjdE91dGxpbmVXaWR0aCksIGRldmljZVNjYWxlRmFjdG9yLCBD
b2xvclNwYWNlU1JHQiwgY29udGV4dCk7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSArIDIgKiBGbG9hdFNp
emUoYnV0dG9uRm9jdXNSZWN0T3V0bGluZVdpZHRoLCBidXR0b25Gb2N1c1JlY3RPdXRsaW5lV2lk
dGgpLCBkZXZpY2VTY2FsZUZhY3RvciwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7CiAgICAg
ICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbmVlZHNSZXBhaW50Owog
ICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDZkNTk1
YTJkYjI5YzUzYmZiMjliNjZhZTUyYmYyMjdlNWJhNzEyMzUuLjE2MDI1N2JjYjkwOGU3MmFhZjM5
ZDIyMGNhNWI1Yjc2ZDVjNWNkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpi
dWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmkKIAogICAgICAg
ICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwogICAg
ICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQotICAgICAgICAgICAgZWZmZWN0LT5z
ZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5z
dmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRp
b246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xvclNwYWNlU1JHQik7Cisg
ICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5y
ZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygp
ID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdC
IDogQ29sb3JTcGFjZTo6U1JHQik7CiAKICAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1l
bnQucmVzdWx0KCksIGVmZmVjdCk7CiAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7
CkBAIC0yODksNyArMjg5LDcgQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb24KICAgICAgICAgICAg
IC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rp
b25zIG9uIHRoZSBmaWx0ZXIKICAgICAgICAgICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBz
aG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCiAgICAgICAgICAg
ICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZp
bHRlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFj
ZShDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9y
U3BhY2UoQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChm
aWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAg
ICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoV1RGTW92ZShwcmV2
aW91c0VmZmVjdCkpOwpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgQ1NTRmlsdGVyOjphcHBseSgp
CiB7CiAgICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKICAgICBlZmZl
Y3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNw
YWNlU1JHQik7CisgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFj
ZTo6U1JHQik7CiB9CiAKIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VS
ZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExh
eW91dFJlY3QmIGRpcnR5UmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGU1Yjc1NTgyNThjZGU2NmYzZDI2ODAxNTc5NDNl
NDdkNTBmNGRhOTAuLmM4YzdiZjEyN2VmZjQwMDFkNGMwYTU5YmUzMmI2YmIzMWM2YmM5OTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNw
cApAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Rmls
bExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIG1h
c2tSZWN0LmludGVyc2VjdChzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogCiAgICAg
ICAgIC8vIE5vdyBjcmVhdGUgdGhlIG1hc2suCi0gICAgICAgIG1hc2tJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKG1hc2tSZWN0LnNpemUoKSwgQ29sb3JTcGFjZVNS
R0IsIGNvbnRleHQpOworICAgICAgICBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXplKCksIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQp
OwogICAgICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
cGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gobWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCwgYm94LCBz
Y3JvbGxlZFBhaW50UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCmluZGV4IGQwODI4YTIyZWEwMGJlN2IzM2FjM2I3YTJkNWJlN2MxMzRh
MmNjMTAuLjhlYjViYzIyMTBiOGMxZTg0NTlhY2EyNjAyZDc4MTJkZTA3N2ViYTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0yOTI3
LDcgKzI5MjcsNyBAQCBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm5Gb3JUb3VjaEFjdGlv
bihUb3VjaEFjdGlvbiB0b3VjaEFjdGlvbiwgRmxvYXRTaXplCiAKICAgICBjb25zdCBGbG9hdFNp
emUgdGlsZVNpemUgeyAzMiwgMTggfTsKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcih0aWxlU2l6ZSwgQ29sb3JTcGFjZVNSR0IsIGRl
c3RDb250ZXh0KTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIodGlsZVNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGRlc3RDb250ZXh0KTsK
ICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDY1NzRiNTBmNDMyNjUz
NDhhOTQyN2ZmNTlmNzA0MzhhYjYwZDhjNWQuLmNkOGFmNmUyYTc4NWYwMTY5MjQ3YjBkMWYyY2Fh
NzdjOTNjNjE0MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW0KQEAgLTE0NzEsNyArMTQ3MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jl
c3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiAgICAgdHJh
Y2tJbmZvLnJlc2VydmVkID0gMDsKICAgICB0cmFja0luZm8uZmlsbGVyMSA9IDA7CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoaW5mbGF0ZWRSZWN0LnNpemUoKSwgZGV2aWNlU2NhbGVGYWN0
b3IsIENvbG9yU3BhY2VTUkdCLCBwYWludEluZm8uY29udGV4dCgpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoaW5mbGF0ZWRSZWN0LnNpemUoKSwgZGV2aWNlU2NhbGVGYWN0b3IsIENvbG9y
U3BhY2U6OlNSR0IsIHBhaW50SW5mby5jb250ZXh0KCkpOwogICAgIGlmICghaW1hZ2VCdWZmZXIp
CiAgICAgICAgIHJldHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggY2Y1ZDM1YjU4
ODQxZGJjY2YyYzI3YTZlNWNkMzkyMWNiNGFkYzZhNi4uMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4
NDZmMDU5ZDVhMmNhNzEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1h
c2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FICgx
NDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1
bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBj
bGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
LCBDb2xvclNwYWNlU1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlw
cGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVw
YWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJh
dGVkLCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBkODIzYTAyYjU0ZGYxM2Fj
MzQzYWRiYTZkNWYxNDNkNGJhYWNiNzU0Li43NWI1OWI2M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5MmE5
MzJmNDMxNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQ
cmltaXRpdmVzKFNWR0ZpCiAgICAgICAgIGVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVm
ZmVjdC5nZXQoKSk7CiAgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5n
dGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJn
ZXRCb3VuZGluZ0JveCkpOwogICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJlcigpKQotICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+
c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvcklu
dGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xvclNwYWNl
U1JHQik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVu
dC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVy
cygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFy
UkdCIDogQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJl
c3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwogICAgIH0KICAgICByZXR1cm4gYnVpbGRlcjsKQEAg
LTE5Miw3ICsxOTIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291
cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7
CiAKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygp
LmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRl
ZDsKLSAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0s
IENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOworICAgIGF1dG8g
c291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZp
bHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6
TGluZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBo
aWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygm
cmVuZGVyZXIpKTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsK
QEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICAgICAg
ZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAgICAgbGFz
dEVmZmVjdC0+YXBwbHkoKTsKICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJS
ZXN1bHRJZk5lZWRlZCgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBsYXN0RWZmZWN0LT50cmFu
c2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICB9CiAgICAg
ICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dC5jcHAKaW5kZXggNTUyY2U1YTMzYTgwNjJlNmJlZTBiMDRhZTNmMTYwZjA5OWViNTJmNS4uY2Yz
ZjllYTg4YjE0NTlkOTc3M2RkNTNmMmIwMTJlMmI0YjJiMDYyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQu
Y3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVNYXNrQW5kU3dh
cENvbnRleHRGb3JUZXh0R3JhZGllbnQoR3JhcGhpY3NDb250ZXh0KiYgY29uCiAgICAgQWZmaW5l
VHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3Vs
YXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnRleHRSb290Qmxv
Y2spOwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHRleHRSb290QmxvY2stPnJlcGFpbnRS
ZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAKLSAgICBhdXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5z
Zm9ybSwgQ29sb3JTcGFjZVNSR0IsIGNvbnRleHQtPnJlbmRlcmluZ01vZGUoKSk7CisgICAgYXV0
byBtYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBh
aW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQtPnJl
bmRlcmluZ01vZGUoKSk7CiAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcAppbmRleCA0YzgxOWI5YmM1NWRjMmJmYTgyZmJiYzA5N2Y2Mzc1
ODViNWIxMjc3Li4xNzg3ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlTWFza2VyLmNwcApAQCAtNjksNyArNjksNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFz
a2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQog
CiAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHko
KSkgewogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2
Z1N0eWxlKCk7Ci0gICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9y
SW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JT
cGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VTUkdCOworICAgICAgICBDb2xvclNwYWNlIGNvbG9y
U3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRp
b246OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7
CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90
IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNv
bnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KICAgICAgICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWlu
dFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250
ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCkBAIC0xMTMsNyArMTEz
LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0lt
YWdlKE1hc2tlckRhdGEqIG1hc2tlckRhdGEsIEMKICAgICB9CiAKICNpZiAhVVNFKENHKQotICAg
IG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlU1JH
QiwgY29sb3JTcGFjZSk7CisgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlLT50cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2U6OlNSR0IsIGNvbG9yU3BhY2UpOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0oY29sb3JTcGFjZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCAzMWJjNWYx
OTMxYmRhZTUwYWFjNjYxMzU5ZmMwYTI2ZjE3ODU4NmZjLi4xYzNjODU0YWVmMjk3NjljMmRmOWVi
NDRmOWNkMTliM2IxYzY1NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC0yNTUsNyArMjU1LDcg
QEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkVGlsZUltYWdlVHJhbnNmb3Jt
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBS
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShjb25zdCBQYXR0ZXJuQXR0
cmlidXRlcyYgYXR0cmlidXRlcywgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmllcywgY29u
c3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUaWxlQm91
bmRhcmllcywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25zdAogewogICAgIGNsYW1w
ZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGFic29s
dXRlVGlsZUJvdW5kYXJpZXMpOwotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUaWxlQm91bmRhcmllcywgY2xhbXBlZEFi
c29sdXRlVGlsZUJvdW5kYXJpZXMsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlKTsKKyAg
ICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBD
b2xvclNwYWNlOjpTUkdCLCByZW5kZXJpbmdNb2RlKTsKICAgICBpZiAoIXRpbGVJbWFnZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGFhOTJkNjM0ZWNlZjgwZTkwNjhh
ODExNTc4MzcwMjhlNmM2MWYzZWQuLmQ3ODY5NGFhZTdiMzU5MmIzNjI1MjY3ZDk1MDAxNjZhYmUw
NTBmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5k
ZXJpbmdDb250ZXh0LmNwcApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6YnVmZmVyRm9yZWdyb3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFn
ZUJ1CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgYnVmZmVyIGFuZCBwYWludCB0aGUgZm9yZWdyb3Vu
ZCBpbnRvIGl0LgogICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgaWYgKChpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6
ZShib3VuZGluZ0JveC5zaXplKCkpLCBDb2xvclNwYWNlU1JHQiwgbV9wYWludEluZm8tPmNvbnRl
eHQoKSkpKSB7CisgICAgICAgIGlmICgoaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKSwgQ29s
b3JTcGFjZTo6U1JHQiwgbV9wYWludEluZm8tPmNvbnRleHQoKSkpKSB7CiAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQmIGJ1ZmZlcmVkUmVuZGVyaW5nQ29udGV4dCA9IGltYWdlQnVmZmVyLT5j
b250ZXh0KCk7CiAgICAgICAgICAgICBidWZmZXJlZFJlbmRlcmluZ0NvbnRleHQudHJhbnNsYXRl
KC1ib3VuZGluZ0JveC5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIFBhaW50SW5mbyBidWZmZXJl
ZEluZm8oKm1fcGFpbnRJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCmluZGV4IGMzNTM3ZTM4Y2Q5ODA0OGZjMDIxNzVmMjgyMjE0YjUxNTM5YTA5MzguLjdlODYw
Nzk4ZjcxZjc2YjU3NmZjNmUxOTM2ZmYxYmE3MjhkNzExNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgU1ZHSW1hZ2U6
OmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRTaXplCiAgICAgRmxvYXRSZWN0IGltYWdlQnVmZmVyU2l6ZSA9IHpvb21lZENvbnRhaW5l
clJlY3Q7CiAgICAgaW1hZ2VCdWZmZXJTaXplLnNjYWxlKGltYWdlQnVmZmVyU2NhbGUud2lkdGgo
KSwgaW1hZ2VCdWZmZXJTY2FsZS5oZWlnaHQoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4
cGFuZGVkSW50U2l6ZShpbWFnZUJ1ZmZlclNpemUuc2l6ZSgpKSwgMSwgQ29sb3JTcGFjZVNSR0Is
IGNvbnRleHQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJbnRTaXplKGltYWdlQnVm
ZmVyU2l6ZS5zaXplKCkpLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKICAgICBpZiAo
IWJ1ZmZlcikgLy8gRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlci4KICAgICAgICAgcmV0dXJuOwog
ICAgIGRyYXdGb3JDb250YWluZXIoYnVmZmVyLT5jb250ZXh0KCksIGNvbnRhaW5lclNpemUsIGNv
bnRhaW5lclpvb20sIGluaXRpYWxGcmFnbWVudFVSTCwgaW1hZ2VCdWZmZXJTaXplLCB6b29tZWRD
b250YWluZXJSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggYzU4NGViNTM3ZTZlNTY3MzE4ZWIwMjM4OGVmZjc4Mjgy
MmE5NjI3NC4uOGYxMzhhMmU1YTE1ZDhjYjE3MTRjZjJiNmRkMDA1OTVmOTk1YTI3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAK
QEAgLTkzLDggKzkzLDggQEAgdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8v
IEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIENvbG9yU3BhY2VTUkdCCi0gICAgc2V0UmVz
dWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFy
ZSBhbHdheXMgaW4gQ29sb3JTcGFjZTo6U1JHQgorICAgIHNldFJlc3VsdENvbG9yU3BhY2UoQ29s
b3JTcGFjZTo6U1JHQik7CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5k
ZXggYmQxMzlmZTUzMzFiY2NlMzZjMzM0M2IxNTIxN2QwMTFmMjUyNGMzOC4uODk5ZjBiZTA2NTI0
MjEwMzU0MmFiNGU3Njg3NjBjZjY4ODAyMzAxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMzMsNiArMzMs
NyBAQAogI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIklP
U3VyZmFjZU1hbmFnZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgpAQCAtNzQsNiArNzUsMjIgQEAgdm9pZCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWMKICAgICBDUkFTSCgpOwogfQogCit2b2lkIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OmNyZWF0ZVNoYXJlZElPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBj
b25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNZXNzYWdl
czo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlU2hhcmVkSU9TdXJmYWNlOjpEZWxh
eWVkUmVwbHkmJiByZXBseSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IElPU3VyZmFjZU1hbmFnZXI6
OnNoYXJlZE1hbmFnZXIoKS5jcmVhdGVTaGFyZWRJT1N1cmZhY2Uoc2l6ZSwgY29udGV4dFNpemUs
IGNvbG9yU3BhY2UpOworCisgICAgQVNTRVJUKCEhcmVzdWx0LmZpcnN0ID09ICEhcmVzdWx0LnNl
Y29uZCk7CisgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgIHJlcGx5KHJlc3VsdC5maXJz
dCwgcmVzdWx0LnNlY29uZC0+Y3JlYXRlU2VuZFJpZ2h0KCkpOworICAgIGVsc2UKKyAgICAgICAg
cmVwbHkoMCwgeyB9KTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxl
YXNlU2hhcmVkSU9TdXJmYWNlKHVpbnQ2NF90IHN1cmZhY2VJRCkKK3sKKyAgICBJT1N1cmZhY2VN
YW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVsZWFzZVNoYXJlZElPU3VyZmFjZShzdXJmYWNlSUQp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCmluZGV4IGM2NGE0M2U2NGFmNTEwYzA3NGQ3MDg2ZjdiNjQ2ZmE2YzZhNGY0
NjcuLjJhMmU1ODg1NzQ0ODE0ODVhMjA5OTA2ZDljMmRlZWIwZjY1MmQxN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApA
QCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KIApAQCAtNTUsOSArNTcsMTQgQEAgcHJpdmF0ZToKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50Cisg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZU5hbWUpIG92ZXJyaWRlOwogCisgICAgdm9pZCBjcmVhdGVTaGFyZWRJT1N1cmZhY2UoY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRTaXpl
LCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q3JlYXRlU2hhcmVkSU9TdXJmYWNlRGVsYXllZFJlcGx5JiYpOworICAgIHZvaWQgcmVsZWFz
ZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpOworCiAgICAgUmVmPElQQzo6Q29u
bmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7
CiAgICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRp
ZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQx
NGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uYzYwZmFmMjVmOWM0NzZkMTVkNjVkOWQ2NjcyZGI1Y2Iy
MGI1YmY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIzLDYgKzIzLDggQEAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgeworICAgIHZvaWQgQ3JlYXRlU2hhcmVkSU9TdXJmYWNlKFdlYkNvcmU6OkludFNp
emUgc2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZXh0U2l6ZSwgZW51bTp1aW50OF90IFdlYkNv
cmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgLT4gKHVpbnQ2NF90IHN1cmZhY2VJRCwgTWFjaFNl
bmRSaWdodCBzZW5kUmlnaHQpIFN5bmNocm9ub3VzCisgICAgdm9pZCBSZWxlYXNlU2hhcmVkSU9T
dXJmYWNlKHVpbnQ2NF90IHN1cmZhY2VJRCkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9JT1N1cmZhY2VNYW5h
Z2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9JT1N1cmZhY2VNYW5hZ2VyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NTllMWJiYjBlNjA4M2NmMWIzZjU0NTU5YWY0ZjVhNzgxYTc2ZjdhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIu
Y3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSU9TdXJmYWNlTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dENHLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworSU9TdXJmYWNl
TWFuYWdlciYgSU9TdXJmYWNlTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpCit7CisgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPElPU3VyZmFjZU1hbmFnZXI+IG1hbmFnZXI7CisgICAgcmV0dXJuIG1h
bmFnZXIuZ2V0KCk7Cit9CisKK3N0YXRpYyBhdXRvJiBzdXJmYWNlTWFwKCkKK3sKKyAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OklPU3VyZmFjZT4+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworc3RkOjpw
YWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpJT1N1cmZhY2UqPiBJT1N1cmZhY2VNYW5hZ2VyOjpjcmVh
dGVTaGFyZWRJT1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgY29u
dGV4dFNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvIHN1cmZhY2UgPSAg
SU9TdXJmYWNlOjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShj
b2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgLy8gSW5pdGFsaXplIHRoZSBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBHcmFwaGljc0NvbnRl
eHQmIHN1cmZhY2VDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cisg
ICAgc3VyZmFjZUNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgc3VyZmFjZUNv
bnRleHQudHJhbnNsYXRlKDAsIC1jb250ZXh0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBBc3Np
Z25pbmcgYW4gSUQgZm9yIHRoZSBJT1N1cmZhY2UuCisgICAgYXV0byBzdXJmYWNlSUQgPSBuZXh0
U3VyZmFjZUlEKCk7CisgICAgQVNTRVJUKCFzdXJmYWNlTWFwKCkuY29udGFpbnMoc3VyZmFjZUlE
KSk7CisgICAgCisgICAgYXV0byByZXN1bHQgPSBzdXJmYWNlLmdldCgpOworICAgIHN1cmZhY2VN
YXAoKS5hZGQoc3VyZmFjZUlELCBXVEZNb3ZlKHN1cmZhY2UpKTsKKworICAgIHJldHVybiBzdGQ6
Om1ha2VfcGFpcihzdXJmYWNlSUQsIHJlc3VsdCk7Cit9CisKK2Jvb2wgSU9TdXJmYWNlTWFuYWdl
cjo6cmVsZWFzZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpCit7CisgICAgQVNT
RVJUKHN1cmZhY2VNYXAoKS5jb250YWlucyhzdXJmYWNlSUQpKTsKKyAgICByZXR1cm4gc3VyZmFj
ZU1hcCgpLnJlbW92ZShzdXJmYWNlSUQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvSU9TdXJmYWNl
TWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMTJiZDA4ZmY5MjVmM2FhYmEwMzI5M2M0MzkxZWVjNTQ4YzQ1OTJiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIu
aApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lPU3VyZmFjZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgSU9TdXJmYWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgSU9TdXJmYWNlTWFuYWdlcigp
ID0gZGVmYXVsdDsKKworICAgIHN0YXRpYyBJT1N1cmZhY2VNYW5hZ2VyJiBzaGFyZWRNYW5hZ2Vy
KCk7CisKKyAgICBzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OklPU3VyZmFjZSo+IGNyZWF0
ZVNoYXJlZElPU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIGJvb2wgcmVs
ZWFzZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpOworCitwcml2YXRlOgorICAg
IHVpbnQ2NF90IG5leHRTdXJmYWNlSUQoKSB7IHJldHVybiArK21fc3VyZmFjZUlEOyB9CisKKyAg
ICB1aW50NjRfdCBtX3N1cmZhY2VJRCB7IDAgfTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmgKaW5kZXggNjA2ZGJjYThlMzI2YjFkNGY5ODIyZGRhOTNiNzhjODFkMWJlNDQzMi4uOTRm
NDMyMWIzZWVhMWM3NWI2NTMzNGIzM2EyNGYyYmQ2ZDc1OGE3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTc4Niw5ICs3ODYsOSBAQCBuYW1l
c3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JT
cGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29s
b3JTcGFjZSwKLSAgICBXZWJDb3JlOjpDb2xvclNwYWNlOjpDb2xvclNwYWNlU1JHQiwKLSAgICBX
ZWJDb3JlOjpDb2xvclNwYWNlOjpDb2xvclNwYWNlTGluZWFyUkdCLAotICAgIFdlYkNvcmU6OkNv
bG9yU3BhY2U6OkNvbG9yU3BhY2VEaXNwbGF5UDMKKyAgICBXZWJDb3JlOjpDb2xvclNwYWNlOjpT
UkdCLAorICAgIFdlYkNvcmU6OkNvbG9yU3BhY2U6OkxpbmVhclJHQiwKKyAgICBXZWJDb3JlOjpD
b2xvclNwYWNlOjpEaXNwbGF5UDMKICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNzNmZjRk
MjdiZWUzZDgyYTExNDY3MTc0OTJiY2I2NjQ1MjM1YjY0Mi4uMjQ1NjA1ZTgxZGJkMjk1ZDAwY2Ri
Y2UwM2UzOTZmOTY1ZjMwNDA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNCw2ICsyNCw3IEBACiBHUFVQ
cm9jZXNzL0dQVVByb2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCiBHUFVQcm9jZXNzL0dQVVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCitHUFVQ
cm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0FkQ2xpY2tBdHRy
aWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWN0aXZpdHlUcmFja2Vy
LmNwcApAQCAtNTc2LDYgKzU3Nyw3IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5j
cHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCiBXZWJQcm9jZXNzL1dl
YlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5j
cHAKK1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdl
L1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggOTVjZTA4ZDgzNzkzZDk0OWZmZjE0N2NkNjljN2EzNmVj
M2Y5MTQwMi4uOWViYzUxYWY3ZTJiNTk3NmU5OWVlOGEwZDMyZDNkODY0MjA1MTRkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xOTc1
LDkgKzE5NzUsOSBAQAogCQkJZHN0UGF0aCA9ICIkKElOU1RBTExfUEFUSCkiOwogCQkJZHN0U3Vi
Zm9sZGVyU3BlYyA9IDA7CiAJCQlmaWxlcyA9ICgKKwkJCQkyREI5NjA1MzIzOTg4NkMxMDAxMDI3
OTEgLyogY29tLmFwcGxlLldlYktpdC5HUFUuc2IgaW4gQ29weUZpbGVzICovLAogCQkJCUE3OEND
RERCMTkzQUM5RjgwMDVFQ0MyNSAvKiBjb20uYXBwbGUuV2ViS2l0Lk5ldHdvcmtpbmcuc2IgaW4g
Q29weUZpbGVzICovLAogCQkJCUE3OENDRERDMTkzQUM5RkIwMDVFQ0MyNSAvKiBjb20uYXBwbGUu
V2ViS2l0LldlYkNvbnRlbnQuc2IgaW4gQ29weUZpbGVzICovLAotCQkJCTJEQjk2MDUzMjM5ODg2
QzEwMDEwMjc5MSAvKiBjb20uYXBwbGUuV2ViS2l0LkdQVS5zYiBpbiBDb3B5RmlsZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0zNTc1LDYgKzM1NzUsMTAgQEAKIAkJNTNDRkJCQzYyMjI0RDFCMDAwMjY2NTQ2IC8qIFRleHRD
aGVja2VyQ29tcGxldGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0NGQkJDNzIyMjREMUIwMDAyNjY1NDYgLyogVGV4dENoZWNrZXJDb21wbGV0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ29tcGxldGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YzQ0FBNTIwNkM0NDNFMDA4NjQ5MEUgLyog
TmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTVEQ0ZBQTAyMzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUExMjM5OUJEQTIwMDUwQ0QyMiAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTYyMzk5RTYwQzAw
NTBDRDIyIC8qIElPU3VyZmFjZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlTWFu
YWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBNzIzOTlFNkQ0MDA1
MENEMjIgLyogSU9TdXJmYWNlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJT1N1cmZh
Y2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI4RjIyMEFF
M0JENzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjS2V5
UHJveHlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMDIwQjI1
MTc0MDBCOEJFODcgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMzIwQjI1NDFDMDBCOEJFODcgLyog
U2VjS2V5UHJveHlTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNlY0tleVByb3h5U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02
MTkzLDYgKzYxOTcsOCBAQAogCQkJCTJEOUZCMjAyMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVQcm9j
ZXNzLm1lc3NhZ2VzLmluICovLAogCQkJCTJEOUZCMjE0MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVQ
cm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLywKIAkJCQkyRDlGQjIwMzIzNzUyMDlEMDA0
OUY5MzYgLyogR1BVUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICovLAorCQkJCTU1RENGQUE3
MjM5OUU2RDQwMDUwQ0QyMiAvKiBJT1N1cmZhY2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk1NURDRkFB
NjIzOTlFNjBDMDA1MENEMjIgLyogSU9TdXJmYWNlTWFuYWdlci5oICovLAogCQkJKTsKIAkJCXBh
dGggPSBHUFVQcm9jZXNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc4OTgsNiAr
NzkwNCw4IEBACiAJCQkJMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVy
LmggKi8sCiAJCQkJN0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwICov
LAogCQkJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi8sCisJCQkJ
NTVEQ0ZBQTAyMzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICov
LAorCQkJCTU1RENGQUExMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmggKi8sCiAJCQkJQTU1QkE4MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3Rv
clVJLmNwcCAqLywKIAkJCQlBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5z
cGVjdG9yVUkuaCAqLywKIAkJCQlBNTVCQTgxNDFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2Vi
SW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDNh
YmIxYzdlMzdjNDdkZWUzNjgzNDcyZTJlMzM3YjQ1ZmFmNTU4MDUuLmFlNDFhNmU4MTJiNDc4OWQ1
MTRhYTM2MDNiOGRhN2YyMGE0N2Y0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zOSw2
ICszOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlBh
Z2VCYW5uZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVk
ZSAiVXNlckRhdGEuaCIKICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTg4MSwxNCArODgyLDE5IEBAIEdyYXBoaWNzTGF5
ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QK
IH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0K
IFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlz
cGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsK
ICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAg
ICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxh
eUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRl
UmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZSgpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCmluZGV4IDcyZWJlZjUwZGY5YjE0YTg3MmZjMzU2MGExYzgxNzM3NDUxZDcwMjcu
LjkzNzYwNjUwMTJlZTFlYWNiZGZiNDc1MTA2MWFkMmE1NmM4NTkxYWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKQEAgLTIzMCw2ICsyMzAsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29y
ZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiAgICAgQ29tcG9zaXRp
bmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAog
ICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdz
PigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZiNmZjY2RmZjMxOGE3MjdkMTk2
NjM5YzExOTFmY2NiZDdlMmY5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjpw
YWlyPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPj4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlU2hhcmVkSU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7
CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHVp
bnQ2NF90IHN1cmZhY2VJRDsKKyAgICBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodDsKKyAgICAKKyAg
ICBjb25uZWN0aW9uLT5zZW5kU3luYyhNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q3JlYXRlU2hhcmVkSU9TdXJmYWNlKHNpemUsIGNvbnRleHRTaXplLCBjb2xvclNwYWNlKSwg
TWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVNoYXJlZElPU3VyZmFj
ZTo6UmVwbHkoc3VyZmFjZUlELCBzZW5kUmlnaHQpLCAwKTsKKworICAgIC8vIEZJWE1FOiBIYW5k
bGUgdGhlIEdQVSBlcnJvcnMgbW9yZSBhcHByb3ByaWF0ZWx5LgorICAgIGlmICghc3VyZmFjZUlE
KQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihz
dXJmYWNlSUQsIFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3Zl
KHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSkpOworfQorCitib29s
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VTaGFyZWRJT1N1cmZhY2UodWludDY0X3Qg
c3VyZmFjZUlEKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKTsKKyAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpSZWxlYXNlU2hhcmVkSU9TdXJmYWNlKHN1cmZhY2VJRCksIDApOworICAgIHJldHVy
biB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTEzOWY1NjQ1NWNjZmFkNDMyM2JkYjRiNGZmOTFhOGU3NTg4
NWZlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0JhY2tlbmQuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgOiBw
dWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKKyAgICB9CisKKyAgICBz
dGQ6OnBhaXI8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+PiBj
cmVhdGVTaGFyZWRJT1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpDb2xvclNwYWNlKSBvdmVycmlkZTsK
KyAgICBib29sIHJlbGVhc2VTaGFyZWRJT1N1cmZhY2UodWludDY0X3Qgc3VyZmFjZUlEKSBvdmVy
cmlkZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0MzQzODI2ZDBmNjA1
M2FlZmQ4NDFhYzVjZjIwNTRmYmI5YjBkYzc4Li5kMTk5OTYxNTc5MmNiODdkMzIwNzhiOTIzNTli
MjhlNDJkZjEwMWYyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEdQVSBwcm9jZXNzIGNyZWF0
ZS9yZWxlYXNlIGEgc2hhcmVkIElPU3VyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5k
ZWRDb2xvci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6CisKIDIwMTktMTItMDUgIEpvbmF0aGFuIEJlZGFyZCAg
PGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFB5dGhvbiAzOiBBZGQgc3VwcG9ydCB0byB3
ZWJraXRweS5icm93c2VycGVyZmRhc2gKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yLmNwcAppbmRleCA2MDc3NzdkYzhlYTViZTZkYmJhZTk0
ZDFhODg3M2RjNjQwMWQ4MTk2Li43NTEyYWQ3ODgyNjExYjZjODA2ZWEwNjgyM2NkMGJhOWQ1Njlm
ZjhmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5k
ZWRDb2xvci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVu
ZGVkQ29sb3IuY3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsK
IAogVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSgxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlRGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSgxLjAs
IDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVDVF9UUlVF
KGMxLmlzRXh0ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYzEuYXNFeHRlbmRl
ZCgpLnJlZCgpKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjMS5hc0V4dGVuZGVkKCkuZ3Jl
ZW4oKSk7CkBAIC00Nyw3ICs0Nyw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3Ip
CiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMx
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5UDMpOworICAgIENvbG9yIGMx
KDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAgICAgRVhQRUNU
X1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTYzLDcgKzYz
LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5k
ZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4w
LCBDb2xvclNwYWNlRGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4w
LCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQo
KSk7CiAKICAgICBDb2xvciBjMiA9IGMxOwpAQCAtNzksNyArNzksNyBAQCBURVNUKEV4dGVuZGVk
Q29sb3IsIEFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUNvbnN0cnVjdG9y
KQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5
UDMpOworICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMyk7CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMy
KFdURk1vdmUoYzEpKTsKQEAgLTk4LDcgKzk4LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3Zl
Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiB7Ci0g
ICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZURpc3BsYXlQMyk7Cisg
ICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsK
ICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBXVEZN
b3ZlKGMxKTsKQEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3Np
Z25tZW50KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCiB7
Ci0gICAgQ29sb3IqIGMxID0gbmV3IENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3Bh
Y2VEaXNwbGF5UDMpOworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvcigxLjAsIDAuNSwgMC4yNSwg
MS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVDVF9UUlVFKGMxLT5pc0V4dGVu
ZGVkKCkpOwogCiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpjMSk7CkBAIC0xNDIsNyArMTQy
LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQogCiBDb2xv
ciBtYWtlQ29sb3IoKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9y
U3BhY2VEaXNwbGF5UDMpOworICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9y
U3BhY2U6OkRpc3BsYXlQMyk7CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKICAg
ICBFWFBFQ1RfRVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385071</attachid>
            <date>2019-12-06 17:41:40 -0800</date>
            <delta_ts>2019-12-06 18:08:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191206174139.patch</filename>
            <type>text/plain</type>
            <size>75791</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU2MGFmOTdkYjMwNDUz
OGE3NWU5NzkzZGJiZDhmMzZiOWMxNWJhNC4uYWQwZTY1MzRiODgyMzI4OTE3NTVjMjJkY2Q1OGIz
OGY5OTMxNWMzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwNCBAQAorMjAxOS0xMi0wNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
R1BVIHByb2Nlc3MgY3JlYXRlL3JlbGVhc2UgYSBzaGFyZWQgSU9TdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgdGhlIGNsYXNz
IFJlbmRlcmluZ0JhY2tlbmQgd2hpY2ggd2lsbCBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24KKyAg
ICAgICAgd2l0aCB0aGUgR1BVIHByb2Nlc3MgZm9yIHJlbmRlcmluZy4gVGhpcyBjbGFzcyB3aWxs
IGJlIHVzZWQgdG8gaGlkZSB0aGUKKyAgICAgICAgY29tcGxleGl0eSBvZiBzZW5kaW5nIG1lc3Nh
Z2VzIHRvIGFuZCByZWNlaXZpbmcgcmVwbGllcyBmcm9tIHRoZSBHUFUgcHJvY2Vzcy4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCBhIHNpbmdsZSBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIFJl
bmRlcmluZ0JhY2tlbmQ6CisgICAgICAgIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgYSBzaGFyZWQg
SU9TdXJmYWNlLgorCisgICAgICAgIFdlYktpdCB3aWxsIGhhdmUgdG8gY3JlYXRlIGEgY29uY3Jl
dGUgY2xhc3Mgb2YgUmVuZGVyaW5nQmFja2VuZCB0aHJvdWdoCisgICAgICAgIFdlYkNocm9tZUNs
aWVudC4KKworICAgICAgICBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUgb3du
ZWQgYnkgdGhlIHBhZ2UuCisKKyAgICAgICAgQ29sb3JTcGFjZSBuZWVkcyB0byBiZSAiZW51bSBj
bGFzcyIgc28gaXQgY2FuIGJlIGVuY29kZWQvZGVjb2RlZCB0aHJvdWdoCisgICAgICAgIHRoZSBJ
UEMgbWVzc2FnZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVu
Y3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6
CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd0ltYWdlKToKKyAg
ICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
ICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNwYWNlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJ
bWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y3NzVGV4dCBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bGVha0NHQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmg6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yU3BhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhp
Yyk6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6VGhlbWVNYWM6OmRyYXdDZWxsT3JGb2N1c1JpbmdXaXRoVmlld0ludG9Db250ZXh0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Zp
bHRlcjo6YnVpbGRSZWZlcmVuY2VGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVy
OjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXI6OmFwcGx5KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGF0
dGVybkZvclRvdWNoQWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRQcm9ncmVzc0Jhcik6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5n
VG9Db250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWls
ZFByaW1pdGl2ZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlTWFz
a0FuZFN3YXBDb250ZXh0Rm9yVGV4dEdyYWRpZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjpkcmF3Q29udGVudEludG9NYXNrSW1hZ2UpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclNWR1Jlc291cmNlUGF0dGVybjo6Y3JlYXRlVGlsZUltYWdlIGNvbnN0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisgICAg
ICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lt
YWdlOjpkcmF3UGF0dGVybkZvckNvbnRhaW5lcik6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2Zp
bHRlcnMvU1ZHRkVJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUltYWdlOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorCiAyMDE5LTEyLTA2ICBQZXIgQXJuZSBWb2xsYW4gIDxwdm9sbGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBDYWxscyB0byBkZXZpY2Ugb3JpZW50YXRpb24g
QVBJIHNob3VsZCBiZSBkb25lIGluIHRoZSBVSSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhhYWY1YjEx
Yjg0MGI5NWIyNjMzODNkYjc4YWY2MTU5OTM1NzQwODEuLjkwZWM4ZjgwYTRjZTM1ZTM2NjFkMjM2
NDMwOGY4NjlhZGE3YTk0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTktMTItMDYg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBN
YWtlIEdQVSBwcm9jZXNzIGNyZWF0ZS9yZWxlYXNlIGEgc2hhcmVkIElPU3VyZmFjZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCBpcyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbiB3aXRoCisg
ICAgICAgIHRoZSBHUFUgcHJvY2VzcyBmb3IgcmVuZGVyaW5nIG9wZXJhdGlvbnMuCisKKyAgICAg
ICAgSU9TdXJmYWNlTWFuYWdlciB3aWxsIG1hbmFnZSBjcmVhdGluZyBhbiBJT1N1cmZhY2UsIGlu
aXRpYWxpemluZyBpdHMKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGZvciBkcmF3aW5nLCBhc3Np
Z25pbmcgYW4gSUQsIGFuZCBjYWNoaW5nIGl0IGZvciBsYXRlcgorICAgICAgICByZWZlcmVuY2Vz
LiBJT1N1cmZhY2VNYW5hZ2VyIHdpbGwgYWxzbyBnaXZlIHRoZSBhYmlsaXR5IHRvIHJlbW92ZSB0
aGUKKyAgICAgICAgSU9TdXJmYWNlIGZyb20gdGhlIGNhY2hlLgorCisgICAgICAgIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3Mgd2lsbCBiZSB1c2VkIGFzIGEgcHJveHkgb2JqZWN0IGZvciB0aGUK
KyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZC4gSXQgd2lsbCByZXBseSB0aGUgY3JlYXRl
U2hhcmVkSU9TdXJmYWNlIHdpdGggdGhlCisgICAgICAgIHN1cmZhY2VJRCBhbmQgdGhlIHNpZ25S
aWdodCBvZiB0aGUgSU9TdXJmYWNlLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Y3JlYXRlU2hhcmVkSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVNoYXJlZElPU3VyZmFjZSk6CisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvSU9TdXJmYWNlTWFuYWdlci5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmguCisgICAgICAgIChXZWJLaXQ6
OklPU3VyZmFjZU1hbmFnZXI6OnNoYXJlZE1hbmFnZXIpOgorICAgICAgICAoV2ViS2l0OjpzdXJm
YWNlTWFwKToKKyAgICAgICAgKFdlYktpdDo6SU9TdXJmYWNlTWFuYWdlcjo6cmVsZWFzZVNoYXJl
ZElPU3VyZmFjZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9JT1N1cmZhY2VNYW5hZ2VyLmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaC4K
KyAgICAgICAgKFdlYktpdDo6SU9TdXJmYWNlTWFuYWdlcjo6bmV4dFN1cmZhY2VJRCk6CisgICAg
ICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNvdXJjZXMu
dHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlU2hhcmVkSU9TdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6cmVsZWFzZVNoYXJlZElPU3VyZmFjZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorCiAyMDE5LTEyLTA2ICBDaHJpcyBEdW1leiAgPGNk
dW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW0lQQ10gTUVTU0FHRV9DSEVDSygpIHBhcmFtZXRl
cnMgZm9yIEFkZFBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2ggLyBQbHVnSW5EaWRSZWNlaXZlVXNl
ckludGVyYWN0aW9uIElQQ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCAzYjg2YmJlYzllNWVmMDIxZDA3ZjdkYjIxZjA0YjNmMDNm
YzY5MjAzLi40YzdmZGU3ZjQwYWZmZDViZmNiMWZhMTUyMGFhNmMyNTkwYjFiMzBiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0x
NzQxLDYgKzE3NDEsNyBAQAogCQk1NUFGMTRFNjFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QUYx
NEU0MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1RENDNTI4MjI0MDdCMjAwMEMyNkUzMiAv
KiBTVkdQcmltaXRpdmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NURDQzUyNTIyNDA3NDlFMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1REND
NTI5MjI0MDdCMkEwMEMyNkUzMiAvKiBTVkdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NURDQzUyMzIyNDA3M0ZFMDBDMjZFMzIgLyogU1ZHTGlz
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1
RENGQUE0MjM5OUM5QTYwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NURDRkFBMjIzOTlDNEQ4MDA1MENE
MjIgLyogUmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTU1RUM5NTk5MjA2QUE3QTAwMDdERDBBOSAvKiBQYWludEZyZXF1
ZW5jeVRyYWNrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1RUM5NTk3MjA2OUM5MkQwMDdERDBBOSAvKiBQYWludEZyZXF1ZW5jeVRyYWNrZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUZBN0ZG
QjIxMTBFQ0Q3MDA1QUVGRTcgLyogU1ZHWm9vbUFuZFBhblR5cGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RkE3RkZBMjExMEVDRDcwMDVBRUZFNyAv
KiBTVkdab29tQW5kUGFuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTU3MDQ0MDVBMUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Flc0NiY0NmYlBh
cmFtcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcw
NDQwNTkxRTUzOTM2MjAwMzU2NjAxIC8qIEpTQWVzQ2JjQ2ZiUGFyYW1zLmggKi87IH07CkBAIC04
NjU1LDYgKzg2NTYsNyBAQAogCQk1NURDQzUyNTIyNDA3NDlFMDBDMjZFMzIgLyogU1ZHUHJpbWl0
aXZlTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVMaXN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU1RENDNTI2MjI0MDc0RkEwMEMyNkUzMiAvKiBTVkdQcm9wZXJ0
eUFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QWNjZXNzb3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MjcyMjQwNzUwQjAwQzI2RTMyIC8qIFNWR1By
b3BlcnR5QWNjZXNzb3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Byb3BlcnR5QWNjZXNzb3JJ
bXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUEyMjM5OUM0RDgwMDUw
Q0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVFQzk1OTcyMDY5QzkyRDAwN0RE
MEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWludEZyZXF1
ZW5jeVRyYWNrZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVFRTUzNTQyMjNC
MjlFOTAwRkJBOTQ0IC8qIFNWR01lbWJlckFjY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNWR01lbWJlckFjY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU1RUU1MzU2MjIzQjI5RjcwMEZCQTk0NCAvKiBTVkdBbmltYXRlZFByb3BlcnR5QW5p
bWF0b3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVk
UHJvcGVydHlBbmltYXRvckltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1
MDY1LDYgKzI1MDY3LDcgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9u
LmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxl
LmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1w
bGUuaCAqLywKKwkJCQk1NURDRkFBMjIzOTlDNEQ4MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2Vu
ZC5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAg
Ki8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJ
CQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMzE4
NTAsNiArMzE4NTMsNyBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJ
bWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJl
bmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0Qw
MDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNTVEQ0ZBQTQyMzk5QzlBNjAwNTBDRDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRh
dGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OTVGRjQ3MTgyNENFRTMw
MEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKaW5k
ZXggMWUwOTIyYjMwOTVlOWFmN2UxMmJiNDVjMWRjOTEwNzZlNjI0YzVmMC4uZjUwMmM2ZmNhZjE0
MGY5Njk5ZDcxZTllZWEwZjE0OTYwMmVhYmU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcApAQCAtNjUxLDEwICs2
NTEsMTAgQEAgc3RhdGljIENvbG9yIHBhcnNlQ29sb3JGdW5jdGlvblBhcmFtZXRlcnMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwogICAgIHN3
aXRjaCAoYXJncy5wZWVrKCkuaWQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVTUkdCOgotICAgICAg
ICBjb2xvclNwYWNlID0gQ29sb3JTcGFjZVNSR0I7CisgICAgICAgIGNvbG9yU3BhY2UgPSBDb2xv
clNwYWNlOjpTUkdCOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlRGlzcGxheVAz
OgotICAgICAgICBjb2xvclNwYWNlID0gQ29sb3JTcGFjZURpc3BsYXlQMzsKKyAgICAgICAgY29s
b3JTcGFjZSA9IENvbG9yU3BhY2U6OkRpc3BsYXlQMzsKICAgICAgICAgYnJlYWs7CiAgICAgZGVm
YXVsdDoKICAgICAgICAgcmV0dXJuIENvbG9yKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuY3BwCmluZGV4IDQzZDZhNWE0MDQwODFiYmNjZjNlN2JiZmQxYzRjNDliOTM5
MTg3NjIuLmY0Yjc3MDdlOTdhOGZlNTFmOGUyNTc3NThhZGU0YjZkZGZmNTAyZTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIElt
YWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgIGlmICghd2lk
dGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgbV9jb3Bp
ZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCwgMSwg
Q29sb3JTcGFjZVNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51
bGxwdHIpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGVlYTk2
NGFjMTFhOTk5M2RiNjRkZjY4Y2QxMTZmNTIyNDMwNTExMDMuLjIzZDliMzRlODQ4ZjZkMDFkMzRh
OWRhZmZiYTMwNTBmYzdhNzEzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCkBAIC04ODgsNyArODg4LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9
IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsK
IAogICAgIGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgp
LnZpZXcoKS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3co
KSA6IG51bGxwdHI7Ci0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2VTUkdCLCBob3N0V2luZG93KSk7CisgICAg
c2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUs
IDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAogI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAg
ICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5k
ZXggMzIzZGQ0ZTAzYmFjZGIyZDhmN2Y4ZGVmYmFkNWNmMDgwM2IxNWViOS4uZDc2ZjE3ZDhlZTFl
ZWM0OWRlMmRjYzNjODE5YjI2MTAwZDQ1YTdjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC01NDUsNyAr
NTQ1LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwo
Y29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG8KICAgICAgICAgICAgIGZvbnRQcm94eS5k
cmF3QmlkaVRleHQoKmMsIHRleHRSdW4sIGxvY2F0aW9uICsgb2Zmc2V0LCBGb250Q2FzY2FkZTo6
VXNlRmFsbGJhY2tJZkZvbnROb3RSZWFkeSk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIG1h
c2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKG1hc2tSZWN0LnNp
emUoKSwgQ29sb3JTcGFjZVNSR0IsICpjKTsKKyAgICAgICAgYXV0byBtYXNrSW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXplKCksIENvbG9yU3Bh
Y2U6OlNSR0IsICpjKTsKICAgICAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggOTI4Mjg4NDU2YjM1ODIxNGYzZmRlMWU1
YzAyNDgxYmU5NWRlODg5My4uZTJjYjcyOWEyNmU2OTRhODFmMDM1NDA1ZDQ4Mzk1Y2Q3Y2RkM2M5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE2NDAsNyArMTY0MCw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRyYXdJbWFnZShDYW52YXNC
YXNlJiBzb3VyY2VDYW52CiAgICAgICAgIGRpZERyYXdFbnRpcmVDYW52YXMoKTsKICAgICB9IGVs
c2UgaWYgKHN0YXRlKCkuZ2xvYmFsQ29tcG9zaXRlID09IENvbXBvc2l0ZU9wZXJhdG9yOjpDb3B5
KSB7CiAgICAgICAgIGlmICgmc291cmNlQ2FudmFzID09ICZjYW52YXNCYXNlKCkpIHsKLSAgICAg
ICAgICAgIGlmIChhdXRvIGNvcHkgPSBidWZmZXItPmNvcHlSZWN0VG9CdWZmZXIoc3JjUmVjdCwg
Q29sb3JTcGFjZVNSR0IsICpjKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gY29weSA9IGJ1ZmZl
ci0+Y29weVJlY3RUb0J1ZmZlcihzcmNSZWN0LCBDb2xvclNwYWNlOjpTUkdCLCAqYykpIHsKICAg
ICAgICAgICAgICAgICBjbGVhckNhbnZhcygpOwogICAgICAgICAgICAgICAgIGMtPmRyYXdJbWFn
ZUJ1ZmZlcigqY29weSwgZHN0UmVjdCwgeyB7IH0sIHNyY1JlY3Quc2l6ZSgpIH0sIHsgc3RhdGUo
KS5nbG9iYWxDb21wb3NpdGUsIHN0YXRlKCkuZ2xvYmFsQmxlbmQgfSk7CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBkNzgxZjM1Y2I1Mzg4NzI1ZmRiMzBk
YmQzMjU0NGIyZGM1MWMwZDEyLi40NDE5NzNjNDVlNWQzYTIwNTUwNzA4NTExZjNlZjRiNjgwZDUw
ZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5o
IgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5n
QmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwNCw2ICsz
MDUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7
IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICAvLyBQYXNzIG51bGxw
dHIgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVy
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDU2NTVkYzJjMjljNzE2
MWUxMmM0Y2EwMjc5MDg4ZWIzZjQzYmViNTcuLmVlMzI2OGZlNTkzYWQyYTk2MGMyMDBhNmVhY2Vh
Y2ZmODkwZmQ3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMjkyNCw2ICsyOTI0LDE1IEBAIFJl
bmRlcmluZ1VwZGF0ZVNjaGVkdWxlciYgUGFnZTo6cmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyKCkK
ICAgICByZXR1cm4gKm1fcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyOwogfQogCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFBhZ2U6OnJlbmRlcmluZ0Jh
Y2tlbmQoKQoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRl
cmluZ0JhY2tlbmQgPSBjaHJvbWUoKS5jbGllbnQoKS5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7
CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZDsKK30KKyNlbmRpZgorCiB2b2lkIFBhZ2U6
OmZvckVhY2hEb2N1bWVudChjb25zdCBGdW5jdGlvbjx2b2lkKERvY3VtZW50Jik+JiBmdW5jdG9y
KQogewogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBjb2xsZWN0RG9jdW1lbnRzKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCmluZGV4IDY1MDVhZjc1Zjk2NjAyYWMzM2E3NDUzNGFjMDQ2ZDdhMGY5OWRkNDIuLjUx
MDc3MzRmYmRjZTNkOTkxYmQ5ZmY4YjU5MTk3ZjVkN2FmYjJjMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUlRDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJl
Z2lvbi5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKQEAgLTI3
Myw2ICsyNzQsMTAgQEAgcHVibGljOgogICAgIFBlcmZvcm1hbmNlTW9uaXRvciogcGVyZm9ybWFu
Y2VNb25pdG9yKCkgeyByZXR1cm4gbV9wZXJmb3JtYW5jZU1vbml0b3IuZ2V0KCk7IH0KIAogICAg
IFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlciYgcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyKCk7Cisg
ICAgCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5k
PiByZW5kZXJpbmdCYWNrZW5kKCk7CisjZW5kaWYKIAogICAgIFZhbGlkYXRpb25NZXNzYWdlQ2xp
ZW50KiB2YWxpZGF0aW9uTWVzc2FnZUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQuZ2V0KCk7IH0KICAgICB2b2lkIHVwZGF0ZVZhbGlkYXRpb25CdWJibGVT
dGF0ZUlmTmVlZGVkKCk7CkBAIC05MDQsNiArOTA5LDEwIEBAIHByaXZhdGU6CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyPiBtX3JlbmRlcmluZ1VwZGF0ZVNj
aGVkdWxlcjsKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5n
QmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOworI2VuZGlmCisKICAgICBIYXNoU2V0PFJlbmRl
ck9iamVjdCo+IG1fcmVsZXZhbnRVbnBhaW50ZWRSZW5kZXJPYmplY3RzOwogICAgIFJlZ2lvbiBt
X3RvcFJlbGV2YW50UGFpbnRlZFJlZ2lvbjsKICAgICBSZWdpb24gbV9ib3R0b21SZWxldmFudFBh
aW50ZWRSZWdpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5jcHAKaW5kZXggMjc2MWE1MmYyMzIyMWI3YzY5MGQ5MWUzZGI5NjM0NWFjY2JjZGY0
ZC4uM2NlMTM4MTYwMTNlZWVjMjBlYTQzZTI2MjY0ZGFhYzBiZjJkZGQwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtMzAxLDcg
KzMwMSw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYg
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwKICAgICB9CiAKICAgICBpZiAoIW1fY2Fj
aGVkSW1hZ2UpIHsKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSwgQ29sb3JTcGFj
ZVNSR0IsIGN0eHQpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZSh0aWxlUmVjdC5zaXplKCkpLCBDb2xvclNw
YWNlOjpTUkdCLCBjdHh0KTsKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAppbmRleCA1
Zjk0NTI5OTViYTE4ODUwZTk2MjQ0MGUxZjk1Yjg0Mjg4YWQyYjUwLi5lYzE0M2EwYTNmYzA0NmIw
MTE4NTFjZGI3MWIwMGZmNDY0Mjc2NGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCkBAIC02NTAsMTMgKzY1MCwxMyBAQCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCiBUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgc3dp
dGNoIChjb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlU1JHQjoKKyAgICBjYXNlIENv
bG9yU3BhY2U6OlNSR0I6CiAgICAgICAgIHRzIDw8ICJzUkdCIjsKICAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDb2xvclNwYWNlTGluZWFyUkdCOgorICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFy
UkdCOgogICAgICAgICB0cyA8PCAiTGluZWFyUkdCIjsKICAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDb2xvclNwYWNlRGlzcGxheVAzOgorICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgog
ICAgICAgICB0cyA8PCAiRGlzcGxheVAzIjsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKaW5kZXggNjA1MzU3Y2VhZTZmNDJkOGU2
Nzg0NWFhZmI5MDRmODk3Mjk5NGQyYS4uOGUzNWUwOTllNGFmMzJkNjk3N2VlYmQyYzcwNWNhNzY2
YTQzZWY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCkBAIC0z
ODUsNyArMzg1LDcgQEAgaW5saW5lIGJvb2wgUkdCQTo6aGFzQWxwaGEoKSBjb25zdAogaW5saW5l
IENvbG9yOjpDb2xvcihSR0JBIGNvbG9yLCBDb2xvclNwYWNlIHNwYWNlKQogewogICAgIHNldFJH
Qihjb2xvci5tX2ludGVnZXIpOwotICAgIEFTU0VSVF9VTlVTRUQoc3BhY2UsIHNwYWNlID09IENv
bG9yU3BhY2VTUkdCKTsKKyAgICBBU1NFUlRfVU5VU0VEKHNwYWNlLCBzcGFjZSA9PSBDb2xvclNw
YWNlOjpTUkdCKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwg
Y29uc3QgQ29sb3ImIGIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvclNwYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNwYWNlLmgKaW5kZXggMTFkMDE3ZmFhOGYyY2Y0NGNkYmUyOWNmNThkNzU3NTA1ZGVlMTU4ZC4u
MGFhMjc0YTFjNTA5NTM1MjZhODhlZTRhNGVmYTNmOWM4ZDIzN2IzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaApAQCAtMjcsMTAgKzI3LDEwIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotZW51bSBDb2xvclNwYWNlIHsKLSAgICBDb2xvclNw
YWNlU1JHQiwKLSAgICBDb2xvclNwYWNlTGluZWFyUkdCLAotICAgIENvbG9yU3BhY2VEaXNwbGF5
UDMKK2VudW0gY2xhc3MgQ29sb3JTcGFjZSA6IHVpbnQ4X3QgeworICAgIFNSR0IsCisgICAgTGlu
ZWFyUkdCLAorICAgIERpc3BsYXlQMwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50
SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJ
bWFnZS5jcHAKaW5kZXggNjU5MDQxNWNjMDM3Nzk2ZjE0ZDAzMjZiOTE2OWZlMjFhMTJlZWZkOS4u
ODQwMDUxNWY5ZjY5ZDE2N2E1Y2U2ZTgzOTM5NzVlOWQ2NjI4MjdmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ3VzdG9tUGFpbnRJbWFnZS5jcHAKQEAg
LTE5OCw3ICsxOTgsNyBAQCB2b2lkIEN1c3RvbVBhaW50SW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdAogICAgIGFkanVzdGVkUGF0
dGVybkNUTS5zY2FsZSgxLjAgLyB4U2NhbGUsIDEuMCAvIHlTY2FsZSk7CiAgICAgYWRqdXN0ZWRT
cmNSZWN0LnNjYWxlKHhTY2FsZSwgeVNjYWxlKTsKIAotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBDb2xvclNwYWNlU1JH
QiwgZGVzdENvbnRleHQpOworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoYWRqdXN0ZWRTaXplLCBDb2xvclNwYWNlOjpTUkdCLCBkZXN0Q29udGV4
dCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybjsKICAgICBkb0N1c3RvbVBhaW50
KGJ1ZmZlci0+Y29udGV4dCgpLCBhZGp1c3RlZFNpemUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmNwcAppbmRleCAyYTNjODNlNTNlY2Zj
NjcwNjc4NDczOTllNjE1OWFkOWJlZDM0YjIyLi4wNDFkYThmNGQ5ODY2MWI3YzIwNTRkNmNiZDEw
NDIwOGQyOTNlMmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9FeHRlbmRlZENvbG9yLmNwcApAQCAtNDUsMTAgKzQ1LDEwIEBAIFN0cmluZyBFeHRlbmRlZENv
bG9yOjpjc3NUZXh0KCkgY29uc3QKICAgICBidWlsZGVyLmFwcGVuZExpdGVyYWwoImNvbG9yKCIp
OwogCiAgICAgc3dpdGNoIChtX2NvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2VTUkdC
OgorICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKICAgICAgICAgYnVpbGRlci5hcHBlbmRMaXRl
cmFsKCJzcmdiICIpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbG9yU3BhY2VEaXNwbGF5
UDM6CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CiAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kTGl0ZXJhbCgiZGlzcGxheS1wMyAiKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29s
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaApp
bmRleCAzN2M2OGVkYzMwZWFhODY1Y2Q5ZjM5YzM5MmFiNmEzMTRjNjgwZjA1Li5iOWZmMzgzZTUx
MTVjNTk2Yzk5ZDAyMjg5NTlkMmQyMDYyZDUyNmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRXh0ZW5kZWRDb2xvciA6IHB1YmxpYyBSZWZDb3VudGVk
PEV4dGVuZGVkQ29sb3I+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29sb3I+
IGNyZWF0ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhLCBDb2xvclNwYWNlID0g
Q29sb3JTcGFjZTo6Q29sb3JTcGFjZVNSR0IpOworICAgIHN0YXRpYyBSZWY8RXh0ZW5kZWRDb2xv
cj4gY3JlYXRlKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEsIENvbG9yU3BhY2Ug
PSBDb2xvclNwYWNlOjpTUkdCKTsKIAogICAgIGZsb2F0IHJlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVkOyB9CiAgICAgZmxvYXQgZ3JlZW4oKSBjb25zdCB7IHJldHVybiBtX2dyZWVuOyB9CkBAIC02
MCw3ICs2MCw3IEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9ibHVlIHsgMCB9OwogICAgIGZsb2F0
IG1fYWxwaGEgeyAwIH07CiAKLSAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZSB7IENvbG9yU3Bh
Y2U6OkNvbG9yU3BhY2VTUkdCIH07CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2UgeyBDb2xv
clNwYWNlOjpTUkdCIH07CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwCmluZGV4IGYzZWMwYTFhZDQ2MDQxMjg3MmQ5MjBl
N2UxZTAxMTY3NjZjYTYzZmIuLjA4YmE5YzllYThkNTc4NjMxODZlMjQ1ZjVkODJlMjA4ODM0NDc3
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
SW1hZ2UuY3BwCkBAIC03MSw3ICs3MSw3IEBAIHZvaWQgR3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkCiAgICAg
dW5zaWduZWQgZ2VuZXJhdG9ySGFzaCA9IG1fZ3JhZGllbnQtPmhhc2goKTsKIAogICAgIGlmICgh
bV9jYWNoZWRJbWFnZSB8fCBtX2NhY2hlZEdlbmVyYXRvckhhc2ggIT0gZ2VuZXJhdG9ySGFzaCB8
fCBtX2NhY2hlZEFkanVzdGVkU2l6ZSAhPSBhZGp1c3RlZFNpemUgfHwgIWFyZUVzc2VudGlhbGx5
RXF1YWwoZGVzdENvbnRleHQuc2NhbGVGYWN0b3IoKSwgbV9jYWNoZWRTY2FsZUZhY3RvcikpIHsK
LSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGFkanVzdGVkU2l6ZSwgQ29sb3JTcGFjZVNSR0IsIGRlc3RDb250ZXh0KTsKKyAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGFkanVzdGVkU2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgZGVzdENvbnRleHQpOwogICAgICAgICBp
ZiAoIWltYWdlQnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggZmI1MzZiM2Q2Mjhm
MjZhZTRmZjU5OTFkOTFmYmRkYWIzZGMxYWY2NS4uMGU4ZGFmMWVhOTU1ODljNTM0MGUwMjZlNDQ2
ODU1YTUxMTJiYzA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcApAQCAtMTI2LDExICsxMjYsMTEgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2Ug
ZHN0Q28KICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0Ig
YXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENv
bG9yU3BhY2VMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlU1JHQikKLSAg
ICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZUxpbmVhclJHQiAmJiBkc3RDb2xv
clNwYWNlICE9IENvbG9yU3BhY2VTUkdCKSkKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikK
KyAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRz
dENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VMaW5lYXJSR0IpIHsKKyAgICBpZiAoZHN0
Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKICAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CiAgICAgICAg
ICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTE0MSw3ICsxNDEsNyBAQCB2b2lkIElt
YWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkc3RDbwogICAgICAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICAgICB9KCk7
CiAgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAg
IH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlU1JHQikgeworICAgIH0gZWxz
ZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7CiAgICAg
ICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDJiYWE4ZTJiMjA5ZWNmZTI0N2FjOGQ4
ZTNhMDY4YzBkMDZmOWY3NmIuLjExODgwY2ExODU2ODJlMzQwYTA1ODVkZjFlMDFlNTE1OTlkMDIx
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aApAQCAtNjksOSArNjksOSBAQCBjbGFzcyBJbWFnZUJ1ZmZlciB7CiAgICAgZnJpZW5kIGNsYXNz
IElPU3VyZmFjZTsKIHB1YmxpYzoKICAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBv
biBhbGxvY2F0aW9uIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlU1JH
QiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENv
bG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CiAjaWYgVVNFKERJ
UkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29s
b3JTcGFjZVNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJl
c29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBI
b3N0V2luZG93KiA9IG51bGxwdHIpOwogI2VuZGlmCiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2Ug
YnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhp
cyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODMxOTBhOGY0MjI2
NDIwYmQyMGYzY2YwNzFlOWQzYmUxM2U1MTU5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb2xvclNwYWNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIElPU3Vy
ZmFjZTsKKworY2xhc3MgUmVuZGVyaW5nQmFja2VuZCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxSZW5kZXJpbmdCYWNrZW5kPiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVuZGVyaW5n
QmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6cGFpcjx1aW50NjRfdCwgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4+IGNyZWF0ZVNoYXJlZElPU3VyZmFjZShjb25zdCBJbnRT
aXplJiwgY29uc3QgSW50U2l6ZSYgY29udGV4dFNpemUsIENvbG9yU3BhY2UpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgcmVsZWFzZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpID0g
MDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKaW5kZXggMTA5YzY0MGM1
MjY2MWExODdlZDUxMGFkMmYyNzAwMGRlNTNiNzgzOS4uY2RmZmEzZjYwZTlhZDE4ZjJhNDBhOGU4
OTg1MmEzNmEzMzdmNTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvQ29sb3JDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQ29sb3JDRy5jcHAKQEAgLTExMSwxMSArMTExLDExIEBAIHN0YXRpYyBDR0NvbG9yUmVm
IGxlYWtDR0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICAgICAgY29tcG9uZW50c1syXSA9
IGV4dGVuZGVkQ29sb3IuYmx1ZSgpOwogICAgICAgICBjb21wb25lbnRzWzNdID0gZXh0ZW5kZWRD
b2xvci5hbHBoYSgpOwogICAgICAgICBzd2l0Y2ggKGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgp
KSB7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZVNSR0I6CisgICAgICAgIGNhc2UgQ29sb3JTcGFj
ZTo6U1JHQjoKICAgICAgICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNl
UmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICBjYXNlIENvbG9yU3BhY2VEaXNwbGF5UDM6Cisg
ICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgogICAgICAgICAgICAgcmV0dXJuIENH
Q29sb3JDcmVhdGUoZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpLCBjb21wb25lbnRzKTsKLSAgICAg
ICAgY2FzZSBDb2xvclNwYWNlTGluZWFyUkdCOgorICAgICAgICBjYXNlIENvbG9yU3BhY2U6Okxp
bmVhclJHQjoKICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBldmVyIGNyZWF0ZSBDR0NvbG9y
UmVmcyBpbiB0aGVzZSBzcGFjZXM/IEl0IG1heSBvbmx5IGJlIEltYWdlQnVmZmVycy4KICAgICAg
ICAgICAgIHJldHVybiBDR0NvbG9yQ3JlYXRlKHNSR0JDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVu
dHMpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAppbmRleCBkMDM3MDQwNWZjNzkwNTUyZTEwMjhi
ZWNhY2Y4MTk4MGRlZjJiNThiLi41ZDU5ZDE1ZGJlZGY1ZTM1MjM5YjM3YWI1MmVjNDQ5YTkxMmJk
NGQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKQEAgLTQxLDExICs0MSwxMSBAQCBDR0FmZmluZVRyYW5zZm9y
bSBnZXRVc2VyVG9CYXNlQ1RNKENHQ29udGV4dFJlZik7CiBzdGF0aWMgaW5saW5lIENHQ29sb3JT
cGFjZVJlZiBjYWNoZWRDR0NvbG9yU3BhY2UoQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAg
IHN3aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZVNSR0I6CisgICAgY2Fz
ZSBDb2xvclNwYWNlOjpTUkdCOgogICAgICAgICByZXR1cm4gc1JHQkNvbG9yU3BhY2VSZWYoKTsK
LSAgICBjYXNlIENvbG9yU3BhY2VMaW5lYXJSR0I6CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5l
YXJSR0I6CiAgICAgICAgIHJldHVybiBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCk7Ci0gICAgY2Fz
ZSBDb2xvclNwYWNlRGlzcGxheVAzOgorICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgog
ICAgICAgICByZXR1cm4gZGlzcGxheVAzQ29sb3JTcGFjZVJlZigpOwogICAgIH0KICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmgKaW5kZXggNDhjMzFhMDZlZjQxMDdjMGE1NjBjOGRjMWM2MDJk
ODc1YTVhODRhOC4uZjY2OTFlNDY0ZGFkODM1YTAxZmQ4MDY5NDQ5NWJlYjRiM2ZhYzdjOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUZsb29k
LmgKQEAgLTQwLDggKzQwLDggQEAgcHVibGljOgogI2lmICFVU0UoQ0cpCiAgICAgLy8gZmVGbG9v
ZCBkb2VzIG5vdCBwZXJmb3JtIGNvbG9yIGludGVycG9sYXRpb24gb2YgYW55IGtpbmQsIHNvIHRo
ZSByZXN1bHQgaXMgYWx3YXlzIGluIHRoZSBjdXJyZW50CiAgICAgLy8gY29sb3Igc3BhY2UgcmVn
YXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzLgotICAg
IHZvaWQgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShDb2xvclNwYWNlKSBvdmVycmlkZSB7IEZpbHRl
ckVmZmVjdDo6c2V0UmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7IH0KLSAgICB2b2lk
IHNldFJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZSkgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6
OnNldFJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZVNSR0IpOyB9CisgICAgdm9pZCBzZXRPcGVy
YXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2UpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRS
ZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOyB9CisgICAgdm9pZCBzZXRSZXN1bHRD
b2xvclNwYWNlKENvbG9yU3BhY2UpIG92ZXJyaWRlIHsgRmlsdGVyRWZmZWN0OjpzZXRSZXN1bHRD
b2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCmluZGV4IDcwN2VhZDlhYWNhNjYyNmQ3MzRiYmZiMmU4Y2I1ZjM5ZWQwYmYzYTEuLjBi
YTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUzYzJlNzQyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApA
QCAtNDAzLDcgKzQwMyw3IEBAIGJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKFVpbnQ4Q2xh
bXBlZEFycmF5JiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBkYXRhLndpZHRo
RGVjcmVhc2VkQnlPbmUgPSB3aWR0aCAtIDE7CiAgICAgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9u
ZSA9IGhlaWdodCAtIDE7CiAgICAgCi0gICAgRmxvYXRDb21wb25lbnRzIGxpZ2h0Q29sb3IgPSAo
b3BlcmF0aW5nQ29sb3JTcGFjZSgpID09IENvbG9yU3BhY2VMaW5lYXJSR0IpID8gc1JHQkNvbG9y
VG9MaW5lYXJDb21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcikgOiBGbG9hdENvbXBvbmVudHMobV9s
aWdodGluZ0NvbG9yKTsKKyAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xvciA9IChvcGVyYXRp
bmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSA/IHNSR0JDb2xvclRvTGlu
ZWFyQ29tcG9uZW50cyhtX2xpZ2h0aW5nQ29sb3IpIDogRmxvYXRDb21wb25lbnRzKG1fbGlnaHRp
bmdDb2xvcik7CiAgICAgcGFpbnRpbmdEYXRhLmluaXRpYWxMaWdodGluZ0RhdGEuY29sb3JWZWN0
b3IgPSBGbG9hdFBvaW50M0QobGlnaHRDb2xvci5jb21wb25lbnRzWzBdLCBsaWdodENvbG9yLmNv
bXBvbmVudHNbMV0sIGxpZ2h0Q29sb3IuY29tcG9uZW50c1syXSk7CiAgICAgbV9saWdodFNvdXJj
ZS0+aW5pdFBhaW50aW5nRGF0YSgqdGhpcywgcGFpbnRpbmdEYXRhKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCmluZGV4IDcw
N2M2ZWI0NmM4MzI5N2ZiZjZlMmQ5MGY1ZGZmNDdlNjkzNmQ4NTQuLjFhODAxODVkZjRjMThjMzJl
ZmNkMjEyZDBkNzJlMjFiNGJiZmE3M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBG
RVRpbGU6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHRpbGVSZWN0LnNjYWxlKGZp
bHRlci5maWx0ZXJSZXNvbHV0aW9uKCkud2lkdGgoKSwgZmlsdGVyLmZpbHRlclJlc29sdXRpb24o
KS5oZWlnaHQoKSk7CiAgICAgfQogCi0gICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIENvbG9yU3BhY2VT
UkdCLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOworICAgIGF1dG8gdGlsZUltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIodGlsZVJlY3QsIHRpbGVSZWN0LCBD
b2xvclNwYWNlOjpTUkdCLCBmaWx0ZXIoKS5yZW5kZXJpbmdNb2RlKCkpOwogICAgIGlmICghdGls
ZUltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDE5ZjZmYjRkZGJm
MmM0MzY2YjhlNWIwNjVkMTc4ZWE2NTZlYzQxMDMuLmM5NjZmY2MyMTYzOWRlNWE0MDRhN2M2MmYz
ZWEyYjZlOTMzMmZlNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMjExLDggKzIxMSw4IEBAIHByaXZh
dGU6CiAgICAgLy8gU2hvdWxkIHRoZSBlZmZlY3QgY2xpcCB0byBpdHMgcHJpbWl0aXZlIHJlZ2lv
biwgb3IgZXhwYW5kIHRvIHVzZSB0aGUgY29tYmluZWQgcmVnaW9uIG9mIGl0cyBpbnB1dHMuCiAg
ICAgYm9vbCBtX2NsaXBzVG9Cb3VuZHMgeyB0cnVlIH07CiAKLSAgICBDb2xvclNwYWNlIG1fb3Bl
cmF0aW5nQ29sb3JTcGFjZSB7IENvbG9yU3BhY2VMaW5lYXJSR0IgfTsKLSAgICBDb2xvclNwYWNl
IG1fcmVzdWx0Q29sb3JTcGFjZSB7IENvbG9yU3BhY2VTUkdCIH07CisgICAgQ29sb3JTcGFjZSBt
X29wZXJhdGluZ0NvbG9yU3BhY2UgeyBDb2xvclNwYWNlOjpMaW5lYXJSR0IgfTsKKyAgICBDb2xv
clNwYWNlIG1fcmVzdWx0Q29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OlNSR0IgfTsKIH07CiAKIFdF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBGaWx0ZXJFZmZlY3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggMzYxNWYwZTliNjFh
ODMzYWIxZDQ2ODdhYmE2OGFiMzIxNDU1OGZkZi4uNDI4NjI5YmUzNTViYzk5NTQ1ZTBmMmM0N2Qx
ZmYwMmEyOWEzYWVjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHJpdmF0
ZToKICAgICBTb3VyY2VHcmFwaGljKEZpbHRlciYgZmlsdGVyKQogICAgICAgICA6IEZpbHRlckVm
ZmVjdChmaWx0ZXIpCiAgICAgewotICAgICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9y
U3BhY2VTUkdCKTsKKyAgICAgICAgc2V0T3BlcmF0aW5nQ29sb3JTcGFjZShDb2xvclNwYWNlOjpT
UkdCKTsKICAgICB9CiAKICAgICBjb25zdCBjaGFyKiBmaWx0ZXJOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIlNvdXJjZUdyYXBoaWMiOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhl
bWVNYWMubW0KaW5kZXggMjcyODI0ZWM4OGJiYmMxMDM2OTQ3N2VkMDk4YWM0ODQ0MTNhYjlhZi4u
NjZjYjY5YmNmNDUwOTA4NjYyNGM0YTE1YjE4MWY2MWRhNzY4ZTAzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQpAQCAtNjk4LDcgKzY5OCw3IEBAIGJvb2wgVGhlbWVN
YWM6OmRyYXdDZWxsT3JGb2N1c1JpbmdXaXRoVmlld0ludG9Db250ZXh0KE5TQ2VsbCAqY2VsbCwg
R3JhcGhpY3NDb250CiAgICAgYm9vbCBuZWVkc1JlcGFpbnQgPSBmYWxzZTsKICAgICBpZiAodXNl
SW1hZ2VCdWZmZXIpIHsKICAgICAgICAgTlNSZWN0IGltYWdlQnVmZmVyRHJhd1JlY3QgPSBOU1Jl
Y3QoRmxvYXRSZWN0KGJ1dHRvbkZvY3VzUmVjdE91dGxpbmVXaWR0aCwgYnV0dG9uRm9jdXNSZWN0
T3V0bGluZVdpZHRoLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHJlY3Qu
c2l6ZSgpICsgMiAqIEZsb2F0U2l6ZShidXR0b25Gb2N1c1JlY3RPdXRsaW5lV2lkdGgsIGJ1dHRv
bkZvY3VzUmVjdE91dGxpbmVXaWR0aCksIGRldmljZVNjYWxlRmFjdG9yLCBDb2xvclNwYWNlU1JH
QiwgY29udGV4dCk7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUoKSArIDIgKiBGbG9hdFNpemUoYnV0dG9uRm9j
dXNSZWN0T3V0bGluZVdpZHRoLCBidXR0b25Gb2N1c1JlY3RPdXRsaW5lV2lkdGgpLCBkZXZpY2VT
Y2FsZUZhY3RvciwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7CiAgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4gbmVlZHNSZXBhaW50OwogICAgICAgICB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IDZkNTk1YTJkYjI5YzUzYmZi
MjliNjZhZTUyYmYyMjdlNWJhNzEyMzUuLjE2MDI1N2JjYjkwOGU3MmFhZjM5ZDIyMGNhNWI1Yjc2
ZDVjNWNkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0xMjEs
NyArMTIxLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVjdD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5j
ZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgRmkKIAogICAgICAgICBlZmZlY3RFbGVt
ZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZlY3QuZ2V0KCkpOwogICAgICAgICBpZiAoZWZm
ZWN0RWxlbWVudC5yZW5kZXJlcigpKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdD
b2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNv
bG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJH
QiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBl
ZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5z
dHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50
ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFj
ZTo6U1JHQik7CiAKICAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCks
IGVmZmVjdCk7CiAgICAgICAgIG1fZWZmZWN0cy5hcHBlbmQoKmVmZmVjdCk7CkBAIC0yODksNyAr
Mjg5LDcgQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1aWxkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRpb24KICAgICAgICAgICAgIC8vIFVubGlrZSBT
VkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2VzLCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBm
aWx0ZXIKICAgICAgICAgICAgIC8vIHByb3BlcnR5IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNs
aXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lvbnMuCiAgICAgICAgICAgICBlZmZlY3QtPnNl
dENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmlsdGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9u
KTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3BlcmF0aW5nQ29sb3JTcGFjZShDb2xvclNwYWNl
U1JHQik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoQ29sb3JT
cGFjZTo6U1JHQik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRp
b24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6UkVGRVJFTkNFKSB7CiAgICAgICAgICAgICAg
ICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBlbmQoV1RGTW92ZShwcmV2aW91c0VmZmVjdCkp
OwpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgQ1NTRmlsdGVyOjphcHBseSgpCiB7CiAgICAgYXV0
byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5nZXQoKTsKICAgICBlZmZlY3QuYXBwbHkoKTsK
LSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7Cisg
ICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZTo6U1JHQik7CiB9
CiAKIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21wdXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlS
ZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJveFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRp
cnR5UmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuY3BwCmluZGV4IGU1Yjc1NTgyNThjZGU2NmYzZDI2ODAxNTc5NDNlNDdkNTBmNGRhOTAu
LmM4YzdiZjEyN2VmZjQwMDFkNGMwYTU5YmUzMmI2YmIzMWM2YmM5OTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcApAQCAtODYxLDcg
Kzg2MSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5k
ZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvCiAgICAgICAgIG1hc2tSZWN0LmludGVy
c2VjdChzbmFwcGVkSW50UmVjdChwYWludEluZm8ucmVjdCkpOwogCiAgICAgICAgIC8vIE5vdyBj
cmVhdGUgdGhlIG1hc2suCi0gICAgICAgIG1hc2tJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKG1hc2tSZWN0LnNpemUoKSwgQ29sb3JTcGFjZVNSR0IsIGNvbnRleHQp
OworICAgICAgICBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihtYXNrUmVjdC5zaXplKCksIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwogICAgICAgICBp
ZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgcGFpbnRNYXNrRm9y
VGV4dEZpbGxCb3gobWFza0ltYWdlLmdldCgpLCBtYXNrUmVjdCwgYm94LCBzY3JvbGxlZFBhaW50
UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCmluZGV4IGQwODI4YTIyZWEwMGJlN2IzM2FjM2I3YTJkNWJlN2MxMzRhMmNjMTAuLjhlYjVi
YzIyMTBiOGMxZTg0NTlhY2EyNjAyZDc4MTJkZTA3N2ViYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0yOTI3LDcgKzI5MjcsNyBA
QCBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm5Gb3JUb3VjaEFjdGlvbihUb3VjaEFjdGlv
biB0b3VjaEFjdGlvbiwgRmxvYXRTaXplCiAKICAgICBjb25zdCBGbG9hdFNpemUgdGlsZVNpemUg
eyAzMiwgMTggfTsKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcih0aWxlU2l6ZSwgQ29sb3JTcGFjZVNSR0IsIGRlc3RDb250ZXh0KTsK
KyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIodGlsZVNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGRlc3RDb250ZXh0KTsKICAgICBpZiAoIWlt
YWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDY1NzRiNTBmNDMyNjUzNDhhOTQyN2ZmNTlm
NzA0MzhhYjYwZDhjNWQuLmNkOGFmNmUyYTc4NWYwMTY5MjQ3YjBkMWYyY2FhNzdjOTNjNjE0MGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTE0NzEs
NyArMTQ3MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3Qg
UmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhCiAgICAgdHJhY2tJbmZvLnJlc2Vy
dmVkID0gMDsKICAgICB0cmFja0luZm8uZmlsbGVyMSA9IDA7CiAKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoaW5mbGF0ZWRSZWN0LnNpemUoKSwgZGV2aWNlU2NhbGVGYWN0b3IsIENvbG9yU3Bh
Y2VTUkdCLCBwYWludEluZm8uY29udGV4dCgpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIo
aW5mbGF0ZWRSZWN0LnNpemUoKSwgZGV2aWNlU2NhbGVGYWN0b3IsIENvbG9yU3BhY2U6OlNSR0Is
IHBhaW50SW5mby5jb250ZXh0KCkpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggY2Y1ZDM1YjU4ODQxZGJjY2YyYzI3
YTZlNWNkMzkyMWNiNGFkYzZhNi4uMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNh
NzEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAh
cmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlz
IGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhv
dWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNl
U1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0ltYWdl
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4
dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBkODIzYTAyYjU0ZGYxM2FjMzQzYWRiYTZkNWYx
NDNkNGJhYWNiNzU0Li43NWI1OWI2M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5MmE5MzJmNDMxNjFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdG
aWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNW
R0ZpCiAgICAgICAgIGVsZW1lbnQuc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7
CiAgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0Ojpy
ZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVs
ZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRpdmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0Jv
eCkpOwogICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJlcigpKQotICAgICAgICAgICAgZWZmZWN0
LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1lbnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdT
dHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBDb2xvckludGVycG9sYXRpb246
OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xvclNwYWNlU1JHQik7CisgICAg
ICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigp
LT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycygpID09IENvbG9y
SW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JT
cGFjZTo6U1JHQik7CiAgICAgICAgIGJ1aWxkZXItPmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZN
b3ZlKGVmZmVjdCkpOwogICAgIH0KICAgICByZXR1cm4gYnVpbGRlcjsKQEAgLTE5Miw3ICsxOTIs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0
aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKICAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVk
RmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKLSAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2VM
aW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOworICAgIGF1dG8gc291cmNlR3JhcGhp
YyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRy
YXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCLCBy
ZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAg
ICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsK
ICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250ZXh0ID0gY29udGV4dDsKQEAgLTI3MSw3ICsy
NzEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICAgICAgZmlsdGVyRGF0YS5z
dGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwogICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBw
bHkoKTsKICAgICAgICAgICAgIGxhc3RFZmZlY3QtPmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRl
ZCgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShD
b2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBsYXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRD
b2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOwogICAgICAgICB9CiAgICAgICAgIGZpbHRlckRh
dGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXgg
NTUyY2U1YTMzYTgwNjJlNmJlZTBiMDRhZTNmMTYwZjA5OWViNTJmNS4uY2YzZjllYTg4YjE0NTlk
OTc3M2RkNTNmMmIwMTJlMmI0YjJiMDYyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlR3JhZGllbnQuY3BwCkBAIC02MCw3
ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JU
ZXh0R3JhZGllbnQoR3JhcGhpY3NDb250ZXh0KiYgY29uCiAgICAgQWZmaW5lVHJhbnNmb3JtIGFi
c29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3Jt
YXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0ZW0oKnRleHRSb290QmxvY2spOwogICAgIEZs
b2F0UmVjdCByZXBhaW50UmVjdCA9IHRleHRSb290QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCk7CiAKLSAgICBhdXRvIG1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JT
cGFjZVNSR0IsIGNvbnRleHQtPnJlbmRlcmluZ01vZGUoKSk7CisgICAgYXV0byBtYXNrSW1hZ2Ug
PSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJz
b2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQtPnJlbmRlcmluZ01vZGUo
KSk7CiAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcAppbmRleCA0YzgxOWI5YmM1NWRjMmJmYTgyZmJiYzA5N2Y2Mzc1ODViNWIxMjc3Li4x
Nzg3ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNw
cApAQCAtNjksNyArNjksNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJl
c291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogCiAgICAgaWYgKCFt
YXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAg
ICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7Ci0g
ICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlv
bigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZUxpbmVhclJH
QiA6IENvbG9yU3BhY2VTUkdCOworICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdmdT
dHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJH
QiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7CiAgICAgICAgIC8v
IEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0
aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtz
IGFscGhhIG1hc2tpbmcsIHRob3VnaC4KICAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29s
dXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAg
ICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCkBAIC0xMTMsNyArMTEzLDcgQEAgYm9vbCBS
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKE1hc2tlckRh
dGEqIG1hc2tlckRhdGEsIEMKICAgICB9CiAKICNpZiAhVVNFKENHKQotICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZS0+dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlU1JHQiwgY29sb3JTcGFj
ZSk7CisgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlLT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2U6OlNSR0IsIGNvbG9yU3BhY2UpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oY29sb3JT
cGFjZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcAppbmRleCAzMWJjNWYxOTMxYmRhZTUwYWFj
NjYxMzU5ZmMwYTI2ZjE3ODU4NmZjLi4xYzNjODU0YWVmMjk3NjljMmRmOWViNDRmOWNkMTliM2Ix
YzY1NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBAIC0yNTUsNyArMjU1LDcgQEAgYm9vbCBSZW5k
ZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkVGlsZUltYWdlVHJhbnNmb3JtKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNv
dXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShjb25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0
cmlidXRlcywgY29uc3QgRmxvYXRSZWN0JiB0aWxlQm91bmRhcmllcywgY29uc3QgRmxvYXRSZWN0
JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFn
ZVRyYW5zZm9ybSwgRmxvYXRSZWN0JiBjbGFtcGVkQWJzb2x1dGVUaWxlQm91bmRhcmllcywgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25zdAogewogICAgIGNsYW1wZWRBYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGFic29sdXRlVGlsZUJvdW5k
YXJpZXMpOwotICAgIGF1dG8gdGlsZUltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoYWJzb2x1dGVUaWxlQm91bmRhcmllcywgY2xhbXBlZEFic29sdXRlVGlsZUJv
dW5kYXJpZXMsIENvbG9yU3BhY2VTUkdCLCByZW5kZXJpbmdNb2RlKTsKKyAgICBhdXRvIHRpbGVJ
bWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlVGls
ZUJvdW5kYXJpZXMsIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBDb2xvclNwYWNlOjpT
UkdCLCByZW5kZXJpbmdNb2RlKTsKICAgICBpZiAoIXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
UmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGFhOTJkNjM0ZWNlZjgwZTkwNjhhODExNTc4MzcwMjhl
NmM2MWYzZWQuLmQ3ODY5NGFhZTdiMzU5MmIzNjI1MjY3ZDk1MDAxNjZhYmUwNTBmZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0
LmNwcApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVy
Rm9yZWdyb3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1CiAKICAgICAv
LyBDcmVhdGUgYSBuZXcgYnVmZmVyIGFuZCBwYWludCB0aGUgZm9yZWdyb3VuZCBpbnRvIGl0Lgog
ICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKLSAgICAgICAgaWYgKChpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0Jv
eC5zaXplKCkpLCBDb2xvclNwYWNlU1JHQiwgbV9wYWludEluZm8tPmNvbnRleHQoKSkpKSB7Cisg
ICAgICAgIGlmICgoaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JH
QiwgbV9wYWludEluZm8tPmNvbnRleHQoKSkpKSB7CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQmIGJ1ZmZlcmVkUmVuZGVyaW5nQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAg
ICAgICAgICAgICBidWZmZXJlZFJlbmRlcmluZ0NvbnRleHQudHJhbnNsYXRlKC1ib3VuZGluZ0Jv
eC5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIFBhaW50SW5mbyBidWZmZXJlZEluZm8oKm1fcGFp
bnRJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGMz
NTM3ZTM4Y2Q5ODA0OGZjMDIxNzVmMjgyMjE0YjUxNTM5YTA5MzguLjdlODYwNzk4ZjcxZjc2YjU3
NmZjNmUxOTM2ZmYxYmE3MjhkNzExNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcApAQCAtMjc5LDcgKzI3OSw3IEBAIHZvaWQgU1ZHSW1hZ2U6OmRyYXdQYXR0ZXJu
Rm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRTaXplCiAg
ICAgRmxvYXRSZWN0IGltYWdlQnVmZmVyU2l6ZSA9IHpvb21lZENvbnRhaW5lclJlY3Q7CiAgICAg
aW1hZ2VCdWZmZXJTaXplLnNjYWxlKGltYWdlQnVmZmVyU2NhbGUud2lkdGgoKSwgaW1hZ2VCdWZm
ZXJTY2FsZS5oZWlnaHQoKSk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6
ZShpbWFnZUJ1ZmZlclNpemUuc2l6ZSgpKSwgMSwgQ29sb3JTcGFjZVNSR0IsIGNvbnRleHQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJbnRTaXplKGltYWdlQnVmZmVyU2l6ZS5zaXpl
KCkpLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKICAgICBpZiAoIWJ1ZmZlcikgLy8g
RmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlci4KICAgICAgICAgcmV0dXJuOwogICAgIGRyYXdGb3JD
b250YWluZXIoYnVmZmVyLT5jb250ZXh0KCksIGNvbnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20s
IGluaXRpYWxGcmFnbWVudFVSTCwgaW1hZ2VCdWZmZXJTaXplLCB6b29tZWRDb250YWluZXJSZWN0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZF
SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFn
ZS5jcHAKaW5kZXggYzU4NGViNTM3ZTZlNTY3MzE4ZWIwMjM4OGVmZjc4MjgyMmE5NjI3NC4uOGYx
MzhhMmU1YTE1ZDhjYjE3MTRjZjJiNmRkMDA1OTVmOTk1YTI3YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKQEAgLTkzLDggKzkz
LDggQEAgdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghbV9p
bWFnZSAmJiAhcmVuZGVyZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZFSW1hZ2UgcmVz
dWx0cyBhcmUgYWx3YXlzIGluIENvbG9yU3BhY2VTUkdCCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFj
ZShDb2xvclNwYWNlU1JHQik7CisgICAgLy8gRkVJbWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4g
Q29sb3JTcGFjZTo6U1JHQgorICAgIHNldFJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZTo6U1JH
Qik7CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJl
c3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggYmQxMzlmZTUz
MzFiY2NlMzZjMzM0M2IxNTIxN2QwMTFmMjUyNGMzOC4uODk5ZjBiZTA2NTI0MjEwMzU0MmFiNGU3
Njg3NjBjZjY4ODAyMzAxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkdQVVByb2Nlc3MuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJHUFVQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIklPU3VyZmFjZU1hbmFn
ZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRp
bmF0b3JUcmFuc2FjdGlvbi5oIgpAQCAtNzQsNiArNzUsMjIgQEAgdm9pZCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWMKICAgICBDUkFTSCgpOwogfQogCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmNyZWF0ZVNoYXJlZElPU3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXpl
JiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNZXNzYWdlczo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlU2hhcmVkSU9TdXJmYWNlOjpEZWxheWVkUmVwbHkmJiBy
ZXBseSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IElPU3VyZmFjZU1hbmFnZXI6OnNoYXJlZE1hbmFn
ZXIoKS5jcmVhdGVTaGFyZWRJT1N1cmZhY2Uoc2l6ZSwgY29udGV4dFNpemUsIGNvbG9yU3BhY2Up
OworCisgICAgQVNTRVJUKCEhcmVzdWx0LmZpcnN0ID09ICEhcmVzdWx0LnNlY29uZCk7CisgICAg
aWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgIHJlcGx5KHJlc3VsdC5maXJzdCwgcmVzdWx0LnNl
Y29uZC0+Y3JlYXRlU2VuZFJpZ2h0KCkpOworICAgIGVsc2UKKyAgICAgICAgcmVwbHkoMCwgeyB9
KTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlU2hhcmVkSU9T
dXJmYWNlKHVpbnQ2NF90IHN1cmZhY2VJRCkKK3sKKyAgICBJT1N1cmZhY2VNYW5hZ2VyOjpzaGFy
ZWRNYW5hZ2VyKCkucmVsZWFzZVNoYXJlZElPU3VyZmFjZShzdXJmYWNlSUQpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
CmluZGV4IGM2NGE0M2U2NGFmNTEwYzA3NGQ3MDg2ZjdiNjQ2ZmE2YzZhNGY0NjcuLjJhMmU1ODg1
NzQ0ODE0ODVhMjA5OTA2ZDljMmRlZWIwZjY1MmQxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMjksNiArMjks
OCBAQAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3Bh
Y2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1By
b2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtNTUs
OSArNTcsMTQgQEAgcHJpdmF0ZToKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKEdQVVBy
b2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyKTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CisgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZv
aWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92
ZXJyaWRlOwogCisgICAgdm9pZCBjcmVhdGVTaGFyZWRJT1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpD
b2xvclNwYWNlLCBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlU2hh
cmVkSU9TdXJmYWNlRGVsYXllZFJlcGx5JiYpOworICAgIHZvaWQgcmVsZWFzZVNoYXJlZElPU3Vy
ZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpOworCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9j
b25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CiAgICAgY29uc3Qg
V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUz
NDZjMDEyMjFkOC4uYzYwZmFmMjVmOWM0NzZkMTVkNjVkOWQ2NjcyZGI1Y2IyMGI1YmY0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIzLDYgKzIzLDggQEAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mgewor
ICAgIHZvaWQgQ3JlYXRlU2hhcmVkSU9TdXJmYWNlKFdlYkNvcmU6OkludFNpemUgc2l6ZSwgV2Vi
Q29yZTo6SW50U2l6ZSBjb250ZXh0U2l6ZSwgZW51bTp1aW50OF90IFdlYkNvcmU6OkNvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkgLT4gKHVpbnQ2NF90IHN1cmZhY2VJRCwgTWFjaFNlbmRSaWdodCBzZW5k
UmlnaHQpIFN5bmNocm9ub3VzCisgICAgdm9pZCBSZWxlYXNlU2hhcmVkSU9TdXJmYWNlKHVpbnQ2
NF90IHN1cmZhY2VJRCkKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9JT1N1cmZhY2VNYW5hZ2VyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9JT1N1cmZhY2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NTllMWJiYjBlNjA4M2NmMWIzZjU0NTU5YWY0ZjVhNzgxYTc2ZjdhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIuY3BwCkBAIC0wLDAg
KzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSU9T
dXJmYWNlTWFuYWdlci5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29u
dGV4dENHLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworSU9TdXJmYWNlTWFuYWdlciYgSU9T
dXJmYWNlTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPElPU3VyZmFjZU1hbmFnZXI+IG1hbmFnZXI7CisgICAgcmV0dXJuIG1hbmFnZXIuZ2V0KCk7
Cit9CisKK3N0YXRpYyBhdXRvJiBzdXJmYWNlTWFwKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8SGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFj
ZT4+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQoKTsKK30KKworc3RkOjpwYWlyPHVpbnQ2NF90
LCBXZWJDb3JlOjpJT1N1cmZhY2UqPiBJT1N1cmZhY2VNYW5hZ2VyOjpjcmVhdGVTaGFyZWRJT1N1
cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgY29udGV4dFNpemUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvIHN1cmZhY2UgPSAgSU9TdXJmYWNlOjpj
cmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgLy8gSW5pdGFs
aXplIHRoZSBjb29yZGluYXRlIHN5c3RlbS4KKyAgICBHcmFwaGljc0NvbnRleHQmIHN1cmZhY2VD
b250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgc3VyZmFjZUNv
bnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgc3VyZmFjZUNvbnRleHQudHJhbnNs
YXRlKDAsIC1jb250ZXh0U2l6ZS5oZWlnaHQoKSk7CisKKyAgICAvLyBBc3NpZ25pbmcgYW4gSUQg
Zm9yIHRoZSBJT1N1cmZhY2UuCisgICAgYXV0byBzdXJmYWNlSUQgPSBuZXh0U3VyZmFjZUlEKCk7
CisgICAgQVNTRVJUKCFzdXJmYWNlTWFwKCkuY29udGFpbnMoc3VyZmFjZUlEKSk7CisgICAgCisg
ICAgYXV0byByZXN1bHQgPSBzdXJmYWNlLmdldCgpOworICAgIHN1cmZhY2VNYXAoKS5hZGQoc3Vy
ZmFjZUlELCBXVEZNb3ZlKHN1cmZhY2UpKTsKKworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihz
dXJmYWNlSUQsIHJlc3VsdCk7Cit9CisKK2Jvb2wgSU9TdXJmYWNlTWFuYWdlcjo6cmVsZWFzZVNo
YXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpCit7CisgICAgQVNTRVJUKHN1cmZhY2VN
YXAoKS5jb250YWlucyhzdXJmYWNlSUQpKTsKKyAgICByZXR1cm4gc3VyZmFjZU1hcCgpLnJlbW92
ZShzdXJmYWNlSUQpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvSU9TdXJmYWNlTWFuYWdlci5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MTJiZDA4ZmY5MjVmM2FhYmEwMzI5M2M0MzkxZWVjNTQ4YzQ1OTJiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3Jl
L0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0lPU3VyZmFjZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW50U2l6ZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgSU9TdXJm
YWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgSU9TdXJmYWNlTWFuYWdlcigpID0gZGVmYXVsdDsK
KworICAgIHN0YXRpYyBJT1N1cmZhY2VNYW5hZ2VyJiBzaGFyZWRNYW5hZ2VyKCk7CisKKyAgICBz
dGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OklPU3VyZmFjZSo+IGNyZWF0ZVNoYXJlZElPU3Vy
ZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29u
dGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIGJvb2wgcmVsZWFzZVNoYXJlZElP
U3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpOworCitwcml2YXRlOgorICAgIHVpbnQ2NF90IG5l
eHRTdXJmYWNlSUQoKSB7IHJldHVybiArK21fc3VyZmFjZUlEOyB9CisKKyAgICB1aW50NjRfdCBt
X3N1cmZhY2VJRCB7IDAgfTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXgg
NjA2ZGJjYThlMzI2YjFkNGY5ODIyZGRhOTNiNzhjODFkMWJlNDQzMi4uOTRmNDMyMWIzZWVhMWM3
NWI2NTMzNGIzM2EyNGYyYmQ2ZDc1OGE3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTc4Niw5ICs3ODYsOSBAQCBuYW1lc3BhY2UgV1RGIHsK
IHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKLSAg
ICBXZWJDb3JlOjpDb2xvclNwYWNlOjpDb2xvclNwYWNlU1JHQiwKLSAgICBXZWJDb3JlOjpDb2xv
clNwYWNlOjpDb2xvclNwYWNlTGluZWFyUkdCLAotICAgIFdlYkNvcmU6OkNvbG9yU3BhY2U6OkNv
bG9yU3BhY2VEaXNwbGF5UDMKKyAgICBXZWJDb3JlOjpDb2xvclNwYWNlOjpTUkdCLAorICAgIFdl
YkNvcmU6OkNvbG9yU3BhY2U6OkxpbmVhclJHQiwKKyAgICBXZWJDb3JlOjpDb2xvclNwYWNlOjpE
aXNwbGF5UDMKICAgICA+OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNzNmZjRkMjdiZWUzZDgyYTEx
NDY3MTc0OTJiY2I2NjQ1MjM1YjY0Mi4uMjQ1NjA1ZTgxZGJkMjk1ZDAwY2RiY2UwM2UzOTZmOTY1
ZjMwNDA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNCw2ICsyNCw3IEBACiBHUFVQcm9jZXNzL0dQVVBy
b2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCiBHUFVQ
cm9jZXNzL0dQVVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuY3BwCitHUFVQcm9jZXNzL0lPU3Vy
ZmFjZU1hbmFnZXIuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFn
ZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTc2
LDYgKzU3Nyw3IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nl
c3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENv
bnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUGFnZUJhbm5lci5jcHAKK1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggZjc5ZGRjMTIwNDBmMmJmNzkyNDBjY2E1NWVmOTg5MzBiNTAwNzUzNC4uMTMz
OTg0NTM0ZWE2MGI1NjlkNWY3NWE3NDY3NGQxZjJhNzcyMWRiYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zNTgzLDYgKzM1ODMsMTAg
QEAKIAkJNTNDRkJCQzYyMjI0RDFCMDAwMjY2NTQ2IC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q2hlY2tlckNvbXBs
ZXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NGQkJDNzIyMjREMUIw
MDAyNjY1NDYgLyogVGV4dENoZWNrZXJDb21wbGV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ29tcGxldGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0YzQ0FBNTIwNkM0NDNFMDA4NjQ5MEUgLyogTmV0d29ya0FjdGl2aXR5VHJh
Y2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQWN0
aXZpdHlUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTAy
Mzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTU1RENGQUExMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTYyMzk5RTYwQzAwNTBDRDIyIC8qIElPU3VyZmFj
ZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSU9TdXJmYWNlTWFuYWdlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBNzIzOTlFNkQ0MDA1MENEMjIgLyogSU9TdXJmYWNl
TWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJT1N1cmZhY2VNYW5hZ2VyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI4RjIyMEFFM0JENzAwQjhCRTg3IC8qIFNl
Y0tleVByb3h5U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMDIwQjI1MTc0MDBCOEJFODcgLyogQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzBBQjkwMzIwQjI1NDFDMDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlY0tleVByb3h5U3Rv
cmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjE0LDYgKzYyMTgsOCBAQAog
CQkJCTJEOUZCMjAyMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVQcm9jZXNzLm1lc3NhZ2VzLmluICov
LAogCQkJCTJEOUZCMjE0MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzLmNwcCAqLywKIAkJCQkyRDlGQjIwMzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVUHJvY2Vz
c0NyZWF0aW9uUGFyYW1ldGVycy5oICovLAorCQkJCTU1RENGQUE3MjM5OUU2RDQwMDUwQ0QyMiAv
KiBJT1N1cmZhY2VNYW5hZ2VyLmNwcCAqLywKKwkJCQk1NURDRkFBNjIzOTlFNjBDMDA1MENEMjIg
LyogSU9TdXJmYWNlTWFuYWdlci5oICovLAogCQkJKTsKIAkJCXBhdGggPSBHUFVQcm9jZXNzOwog
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTc5MjIsNiArNzkyOCw4IEBACiAJCQkJMUE5
MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRDb250cm9sbGVyLmggKi8sCiAJCQkJN0MzODc0
MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5uZXIuY3BwICovLAogCQkJCTdDRjQ3RkY5MTcy
NzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmggKi8sCisJCQkJNTVEQ0ZBQTAyMzk5QkRBMjAw
NTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTU1RENGQUExMjM5
OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCiAJCQkJQTU1QkE4
MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmNwcCAqLywKIAkJCQlB
NTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuaCAqLywKIAkJ
CQlBNTVCQTgxNDFCQTIzRTA1MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2Fn
ZXMuaW4gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDNhYmIxYzdlMzdjNDdkZWUzNjgz
NDcyZTJlMzM3YjQ1ZmFmNTU4MDUuLmFlNDFhNmU4MTJiNDc4OWQ1MTRhYTM2MDNiOGRhN2YyMGE0
N2Y0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVk
ZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKKyNpbmNs
dWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiVXNlckRhdGEuaCIKICNp
bmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2Rl
cnMuaCIKQEAgLTg4MSwxNCArODgyLDE5IEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJv
bWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVm
cmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9y
KFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKICAgICBpZiAoYXV0byogZHJh
d2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdB
cmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KKyNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorUmVmUHRyPFJl
bmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOwor
fQogI2VuZGlmCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDcy
ZWJlZjUwZGY5YjE0YTg3MmZjMzU2MGExYzgxNzM3NDUxZDcwMjcuLjkzNzYwNjUwMTJlZTFlYWNi
ZGZiNDc1MTA2MWFkMmE1NmM4NTkxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMCw2ICsy
MzAsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25p
dG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5
SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAg
UmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
KSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxs
b3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDZiNmZjY2RmZjMxOGE3MjdkMTk2NjM5YzExOTFmY2NiZDdlMmY5
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRD
Ry5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjpwYWlyPHVpbnQ2NF90LCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlU2hhcmVkSU9TdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUm
IGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgUmVmPElQQzo6Q29u
bmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVBy
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHVpbnQ2NF90IHN1cmZhY2VJRDsK
KyAgICBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodDsKKyAgICAKKyAgICBjb25uZWN0aW9uLT5zZW5k
U3luYyhNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlU2hhcmVkSU9T
dXJmYWNlKHNpemUsIGNvbnRleHRTaXplLCBjb2xvclNwYWNlKSwgTWVzc2FnZXM6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVNoYXJlZElPU3VyZmFjZTo6UmVwbHkoc3VyZmFjZUlE
LCBzZW5kUmlnaHQpLCAwKTsKKworICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIEdQVSBlcnJvcnMg
bW9yZSBhcHByb3ByaWF0ZWx5LgorICAgIGlmICghc3VyZmFjZUlEKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIAorICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzdXJmYWNlSUQsIFdlYkNvcmU6
OklPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCksIGNhY2hl
ZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSkpOworfQorCitib29sIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnJlbGVhc2VTaGFyZWRJT1N1cmZhY2UodWludDY0X3Qgc3VyZmFjZUlEKQoreworICAg
IFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICBjb25uZWN0
aW9uLT5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlU2hh
cmVkSU9TdXJmYWNlKHN1cmZhY2VJRCksIDApOworICAgIHJldHVybiB0cnVlOworfQorCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTEzOWY1NjQ1NWNjZmFkNDMyM2JkYjRiNGZmOTFhOGU3NTg4NWZlOQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0JhY2tlbmQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6UmVu
ZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kPiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKKyAgICB9CisKKyAgICBzdGQ6OnBhaXI8dWludDY0X3Qs
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+PiBjcmVhdGVTaGFyZWRJT1N1cmZh
Y2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRl
eHRTaXplLCBXZWJDb3JlOjpDb2xvclNwYWNlKSBvdmVycmlkZTsKKyAgICBib29sIHJlbGVhc2VT
aGFyZWRJT1N1cmZhY2UodWludDY0X3Qgc3VyZmFjZUlEKSBvdmVycmlkZTsKK307CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxv
ZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwZTMwMDgxYWY4YTQ1NTE5ZDNiNWJjN2E4Mjk0M2Vi
MmQ0YzJlNGE3Li5hNzBmMTEzMDM0OTA3MzUxNjVlOTcxMGJhZjM3ODNhNWM1ODc4ODNlIDEwMDY0
NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTktMTItMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxl
LmNvbT4KKworICAgICAgICBNYWtlIEdQVSBwcm9jZXNzIGNyZWF0ZS9yZWxlYXNlIGEgc2hhcmVk
IElPU3VyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VD
b2xvcik6CisKIDIwMTktMTItMDYgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29t
PgogCiAgICAgICAgIFB5dGhvbiAzOiBBZGQgc3VwcG9ydCBpbiB3ZWJraXRweS50b29sIChGb2xs
b3ctdXAsIHBhcnQgMikKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9FeHRlbmRlZENvbG9yLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9FeHRlbmRlZENvbG9yLmNwcAppbmRleCA2MDc3NzdkYzhlYTViZTZkYmJhZTk0ZDFhODg3M2Rj
NjQwMWQ4MTk2Li43NTEyYWQ3ODgyNjExYjZjODA2ZWEwNjgyM2NkMGJhOWQ1NjlmZjhmIDEwMDY0
NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvci5j
cHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3Iu
Y3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChF
eHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4y
NSwgMS4wLCBDb2xvclNwYWNlRGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4y
NSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0
ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VRKDEuMCwgYzEuYXNFeHRlbmRlZCgpLnJlZCgp
KTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjMS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSk7CkBA
IC00Nyw3ICs0Nyw3IEBAIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1Qo
RXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5UDMpOworICAgIENvbG9yIGMxKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAgICAgRVhQRUNUX1RSVUUoYzEu
aXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKGMxKTsKQEAgLTYzLDcgKzYzLDcgQEAgVEVT
VChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwg
QXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlRGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNw
YWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAg
ICBDb2xvciBjMiA9IGMxOwpAQCAtNzksNyArNzksNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFz
c2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQogewotICAg
IENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5UDMpOworICAg
IENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAg
ICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUo
YzEpKTsKQEAgLTk4LDcgKzk4LDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0
b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92ZUFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3Ig
YzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZURpc3BsYXlQMyk7CisgICAgQ29sb3Ig
YzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JTcGFjZTo6RGlzcGxheVAzKTsKICAgICBFWFBF
Q1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMxKTsK
QEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQog
CiBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVmZXJlbmNlQ291bnRpbmcpCiB7Ci0gICAgQ29s
b3IqIGMxID0gbmV3IENvbG9yKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5
UDMpOworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xvcigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xv
clNwYWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVDVF9UUlVFKGMxLT5pc0V4dGVuZGVkKCkpOwog
CiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpjMSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgVEVT
VChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5jZUNvdW50aW5nKQogCiBDb2xvciBtYWtlQ29s
b3IoKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNw
bGF5UDMpOworICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRp
c3BsYXlQMyk7CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKICAgICBFWFBFQ1Rf
RVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3VudCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385072</attachid>
            <date>2019-12-06 18:01:45 -0800</date>
            <delta_ts>2019-12-10 17:57:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191206180145.patch</filename>
            <type>text/plain</type>
            <size>77699</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjU2MGFmOTdkYjMwNDUz
OGE3NWU5NzkzZGJiZDhmMzZiOWMxNWJhNC4uNzAyNGY1Njc4MTUzZmFjNzgyNWYzMTM4MTY1Mzk3
MzNiOTA0YWQ3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOCBAQAorMjAxOS0xMi0wNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
R1BVIHByb2Nlc3MgY3JlYXRlL3JlbGVhc2UgYSBzaGFyZWQgSU9TdXJmYWNlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2UgdGhlIGNsYXNz
IFJlbmRlcmluZ0JhY2tlbmQgd2hpY2ggd2lsbCBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24KKyAg
ICAgICAgd2l0aCB0aGUgR1BVIHByb2Nlc3MgZm9yIHJlbmRlcmluZy4gVGhpcyBjbGFzcyB3aWxs
IGJlIHVzZWQgdG8gaGlkZSB0aGUKKyAgICAgICAgY29tcGxleGl0eSBvZiBzZW5kaW5nIG1lc3Nh
Z2VzIHRvIGFuZCByZWNlaXZpbmcgcmVwbGllcyBmcm9tIHRoZSBHUFUgcHJvY2Vzcy4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCBhIHNpbmdsZSBmdW5jdGlvbmFsaXR5IGlzIGFkZGVkIHRvIFJl
bmRlcmluZ0JhY2tlbmQ6CisgICAgICAgIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgYSBzaGFyZWQg
SU9TdXJmYWNlLgorCisgICAgICAgIFdlYktpdCB3aWxsIGhhdmUgdG8gY3JlYXRlIGEgY29uY3Jl
dGUgY2xhc3Mgb2YgUmVuZGVyaW5nQmFja2VuZCB0aHJvdWdoCisgICAgICAgIFdlYkNocm9tZUNs
aWVudC4KKworICAgICAgICBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUgb3du
ZWQgYnkgdGhlIHBhZ2UuCisKKyAgICAgICAgQ29sb3JTcGFjZSBuZWVkcyB0byBiZSAiZW51bSBj
bGFzcyIgc28gaXQgY2FuIGJlIGVuY29kZWQvZGVjb2RlZCB0aHJvdWdoCisgICAgICAgIHRoZSBJ
UEMgbWVzc2FnZXMuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzOjpwYXJzZUNvbG9yRnVu
Y3Rpb25QYXJhbWV0ZXJzKToKKyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6
CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdUZXh0SW50ZXJuYWwpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZHJhd0ltYWdlKToKKyAg
ICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xp
ZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL1BhZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
ICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVy
YXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAo
V2ViQ29yZTo6Q29sb3I6OkNvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
clNwYWNlLmg6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRJ
bWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVk
Q29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXh0ZW5kZWRDb2xvcjo6Y3NzVGV4dCBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhZGllbnRJbWFnZTo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JTcGFjZS5oLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6bGVha0NHQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmg6CisgICAgICAgIChXZWJDb3JlOjpjYWNoZWRDR0NvbG9yU3BhY2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVGbG9vZC5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVUaWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFVGlsZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNl
R3JhcGhpYy5oOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6U291cmNlR3JhcGhp
Yyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9UaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlRoZW1lTWFjOjpkcmF3Q2VsbE9yRm9jdXNSaW5nV2l0aFZpZXdJbnRvQ29udGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL0NTU0ZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NG
aWx0ZXI6OmJ1aWxkUmVmZXJlbmNlRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRl
cjo6YnVpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVyOjphcHBseSk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEZpbGxMYXllckV4dGVuZGVkKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
dHRlcm5Gb3JUb3VjaEFjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50UHJvZ3Jlc3NCYXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGlu
Z1RvQ29udGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVp
bGRQcmltaXRpdmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1h
c2tBbmRTd2FwQ29udGV4dEZvclRleHRHcmFkaWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0NvbnRlbnRJbnRvTWFza0ltYWdlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZSBjb25zdCk6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1JlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bWFnZTo6ZHJhd1BhdHRlcm5Gb3JDb250YWluZXIpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVJbWFnZTo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKwogMjAxOS0xMi0wNiAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxh
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gQ2FsbHMgdG8gZGV2aWNlIG9yaWVudGF0aW9u
IEFQSSBzaG91bGQgYmUgZG9uZSBpbiB0aGUgVUkgcHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4YWFmNWIx
MWI4NDBiOTViMjYzMzgzZGI3OGFmNjE1OTkzNTc0MDgxLi45MGVjOGY4MGE0Y2UzNWUzNjYxZDIz
NjQzMDhmODY5YWRhN2E5NDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE5LTEyLTA2
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAg
TWFrZSBHUFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQgaXMgaW50cm9kdWNlZCB0byBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24gd2l0aAor
ICAgICAgICB0aGUgR1BVIHByb2Nlc3MgZm9yIHJlbmRlcmluZyBvcGVyYXRpb25zLgorCisgICAg
ICAgIElPU3VyZmFjZU1hbmFnZXIgd2lsbCBtYW5hZ2UgY3JlYXRpbmcgYW4gSU9TdXJmYWNlLCBp
bml0aWFsaXppbmcgaXRzCisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmb3IgZHJhd2luZywgYXNz
aWduaW5nIGFuIElELCBhbmQgY2FjaGluZyBpdCBmb3IgbGF0ZXIKKyAgICAgICAgcmVmZXJlbmNl
cy4gSU9TdXJmYWNlTWFuYWdlciB3aWxsIGFsc28gZ2l2ZSB0aGUgYWJpbGl0eSB0byByZW1vdmUg
dGhlCisgICAgICAgIElPU3VyZmFjZSBmcm9tIHRoZSBjYWNoZS4KKworICAgICAgICBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzIHdpbGwgYmUgdXNlZCBhcyBhIHByb3h5IG9iamVjdCBmb3IgdGhl
CisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuIEl0IHdpbGwgcmVwbHkgdGhlIGNyZWF0
ZVNoYXJlZElPU3VyZmFjZSB3aXRoIHRoZQorICAgICAgICBzdXJmYWNlSUQgYW5kIHRoZSBzaWdu
UmlnaHQgb2YgdGhlIElPU3VyZmFjZS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmNyZWF0ZVNoYXJlZElPU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VTaGFyZWRJT1N1cmZhY2UpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIEdQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBH
UFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oLgorICAgICAgICAoV2ViS2l0
OjpJT1N1cmZhY2VNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKToKKyAgICAgICAgKFdlYktpdDo6c3Vy
ZmFjZU1hcCk6CisgICAgICAgIChXZWJLaXQ6OklPU3VyZmFjZU1hbmFnZXI6OnJlbGVhc2VTaGFy
ZWRJT1N1cmZhY2UpOgorICAgICAgICAqIEdQVVByb2Nlc3MvSU9TdXJmYWNlTWFuYWdlci5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgu
CisgICAgICAgIChXZWJLaXQ6OklPU3VyZmFjZU1hbmFnZXI6Om5leHRTdXJmYWNlSUQpOgorICAg
ICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2Vz
LnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25z
dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmguCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNy
ZWF0ZVNoYXJlZElPU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OnJlbGVhc2VTaGFyZWRJT1N1cmZhY2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKwogMjAxOS0xMi0wNiAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtJUENdIE1FU1NBR0VfQ0hFQ0soKSBwYXJhbWV0
ZXJzIGZvciBBZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoIC8gUGx1Z0luRGlkUmVjZWl2ZVVz
ZXJJbnRlcmFjdGlvbiBJUENzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggM2I4NmJiZWM5ZTVlZjAyMWQwN2Y3ZGIyMWYwNGIzZjAz
ZmM2OTIwMy4uNGM3ZmRlN2Y0MGFmZmQ1YmZjYjFmYTE1MjBhYTZjMjU5MGIxYjMwYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTc0MSw2ICsxNzQxLDcgQEAKIAkJNTVBRjE0RTYxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lz
dHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUFG
MTRFNDFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyODIyNDA3QjIwMDBDMjZFMzIg
LyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURD
QzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQwNzNGRTAwQzI2RTMyIC8qIFNWR0xp
c3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1
NURDRkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0ZBQTIyMzk5QzREODAwNTBD
RDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVx
dWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVGQTdG
RkIyMTEwRUNENzAwNUFFRkU3IC8qIFNWR1pvb21BbmRQYW5UeXBlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUZBN0ZGQTIxMTBFQ0Q3MDA1QUVGRTcg
LyogU1ZHWm9vbUFuZFBhblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk1NzA0NDA1QTFFNTM5MzYyMDAzNTY2MDEgLyogSlNBZXNDYmNDZmJQ
YXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
MDQ0MDU5MUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Flc0NiY0NmYlBhcmFtcy5oICovOyB9OwpAQCAt
ODY1NSw2ICs4NjU2LDcgQEAKIAkJNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNWR1ByaW1p
dGl2ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJpbWl0aXZlTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1NURDQzUyNjIyNDA3NEZBMDBDMjZFMzIgLyogU1ZHUHJvcGVy
dHlBY2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eUFjY2Vzc29yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RENDNTI3MjI0MDc1MEIwMEMyNkUzMiAvKiBTVkdQ
cm9wZXJ0eUFjY2Vzc29ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eUFjY2Vzc29y
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBMjIzOTlDNEQ4MDA1
MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RUM5NTk3MjA2OUM5MkQwMDdE
RDBBOSAvKiBQYWludEZyZXF1ZW5jeVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFpbnRGcmVx
dWVuY3lUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RUU1MzU0MjIz
QjI5RTkwMEZCQTk0NCAvKiBTVkdNZW1iZXJBY2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdNZW1iZXJBY2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1NUVFNTM1NjIyM0IyOUY3MDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFu
aW1hdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFByb3BlcnR5QW5pbWF0b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
NTA2NSw2ICsyNTA2Nyw3IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lv
bi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBs
ZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2Ft
cGxlLmggKi8sCisJCQkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmluZ0JhY2tl
bmQuaCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3Bw
ICovLAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAog
CQkJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKQEAgLTMx
ODUwLDYgKzMxODUzLDcgQEAKIAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVy
SW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJGMDBBMTIxM0U2MTcwMERDRUM0OCAvKiBS
ZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODY0MUQ0ODEyMTQyRjdE
MDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU1RENGQUE0MjM5OUM5QTYwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBk
YXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUz
MDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCmlu
ZGV4IDFlMDkyMmIzMDk1ZTlhZjdlMTJiYjQ1YzFkYzkxMDc2ZTYyNGM1ZjAuLmY1MDJjNmZjYWYx
NDBmOTY5OWQ3MWU5ZWVhMGYxNDk2MDJlYWJlOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKQEAgLTY1MSwxMCAr
NjUxLDEwIEBAIHN0YXRpYyBDb2xvciBwYXJzZUNvbG9yRnVuY3Rpb25QYXJhbWV0ZXJzKENTU1Bh
cnNlclRva2VuUmFuZ2UmIHJhbmdlKQogICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZTsKICAgICBz
d2l0Y2ggKGFyZ3MucGVlaygpLmlkKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlU1JHQjoKLSAgICAg
ICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VTUkdCOworICAgICAgICBjb2xvclNwYWNlID0gQ29s
b3JTcGFjZTo6U1JHQjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1ZURpc3BsYXlQ
MzoKLSAgICAgICAgY29sb3JTcGFjZSA9IENvbG9yU3BhY2VEaXNwbGF5UDM7CisgICAgICAgIGNv
bG9yU3BhY2UgPSBDb2xvclNwYWNlOjpEaXNwbGF5UDM7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBDb2xvcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3Rv
bVBhaW50Q2FudmFzLmNwcAppbmRleCA0M2Q2YTVhNDA0MDgxYmJjY2YzZTdiYmZkMWM0YzQ5Yjkz
OTE4NzYyLi5mNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJ
bWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdp
ZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29w
aWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEs
IENvbG9yU3BhY2VTUkdCLCBudWxscHRyKTsKKyAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBu
dWxscHRyKTsKICAgICBpZiAoIW1fY29waWVkQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCBlZWE5
NjRhYzExYTk5OTNkYjY0ZGY2OGNkMTE2ZjUyMjQzMDUxMTAzLi4yM2Q5YjM0ZTg0OGY2ZDAxZDM0
YTlkYWZmYmEzMDUwZmM3YTcxMzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcApAQCAtODg4LDcgKzg4OCw3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUg
PSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7
CiAKICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQo
KS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93
KCkgOiBudWxscHRyOwotICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xvclNwYWNlU1JHQiwgaG9zdFdpbmRvdykpOworICAg
IHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2Rl
LCAxLCBDb2xvclNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKICNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQog
ICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmlu
ZGV4IDMyM2RkNGUwM2JhY2RiMmQ4ZjdmOGRlZmJhZDVjZjA4MDNiMTVlYjkuLmQ3NmYxN2Q4ZWUx
ZWVjNDlkZTJkY2MzYzgxOWIyNjEwMGQ0NWE3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtNTQ1LDcg
KzU0NSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3VGV4dEludGVybmFs
KGNvbnN0IFN0cmluZyYgdGV4dCwgZmxvYXQgeCwgZmxvCiAgICAgICAgICAgICBmb250UHJveHku
ZHJhd0JpZGlUZXh0KCpjLCB0ZXh0UnVuLCBsb2NhdGlvbiArIG9mZnNldCwgRm9udENhc2NhZGU6
OlVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBt
YXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5z
aXplKCksIENvbG9yU3BhY2VTUkdCLCAqYyk7CisgICAgICAgIGF1dG8gbWFza0ltYWdlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIobWFza1JlY3Quc2l6ZSgpLCBDb2xvclNw
YWNlOjpTUkdCLCAqYyk7CiAgICAgICAgIGlmICghbWFza0ltYWdlKQogICAgICAgICAgICAgcmV0
dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDkyODI4ODQ1NmIzNTgyMTRmM2ZkZTFl
NWMwMjQ4MWJlOTVkZTg4OTMuLmUyY2I3MjlhMjZlNjk0YTgxZjAzNTQwNWQ0ODM5NWNkN2NkZDNj
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xNjQwLDcgKzE2NDAsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkcmF3SW1hZ2UoQ2FudmFz
QmFzZSYgc291cmNlQ2FudgogICAgICAgICBkaWREcmF3RW50aXJlQ2FudmFzKCk7CiAgICAgfSBl
bHNlIGlmIChzdGF0ZSgpLmdsb2JhbENvbXBvc2l0ZSA9PSBDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eSkgewogICAgICAgICBpZiAoJnNvdXJjZUNhbnZhcyA9PSAmY2FudmFzQmFzZSgpKSB7Ci0gICAg
ICAgICAgICBpZiAoYXV0byBjb3B5ID0gYnVmZmVyLT5jb3B5UmVjdFRvQnVmZmVyKHNyY1JlY3Qs
IENvbG9yU3BhY2VTUkdCLCAqYykpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGNvcHkgPSBidWZm
ZXItPmNvcHlSZWN0VG9CdWZmZXIoc3JjUmVjdCwgQ29sb3JTcGFjZTo6U1JHQiwgKmMpKSB7CiAg
ICAgICAgICAgICAgICAgY2xlYXJDYW52YXMoKTsKICAgICAgICAgICAgICAgICBjLT5kcmF3SW1h
Z2VCdWZmZXIoKmNvcHksIGRzdFJlY3QsIHsgeyB9LCBzcmNSZWN0LnNpemUoKSB9LCB7IHN0YXRl
KCkuZ2xvYmFsQ29tcG9zaXRlLCBzdGF0ZSgpLmdsb2JhbEJsZW5kIH0pOwogICAgICAgICAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggZDc4MWYzNWNiNTM4ODcyNWZkYjMw
ZGJkMzI1NDRiMmRjNTFjMGQxMi4uNDQxOTczYzQ1ZTVkM2EyMDU1MDcwODUxMWYzZWY0YjY4MGQ1
MGU4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAj
aW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4u
aCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDQsNiAr
MzA1LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0
b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisg
ICAgdmlydHVhbCBSZWZQdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorCiAgICAgLy8gUGFzcyBudWxs
cHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXll
ciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA1NjU1ZGMyYzI5Yzcx
NjFlMTJjNGNhMDI3OTA4OGViM2Y0M2JlYjU3Li5lZTMyNjhmZTU5M2FkMmE5NjBjMjAwYTZlYWNl
YWNmZjg5MGZkNzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTI5MjQsNiArMjkyNCwxNSBAQCBS
ZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXImIFBhZ2U6OnJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigp
CiAgICAgcmV0dXJuICptX3JlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcjsKIH0KIAorI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKK1JlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBQYWdlOjpyZW5kZXJpbmdC
YWNrZW5kKCkKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5k
ZXJpbmdCYWNrZW5kID0gY2hyb21lKCkuY2xpZW50KCkuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgp
OworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmQ7Cit9CisjZW5kaWYKKwogdm9pZCBQYWdl
Ojpmb3JFYWNoRG9jdW1lbnQoY29uc3QgRnVuY3Rpb248dm9pZChEb2N1bWVudCYpPiYgZnVuY3Rv
cikKIHsKICAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogY29sbGVjdERvY3VtZW50cygpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuaAppbmRleCA2NTA1YWY3NWY5NjYwMmFjMzNhNzQ1MzRhYzA0NmQ3YTBmOTlkZDQyLi41
MTA3NzM0ZmJkY2UzZDk5MWJkOWZmOGI1OTE5N2Y1ZDdhZmIyYzA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJUQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJS
ZWdpb24uaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCIKICNp
bmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCkBAIC0y
NzMsNiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICBQZXJmb3JtYW5jZU1vbml0b3IqIHBlcmZvcm1h
bmNlTW9uaXRvcigpIHsgcmV0dXJuIG1fcGVyZm9ybWFuY2VNb25pdG9yLmdldCgpOyB9CiAKICAg
ICBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXImIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpOwor
ICAgIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gcmVuZGVyaW5nQmFja2VuZCgpOworI2VuZGlmCiAKICAgICBWYWxpZGF0aW9uTWVzc2FnZUNs
aWVudCogdmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRp
b25NZXNzYWdlQ2xpZW50LmdldCgpOyB9CiAgICAgdm9pZCB1cGRhdGVWYWxpZGF0aW9uQnViYmxl
U3RhdGVJZk5lZWRlZCgpOwpAQCAtOTA0LDYgKzkwOSwxMCBAQCBwcml2YXRlOgogCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcj4gbV9yZW5kZXJpbmdVcGRhdGVT
Y2hlZHVsZXI7CiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFJlbmRlcmlu
Z0JhY2tlbmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKKyNlbmRpZgorCiAgICAgSGFzaFNldDxSZW5k
ZXJPYmplY3QqPiBtX3JlbGV2YW50VW5wYWludGVkUmVuZGVyT2JqZWN0czsKICAgICBSZWdpb24g
bV90b3BSZWxldmFudFBhaW50ZWRSZWdpb247CiAgICAgUmVnaW9uIG1fYm90dG9tUmVsZXZhbnRQ
YWludGVkUmVnaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwCmluZGV4IDI3NjFhNTJmMjMyMjFiN2M2OTBkOTFlM2RiOTYzNDVhY2NiY2Rm
NGQuLjNjZTEzODE2MDEzZWVlYzIwZWE0M2UyNjI2NGRhYWMwYmYyZGRkMDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKQEAgLTMwMSw3
ICszMDEsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsCiAgICAgfQogCiAgICAgaWYgKCFtX2Nh
Y2hlZEltYWdlKSB7Ci0gICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJbnRTaXplKHRpbGVSZWN0LnNpemUoKSksIENvbG9yU3Bh
Y2VTUkdCLCBjdHh0KTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUodGlsZVJlY3Quc2l6ZSgpKSwgQ29sb3JT
cGFjZTo6U1JHQiwgY3R4dCk7CiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0
dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXgg
NWY5NDUyOTk1YmExODg1MGU5NjI0NDBlMWY5NWI4NDI4OGFkMmI1MC4uZWMxNDNhMGEzZmMwNDZi
MDExODUxY2RiNzFiMDBmZjQ2NDI3NjRmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcApAQCAtNjUwLDEzICs2NTAsMTMgQEAgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3ImIGNvbG9yKQogVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIHN3
aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZVNSR0I6CisgICAgY2FzZSBD
b2xvclNwYWNlOjpTUkdCOgogICAgICAgICB0cyA8PCAic1JHQiI7CiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ29sb3JTcGFjZUxpbmVhclJHQjoKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVh
clJHQjoKICAgICAgICAgdHMgPDwgIkxpbmVhclJHQiI7CiAgICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ29sb3JTcGFjZURpc3BsYXlQMzoKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoK
ICAgICAgICAgdHMgPDwgIkRpc3BsYXlQMyI7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IDYwNTM1N2NlYWU2ZjQyZDhl
Njc4NDVhYWZiOTA0Zjg5NzI5OTRkMmEuLjhlMzVlMDk5ZTRhZjMyZDY5NzdlZWJkMmM3MDVjYTc2
NmE0M2VmNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAt
Mzg1LDcgKzM4NSw3IEBAIGlubGluZSBib29sIFJHQkE6Omhhc0FscGhhKCkgY29uc3QKIGlubGlu
ZSBDb2xvcjo6Q29sb3IoUkdCQSBjb2xvciwgQ29sb3JTcGFjZSBzcGFjZSkKIHsKICAgICBzZXRS
R0IoY29sb3IubV9pbnRlZ2VyKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNwYWNlLCBzcGFjZSA9PSBD
b2xvclNwYWNlU1JHQik7CisgICAgQVNTRVJUX1VOVVNFRChzcGFjZSwgc3BhY2UgPT0gQ29sb3JT
cGFjZTo6U1JHQik7CiB9CiAKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3ImIGEs
IGNvbnN0IENvbG9yJiBiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3JTcGFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29s
b3JTcGFjZS5oCmluZGV4IDExZDAxN2ZhYThmMmNmNDRjZGJlMjljZjU4ZDc1NzUwNWRlZTE1OGQu
LjBhYTI3NGExYzUwOTUzNTI2YTg4ZWU0YTRlZmEzZjljOGQyMzdiM2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yU3BhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKQEAgLTI3LDEwICsyNywxMCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWVudW0gQ29sb3JTcGFjZSB7Ci0gICAgQ29sb3JT
cGFjZVNSR0IsCi0gICAgQ29sb3JTcGFjZUxpbmVhclJHQiwKLSAgICBDb2xvclNwYWNlRGlzcGxh
eVAzCitlbnVtIGNsYXNzIENvbG9yU3BhY2UgOiB1aW50OF90IHsKKyAgICBTUkdCLAorICAgIExp
bmVhclJHQiwKKyAgICBEaXNwbGF5UDMKIH07CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9DdXN0b21QYWlu
dEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50
SW1hZ2UuY3BwCmluZGV4IDY1OTA0MTVjYzAzNzc5NmYxNGQwMzI2YjkxNjlmZTIxYTEyZWVmZDku
Ljg0MDA1MTVmOWY2OWQxNjdhNWNlNmU4MzkzOTc1ZTlkNjYyODI3ZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0N1c3RvbVBhaW50SW1hZ2UuY3BwCkBA
IC0xOTgsNyArMTk4LDcgQEAgdm9pZCBDdXN0b21QYWludEltYWdlOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QKICAgICBhZGp1c3RlZFBh
dHRlcm5DVE0uc2NhbGUoMS4wIC8geFNjYWxlLCAxLjAgLyB5U2NhbGUpOwogICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZSh4U2NhbGUsIHlTY2FsZSk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGFkanVzdGVkU2l6ZSwgQ29sb3JTcGFjZVNS
R0IsIGRlc3RDb250ZXh0KTsKKyAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGFkanVzdGVkU2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgZGVzdENvbnRl
eHQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm47CiAgICAgZG9DdXN0b21QYWlu
dChidWZmZXItPmNvbnRleHQoKSwgYWRqdXN0ZWRTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5jcHAKaW5kZXggMmEzYzgzZTUzZWNm
YzY3MDY3ODQ3Mzk5ZTYxNTlhZDliZWQzNGIyMi4uMDQxZGE4ZjRkOTg2NjFiN2MyMDU0ZDZjYmQx
MDQyMDhkMjkzZTJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRXh0ZW5kZWRDb2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRXh0ZW5kZWRDb2xvci5jcHAKQEAgLTQ1LDEwICs0NSwxMCBAQCBTdHJpbmcgRXh0ZW5kZWRD
b2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJjb2xvcigi
KTsKIAogICAgIHN3aXRjaCAobV9jb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlU1JH
QjoKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CiAgICAgICAgIGJ1aWxkZXIuYXBwZW5kTGl0
ZXJhbCgic3JnYiAiKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvclNwYWNlRGlzcGxh
eVAzOgorICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgogICAgICAgICBidWlsZGVyLmFw
cGVuZExpdGVyYWwoImRpc3BsYXktcDMgIik7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENv
bG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9FeHRlbmRlZENvbG9yLmgK
aW5kZXggMzdjNjhlZGMzMGVhYTg2NWNkOWYzOWMzOTJhYjZhMzE0YzY4MGYwNS4uYjlmZjM4M2U1
MTE1YzU5NmM5OWQwMjI4OTU5ZDJkMjA2MmQ1MjZhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRXh0ZW5kZWRDb2xvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0V4dGVuZGVkQ29sb3IuaApAQCAtMzUsNyArMzUsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEV4dGVuZGVkQ29sb3IgOiBwdWJsaWMgUmVmQ291bnRl
ZDxFeHRlbmRlZENvbG9yPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxFeHRlbmRlZENvbG9y
PiBjcmVhdGUoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSwgQ29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OkNvbG9yU3BhY2VTUkdCKTsKKyAgICBzdGF0aWMgUmVmPEV4dGVuZGVkQ29s
b3I+IGNyZWF0ZShmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhLCBDb2xvclNwYWNl
ID0gQ29sb3JTcGFjZTo6U1JHQik7CiAKICAgICBmbG9hdCByZWQoKSBjb25zdCB7IHJldHVybiBt
X3JlZDsgfQogICAgIGZsb2F0IGdyZWVuKCkgY29uc3QgeyByZXR1cm4gbV9ncmVlbjsgfQpAQCAt
NjAsNyArNjAsNyBAQCBwcml2YXRlOgogICAgIGZsb2F0IG1fYmx1ZSB7IDAgfTsKICAgICBmbG9h
dCBtX2FscGhhIHsgMCB9OwogCi0gICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2UgeyBDb2xvclNw
YWNlOjpDb2xvclNwYWNlU1JHQiB9OworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlIHsgQ29s
b3JTcGFjZTo6U1JHQiB9OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhZGllbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudEltYWdlLmNwcAppbmRleCBmM2VjMGExYWQ0NjA0MTI4NzJkOTIw
ZTdlMWUwMTE2NzY2Y2E2M2ZiLi4wOGJhOWM5ZWE4ZDU3ODYzMTg2ZTI0NWY1ZDgyZTIwODgzNDQ3
NzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dEltYWdlLmNwcApAQCAtNzEsNyArNzEsNyBAQCB2b2lkIEdyYWRpZW50SW1hZ2U6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZAogICAg
IHVuc2lnbmVkIGdlbmVyYXRvckhhc2ggPSBtX2dyYWRpZW50LT5oYXNoKCk7CiAKICAgICBpZiAo
IW1fY2FjaGVkSW1hZ2UgfHwgbV9jYWNoZWRHZW5lcmF0b3JIYXNoICE9IGdlbmVyYXRvckhhc2gg
fHwgbV9jYWNoZWRBZGp1c3RlZFNpemUgIT0gYWRqdXN0ZWRTaXplIHx8ICFhcmVFc3NlbnRpYWxs
eUVxdWFsKGRlc3RDb250ZXh0LnNjYWxlRmFjdG9yKCksIG1fY2FjaGVkU2NhbGVGYWN0b3IpKSB7
Ci0gICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihhZGp1c3RlZFNpemUsIENvbG9yU3BhY2VTUkdCLCBkZXN0Q29udGV4dCk7CisgICAg
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihhZGp1c3RlZFNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGRlc3RDb250ZXh0KTsKICAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IGZiNTM2YjNkNjI4
ZjI2YWU0ZmY1OTkxZDkxZmJkZGFiM2RjMWFmNjUuLjBlOGRhZjFlYTk1NTg5YzUzNDBlMDI2ZTQ0
Njg1NWE1MTEyYmMwNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEyNiwxMSArMTI2LDExIEBAIHZvaWQgSW1hZ2VCdWZmZXI6
OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNl
IGRzdENvCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdC
IGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlTGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZVNSR0IpCi0g
ICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2VMaW5lYXJSR0IgJiYgZHN0Q29s
b3JTcGFjZSAhPSBDb2xvclNwYWNlU1JHQikpCisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0Ip
CisgICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBk
c3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlTGluZWFyUkdCKSB7CisgICAgaWYgKGRz
dENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewogICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q28KICAgICAgICAgICAgIHJldHVybiBhcnJheTsKICAgICAgICAgfSgp
OwogICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAg
ICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZVNSR0IpIHsKKyAgICB9IGVs
c2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewogICAgICAgICBzdGF0
aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewogICAg
ICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCAyYmFhOGUyYjIwOWVjZmUyNDdhYzhk
OGUzYTA2OGMwZDA2ZjlmNzZiLi4xMTg4MGNhMTg1NjgyZTM0MGEwNTg1ZGYxZTAxZTUxNTk5ZDAy
MTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKQEAgLTY5LDkgKzY5LDkgQEAgY2xhc3MgSW1hZ2VCdWZmZXIgewogICAgIGZyaWVuZCBjbGFz
cyBJT1N1cmZhY2U7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIg
b24gYWxsb2NhdGlvbiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZVNS
R0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBD
b2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwogI2lmIFVTRShE
SVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENv
bG9yU3BhY2VTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3Qg
SG9zdFdpbmRvdyogPSBudWxscHRyKTsKICNlbmRpZgogCiAgICAgLy8gQ3JlYXRlIGFuIGltYWdl
IGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRo
aXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgzMTkwYThmNDIy
NjQyMGJkMjBmM2NmMDcxZTlkM2JlMTNlNTE1OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNpemU7CitjbGFzcyBJT1N1
cmZhY2U7CisKK2NsYXNzIFJlbmRlcmluZ0JhY2tlbmQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8UmVuZGVyaW5nQmFja2VuZD4geworcHVibGljOgorICAgIHZpcnR1YWwgflJlbmRlcmlu
Z0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBzdGQ6OnBhaXI8dWludDY0X3QsIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+PiBjcmVhdGVTaGFyZWRJT1N1cmZhY2UoY29uc3QgSW50
U2l6ZSYsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlKSA9IDA7CisgICAg
dmlydHVhbCBib29sIHJlbGVhc2VTaGFyZWRJT1N1cmZhY2UodWludDY0X3Qgc3VyZmFjZUlEKSA9
IDA7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCmluZGV4IDVlNTVmMzA4YmU5OWI3YTFmNjAzZGEyNWQ5NWQwNWNlZTI2Y2NhYTUu
LjU1NzEwNmNkMjg4YTBjMDcwYWJmZmJlOWM0ODE1ZTExOGNlNmQyMTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCkBAIC0zMjEsNyArMzIxLDcgQEAgSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigp
ID0gZGVmYXVsdDsKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihzaXplLCBDb2xvclNwYWNlU1JHQiwgY29udGV4dCk7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7CiB9CiAKIEdyYXBo
aWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAppbmRleCAxMDljNjQwYzUyNjYx
YTE4N2VkNTEwYWQyZjI3MDAwZGU1M2I3ODM5Li5jZGZmYTNmNjBlOWFkMThmMmE0MGE4ZTg5ODUy
YTM2YTMzN2Y1MTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9Db2xvckNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcApAQCAtMTExLDExICsxMTEsMTEgQEAgc3RhdGljIENHQ29sb3JSZWYgbGVh
a0NHQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgICAgICBjb21wb25lbnRzWzJdID0gZXh0
ZW5kZWRDb2xvci5ibHVlKCk7CiAgICAgICAgIGNvbXBvbmVudHNbM10gPSBleHRlbmRlZENvbG9y
LmFscGhhKCk7CiAgICAgICAgIHN3aXRjaCAoZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkpIHsK
LSAgICAgICAgY2FzZSBDb2xvclNwYWNlU1JHQjoKKyAgICAgICAgY2FzZSBDb2xvclNwYWNlOjpT
UkdCOgogICAgICAgICAgICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2VSZWYo
KSwgY29tcG9uZW50cyk7Ci0gICAgICAgIGNhc2UgQ29sb3JTcGFjZURpc3BsYXlQMzoKKyAgICAg
ICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CiAgICAgICAgICAgICByZXR1cm4gQ0dDb2xv
ckNyZWF0ZShkaXNwbGF5UDNDb2xvclNwYWNlUmVmKCksIGNvbXBvbmVudHMpOwotICAgICAgICBj
YXNlIENvbG9yU3BhY2VMaW5lYXJSR0I6CisgICAgICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFy
UkdCOgogICAgICAgICAgICAgLy8gRklYTUU6IERvIHdlIGV2ZXIgY3JlYXRlIENHQ29sb3JSZWZz
IGluIHRoZXNlIHNwYWNlcz8gSXQgbWF5IG9ubHkgYmUgSW1hZ2VCdWZmZXJzLgogICAgICAgICAg
ICAgcmV0dXJuIENHQ29sb3JDcmVhdGUoc1JHQkNvbG9yU3BhY2VSZWYoKSwgY29tcG9uZW50cyk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCmluZGV4IGQwMzcwNDA1ZmM3OTA1NTJlMTAyOGJlY2Fj
ZjgxOTgwZGVmMmI1OGIuLjVkNTlkMTVkYmVkZjVlMzUyMzliMzdhYjUyZWM0NDlhOTEyYmQ0ZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaApAQCAtNDEsMTEgKzQxLDExIEBAIENHQWZmaW5lVHJhbnNmb3JtIGdl
dFVzZXJUb0Jhc2VDVE0oQ0dDb250ZXh0UmVmKTsKIHN0YXRpYyBpbmxpbmUgQ0dDb2xvclNwYWNl
UmVmIGNhY2hlZENHQ29sb3JTcGFjZShDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgc3dp
dGNoIChjb2xvclNwYWNlKSB7Ci0gICAgY2FzZSBDb2xvclNwYWNlU1JHQjoKKyAgICBjYXNlIENv
bG9yU3BhY2U6OlNSR0I6CiAgICAgICAgIHJldHVybiBzUkdCQ29sb3JTcGFjZVJlZigpOwotICAg
IGNhc2UgQ29sb3JTcGFjZUxpbmVhclJHQjoKKyAgICBjYXNlIENvbG9yU3BhY2U6OkxpbmVhclJH
QjoKICAgICAgICAgcmV0dXJuIGxpbmVhclJHQkNvbG9yU3BhY2VSZWYoKTsKLSAgICBjYXNlIENv
bG9yU3BhY2VEaXNwbGF5UDM6CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CiAgICAg
ICAgIHJldHVybiBkaXNwbGF5UDNDb2xvclNwYWNlUmVmKCk7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUZsb29kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRmxvb2QuaAppbmRleCA0OGMzMWEwNmVmNDEwN2MwYTU2MGM4ZGMxYzYwMmQ4NzVh
NWE4NGE4Li5mNjY5MWU0NjRkYWQ4MzVhMDFmZDgwNjk0NDk1YmViNGIzZmFjN2M4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRmxvb2QuaApA
QCAtNDAsOCArNDAsOCBAQCBwdWJsaWM6CiAjaWYgIVVTRShDRykKICAgICAvLyBmZUZsb29kIGRv
ZXMgbm90IHBlcmZvcm0gY29sb3IgaW50ZXJwb2xhdGlvbiBvZiBhbnkga2luZCwgc28gdGhlIHJl
c3VsdCBpcyBhbHdheXMgaW4gdGhlIGN1cnJlbnQKICAgICAvLyBjb2xvciBzcGFjZSByZWdhcmRs
ZXNzIG9mIHRoZSB2YWx1ZSBvZiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMuCi0gICAgdm9p
ZCBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2UpIG92ZXJyaWRlIHsgRmlsdGVyRWZm
ZWN0OjpzZXRSZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2VTUkdCKTsgfQotICAgIHZvaWQgc2V0
UmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlKSBvdmVycmlkZSB7IEZpbHRlckVmZmVjdDo6c2V0
UmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7IH0KKyAgICB2b2lkIHNldE9wZXJhdGlu
Z0NvbG9yU3BhY2UoQ29sb3JTcGFjZSkgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3Vs
dENvbG9yU3BhY2UoQ29sb3JTcGFjZTo6U1JHQik7IH0KKyAgICB2b2lkIHNldFJlc3VsdENvbG9y
U3BhY2UoQ29sb3JTcGFjZSkgb3ZlcnJpZGUgeyBGaWx0ZXJFZmZlY3Q6OnNldFJlc3VsdENvbG9y
U3BhY2UoQ29sb3JTcGFjZTo6U1JHQik7IH0KICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5j
cHAKaW5kZXggNzA3ZWFkOWFhY2E2NjI2ZDczNGJiZmIyZThjYjVmMzllZDBiZjNhMS4uMGJhNTFi
NzYxMmYyY2IyZjY5ZjRmNjAyMWNlZmNiZTNjMmU3NDJkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCkBAIC00
MDMsNyArNDAzLDcgQEAgYm9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoVWludDhDbGFtcGVk
QXJyYXkmIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICAgIGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZSA9IHdpZHRoIC0gMTsKICAgICBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lID0g
aGVpZ2h0IC0gMTsKICAgICAKLSAgICBGbG9hdENvbXBvbmVudHMgbGlnaHRDb2xvciA9IChvcGVy
YXRpbmdDb2xvclNwYWNlKCkgPT0gQ29sb3JTcGFjZUxpbmVhclJHQikgPyBzUkdCQ29sb3JUb0xp
bmVhckNvbXBvbmVudHMobV9saWdodGluZ0NvbG9yKSA6IEZsb2F0Q29tcG9uZW50cyhtX2xpZ2h0
aW5nQ29sb3IpOworICAgIEZsb2F0Q29tcG9uZW50cyBsaWdodENvbG9yID0gKG9wZXJhdGluZ0Nv
bG9yU3BhY2UoKSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpID8gc1JHQkNvbG9yVG9MaW5lYXJD
b21wb25lbnRzKG1fbGlnaHRpbmdDb2xvcikgOiBGbG9hdENvbXBvbmVudHMobV9saWdodGluZ0Nv
bG9yKTsKICAgICBwYWludGluZ0RhdGEuaW5pdGlhbExpZ2h0aW5nRGF0YS5jb2xvclZlY3RvciA9
IEZsb2F0UG9pbnQzRChsaWdodENvbG9yLmNvbXBvbmVudHNbMF0sIGxpZ2h0Q29sb3IuY29tcG9u
ZW50c1sxXSwgbGlnaHRDb2xvci5jb21wb25lbnRzWzJdKTsKICAgICBtX2xpZ2h0U291cmNlLT5p
bml0UGFpbnRpbmdEYXRhKCp0aGlzLCBwYWludGluZ0RhdGEpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVGlsZS5jcHAKaW5kZXggNzA3YzZl
YjQ2YzgzMjk3ZmJmNmUyZDkwZjVkZmY0N2U2OTM2ZDg1NC4uMWE4MDE4NWRmNGMxOGMzMmVmY2Qy
MTJkMGQ3MmUyMWI0YmJmYTczZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVRpbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVUaWxlLmNwcApAQCAtNjQsNyArNjQsNyBAQCB2b2lkIEZFVGls
ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgdGlsZVJlY3Quc2NhbGUoZmlsdGVy
LmZpbHRlclJlc29sdXRpb24oKS53aWR0aCgpLCBmaWx0ZXIuZmlsdGVyUmVzb2x1dGlvbigpLmhl
aWdodCgpKTsKICAgICB9CiAKLSAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHRpbGVSZWN0LCB0aWxlUmVjdCwgQ29sb3JTcGFjZVNSR0Is
IGZpbHRlcigpLnJlbmRlcmluZ01vZGUoKSk7CisgICAgYXV0byB0aWxlSW1hZ2UgPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcih0aWxlUmVjdCwgdGlsZVJlY3QsIENvbG9y
U3BhY2U6OlNSR0IsIGZpbHRlcigpLnJlbmRlcmluZ01vZGUoKSk7CiAgICAgaWYgKCF0aWxlSW1h
Z2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMTlmNmZiNGRkYmYyYzQz
NjZiOGU1YjA2NWQxNzhlYTY1NmVjNDEwMy4uYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYyZjNlYTJi
NmU5MzMyZmU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0yMTEsOCArMjExLDggQEAgcHJpdmF0ZToK
ICAgICAvLyBTaG91bGQgdGhlIGVmZmVjdCBjbGlwIHRvIGl0cyBwcmltaXRpdmUgcmVnaW9uLCBv
ciBleHBhbmQgdG8gdXNlIHRoZSBjb21iaW5lZCByZWdpb24gb2YgaXRzIGlucHV0cy4KICAgICBi
b29sIG1fY2xpcHNUb0JvdW5kcyB7IHRydWUgfTsKIAotICAgIENvbG9yU3BhY2UgbV9vcGVyYXRp
bmdDb2xvclNwYWNlIHsgQ29sb3JTcGFjZUxpbmVhclJHQiB9OwotICAgIENvbG9yU3BhY2UgbV9y
ZXN1bHRDb2xvclNwYWNlIHsgQ29sb3JTcGFjZVNSR0IgfTsKKyAgICBDb2xvclNwYWNlIG1fb3Bl
cmF0aW5nQ29sb3JTcGFjZSB7IENvbG9yU3BhY2U6OkxpbmVhclJHQiB9OworICAgIENvbG9yU3Bh
Y2UgbV9yZXN1bHRDb2xvclNwYWNlIHsgQ29sb3JTcGFjZTo6U1JHQiB9OwogfTsKIAogV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNv
bnN0IEZpbHRlckVmZmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCAzNjE1ZjBlOWI2MWE4MzNh
YjFkNDY4N2FiYTY4YWIzMjE0NTU4ZmRmLi40Mjg2MjliZTM1NWJjOTk1NDVlMGYyYzQ3ZDFmZjAy
YTI5YTNhZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMzYsNyArMzYsNyBAQCBwcml2YXRlOgog
ICAgIFNvdXJjZUdyYXBoaWMoRmlsdGVyJiBmaWx0ZXIpCiAgICAgICAgIDogRmlsdGVyRWZmZWN0
KGZpbHRlcikKICAgICB7Ci0gICAgICAgIHNldE9wZXJhdGluZ0NvbG9yU3BhY2UoQ29sb3JTcGFj
ZVNSR0IpOworICAgICAgICBzZXRPcGVyYXRpbmdDb2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0Ip
OwogICAgIH0KIAogICAgIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAiU291cmNlR3JhcGhpYyI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAppbmRleCA1NWYz
Y2UxYThjZDg0M2ZjOWYwMjYyNjBjM2Q3NmYyNTg3ZWExZjNhLi41ZTljZjA1NzhhNmI4MjlmMGE2
YzBhMDFiMDk4NmU2MDNkNjA0MjhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCkBAIC02Niw3
ICs2Niw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplCiAgICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7CiAgICAgSW50U2l6ZSBzY2FsZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwog
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBDb2xvclNwYWNlU1JHQiwg
cmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgJmNvbnRleHQsIHN1Y2Nlc3MpKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwg
MSwgQ29sb3JTcGFjZTo6U1JHQiwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgJmNvbnRleHQsIHN1
Y2Nlc3MpKTsKIAogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvVGhlbWVNYWMubW0KaW5kZXggMjcyODI0ZWM4OGJiYmMx
MDM2OTQ3N2VkMDk4YWM0ODQ0MTNhYjlhZi4uNjZjYjY5YmNmNDUwOTA4NjYyNGM0YTE1YjE4MWY2
MWRhNzY4ZTAzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1RoZW1l
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9UaGVtZU1hYy5tbQpAQCAt
Njk4LDcgKzY5OCw3IEBAIGJvb2wgVGhlbWVNYWM6OmRyYXdDZWxsT3JGb2N1c1JpbmdXaXRoVmll
d0ludG9Db250ZXh0KE5TQ2VsbCAqY2VsbCwgR3JhcGhpY3NDb250CiAgICAgYm9vbCBuZWVkc1Jl
cGFpbnQgPSBmYWxzZTsKICAgICBpZiAodXNlSW1hZ2VCdWZmZXIpIHsKICAgICAgICAgTlNSZWN0
IGltYWdlQnVmZmVyRHJhd1JlY3QgPSBOU1JlY3QoRmxvYXRSZWN0KGJ1dHRvbkZvY3VzUmVjdE91
dGxpbmVXaWR0aCwgYnV0dG9uRm9jdXNSZWN0T3V0bGluZVdpZHRoLCByZWN0LndpZHRoKCksIHJl
Y3QuaGVpZ2h0KCkpKTsKLSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKHJlY3Quc2l6ZSgpICsgMiAqIEZsb2F0U2l6ZShidXR0b25G
b2N1c1JlY3RPdXRsaW5lV2lkdGgsIGJ1dHRvbkZvY3VzUmVjdE91dGxpbmVXaWR0aCksIGRldmlj
ZVNjYWxlRmFjdG9yLCBDb2xvclNwYWNlU1JHQiwgY29udGV4dCk7CisgICAgICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihyZWN0LnNpemUo
KSArIDIgKiBGbG9hdFNpemUoYnV0dG9uRm9jdXNSZWN0T3V0bGluZVdpZHRoLCBidXR0b25Gb2N1
c1JlY3RPdXRsaW5lV2lkdGgpLCBkZXZpY2VTY2FsZUZhY3RvciwgQ29sb3JTcGFjZTo6U1JHQiwg
Y29udGV4dCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgICAgICByZXR1cm4g
bmVlZHNSZXBhaW50OwogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIu
Y3BwCmluZGV4IDZkNTk1YTJkYjI5YzUzYmZiMjliNjZhZTUyYmYyMjdlNWJhNzEyMzUuLjE2MDI1
N2JjYjkwOGU3MmFhZjM5ZDIyMGNhNWI1Yjc2ZDVjNWNkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0xMjEsNyArMTIxLDcgQEAgUmVmUHRyPEZpbHRlckVmZmVj
dD4gQ1NTRmlsdGVyOjpidWlsZFJlZmVyZW5jZUZpbHRlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgRmkKIAogICAgICAgICBlZmZlY3RFbGVtZW50LnNldFN0YW5kYXJkQXR0cmlidXRlcyhlZmZl
Y3QuZ2V0KCkpOwogICAgICAgICBpZiAoZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpKQotICAgICAg
ICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVmZmVjdEVsZW1lbnQucmVuZGVy
ZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMoKSA9PSBD
b2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJSR0IgOiBDb2xv
clNwYWNlU1JHQik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0NvbG9yU3BhY2Uo
ZWZmZWN0RWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRlcnBv
bGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JT
cGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQik7CiAKICAgICAgICAgYnVpbGRlci0+
YWRkKGVmZmVjdEVsZW1lbnQucmVzdWx0KCksIGVmZmVjdCk7CiAgICAgICAgIG1fZWZmZWN0cy5h
cHBlbmQoKmVmZmVjdCk7CkBAIC0yODksNyArMjg5LDcgQEAgYm9vbCBDU1NGaWx0ZXI6OmJ1aWxk
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBvcGVyYXRp
b24KICAgICAgICAgICAgIC8vIFVubGlrZSBTVkcgRmlsdGVycyBhbmQgQ1NTRmlsdGVySW1hZ2Vz
LCBmaWx0ZXIgZnVuY3Rpb25zIG9uIHRoZSBmaWx0ZXIKICAgICAgICAgICAgIC8vIHByb3BlcnR5
IGFwcGxpZWQgaGVyZSBzaG91bGQgbm90IGNsaXAgdG8gdGhlaXIgcHJpbWl0aXZlIHN1YnJlZ2lv
bnMuCiAgICAgICAgICAgICBlZmZlY3QtPnNldENsaXBzVG9Cb3VuZHMoY29uc3VtZXIgPT0gRmls
dGVyQ29uc3VtZXI6OkZpbHRlckZ1bmN0aW9uKTsKLSAgICAgICAgICAgIGVmZmVjdC0+c2V0T3Bl
cmF0aW5nQ29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBlZmZlY3QtPnNl
dE9wZXJhdGluZ0NvbG9yU3BhY2UoQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGlmIChmaWx0ZXJPcGVyYXRpb24udHlwZSgpICE9IEZpbHRlck9wZXJhdGlvbjo6
UkVGRVJFTkNFKSB7CiAgICAgICAgICAgICAgICAgZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5hcHBl
bmQoV1RGTW92ZShwcmV2aW91c0VmZmVjdCkpOwpAQCAtMzY2LDcgKzM2Niw3IEBAIHZvaWQgQ1NT
RmlsdGVyOjphcHBseSgpCiB7CiAgICAgYXV0byYgZWZmZWN0ID0gbV9lZmZlY3RzLmxhc3QoKS5n
ZXQoKTsKICAgICBlZmZlY3QuYXBwbHkoKTsKLSAgICBlZmZlY3QudHJhbnNmb3JtUmVzdWx0Q29s
b3JTcGFjZShDb2xvclNwYWNlU1JHQik7CisgICAgZWZmZWN0LnRyYW5zZm9ybVJlc3VsdENvbG9y
U3BhY2UoQ29sb3JTcGFjZTo6U1JHQik7CiB9CiAKIExheW91dFJlY3QgQ1NTRmlsdGVyOjpjb21w
dXRlU291cmNlSW1hZ2VSZWN0Rm9yRGlydHlSZWN0KGNvbnN0IExheW91dFJlY3QmIGZpbHRlckJv
eFJlY3QsIGNvbnN0IExheW91dFJlY3QmIGRpcnR5UmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IGU1Yjc1NTgyNThjZGU2
NmYzZDI2ODAxNTc5NDNlNDdkNTBmNGRhOTAuLmM4YzdiZjEyN2VmZjQwMDFkNGMwYTU5YmUzMmI2
YmIzMWM2YmM5OTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcApAQCAtODYxLDcgKzg2MSw3IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxP
YmplY3Q6OnBhaW50RmlsbExheWVyRXh0ZW5kZWQoY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvCiAgICAgICAgIG1hc2tSZWN0LmludGVyc2VjdChzbmFwcGVkSW50UmVjdChwYWludEluZm8u
cmVjdCkpOwogCiAgICAgICAgIC8vIE5vdyBjcmVhdGUgdGhlIG1hc2suCi0gICAgICAgIG1hc2tJ
bWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKG1hc2tSZWN0LnNpemUo
KSwgQ29sb3JTcGFjZVNSR0IsIGNvbnRleHQpOworICAgICAgICBtYXNrSW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihtYXNrUmVjdC5zaXplKCksIENvbG9yU3BhY2U6
OlNSR0IsIGNvbnRleHQpOwogICAgICAgICBpZiAoIW1hc2tJbWFnZSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgcGFpbnRNYXNrRm9yVGV4dEZpbGxCb3gobWFza0ltYWdlLmdldCgpLCBt
YXNrUmVjdCwgYm94LCBzY3JvbGxlZFBhaW50UmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IGQwODI4YTIyZWEwMGJlN2IzM2Fj
M2I3YTJkNWJlN2MxMzRhMmNjMTAuLjhlYjViYzIyMTBiOGMxZTg0NTlhY2EyNjAyZDc4MTJkZTA3
N2ViYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCkBAIC0yOTI3LDcgKzI5MjcsNyBAQCBzdGF0aWMgUmVmUHRyPFBhdHRlcm4+IHBhdHRl
cm5Gb3JUb3VjaEFjdGlvbihUb3VjaEFjdGlvbiB0b3VjaEFjdGlvbiwgRmxvYXRTaXplCiAKICAg
ICBjb25zdCBGbG9hdFNpemUgdGlsZVNpemUgeyAzMiwgMTggfTsKIAotICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcih0aWxlU2l6ZSwgQ29s
b3JTcGFjZVNSR0IsIGRlc3RDb250ZXh0KTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIodGlsZVNpemUsIENvbG9yU3BhY2U6OlNSR0Is
IGRlc3RDb250ZXh0KTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4
IDY1NzRiNTBmNDMyNjUzNDhhOTQyN2ZmNTlmNzA0MzhhYjYwZDhjNWQuLmNkOGFmNmUyYTc4NWYw
MTY5MjQ3YjBkMWYyY2FhNzdjOTNjNjE0MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KQEAgLTE0NzEsNyArMTQ3MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhCiAgICAgdHJhY2tJbmZvLnJlc2VydmVkID0gMDsKICAgICB0cmFja0luZm8uZmlsbGVy
MSA9IDA7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoaW5mbGF0ZWRSZWN0LnNpemUoKSwg
ZGV2aWNlU2NhbGVGYWN0b3IsIENvbG9yU3BhY2VTUkdCLCBwYWludEluZm8uY29udGV4dCgpKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoaW5mbGF0ZWRSZWN0LnNpemUoKSwgZGV2aWNlU2Nh
bGVGYWN0b3IsIENvbG9yU3BhY2U6OlNSR0IsIHBhaW50SW5mby5jb250ZXh0KCkpOwogICAgIGlm
ICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAK
aW5kZXggY2Y1ZDM1YjU4ODQxZGJjY2YyYzI3YTZlNWNkMzkyMWNiNGFkYzZhNi4uMDhlNDkyODJh
ZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAt
MTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBw
aW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxk
Q3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVu
Y29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQg
YnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdl
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlU1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQp
OworICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpT
UkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJ
bWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCBk
ODIzYTAyYjU0ZGYxM2FjMzQzYWRiYTZkNWYxNDNkNGJhYWNiNzU0Li43NWI1OWI2M2MzZTQ5NjBi
ZDRlM2JkYmQ4NzQ5MmE5MzJmNDMxNjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTAzLDcgKzEw
Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVzKFNWR0ZpCiAgICAgICAgIGVsZW1lbnQuc2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKGVmZmVjdC5nZXQoKSk7CiAgICAgICAgIGVmZmVjdC0+c2V0RWZmZWN0Qm91
bmRhcmllcyhTVkdMZW5ndGhDb250ZXh0OjpyZXNvbHZlUmVjdGFuZ2xlPFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcz4oJmVsZW1lbnQsIGZpbHRlckVsZW1lbnQoKS5wcmltaXRp
dmVVbml0cygpLCB0YXJnZXRCb3VuZGluZ0JveCkpOwogICAgICAgICBpZiAoZWxlbWVudC5yZW5k
ZXJlcigpKQotICAgICAgICAgICAgZWZmZWN0LT5zZXRPcGVyYXRpbmdDb2xvclNwYWNlKGVsZW1l
bnQucmVuZGVyZXIoKS0+c3R5bGUoKS5zdmdTdHlsZSgpLmNvbG9ySW50ZXJwb2xhdGlvbkZpbHRl
cnMoKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2VMaW5lYXJS
R0IgOiBDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBlZmZlY3QtPnNldE9wZXJhdGluZ0Nv
bG9yU3BhY2UoZWxlbWVudC5yZW5kZXJlcigpLT5zdHlsZSgpLnN2Z1N0eWxlKCkuY29sb3JJbnRl
cnBvbGF0aW9uRmlsdGVycygpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29s
b3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQik7CiAgICAgICAgIGJ1aWxkZXIt
PmFkZChlbGVtZW50LnJlc3VsdCgpLCBXVEZNb3ZlKGVmZmVjdCkpOwogICAgIH0KICAgICByZXR1
cm4gYnVpbGRlcjsKQEAgLTE5Miw3ICsxOTIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQog
ICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybSk7CiAKICAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5k
ZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZDsKLSAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZl
Y3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2VMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRl
eHQpOworICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9y
bSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBp
ZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0
YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKICAgICAgICAgZmlsdGVyRGF0YS0+c2F2ZWRDb250
ZXh0ID0gY29udGV4dDsKQEAgLTI3MSw3ICsyNzEsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhp
YwogICAgICAgICAgICAgZmlsdGVyRGF0YS5zdGF0ZSA9IEZpbHRlckRhdGE6OkFwcGx5aW5nOwog
ICAgICAgICAgICAgbGFzdEVmZmVjdC0+YXBwbHkoKTsKICAgICAgICAgICAgIGxhc3RFZmZlY3Qt
PmNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5lZWRlZCgpOwotICAgICAgICAgICAgbGFzdEVmZmVjdC0+
dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7CisgICAgICAgICAgICBs
YXN0RWZmZWN0LT50cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IpOwog
ICAgICAgICB9CiAgICAgICAgIGZpbHRlckRhdGEuc3RhdGUgPSBGaWx0ZXJEYXRhOjpCdWlsdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VHcmFkaWVudC5jcHAKaW5kZXggNTUyY2U1YTMzYTgwNjJlNmJlZTBiMDRhZTNmMTYw
ZjA5OWViNTJmNS4uY2YzZjllYTg4YjE0NTlkOTc3M2RkNTNmMmIwMTJlMmI0YjJiMDYyYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdy
YWRpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuY3BwCkBAIC02MCw3ICs2MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBj
cmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoR3JhcGhpY3NDb250ZXh0KiYg
Y29uCiAgICAgQWZmaW5lVHJhbnNmb3JtIGFic29sdXRlVHJhbnNmb3JtID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y2FsY3VsYXRlVHJhbnNmb3JtYXRpb25Ub091dGVybW9zdENvb3JkaW5hdGVTeXN0
ZW0oKnRleHRSb290QmxvY2spOwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IHRleHRSb290
QmxvY2stPnJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAKLSAgICBhdXRvIG1hc2tJ
bWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0
LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZVNSR0IsIGNvbnRleHQtPnJlbmRlcmluZ01v
ZGUoKSk7CisgICAgYXV0byBtYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNS
R0IsIGNvbnRleHQtPnJlbmRlcmluZ01vZGUoKSk7CiAgICAgaWYgKCFtYXNrSW1hZ2UpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCA0YzgxOWI5YmM1NWRjMmJm
YTgyZmJiYzA5N2Y2Mzc1ODViNWIxMjc3Li4xNzg3ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1
MTY2YWQ1ODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNjksNyArNjksNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBSZW5kZQogCiAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgJiYgIXJlcGFp
bnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5
bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7Ci0gICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9
IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGlu
ZWFyUkdCID8gQ29sb3JTcGFjZUxpbmVhclJHQiA6IENvbG9yU3BhY2VTUkdCOworICAgICAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBD
b2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENv
bG9yU3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1
ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcg
aXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KICAgICAg
ICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFj
Y2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2Up
CkBAIC0xMTMsNyArMTEzLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6ZHJhd0Nv
bnRlbnRJbnRvTWFza0ltYWdlKE1hc2tlckRhdGEqIG1hc2tlckRhdGEsIEMKICAgICB9CiAKICNp
ZiAhVVNFKENHKQotICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZS0+dHJhbnNmb3JtQ29sb3JTcGFj
ZShDb2xvclNwYWNlU1JHQiwgY29sb3JTcGFjZSk7CisgICAgbWFza2VyRGF0YS0+bWFza0ltYWdl
LT50cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2U6OlNSR0IsIGNvbG9yU3BhY2UpOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oY29sb3JTcGFjZSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0ZXJuLmNw
cAppbmRleCAzMWJjNWYxOTMxYmRhZTUwYWFjNjYxMzU5ZmMwYTI2ZjE3ODU4NmZjLi4xYzNjODU0
YWVmMjk3NjljMmRmOWViNDRmOWNkMTliM2IxYzY1NzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm4uY3BwCkBA
IC0yNTUsNyArMjU1LDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkVGls
ZUltYWdlVHJhbnNmb3JtKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLAogc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmNyZWF0ZVRpbGVJbWFnZShj
b25zdCBQYXR0ZXJuQXR0cmlidXRlcyYgYXR0cmlidXRlcywgY29uc3QgRmxvYXRSZWN0JiB0aWxl
Qm91bmRhcmllcywgY29uc3QgRmxvYXRSZWN0JiBhYnNvbHV0ZVRpbGVCb3VuZGFyaWVzLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRpbGVJbWFnZVRyYW5zZm9ybSwgRmxvYXRSZWN0JiBjbGFtcGVk
QWJzb2x1dGVUaWxlQm91bmRhcmllcywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKSBjb25z
dAogewogICAgIGNsYW1wZWRBYnNvbHV0ZVRpbGVCb3VuZGFyaWVzID0gSW1hZ2VCdWZmZXI6OmNs
YW1wZWRSZWN0KGFic29sdXRlVGlsZUJvdW5kYXJpZXMpOwotICAgIGF1dG8gdGlsZUltYWdlID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoYWJzb2x1dGVUaWxlQm91bmRh
cmllcywgY2xhbXBlZEFic29sdXRlVGlsZUJvdW5kYXJpZXMsIENvbG9yU3BhY2VTUkdCLCByZW5k
ZXJpbmdNb2RlKTsKKyAgICBhdXRvIHRpbGVJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKGFic29sdXRlVGlsZUJvdW5kYXJpZXMsIGNsYW1wZWRBYnNvbHV0ZVRp
bGVCb3VuZGFyaWVzLCBDb2xvclNwYWNlOjpTUkdCLCByZW5kZXJpbmdNb2RlKTsKICAgICBpZiAo
IXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IGFhOTJk
NjM0ZWNlZjgwZTkwNjhhODExNTc4MzcwMjhlNmM2MWYzZWQuLmQ3ODY5NGFhZTdiMzU5MmIzNjI1
MjY3ZDk1MDAxNjZhYmUwNTBmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wg
U1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+JiBpbWFnZUJ1CiAKICAgICAvLyBDcmVhdGUgYSBuZXcgYnVmZmVyIGFuZCBwYWlu
dCB0aGUgZm9yZWdyb3VuZCBpbnRvIGl0LgogICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKLSAgICAg
ICAgaWYgKChpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGV4cGFuZGVkSW50U2l6ZShib3VuZGluZ0JveC5zaXplKCkpLCBDb2xvclNwYWNlU1JHQiwgbV9w
YWludEluZm8tPmNvbnRleHQoKSkpKSB7CisgICAgICAgIGlmICgoaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihleHBhbmRlZEludFNpemUoYm91bmRpbmdC
b3guc2l6ZSgpKSwgQ29sb3JTcGFjZTo6U1JHQiwgbV9wYWludEluZm8tPmNvbnRleHQoKSkpKSB7
CiAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQmIGJ1ZmZlcmVkUmVuZGVyaW5nQ29udGV4dCA9
IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAgICAgICAgICBidWZmZXJlZFJlbmRlcmluZ0Nv
bnRleHQudHJhbnNsYXRlKC1ib3VuZGluZ0JveC5sb2NhdGlvbigpKTsKICAgICAgICAgICAgIFBh
aW50SW5mbyBidWZmZXJlZEluZm8oKm1fcGFpbnRJbmZvKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGMzNTM3ZTM4Y2Q5ODA0OGZjMDIxNzVmMjgyMjE0YjUx
NTM5YTA5MzguLjdlODYwNzk4ZjcxZjc2YjU3NmZjNmUxOTM2ZmYxYmE3MjhkNzExNzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjc5LDcgKzI3OSw3IEBA
IHZvaWQgU1ZHSW1hZ2U6OmRyYXdQYXR0ZXJuRm9yQ29udGFpbmVyKEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRTaXplCiAgICAgRmxvYXRSZWN0IGltYWdlQnVmZmVyU2l6ZSA9
IHpvb21lZENvbnRhaW5lclJlY3Q7CiAgICAgaW1hZ2VCdWZmZXJTaXplLnNjYWxlKGltYWdlQnVm
ZmVyU2NhbGUud2lkdGgoKSwgaW1hZ2VCdWZmZXJTY2FsZS5oZWlnaHQoKSk7CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGV4cGFuZGVkSW50U2l6ZShpbWFnZUJ1ZmZlclNpemUuc2l6ZSgpKSwgMSwg
Q29sb3JTcGFjZVNSR0IsIGNvbnRleHQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoZXhwYW5kZWRJ
bnRTaXplKGltYWdlQnVmZmVyU2l6ZS5zaXplKCkpLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBjb250
ZXh0KTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gRmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlci4KICAg
ICAgICAgcmV0dXJuOwogICAgIGRyYXdGb3JDb250YWluZXIoYnVmZmVyLT5jb250ZXh0KCksIGNv
bnRhaW5lclNpemUsIGNvbnRhaW5lclpvb20sIGluaXRpYWxGcmFnbWVudFVSTCwgaW1hZ2VCdWZm
ZXJTaXplLCB6b29tZWRDb250YWluZXJSZWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZFSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRkVJbWFnZS5jcHAKaW5kZXggYzU4NGViNTM3ZTZlNTY3MzE4
ZWIwMjM4OGVmZjc4MjgyMmE5NjI3NC4uOGYxMzhhMmU1YTE1ZDhjYjE3MTRjZjJiNmRkMDA1OTVm
OTk1YTI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRkVJbWFnZS5jcHAKQEAgLTkzLDggKzkzLDggQEAgdm9pZCBGRUltYWdlOjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgIGlmICghbV9pbWFnZSAmJiAhcmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIC8vIEZFSW1hZ2UgcmVzdWx0cyBhcmUgYWx3YXlzIGluIENvbG9yU3BhY2VT
UkdCCi0gICAgc2V0UmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlU1JHQik7CisgICAgLy8gRkVJ
bWFnZSByZXN1bHRzIGFyZSBhbHdheXMgaW4gQ29sb3JTcGFjZTo6U1JHQgorICAgIHNldFJlc3Vs
dENvbG9yU3BhY2UoQ29sb3JTcGFjZTo6U1JHQik7CiAKICAgICBJbWFnZUJ1ZmZlciogcmVzdWx0
SW1hZ2UgPSBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIGlmICghcmVzdWx0SW1hZ2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggYmQxMzlmZTUzMzFiY2NlMzZjMzM0M2IxNTIxN2QwMTFmMjUyNGMz
OC4uODk5ZjBiZTA2NTI0MjEwMzU0MmFiNGU3Njg3NjBjZjY4ODAyMzAxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKICNpbmNsdWRlICJH
UFVQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHlNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIklPU3VyZmFjZU1hbmFnZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgiCiAjaW5j
bHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgpAQCAtNzQsNiAr
NzUsMjIgQEAgdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWMKICAgICBDUkFTSCgpOwogfQogCit2b2lk
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVNoYXJlZElPU3VyZmFjZShjb25zdCBJ
bnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlU2hhcmVk
SU9TdXJmYWNlOjpEZWxheWVkUmVwbHkmJiByZXBseSkKK3sKKyAgICBhdXRvIHJlc3VsdCA9IElP
U3VyZmFjZU1hbmFnZXI6OnNoYXJlZE1hbmFnZXIoKS5jcmVhdGVTaGFyZWRJT1N1cmZhY2Uoc2l6
ZSwgY29udGV4dFNpemUsIGNvbG9yU3BhY2UpOworCisgICAgQVNTRVJUKCEhcmVzdWx0LmZpcnN0
ID09ICEhcmVzdWx0LnNlY29uZCk7CisgICAgaWYgKHJlc3VsdC5zZWNvbmQpCisgICAgICAgIHJl
cGx5KHJlc3VsdC5maXJzdCwgcmVzdWx0LnNlY29uZC0+Y3JlYXRlU2VuZFJpZ2h0KCkpOworICAg
IGVsc2UKKyAgICAgICAgcmVwbHkoMCwgeyB9KTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpyZWxlYXNlU2hhcmVkSU9TdXJmYWNlKHVpbnQ2NF90IHN1cmZhY2VJRCkKK3sK
KyAgICBJT1N1cmZhY2VNYW5hZ2VyOjpzaGFyZWRNYW5hZ2VyKCkucmVsZWFzZVNoYXJlZElPU3Vy
ZmFjZShzdXJmYWNlSUQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IGM2NGE0M2U2NGFmNTEwYzA3NGQ3MDg2
ZjdiNjQ2ZmE2YzZhNGY0NjcuLjJhMmU1ODg1NzQ0ODE0ODVhMjA5OTA2ZDljMmRlZWIwZjY1MmQx
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaApAQCAtMjksNiArMjksOCBAQAogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgogI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNp
emUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KIApAQCAtNTUsOSArNTcsMTQgQEAgcHJpdmF0ZToKICAgICBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKIAogICAgIC8vIElQQzo6Q29ubmVj
dGlvbjo6Q2xpZW50CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogCisgICAgdm9pZCBjcmVhdGVTaGFy
ZWRJT1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNZXNzYWdlczo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlU2hhcmVkSU9TdXJmYWNlRGVsYXllZFJlcGx5JiYpOwor
ICAgIHZvaWQgcmVsZWFzZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpOworCiAg
ICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNz
PiBtX2dwdVByb2Nlc3M7CiAgICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93
ZWJQcm9jZXNzSWRlbnRpZmllcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0
MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uYzYwZmFmMjVmOWM0NzZkMTVk
NjVkOWQ2NjcyZGI1Y2IyMGI1YmY0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAg
LTIzLDYgKzIzLDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgeworICAgIHZvaWQgQ3JlYXRlU2hhcmVkSU9TdXJmYWNl
KFdlYkNvcmU6OkludFNpemUgc2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZXh0U2l6ZSwgZW51
bTp1aW50OF90IFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgLT4gKHVpbnQ2NF90IHN1
cmZhY2VJRCwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpIFN5bmNocm9ub3VzCisgICAgdm9pZCBS
ZWxlYXNlU2hhcmVkSU9TdXJmYWNlKHVpbnQ2NF90IHN1cmZhY2VJRCkKIH0KIAogI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9JT1N1cmZhY2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9JT1N1cmZh
Y2VNYW5hZ2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTllMWJiYjBlNjA4M2NmMWIzZjU0NTU5YWY0ZjVh
NzgxYTc2ZjdhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lP
U3VyZmFjZU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlTWFuYWdlci5oIgorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
T1N1cmZhY2UuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworSU9TdXJmYWNlTWFuYWdlciYgSU9TdXJmYWNlTWFuYWdlcjo6c2hhcmVkTWFuYWdlcigp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPElPU3VyZmFjZU1hbmFnZXI+IG1hbmFnZXI7
CisgICAgcmV0dXJuIG1hbmFnZXIuZ2V0KCk7Cit9CisKK3N0YXRpYyBhdXRvJiBzdXJmYWNlTWFw
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDx1aW50NjRfdCwgc3RkOjp1
bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4+PiBtYXA7CisgICAgcmV0dXJuIG1hcC5nZXQo
KTsKK30KKworc3RkOjpwYWlyPHVpbnQ2NF90LCBXZWJDb3JlOjpJT1N1cmZhY2UqPiBJT1N1cmZh
Y2VNYW5hZ2VyOjpjcmVhdGVTaGFyZWRJT1N1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29u
c3QgSW50U2l6ZSYgY29udGV4dFNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBh
dXRvIHN1cmZhY2UgPSAgSU9TdXJmYWNlOjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNhY2hl
ZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgLy8gSW5pdGFsaXplIHRoZSBjb29yZGluYXRlIHN5c3RlbS4KKyAg
ICBHcmFwaGljc0NvbnRleHQmIHN1cmZhY2VDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlR3JhcGhp
Y3NDb250ZXh0KCk7CisgICAgc3VyZmFjZUNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
CisgICAgc3VyZmFjZUNvbnRleHQudHJhbnNsYXRlKDAsIC1jb250ZXh0U2l6ZS5oZWlnaHQoKSk7
CisKKyAgICAvLyBBc3NpZ25pbmcgYW4gSUQgZm9yIHRoZSBJT1N1cmZhY2UuCisgICAgYXV0byBz
dXJmYWNlSUQgPSBuZXh0U3VyZmFjZUlEKCk7CisgICAgQVNTRVJUKCFzdXJmYWNlTWFwKCkuY29u
dGFpbnMoc3VyZmFjZUlEKSk7CisgICAgCisgICAgYXV0byByZXN1bHQgPSBzdXJmYWNlLmdldCgp
OworICAgIHN1cmZhY2VNYXAoKS5hZGQoc3VyZmFjZUlELCBXVEZNb3ZlKHN1cmZhY2UpKTsKKwor
ICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihzdXJmYWNlSUQsIHJlc3VsdCk7Cit9CisKK2Jvb2wg
SU9TdXJmYWNlTWFuYWdlcjo6cmVsZWFzZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNl
SUQpCit7CisgICAgQVNTRVJUKHN1cmZhY2VNYXAoKS5jb250YWlucyhzdXJmYWNlSUQpKTsKKyAg
ICByZXR1cm4gc3VyZmFjZU1hcCgpLnJlbW92ZShzdXJmYWNlSUQpOworfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvSU9TdXJmYWNlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lPU3Vy
ZmFjZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMTJiZDA4ZmY5MjVmM2FhYmEwMzI5M2M0MzkxZWVj
NTQ4YzQ1OTJiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0lP
U3VyZmFjZU1hbmFnZXIuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0lPU3VyZmFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgSU9TdXJmYWNlTWFuYWdlciB7CitwdWJsaWM6CisgICAgSU9T
dXJmYWNlTWFuYWdlcigpID0gZGVmYXVsdDsKKworICAgIHN0YXRpYyBJT1N1cmZhY2VNYW5hZ2Vy
JiBzaGFyZWRNYW5hZ2VyKCk7CisKKyAgICBzdGQ6OnBhaXI8dWludDY0X3QsIFdlYkNvcmU6OklP
U3VyZmFjZSo+IGNyZWF0ZVNoYXJlZElPU3VyZmFjZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2Up
OworICAgIGJvb2wgcmVsZWFzZVNoYXJlZElPU3VyZmFjZSh1aW50NjRfdCBzdXJmYWNlSUQpOwor
Citwcml2YXRlOgorICAgIHVpbnQ2NF90IG5leHRTdXJmYWNlSUQoKSB7IHJldHVybiArK21fc3Vy
ZmFjZUlEOyB9CisKKyAgICB1aW50NjRfdCBtX3N1cmZhY2VJRCB7IDAgfTsKK307CisKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggNjA2ZGJjYThlMzI2YjFkNGY5ODIyZGRhOTNiNzhj
ODFkMWJlNDQzMi4uOTRmNDMyMWIzZWVhMWM3NWI2NTMzNGIzM2EyNGYyYmQ2ZDc1OGE3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysr
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTc4Niw5
ICs3ODYsOSBAQCBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8
V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAg
ICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKLSAgICBXZWJDb3JlOjpDb2xvclNwYWNlOjpDb2xvclNw
YWNlU1JHQiwKLSAgICBXZWJDb3JlOjpDb2xvclNwYWNlOjpDb2xvclNwYWNlTGluZWFyUkdCLAot
ICAgIFdlYkNvcmU6OkNvbG9yU3BhY2U6OkNvbG9yU3BhY2VEaXNwbGF5UDMKKyAgICBXZWJDb3Jl
OjpDb2xvclNwYWNlOjpTUkdCLAorICAgIFdlYkNvcmU6OkNvbG9yU3BhY2U6OkxpbmVhclJHQiwK
KyAgICBXZWJDb3JlOjpDb2xvclNwYWNlOjpEaXNwbGF5UDMKICAgICA+OwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKaW5kZXggNzNmZjRkMjdiZWUzZDgyYTExNDY3MTc0OTJiY2I2NjQ1MjM1YjY0Mi4uMjQ1NjA1
ZTgxZGJkMjk1ZDAwY2RiY2UwM2UzOTZmOTY1ZjMwNDA1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNCw2
ICsyNCw3IEBACiBHUFVQcm9jZXNzL0dQVVByb2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVVByb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuY3BwCitHUFVQcm9jZXNzL0lPU3VyZmFjZU1hbmFnZXIuY3BwCiAKIE5ldHdvcmtQcm9j
ZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
QWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTc2LDYgKzU3Nyw3IEBAIFdlYlByb2Nlc3MvV2ViUGFn
ZS9EcmF3aW5nQXJlYS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9FdmVudERpc3BhdGNoZXIuY3Bw
CiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCiBXZWJQcm9jZXNzL1dlYlBh
Z2UvUGFnZUJhbm5lci5jcHAKK1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVdlYkluc3BlY3RvclVJLmNwcAogV2Vi
UHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjc5ZGRjMTIwNDBmMmJmNzky
NDBjY2E1NWVmOTg5MzBiNTAwNzUzNC4uMTMzOTg0NTM0ZWE2MGI1NjlkNWY3NWE3NDY3NGQxZjJh
NzcyMWRiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0zNTgzLDYgKzM1ODMsMTAgQEAKIAkJNTNDRkJCQzYyMjI0RDFCMDAwMjY2NTQ2
IC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1M0NGQkJDNzIyMjREMUIwMDAyNjY1NDYgLyogVGV4dENoZWNrZXJDb21wbGV0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ29tcGxl
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YzQ0FBNTIwNkM0NDNFMDA4
NjQ5MEUgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTAyMzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUExMjM5OUJEQTIwMDUw
Q0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTYy
Mzk5RTYwQzAwNTBDRDIyIC8qIElPU3VyZmFjZU1hbmFnZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSU9T
dXJmYWNlTWFuYWdlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBNzIz
OTlFNkQ0MDA1MENEMjIgLyogSU9TdXJmYWNlTWFuYWdlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJT1N1cmZhY2VNYW5hZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcw
QUI4RjIyMEFFM0JENzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2VjS2V5UHJveHlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBB
QjkwMDIwQjI1MTc0MDBCOEJFODcgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29h
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNv
Y29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMzIwQjI1NDFDMDBC
OEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFNlY0tleVByb3h5U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MjE0LDYgKzYyMTgsOCBAQAogCQkJCTJEOUZCMjAyMjM3NTIwOUQwMDQ5RjkzNiAv
KiBHUFVQcm9jZXNzLm1lc3NhZ2VzLmluICovLAogCQkJCTJEOUZCMjE0MjM3NTIwOUQwMDQ5Rjkz
NiAvKiBHUFVQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcCAqLywKIAkJCQkyRDlGQjIwMzIz
NzUyMDlEMDA0OUY5MzYgLyogR1BVUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oICovLAorCQkJ
CTU1RENGQUE3MjM5OUU2RDQwMDUwQ0QyMiAvKiBJT1N1cmZhY2VNYW5hZ2VyLmNwcCAqLywKKwkJ
CQk1NURDRkFBNjIzOTlFNjBDMDA1MENEMjIgLyogSU9TdXJmYWNlTWFuYWdlci5oICovLAogCQkJ
KTsKIAkJCXBhdGggPSBHUFVQcm9jZXNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAg
LTc5MjIsNiArNzkyOCw4IEBACiAJCQkJMUE5MEMxRjIxMjY0RkQ3MTAwM0U0NEQ0IC8qIEZpbmRD
b250cm9sbGVyLmggKi8sCiAJCQkJN0MzODc0MzMxNzJGNTYxNTAwMUJEODhBIC8qIFBhZ2VCYW5u
ZXIuY3BwICovLAogCQkJCTdDRjQ3RkY5MTcyNzVDNTcwMDhBQ0I5MSAvKiBQYWdlQmFubmVyLmgg
Ki8sCisJCQkJNTVEQ0ZBQTAyMzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwICovLAorCQkJCTU1RENGQUExMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmggKi8sCiAJCQkJQTU1QkE4MTIxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclVJLmNwcCAqLywKIAkJCQlBNTVCQTgxMzFCQTIzRTA1MDA3Q0QzM0QgLyogUmVt
b3RlV2ViSW5zcGVjdG9yVUkuaCAqLywKIAkJCQlBNTVCQTgxNDFCQTIzRTA1MDA3Q0QzM0QgLyog
UmVtb3RlV2ViSW5zcGVjdG9yVUkubWVzc2FnZXMuaW4gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CmluZGV4IDNhYmIxYzdlMzdjNDdkZWUzNjgzNDcyZTJlMzM3YjQ1ZmFmNTU4MDUuLmFlNDFhNmU4
MTJiNDc4OWQ1MTRhYTM2MDNiOGRhN2YyMGE0N2Y0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nl
c3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2lu
Y2x1ZGUgIlBhZ2VCYW5uZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgi
CiAjaW5jbHVkZSAiVXNlckRhdGEuaCIKICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNp
bmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTg4MSwxNCArODgyLDE5IEBAIEdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkg
Y29uc3QKIHsKICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEo
KSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVu
dDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IDcyZWJlZjUwZGY5YjE0YTg3MmZjMzU2MGExYzgxNzM3
NDUxZDcwMjcuLjkzNzYwNjUwMTJlZTFlYWNiZGZiNDc1MTA2MWFkMmE1NmM4NTkxYWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKQEAgLTIzMCw2ICsyMzAsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tl
bmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiAgICAg
Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25z
dCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJp
Z2dlckZsYWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDZiNmZjY2RmZjMx
OGE3MjdkMTk2NjM5YzExOTFmY2NiZDdlMmY5NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSU9TdXJm
YWNlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
Kworc3RkOjpwYWlyPHVpbnQ2NF90LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNl
Pj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlU2hhcmVkSU9TdXJmYWNlKGNvbnN0IElu
dFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
OworICAgIHVpbnQ2NF90IHN1cmZhY2VJRDsKKyAgICBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodDsK
KyAgICAKKyAgICBjb25uZWN0aW9uLT5zZW5kU3luYyhNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Q3JlYXRlU2hhcmVkSU9TdXJmYWNlKHNpemUsIGNvbnRleHRTaXplLCBjb2xv
clNwYWNlKSwgTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVNoYXJl
ZElPU3VyZmFjZTo6UmVwbHkoc3VyZmFjZUlELCBzZW5kUmlnaHQpLCAwKTsKKworICAgIC8vIEZJ
WE1FOiBIYW5kbGUgdGhlIEdQVSBlcnJvcnMgbW9yZSBhcHByb3ByaWF0ZWx5LgorICAgIGlmICgh
c3VyZmFjZUlEKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihzdXJmYWNlSUQsIFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdo
dChXVEZNb3ZlKHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSkpOwor
fQorCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VTaGFyZWRJT1N1cmZhY2Uo
dWludDY0X3Qgc3VyZmFjZUlEKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rp
b24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKTsKKyAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlU2hhcmVkSU9TdXJmYWNlKHN1cmZhY2VJRCksIDApOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTEzOWY1NjQ1NWNjZmFkNDMyM2JkYjRiNGZm
OTFhOGU3NTg4NWZlOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0Jh
Y2tlbmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKKyAgICB9
CisKKyAgICBzdGQ6OnBhaXI8dWludDY0X3QsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1
cmZhY2U+PiBjcmVhdGVTaGFyZWRJT1N1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpDb2xvclNwYWNlKSBv
dmVycmlkZTsKKyAgICBib29sIHJlbGVhc2VTaGFyZWRJT1N1cmZhY2UodWludDY0X3Qgc3VyZmFj
ZUlEKSBvdmVycmlkZTsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwZTMw
MDgxYWY4YTQ1NTE5ZDNiNWJjN2E4Mjk0M2ViMmQ0YzJlNGE3Li5hNzBmMTEzMDM0OTA3MzUxNjVl
OTcxMGJhZjM3ODNhNWM1ODc4ODNlIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIv
VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMTItMDYgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEdQVSBwcm9j
ZXNzIGNyZWF0ZS9yZWxlYXNlIGEgc2hhcmVkIElPU3VyZmFjZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvRXh0ZW5kZWRDb2xvci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6Om1ha2VDb2xvcik6CisKIDIwMTktMTItMDYgIEpvbmF0aGFu
IEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29tPgogCiAgICAgICAgIFB5dGhvbiAzOiBBZGQgc3Vw
cG9ydCBpbiB3ZWJraXRweS50b29sIChGb2xsb3ctdXAsIHBhcnQgMikKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yLmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9FeHRlbmRlZENvbG9yLmNwcAppbmRleCA2MDc3
NzdkYzhlYTViZTZkYmJhZTk0ZDFhODg3M2RjNjQwMWQ4MTk2Li43NTEyYWQ3ODgyNjExYjZjODA2
ZWEwNjgyM2NkMGJhOWQ1NjlmZjhmIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvRXh0ZW5kZWRDb2xvci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0V4dGVuZGVkQ29sb3IuY3BwCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJIHsKIAogVEVTVChFeHRlbmRlZENvbG9yLCBDb25zdHJ1Y3RvcikKIHsK
LSAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlRGlzcGxheVAzKTsK
KyAgICBDb2xvciBjMSgxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMp
OwogICAgIEVYUEVDVF9UUlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAgICAgRVhQRUNUX0ZMT0FUX0VR
KDEuMCwgYzEuYXNFeHRlbmRlZCgpLnJlZCgpKTsKICAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBj
MS5hc0V4dGVuZGVkKCkuZ3JlZW4oKSk7CkBAIC00Nyw3ICs0Nyw3IEBAIFRFU1QoRXh0ZW5kZWRD
b2xvciwgQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQ29weUNvbnN0cnVjdG9y
KQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5
UDMpOworICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3Bs
YXlQMyk7CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgpKTsKIAogICAgIENvbG9yIGMy
KGMxKTsKQEAgLTYzLDcgKzYzLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBDb3B5Q29uc3RydWN0
b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgQXNzaWdubWVudCkKIHsKLSAgICBDb2xvciBjMSgx
LjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlRGlzcGxheVAzKTsKKyAgICBDb2xvciBjMSgx
LjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVDVF9U
UlVFKGMxLmlzRXh0ZW5kZWQoKSk7CiAKICAgICBDb2xvciBjMiA9IGMxOwpAQCAtNzksNyArNzks
NyBAQCBURVNUKEV4dGVuZGVkQ29sb3IsIEFzc2lnbm1lbnQpCiAKIFRFU1QoRXh0ZW5kZWRDb2xv
ciwgTW92ZUNvbnN0cnVjdG9yKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2VEaXNwbGF5UDMpOworICAgIENvbG9yIGMxKDEuMCwgMC41LCAwLjI1LCAxLjAs
IENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAgICAgRVhQRUNUX1RSVUUoYzEuaXNFeHRlbmRlZCgp
KTsKIAogICAgIENvbG9yIGMyKFdURk1vdmUoYzEpKTsKQEAgLTk4LDcgKzk4LDcgQEAgVEVTVChF
eHRlbmRlZENvbG9yLCBNb3ZlQ29uc3RydWN0b3IpCiAKIFRFU1QoRXh0ZW5kZWRDb2xvciwgTW92
ZUFzc2lnbm1lbnQpCiB7Ci0gICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JT
cGFjZURpc3BsYXlQMyk7CisgICAgQ29sb3IgYzEoMS4wLCAwLjUsIDAuMjUsIDEuMCwgQ29sb3JT
cGFjZTo6RGlzcGxheVAzKTsKICAgICBFWFBFQ1RfVFJVRShjMS5pc0V4dGVuZGVkKCkpOwogCiAg
ICAgQ29sb3IgYzIgPSBXVEZNb3ZlKGMxKTsKQEAgLTExOCw3ICsxMTgsNyBAQCBURVNUKEV4dGVu
ZGVkQ29sb3IsIE1vdmVBc3NpZ25tZW50KQogCiBURVNUKEV4dGVuZGVkQ29sb3IsIEJhc2ljUmVm
ZXJlbmNlQ291bnRpbmcpCiB7Ci0gICAgQ29sb3IqIGMxID0gbmV3IENvbG9yKDEuMCwgMC41LCAw
LjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5UDMpOworICAgIENvbG9yKiBjMSA9IG5ldyBDb2xv
cigxLjAsIDAuNSwgMC4yNSwgMS4wLCBDb2xvclNwYWNlOjpEaXNwbGF5UDMpOwogICAgIEVYUEVD
VF9UUlVFKGMxLT5pc0V4dGVuZGVkKCkpOwogCiAgICAgQ29sb3IqIGMyID0gbmV3IENvbG9yKCpj
MSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgVEVTVChFeHRlbmRlZENvbG9yLCBCYXNpY1JlZmVyZW5j
ZUNvdW50aW5nKQogCiBDb2xvciBtYWtlQ29sb3IoKQogewotICAgIENvbG9yIGMxKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2VEaXNwbGF5UDMpOworICAgIENvbG9yIGMxKDEuMCwgMC41
LCAwLjI1LCAxLjAsIENvbG9yU3BhY2U6OkRpc3BsYXlQMyk7CiAgICAgRVhQRUNUX1RSVUUoYzEu
aXNFeHRlbmRlZCgpKTsKICAgICBFWFBFQ1RfRVEoMXUsIGMxLmFzRXh0ZW5kZWQoKS5yZWZDb3Vu
dCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385330</attachid>
            <date>2019-12-10 17:57:28 -0800</date>
            <delta_ts>2019-12-10 18:46:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191210175727.patch</filename>
            <type>text/plain</type>
            <size>69612</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMjcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjEzODI2MmYxMzcxNTJh
NTQ1ZDQ1ZWM1MmY2MzE4OTRiZjQ3NzYwYS4uYmQwMGFhY2Q3Y2QxMmY0YjJkYmVhNThlOTIyMTNm
MTljZjc3NTgzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE5LTEyLTEwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgY2xhc3Mg
UmVuZGVyaW5nQmFja2VuZCB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgdG8gYW5kIHJlY2VpdmluZyByZXBsaWVzCisgICAgICAgIHRv
IGFuZCBmcm9tIHRoZSBHUFVQcm9jZXNzLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIGEgc2lu
Z2xlIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgdG8gUmVuZGVyaW5nQmFja2VuZDoKKyAgICAgICAg
Y3JlYXRpbmcgYW5kIHJlbGVhc2luZyBhIHNoYXJlZCBJT1N1cmZhY2UuCisKKyAgICAgICAgQSBz
aW5nbGV0b24gUmVuZGVyaW5nQmFja2VuZCB3aWxsIGNyZWF0ZWQgYnkgQ2hyb21lQ2xpZW50IGFu
ZCBvd25lZCBieQorICAgICAgICB0aGUgUGFnZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oOiBBZGRlZC4KKwogMjAxOS0xMi0wOCAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRp
b25dIENvbGxlY3Qgb3ZlcmZsb3cgZnJvbSBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlOTNiNWZmMjQwMjFl
ZDBhYTMwYjAwMjc5ZTA1ZjZlYmZkODI4MTRmLi4wMmQyZGI0ODlkMGNmMjgyYjFmNjZiM2YxZmIw
ZjVlZGNlYTEyMWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDgxIEBACisyMDE5LTEyLTEwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBhcmUgaW50cm9kdWNlZCB0bworICAg
ICAgICBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgV2ViUHJvY2VzcyBhbmQg
dGhlIEdQVVByb2Nlc3MgZm9yCisgICAgICAgIHJlbmRlcmluZyBvcGVyYXRpb25zLgorCisgICAg
ICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5n
LCBjYWNoaW5nIGFuZAorICAgICAgICByZWxlYXNpbmcgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSBnaXZlbiBpdHMgUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllci4KKyAgICAg
ICAgSXQgaXMgcmVzcG9uc2libGUgYWxzbyBmb3IgZGlzcGF0Y2hpbmcgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eQorICAgICAgICBtZXNzYWdlcy4KKworICAgICAgICBSZW5kZXJpbmdT
dXJmYWNlU2V0IG1hbmFnZXMgY3JlYXRpbmcgYW4gSU9TdXJmYWNlLCBpbml0aWFsaXppbmcgaXRz
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBmb3IgZHJhd2luZyBnaXZlbiBTdXJmYWNlSWRlbnRp
Zmllci4gSXQgY2FjaGVzIGl0IGFsc28KKyAgICAgICAgZm9yIGxhdGVyIHJlZmVyZW5jZXMuIFdo
ZW4gdGhlIFdlYlBvcmNlc3MgaXMgZG9uZSB3aXRoIGEgc2hhcmVkIElPU3VyZmFjZSwKKyAgICAg
ICAgSXQgaGFzIHRvIGNhbGwgR1BVUG9yY2VzcyB0byByZW1vdmUgdGhpcyBJT1N1cmZhY2UgZnJv
bSB0aGUgY2FjaGUgb2YKKyAgICAgICAgUmVuZGVyaW5nU3VyZmFjZVNldC4KKworICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKwor
ICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3lu
Y01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAoV2ViS2l0
OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBjb25zdCk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluOgorICAgICAgICBBZGQgbmV3IG1ldGhvZHMgZm9yIGNyZWF0aW5nL3JlbGVhc2luZyBhIFJl
bmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VTdXJmYWNlKToKKyAgICAgICAgKiBHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkgQ29tbXVuaWNhdGVzIHdpdGggUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpbgorICAg
ICAgICB0aGUgV2ViUG9yY2Vzcy4gSXQgY3JlYXRlcy9yZWxlYXNlcyBhbiBJT1NTdXJmYWNlLiBJ
dCByZWdpc3RlcnMgaXRzZWxmIGFzCisgICAgICAgIGEgbWVzc2FnZSByZWNlaXZlciBpbiB0aGUg
Y29uc3RydWN0b3IgYW5kIHVucmVnaXN0ZXIgaXRzZWxmIGluIHRoZSBkZXN0cnVjdG9yLgorCisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ1N1cmZhY2VTZXQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVuZGVyaW5nU3VyZmFjZVNldDo6Y3JlYXRl
U3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbmRlcmluZ1N1cmZhY2VTZXQ6OnJlbGVhc2VT
dXJmYWNlKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5n
U3VyZmFjZVNldC5oOiBBZGRlZC4KKyAgICAgICAgTWFuZ2VzIGEgc2V0IG9mIElPU3VyZmFjZXMu
ICAgICAgICAKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAg
ICBXaGVuIHRoZSBhdHRyaWJ1dGUgJ1dhbnRzRGlzcGF0Y2gnIGlzIGFkZGVkIHRoZSBtZXNzYWdl
cy5pbiBmaWxlLCB0aGUKKyAgICAgICAgZGlkUmVjZWl2ZU1lc3NhZ2UoKSBhbmQgZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKCkgd2lsbCBpbmNsdWRlIGEgZGlzcGF0Y2gKKyAgICAgICAgY2FsbHMgc3Vj
aCB0aGF0IHRoZSByZWNlaXZlciB0aGUgYWJpbGl0eSB0byBkaXNwYXRjaCB0aGVtLgorCisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAg
KiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNy
ZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpy
ZWxlYXNlU3VyZmFjZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgaXMg
dGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbiBvZiBSZW5kZXJpbmdCYWNrZW5kLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIuaDog
QWRkZWQuCisKIDIwMTktMTItMDcgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFw
cGxlLmNvbT4KIAogICAgICAgICBNYWtlIENvbG9yU3BhY2UgYW4gZW51bSBjbGFzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDEw
ODJmYjA1YTFlMjJhZmNkMDQ4YzdkZTMxYTZkZDZkMTNiYjEwOTYuLjgwYzI0N2Q5ZDEyN2E0Njc4
ODg1NmM5OTVjYjBjYzM3MDNlNmQ5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3NDMsNiArMTc0Myw3IEBACiAJCTU1QUYx
NEU2MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBRjE0RTQxRUFBQzU5QjAwMjZFRUFBIC8qIFVU
SVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTVEQ0M1MjgyMjQwN0IyMDAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RENDNTI1MjI0MDc0
OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjkyMjQwN0IyQTAwQzI2RTMyIC8qIFNW
R0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1
RENDNTIzMjI0MDczRkUwMEMyNkUzMiAvKiBTVkdMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVEQ0ZBQTQyMzk5QzlBNjAwNTBDRDIyIC8q
IFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RENGQUEyMjM5OUM0RDgwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVFQzk1
OTkyMDZBQTdBMDAwN0REMEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFQzk1OTcyMDY5QzkyRDAwN0RE
MEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1RkE3RkZCMjExMEVDRDcwMDVBRUZFNyAvKiBTVkda
b29tQW5kUGFuVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVGQTdGRkEyMTEwRUNENzAwNUFFRkU3IC8qIFNWR1pvb21BbmRQYW5UeXBlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcwNDQwNUEx
RTUzOTM2MjAwMzU2NjAxIC8qIEpTQWVzQ2JjQ2ZiUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA0NDA1OTFFNTM5MzYyMDAzNTY2MDEgLyog
SlNBZXNDYmNDZmJQYXJhbXMuaCAqLzsgfTsKQEAgLTIxMjMsNiArMjEyNCw3IEBACiAJCTcyNEVE
MzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0Mg
LyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFE
QzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBB
OTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQzM5RTYyMzlFQkJGNzAwQjYzRTAy
IC8qIFN1cmZhY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZp
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQw
Q0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5
M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTg2NjIs
NiArODY2NCw3IEBACiAJCTU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVM
aXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1pdGl2ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MjYyMjQwNzRGQTAwQzI2RTMyIC8qIFNWR1Byb3BlcnR5QWNj
ZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1NURDQzUyNzIyNDA3NTBCMDBDMjZFMzIgLyogU1ZHUHJvcGVy
dHlBY2Nlc3NvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3NvckltcGwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIy
IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkg
LyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaW50RnJlcXVlbmN5
VHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVFNTM1NDIyM0IyOUU5
MDBGQkE5NDQgLyogU1ZHTWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHTWVtYmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTVFRTUzNTYyMjNCMjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRv
ckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9w
ZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU4Myw2
ICs5NTg2LDcgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdC
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0Iu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3VyZmFjZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdP
cHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNS
R0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJB
IC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNS
R0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzQ3LDExICsxNjc1MSwxMSBA
QAogCQkJCTExOTlGQTU5MjA4RTNDN0YwMDIzNThDQyAvKiBEaXNwbGF5Qm94LmggKi8sCiAJCQkJ
RTRGQjRCMzUyMzlCRUIxMDAwM0MzMzZBIC8qIERpc3BsYXlJbmxpbmVDb250ZW50LmNwcCAqLywK
IAkJCQlFNDUxQzYzMzIzOTQwNThFMDA5OTMxOTAgLyogRGlzcGxheUlubGluZUNvbnRlbnQuaCAq
LywKKwkJCQkxMTJGQjM1MDIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCAq
LywKIAkJCQk2RkI0N0U2MTIyNzc0MjVBMDBDN0JDQjAgLyogRGlzcGxheUxpbmVCb3guaCAqLywK
IAkJCQk2Rjc3ODY4NTIzNDkxQUM2MDA0RDk2MzYgLyogRGlzcGxheVBhaW50ZXIuY3BwICovLAog
CQkJCTZGNzc4Njg3MjM0OTFBRDcwMDREOTYzNiAvKiBEaXNwbGF5UGFpbnRlci5oICovLAogCQkJ
CTZGRDlDRDUyMjI3RTIxQzgwMEU1Mzk1NyAvKiBEaXNwbGF5UmVjdC5oICovLAotCQkJCTExMkZC
MzUwMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oICovLAogCQkJCTZGQ0Ux
QTE4MjI2MThBQjMwMDRGMDM0MyAvKiBEaXNwbGF5UnVuLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9
IGRpc3BsYXl0cmVlOwpAQCAtMjUwODcsNiArMjUwOTEsNyBAQAogCQkJCUJDQUI0MTgwMTNFMzU2
RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIg
LyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhG
MiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTU1RENGQUEyMjM5OUM0RDgwMDUwQ0Qy
MiAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5
IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyog
Um91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93
Qmx1ci5jcHAgKi8sCkBAIC0yNTA5Nyw2ICsyNTEwMiw3IEBACiAJCQkJQjIzNTQwRjAwRDAwNzgy
RTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5jcHAgKi8sCiAJCQkJQjIzNTQwRjEwRDAwNzgy
RTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCTg0OUY3Nzc1MEVGRUM2MjAw
MDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCAqLywKKwkJCQk3MkFDMzlFNDIzOUVCODdG
MDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCAqLywKIAkJCQkwODc1NThDMzEzQjRBNTdE
MDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcCAqLywKIAkJCQkw
ODc1NThDNDEzQjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmggKi8sCiAJCQkJM0JCNkI4MEYyMkE3RDMxMTAwM0EyQTY5IC8qIFRhYlNpemUuaCAqLywKQEAg
LTI5NjA2LDYgKzI5NjEyLDggQEAKIAkJCQk3RURBQUZDOTE5QTJDQ0RDMDAzNERGRDEgLyogRGlz
a0NhY2hlTW9uaXRvckNvY29hLmggaW4gSGVhZGVycyAqLywKIAkJCQkxMTk5RkE1QjIwOEUzQzdG
MDAyMzU4Q0MgLyogRGlzcGxheUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ1MUM2MzQyMzk0
MDU4RjAwOTkzMTkwIC8qIERpc3BsYXlJbmxpbmVDb250ZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkxMTJGQjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdB
MkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyNjUsNyAr
MzAyNzMsNiBAQAogCQkJCTExNUNGQTdFMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0
aW5nU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTdDRkEyMjE3N0VFRjIwMDVCMTU3MyAv
KiBJbmxpbmVJdGVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0U3ODkxNjExMjBENjA4MDA2MEVD
RTUgLyogSW5saW5lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTZGQjQ3RTYzMjI3NzQy
NUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZFMTk4
MTcyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk2RjBDRDY5NTIyOUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGluZUJ1aWxkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTZGMzYwRTUwMjM5OTk0MjEwMDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGlu
ZUJyZWFrSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTg3Miw2ICszMTg3OSw3IEBACiAJCQkJ
QkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdl
UmVzb3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NURDRkFBNDIzOTlDOUE2
MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdD
NEIyMjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTI3LDcgKzMxOTM1LDYgQEAKIAkJCQlCQzVFQjY2
ODBFODFDQjcxMDBCMjU5NjUgLyogUmVuZGVyU3R5bGVDb25zdGFudHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzNjcwOEMxMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM2NzA4QzMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR0NvbnRh
aW5lci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMTEyRkIzNTIyMzlDMjNDNDAwODcwNTRBIC8qIERp
c3BsYXlJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQjM2NUM4NDE1MjUxMTlFMDA5
MUQyN0IgLyogUmVuZGVyU1ZHRWxsaXBzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDNDMDkyQkMx
MkQ5RTRFRTAwQTk4OUMzIC8qIFJlbmRlclNWR0ZvcmVpZ25PYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQzNjcwOEM1MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3Au
aCBpbiBIZWFkZXJzICovLApAQCAtMzI0MDAsNiArMzI0MDcsNyBAQAogCQkJCTkzQjJEODE2MEY5
OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTdDMDc4NTAxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZpeFRyZWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk3NjI3Qjk4MTRGQjU0MjQwMDJDRENBMSAvKiBTdXBwbGVtZW50YWJsZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzJBQzM5RTYyMzlFQkJGNzAwQjYzRTAyIC8qIFN1cmZhY2VJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODc1NThDNjEzQjRBNTdEMDBGNDkzMDcgLyogU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkMxMjE3RDEx
QUI5RTc3MDAzQzQ2MkMgLyogU3VzcGVuZGFibGVUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjc5NzQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FFbGVtZW50LmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IGQ3ODFmMzVjYjUzODg3MjVmZGIzMGRi
ZDMyNTQ0YjJkYzUxYzBkMTIuLjQ0MTk3M2M0NWU1ZDNhMjA1NTA3MDg1MTFmM2VmNGI2ODBkNTBl
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNDMsNiArNDMsNyBAQAogI2lu
Y2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgi
CiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdC
YWNrZW5kLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdD
b29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgpAQCAtMzA0LDYgKzMw
NSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9y
PiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAg
IHZpcnR1YWwgUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
KSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisjZW5kaWYKKwogICAgIC8vIFBhc3MgbnVsbHB0
ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIq
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihH
cmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKaW5kZXggNTY1NWRjMmMyOWM3MTYx
ZTEyYzRjYTAyNzkwODhlYjNmNDNiZWI1Ny4uZWUzMjY4ZmU1OTNhZDJhOTYwYzIwMGE2ZWFjZWFj
ZmY4OTBmZDc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBAIC0yOTI0LDYgKzI5MjQsMTUgQEAgUmVu
ZGVyaW5nVXBkYXRlU2NoZWR1bGVyJiBQYWdlOjpyZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIoKQog
ICAgIHJldHVybiAqbV9yZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXI7CiB9CiAKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCitSZWZQdHI8UmVuZGVyaW5nQmFja2VuZD4gUGFnZTo6cmVuZGVyaW5nQmFj
a2VuZCgpCit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tlbmQpCisgICAgICAgIG1fcmVuZGVy
aW5nQmFja2VuZCA9IGNocm9tZSgpLmNsaWVudCgpLmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKTsK
KyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kOworfQorI2VuZGlmCisKIHZvaWQgUGFnZTo6
Zm9yRWFjaERvY3VtZW50KGNvbnN0IEZ1bmN0aW9uPHZvaWQoRG9jdW1lbnQmKT4mIGZ1bmN0b3Ip
CiB7CiAgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGNvbGxlY3REb2N1bWVudHMoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmgKaW5kZXggNjUwNWFmNzVmOTY2MDJhYzMzYTc0NTM0YWMwNDZkN2EwZjk5ZGQ0Mi4uNTEw
NzczNGZiZGNlM2Q5OTFiZDlmZjhiNTkxOTdmNWQ3YWZiMmMwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSVENDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUmVn
aW9uLmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKKyNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmgiCiAjaW5j
bHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTdXBwbGVtZW50YWJsZS5oIgpAQCAtMjcz
LDYgKzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgUGVyZm9ybWFuY2VNb25pdG9yKiBwZXJmb3JtYW5j
ZU1vbml0b3IoKSB7IHJldHVybiBtX3BlcmZvcm1hbmNlTW9uaXRvci5nZXQoKTsgfQogCiAgICAg
UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyJiByZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIoKTsKKyAg
ICAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+
IHJlbmRlcmluZ0JhY2tlbmQoKTsKKyNlbmRpZgogCiAgICAgVmFsaWRhdGlvbk1lc3NhZ2VDbGll
bnQqIHZhbGlkYXRpb25NZXNzYWdlQ2xpZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWxpZGF0aW9u
TWVzc2FnZUNsaWVudC5nZXQoKTsgfQogICAgIHZvaWQgdXBkYXRlVmFsaWRhdGlvbkJ1YmJsZVN0
YXRlSWZOZWVkZWQoKTsKQEAgLTkwNCw2ICs5MDksMTAgQEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXI+IG1fcmVuZGVyaW5nVXBkYXRlU2No
ZWR1bGVyOwogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIFJlZlB0cjxSZW5kZXJpbmdC
YWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CisjZW5kaWYKKwogICAgIEhhc2hTZXQ8UmVuZGVy
T2JqZWN0Kj4gbV9yZWxldmFudFVucGFpbnRlZFJlbmRlck9iamVjdHM7CiAgICAgUmVnaW9uIG1f
dG9wUmVsZXZhbnRQYWludGVkUmVnaW9uOwogICAgIFJlZ2lvbiBtX2JvdHRvbVJlbGV2YW50UGFp
bnRlZFJlZ2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
bmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YWUzODJmNzI1ZGEwYWJlZWI3ZGJiZjcyYzUy
ZGY5ODUzYzQ5YzU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJT
dXJmYWNlSWRlbnRpZmllci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNp
emU7CitjbGFzcyBJT1N1cmZhY2U7CisKK2NsYXNzIFJlbmRlcmluZ0JhY2tlbmQgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVuZGVyaW5nQmFja2VuZD4geworcHVibGljOgorICAgIHZp
cnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgCisgICAgdmlydHVhbCBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVy
LCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50U2l6ZSYgY29udGV4dFNpemUsIENvbG9yU3BhY2Up
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIp
ID0gMDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cmZhY2VJZGVudGlmaWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjljNDY0Y2UwZjVmODM4ZjM0MzE3NTAwNzlhMWVhODkzNzg4NWNhNzQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNlSWRl
bnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZW51bSBTdXJmYWNlSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgU3VyZmFjZUlkZW50aWZp
ZXIgPSBPYmplY3RJZGVudGlmaWVyPFN1cmZhY2VJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCA3ZjA4ZjJi
MmYxODU4MmVkNTA0MDMyZGNhY2I1NDc4NmExNjlhZDVmLi5jYzA3MTU1ZjZhNzliNWQ0NGJkYTQ1
NGQ4ZWUwNTIyMGRkZDczZjY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1p
bnB1dC54Y2ZpbGVsaXN0CkBAIC0xNiw2ICsxNiw3IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFU
RV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
R1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29t
LmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzL1dlYkNvb2tpZU1hbmFnZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL05ldHdvcmtQcm9jZXNzL0N1c3RvbVByb3RvY29s
cy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L05ldHdvcmtQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9DbGllbnQubWVzc2Fn
ZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
CmluZGV4IDNiMWU5NDExNzAzOGJmMGQwNGEwNzU3ZjVlNmQ4NWUzMzRiZDc1YWUuLmZlOGVlZmZk
Y2U2NTRiMDJiNzU4M2QyMjUyYTUyYTRhMDU4OWVjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTE3LDYgKzExNyw5IEBAICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHlNZXNzCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5
TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzUmVwbGllcy5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggYmU1MjVlMTNjNTliYmQxNDU2ZThmMGQ0
MjNiYTY0NDFjZThiMDhkYS4uNDVjMGFhNjgxOGJlY2I5NTRlYzQ4ZmViZjZiMTAyMTdkNTlhMWZi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjQsNiArMjQsNyBAQCBWUEFUSCA9
IFwKICAgICAkKFdlYktpdDIpIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAgICAkKFdl
YktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1By
b2Nlc3MvY2FjaGUgXApAQCAtMTM2LDYgKzEzNyw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAog
ICAgIFBsdWdpblByb3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5IFwK
ICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRl
eCBiZDEzOWZlNTMzMWJjY2UzNmMzMzQzYjE1MjE3ZDAxMWYyNTI0YzM4Li41ZTNmZjlhNjgwNzUz
Njk1MWFhMmU0MTE5MDU5MDU0ODNhZDFlNmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0zMywxMCArMzMs
NyBAQAogI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzTWVzc2Fn
ZXMuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2Fn
ZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmgi
Ci0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAi
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAKQEAgLTY4LDEyICs2NSwzNyBAQCB2b2lkIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKK2Jv
b2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Cit9CisKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3Rk
Ojp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4g
bWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIpOworfQorCiB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VOYW1lKQogewogICAgIFdURkxvZ0Fsd2F5cygiUmVjZWl2ZWQgYW4gaW52YWxp
ZCBtZXNzYWdlIFwiJXMuJXNcIiBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy5cbiIsIG1lc3NhZ2VSZWNl
aXZlck5hbWUudG9TdHJpbmcoKS5kYXRhKCksIG1lc3NhZ2VOYW1lLnRvU3RyaW5nKCkuZGF0YSgp
KTsKICAgICBDUkFTSCgpOwogfQogCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLCBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZERlbGF5ZWRSZXBseSYmIHJlcGx5KQorewor
ICAgIGF1dG8gcmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAuZW5zdXJl
KHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIsIFsmXSgpIHsKKyAgICAgICAgcmV0dXJu
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNr
ZW5kUHJveHlJZGVudGlmaWVyKTsKKyAgICB9KTsKKyAgICBBU1NFUlQocmVzdWx0LmlzTmV3RW50
cnkpOworICAgIHJlcGx5KHJlc3VsdC5pc05ld0VudHJ5KTsKK30KKwordm9pZCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5k
UHJveHlJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpCit7CisgICAg
QVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwLmNvbnRhaW5zKHJlbmRlcmlu
Z0JhY2tlbmRQcm94eUlkZW50aWZpZXIpKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1hcC5yZW1vdmUocmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcik7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmgKaW5kZXggYzY0YTQzZTY0YWY1MTBjMDc0ZDcwODZmN2I2NDZmYTZjNmE0ZjQ2Ny4uZGFhNTI2
NThiYzEyMWI4MWE1ZGQ3YmI3OTIwMWZmYmZmZjJkMTJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwzNyAr
MjgsNTUgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9u
LmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5o
IgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRQcm94
eUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgR1BVUHJvY2VzczsKIAorY2xhc3MgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OworCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAg
ICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwg
cHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJ
UEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgfkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJl
Y2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZl
ck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nl
c3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAg
IHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lk
IGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlBy
b2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsg
fQotCiBwcml2YXRlOgogICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoR1BVUHJvY2VzcyYs
IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIp
OwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKKyAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYs
IHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRD
bG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7
CiAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKyAgICAgICAgCisg
ICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50
aWZpZXIsIE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJp
bmdCYWNrZW5kRGVsYXllZFJlcGx5JiYpOworICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tl
bmQoUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcik7CisKKyAgICB1c2luZyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAgPSBIYXNoTWFwPFJlbmRlcmluZ0JhY2tlbmRQcm94eUlk
ZW50aWZpZXIsIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+PjsKKyAgICAgICAgCiAg
ICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIElQQzo6TWVzc2FnZVJl
Y2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOworICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1hcCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcDsKICAgICBSZWY8R1BV
UHJvY2Vzcz4gbV9ncHVQcm9jZXNzOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li4yMGViOTQx
NWVhNjQ5ZWRhMjRhNjRkMWQ2Yjk0ZmRmMThkNGFkZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1t
ZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaCB7CisgICAgdm9pZCBDcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyKSAtPiAoYm9vbCBzdWNjZWVkZWQpIFN5bmNocm9u
b3VzCisgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0Jh
Y2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcikKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiMjMxODE2MDAyN2Y0YTNkZDJj
ZTgyZTFmNjFhN2Q2YjVhNjE0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
CkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW5k
ZXJpbmdTdXJmYWNlU2V0LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZFByb3h5SWRl
bnRpZmllcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZFByb3h5
SWRlbnRpZmllcikpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmRQcm94eUlkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX3JlbmRl
cmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmll
cikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVy
aW5nQmFja2VuZFByb3h5SWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7
CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mt
Pm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVy
aW5nQmFja2VuZFByb3h5SWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3Vy
ZmFjZUlkZW50aWZpZXIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRl
eHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OkNyZWF0ZVN1cmZhY2U6OkRlbGF5ZWRSZXBseSYmIHJlcGx5KQoreworICAg
IGF1dG8qIHN1cmZhY2UgPSBtX3JlbmRlcmluZ1N1cmZhY2VTZXQuY3JlYXRlU3VyZmFjZShzdXJm
YWNlSWRlbnRpZmllciwgc2l6ZSwgY29udGV4dFNpemUsIGNvbG9yU3BhY2UpOworCisgICAgaWYg
KCFzdXJmYWNlKQorICAgICAgICByZXBseSh7IH0pOworICAgIAorICAgIHJlcGx5KHN1cmZhY2Ut
PmNyZWF0ZVNlbmRSaWdodCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OnJlbGVhc2VTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyKQor
eworICAgIG1fcmVuZGVyaW5nU3VyZmFjZVNldC5yZWxlYXNlU3VyZmFjZShzdXJmYWNlSWRlbnRp
Zmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42ZGI5MWQ2NmMwNGYxNTE5ODU5OTk4NDE3OTZhNWI1ZGQ1OGJiOTk3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNp
bmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlc1JlcGxpZXMuaCIKKyNp
bmNsdWRlICJSZW5kZXJpbmdTdXJmYWNlU2V0LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNw
YWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9T
dXJmYWNlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFz
cyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4KKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRQ
cm94eUlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSgpOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcik7CisK
KyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlU3Vy
ZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpDb2xvclNwYWNl
LCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVTdXJmYWNlRGVs
YXllZFJlcGx5JiYpOworICAgIHZvaWQgcmVsZWFzZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlk
ZW50aWZpZXIpOworICAgICAgICAKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBSZW5kZXJpbmdCYWNrZW5kUHJv
eHlJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcjsKKyAgICBSZW5k
ZXJpbmdTdXJmYWNlU2V0IG1fcmVuZGVyaW5nU3VyZmFjZVNldDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmZhMmNjNDQyNDhmYmZjMzkzNjBlM2QyZmJmYWZhMmI0ZjE1NTU5OTcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgeworICAgIHZv
aWQgQ3JlYXRlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRp
ZmllciwgV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBXZWJDb3JlOjpJbnRTaXplIGNvbnRleHRTaXpl
LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlKSAtPiAoTWFjaFNl
bmRSaWdodCBzZW5kUmlnaHQpIFN5bmNocm9ub3VzCisgICAgdm9pZCBSZWxlYXNlU3VyZmFjZShX
ZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKK30KKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ1N1cmZhY2VTZXQuY3BwIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nU3VyZmFjZVNldC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYzg1NjMxOTU1ODg3M2MzNmI0NDFlZGU1NmU1Yzg4NzkyNThkZmMwNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbmRlcmluZ1N1cmZhY2VTZXQuY3BwCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nU3VyZmFjZVNldC5oIgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRl
eHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENHLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0lPU3VyZmFjZSogUmVuZGVy
aW5nU3VyZmFjZVNldDo6Y3JlYXRlU3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRl
bnRpZmllciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgY29udGV4dFNpemUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvIHN1cmZhY2UgPSAgSU9TdXJmYWNl
OjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNl
KSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8v
IEluaXRhbGl6ZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgR3JhcGhpY3NDb250ZXh0JiBz
dXJmYWNlQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworICAgIHN1
cmZhY2VDb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIHN1cmZhY2VDb250ZXh0
LnRyYW5zbGF0ZSgwLCAtY29udGV4dFNpemUuaGVpZ2h0KCkpOworCisgICAgYXV0byByZXN1bHQg
PSBzdXJmYWNlLmdldCgpOworCisgICAgQVNTRVJUKCFtX3N1cmZhY2VNYXAuY29udGFpbnMoc3Vy
ZmFjZUlkZW50aWZpZXIpKTsKKyAgICBtX3N1cmZhY2VNYXAuYWRkKHN1cmZhY2VJZGVudGlmaWVy
LCBXVEZNb3ZlKHN1cmZhY2UpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgUmVu
ZGVyaW5nU3VyZmFjZVNldDo6cmVsZWFzZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFj
ZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fc3VyZmFjZU1hcC5jb250YWlucyhzdXJmYWNl
SWRlbnRpZmllcikpOworICAgIHJldHVybiBtX3N1cmZhY2VNYXAucmVtb3ZlKHN1cmZhY2VJZGVu
dGlmaWVyKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5n
U3VyZmFjZVNldC5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVuZGVyaW5nU3VyZmFjZVNldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZiNDExN2MzYjgwODkwODQ1YmFjMzIy
MWU3ZGUzYzNiMWQ3YWNhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdTdXJmYWNlU2V0LmgKQEAgLTAsMCArMSw1
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9D
b2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VJZGVudGlmaWVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW5kZXJpbmdTdXJmYWNlU2V0IHsKK3B1
YmxpYzoKKyAgICBSZW5kZXJpbmdTdXJmYWNlU2V0KCkgPSBkZWZhdWx0OworCisgICAgV2ViQ29y
ZTo6SU9TdXJmYWNlKiBjcmVhdGVTdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGV4dFNp
emUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIGJvb2wgcmVsZWFzZVN1cmZhY2UoV2ViQ29y
ZTo6U3VyZmFjZUlkZW50aWZpZXIpOworCitwcml2YXRlOgorICAgIHVzaW5nIFN1cmZhY2VNYXAg
PSBIYXNoTWFwPFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6SU9TdXJmYWNlPj47CisgICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VNYXA7Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weQppbmRleCBlZDExYWMyNzI1MjI2ZTQ3YTJiNTZiY2M5ZWNmMjIyZGFj
MDAwOWFlLi5lMWVjZTNmZDhjOTc0OWUwMjY4NTViNTUyOGNmODc5NWI2NGQ0M2Q3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1w
b3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FU
VFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9BVFRSSUJVVEUgPSAn
V2FudHNEaXNwYXRjaCcKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2
ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcK
IFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIxNiwxMyArMjE3LDE1
IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAg
ICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyT3JDbGllbnREYXRhJywKICAgICAgICAgJ1dlYkNvcmU6
OlNlcnZpY2VXb3JrZXJPckNsaWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6U3Vy
ZmFjZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCiAgICAg
ICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCi0gICAgICAgICdXZWJLaXQ6OlRy
YW5zYWN0aW9uSUQnLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6VHJhbnNhY3Rp
b25JRCcsCiAgICAgICAgICdXZWJLaXQ6OlVzZXJDb250ZW50Q29udHJvbGxlcklkZW50aWZpZXIn
LAogICAgICAgICAnV2ViS2l0OjpXZWJQYWdlUHJveHlJZGVudGlmaWVyJywKICAgICBdKQpAQCAt
NzYwLDYgKzc2Myw5IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VS
ZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVt
ZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAg
ICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9BVFRSSUJVVEUp
OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAg
ICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAg
LTc3NSw2ICs3ODEsOSBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToK
ICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVD
RUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAgICAgICAgIHJlc3VsdCArPSBbc3lu
Y19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gc3lu
Y19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQ
QVRDSF9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNw
YXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dAppbmRleCA3M2ZmNGQyN2JlZTNkODJhMTE0NjcxNzQ5MmJjYjY2NDUyMzViNjQyLi45ZjllYWQ4
N2U0OWY5NTA4NjlmZDhjODhlYjQ1Mjg1ZGEzNWFhOGVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI0LDYg
KzI0LDcgQEAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycy5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdTdXJmYWNlU2V0
LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTU3Niw2ICs1NzcsNyBA
QCBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
RXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNw
cAogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIuY3BwCitXZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJ
bnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dAppbmRleCA5ZDI0MmUyYTA2NGRmZjcyZjQ5YzQyZjU0ZDk3ODEz
Y2FkOTRkOTJjLi43MzY5ZTMxODE4MmVlNjI4N2FmNjFiMDJmNzZkYTRkOGE5NWI2ZWYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CkBAIC02MjQsNSArNjI0LDYgQEAgRWRpdGFibGVJbWFnZUNvbnRy
b2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJv
Y2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmNzlkZGMx
MjA0MGYyYmY3OTI0MGNjYTU1ZWY5ODkzMGI1MDA3NTM0Li40YzE4OTdhYWI4NzMwNjM5YjQ4NDgz
OGUzZjU3MjkxMDRlMzhhMmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTExNzQsNiArMTE3NCw4IEBACiAJCTcxMTcyNUE5MjI4RDU2
NDMwMDAxODUxNCAvKiBXZWJzaXRlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaFBvbGljeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzExNzI1QTgy
MjhENTYzQTAwMDE4NTE0IC8qIFdlYnNpdGVMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoUG9s
aWN5LmggKi87IH07CiAJCTcxQTY3NkE2MjJDNjIzMjUwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9u
R2VzdHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJNzFGQjgxMEIyMjYwNjI3RTAwMzIzNjc3IC8qIFdlYnNp
dGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyog
V2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLzsgfTsKKwkJNzI2
QzVBRTAyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjZDNUFERTIz
OUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLzsgfTsK
KwkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2QzVB
REYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovOyB9
OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovOyB9OwogCQk3NUE4RDJDODE4N0ND
RkFCMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tX
ZWJzaXRlRGF0YVN0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCAp
OyB9OyB9OwogCQk3NUE4RDJENjE4N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3Jl
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5o
ICovOyB9OwpAQCAtMzU4Myw2ICszNTg1LDEwIEBACiAJCTUzQ0ZCQkM2MjIyNEQxQjAwMDI2NjU0
NiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNDRkJCQzcyMjI0RDFCMDAwMjY2NTQ2IC8qIFRleHRDaGVja2VyQ29tcGxl
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNvbXBs
ZXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGM0NBQTUyMDZDNDQzRTAw
ODY0OTBFIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUEwMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBMTIzOTlCREEyMDA1
MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUE2
MjM5OUU2MEMwMDUwQ0QyMiAvKiBSZW5kZXJpbmdTdXJmYWNlU2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlcmluZ1N1cmZhY2VTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVE
Q0ZBQTcyMzk5RTZENDAwNTBDRDIyIC8qIFJlbmRlcmluZ1N1cmZhY2VTZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVuZGVyaW5nU3VyZmFjZVNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3MEFCOEYyMjBBRTNCRDcwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNlY0tleVByb3h5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTcwQUI5MDAyMEIyNTE3NDAwQjhCRTg3IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHlDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHlDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI5
MDMyMEIyNTQxQzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMzgzMSw2ICszODM3LDEwIEBACiAJCTcxQTY3NkE0MjJDNjIz
MTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7
IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tU
b3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZl
bnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
c2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzI2QzVBREQyMzlGMDZFMzAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyNkM1QURFMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QzVBREYyMzlGMDdBRTAwRDM0
MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI2QzVBRTUyM0EwMDA3OTAwRDM0MjQ4IC8qIFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZp
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyog
V2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vi
Q29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAx
Nzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVE
YXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0
YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MjA2LDYgKzYyMTYsNyBA
QAogCQkJCTJEOUZCMjBEMjM3NTIwOUQwMDQ5RjkzNiAvKiBFbnRyeVBvaW50ICovLAogCQkJCTJE
OUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYyMzc1MjA5RDAw
NDlGOTM2IC8qIG1hYyAqLywKKwkJCQk3MkQ1MDJBMzIzOUYwNUI1MDA0NDY2QTggLyogUmVuZGVy
aW5nQmFja2VuZCAqLywKIAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8q
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywKIAkJCQkyRDlGQjIwOTIzNzUyMDlEMDA0
OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKQEAgLTc1
MzAsNiArNzU0MSwxOCBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CiAJCX07CisJCTcyRDUwMkEzMjM5RjA1QjUwMDQ0NjZBOCAvKiBSZW5kZXJpbmdCYWNrZW5k
ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjZDNUFE
RTIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywK
KwkJCQk3MjZDNUFERjIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmggKi8sCisJCQkJNzI2QzVBREQyMzlGMDZFMzAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk1NURDRkFBNzIzOTlFNkQ0MDA1MENE
MjIgLyogUmVuZGVyaW5nU3VyZmFjZVNldC5jcHAgKi8sCisJCQkJNTVEQ0ZBQTYyMzk5RTYwQzAw
NTBDRDIyIC8qIFJlbmRlcmluZ1N1cmZhY2VTZXQuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVu
ZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQz
QTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTc5MjIsOSArNzk0NSwxMiBAQAogCQkJCTFBOTBDMUYy
MTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxlci5oICovLAogCQkJCTdDMzg3NDMzMTcy
RjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAqLywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3
MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovLAorCQkJCTU1RENGQUEwMjM5OUJEQTIwMDUwQ0Qy
MiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk1NURDRkFBMTIzOTlCREEy
MDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAogCQkJCUE1NUJBODEyMUJB
MjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAgKi8sCiAJCQkJQTU1QkE4
MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLmggKi8sCiAJCQkJQTU1
QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJLm1lc3NhZ2VzLmlu
ICovLAorCQkJCTcyNkM1QUU1MjNBMDAwNzkwMEQzNDI0OCAvKiBSZW5kZXJpbmdCYWNrZW5kUHJv
eHlJZGVudGlmaWVyLmggKi8sCiAJCQkJMkQ4MTlCOTkxODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdH
ZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLAogCQkJCTJEODE5QjlBMTg2Mjc1QjMwMDFG
MDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmggKi8sCiAJCQkJMkQ4MTlCOUIx
ODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IubWVzc2FnZXMu
aW4gKi8sCkBAIC05OTk5LDYgKzEwMDI1LDcgQEAKIAkJCQkxQTU3MDRGQzFCRTE3NTExMDA4NzRB
RjEgLyogUmVtb3RlT2JqZWN0SW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMz
ODAxODU5MEFFNDAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxQUMxMzM4NjE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlN
ZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3
OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjU5NDdBODE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OUIxODdCM0I2
MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJz
ICovLApAQCAtMTE2NTMsNiArMTE2ODAsNyBAQAogCQkJCTBGRjI0QTJEMTg3OUU0QkMwMDNBQkYw
QyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTJEQzE4RkI0MjE4QTZFOUUwMDI1QTg4RCAvKiBSZW1vdGVMYXll
clRyZWVWaWV3cy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTFBQzEzMzg1MTg1OTBDNDYwMEYzRUMw
NSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk3MjZDNUFFMDIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTk0N0E3MTg3QjUxNzYwMDQzNzg1NyAv
KiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNTVCQTgyNjFCQTI1Q0ZEMDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUJCQkU0QTAxOUI2
NkM1MzAwNkI3RDgxIC8qIFJlbW90ZVdlYkluc3BlY3RvclVJTWVzc2FnZVJlY2VpdmVyLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAzYWJiMWM3ZTM3YzQ3ZGVl
MzY4MzQ3MmUyZTMzN2I0NWZhZjU1ODA1Li5hZTQxYTZlODEyYjQ3ODlkNTE0YWEzNjAzYjhkYTdm
MjBhNDdmNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJQYWdlQmFubmVyLmgiCisj
aW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlVzZXJEYXRhLmgi
CiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCkBAIC04ODEsMTQgKzg4MiwxOSBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogV2Vi
Q2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAKICNpZiBVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxh
eVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8q
IGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3
aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKK1JlZlB0
cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdAoreworICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUo
KTsKK30KICNlbmRpZgogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNz
TGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRl
eCA3MmViZWY1MGRmOWIxNGE4NzJmYzM1NjBhMWM4MTczNzQ1MWQ3MDI3Li45Mzc2MDY1MDEyZWUx
ZWFjYmRmYjQ3NTEwNjFhZDJhNTZjODU5MWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzAs
NiArMjMwLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNo
TW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlz
cGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
ICAgIFJlZlB0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNr
ZW5kKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKwogICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdz
IGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkN2U3ZjgxMGMwNDlmNDU2NmIzMGQxYTcxMDQyNGVhYjYy
NDdhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVmUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgUmVmPElQQzo6Q29u
bmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVBy
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIGJvb2wgc3VjY2VlZGVkOworICAg
IAorICAgIFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZFBy
b3h5SWRlbnRpZmllciA9IFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXI6OmdlbmVyYXRl
KCk7CisgICAgY29ubmVjdGlvbi0+c2VuZFN5bmMoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQocmVuZGVyaW5nQmFja2VuZFByb3h5SWRl
bnRpZmllciksIE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kOjpSZXBseShzdWNjZWVkZWQpLCAwKTsKKworICAgIGlmICghc3VjY2VlZGVk
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQocmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcikpOwor
fQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRl
cmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmll
cikKKyAgICA6IG1fcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcihyZW5kZXJpbmdCYWNr
ZW5kUHJveHlJZGVudGlmaWVyKQoreworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVt
b3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVj
dGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFj
a2VuZFByb3h5SWRlbnRpZmllciksIDApOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
SU9TdXJmYWNlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVTdXJmYWNlKFN1cmZhY2VJ
ZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJ
bnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIFJlZjxJ
UEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICBNYWNoU2VuZFJpZ2h0
IHNlbmRSaWdodDsKKyAgICAKKyAgICBjb25uZWN0aW9uLT5zZW5kU3luYyhNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVy
LCBzaXplLCBjb250ZXh0U2l6ZSwgY29sb3JTcGFjZSksIE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OkNyZWF0ZVN1cmZhY2U6OlJlcGx5KHNlbmRSaWdodCksIG1fcmVuZGVy
aW5nQmFja2VuZFByb3h5SWRlbnRpZmllcik7CisKKyAgICBpZiAoIXNlbmRSaWdodCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIFdlYkNvcmU6OklPU3VyZmFjZTo6
Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JTcGFj
ZShjb2xvclNwYWNlKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFz
ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAgUmVm
PElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVu
c3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIGNvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZVN1cmZh
Y2Uoc3VyZmFjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIp
OworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODY1M2MwMTQ0M2E5ZDI5N2YxYTI3ZGFlYmM0NmQ2Y2Y3ZjYyZDAyOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlJl
bmRlcmluZ0JhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZD4gY3JlYXRlKCk7CisgICAgCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQo
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IGNyZWF0ZVN1cmZh
Y2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCByZWxlYXNlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRp
Zmllcikgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQoUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcik7CisgICAgCisgICAgUmVuZGVyaW5n
QmFja2VuZFByb3h5SWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXI7
Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVu
dGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW5kZXJpbmdCYWNr
ZW5kUHJveHlJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTI1MjFmMGJjNGNkOGMwZjdjMjE1NTI2
MzQ0MzJjYmQzNGI1NGMyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIuaApAQCAtMCwwICsx
LDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0
SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJpbmdCYWNr
ZW5kUHJveHlJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kUHJveHlJ
ZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlm
aWVyVHlwZT47CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385337</attachid>
            <date>2019-12-10 18:46:49 -0800</date>
            <delta_ts>2019-12-10 23:24:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191210184647.patch</filename>
            <type>text/plain</type>
            <size>67527</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2MyZDgxY2NmMWJmMjNh
MjA0YTVjMDdhY2U4MTcxMGEzM2IzOWVmMy4uZTYyN2ExNzNkMjVmMzM5ODhiOGRmZTc3NTcyMWEw
ZTY1MjlhNDc3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDE5LTEyLTEwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgY2xhc3Mg
UmVuZGVyaW5nQmFja2VuZCB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgdG8gYW5kIHJlY2VpdmluZyByZXBsaWVzCisgICAgICAgIHRv
IGFuZCBmcm9tIHRoZSBHUFVQcm9jZXNzLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIGEgc2lu
Z2xlIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgdG8gUmVuZGVyaW5nQmFja2VuZDoKKyAgICAgICAg
Y3JlYXRpbmcgYW5kIHJlbGVhc2luZyBhIHNoYXJlZCBJT1N1cmZhY2UuCisKKyAgICAgICAgQSBz
aW5nbGV0b24gUmVuZGVyaW5nQmFja2VuZCB3aWxsIGNyZWF0ZWQgYnkgQ2hyb21lQ2xpZW50IGFu
ZCBvd25lZCBieQorICAgICAgICB0aGUgUGFnZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6cmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgICogcGFnZS9QYWdlLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oOiBBZGRlZC4KKwogMjAxOS0xMi0xMCAgRnVq
aWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luXSBG
aXggTVNWQyB3YXJuaW5nIEM0NzAxOiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGxvY2FsIHZh
cmlhYmxlICd4JyB1c2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDYzZGIxNGYyYTZmY2M3YjU1MTliZTE0M2QxMDg4
NDhhMDU2YTFhOGUuLjY4ZGJjZDExYWQzMjIwNGE1MmZlOGJkNjA1YTZhODcyOTkzMzQ4YmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsODEgQEAKKzIwMTktMTItMTAgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEdQVSBwcm9jZXNzIGNyZWF0
ZS9yZWxlYXNlIGEgc2hhcmVkIElPU3VyZmFjZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBhbmQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5IGFyZSBpbnRyb2R1Y2VkIHRvCisgICAgICAgIG1hbmFnZSB0aGUg
Y29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIGFuZCB0aGUgR1BVUHJvY2VzcyBm
b3IKKyAgICAgICAgcmVuZGVyaW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcsIGNhY2hpbmcgYW5kCisg
ICAgICAgIHJlbGVhc2luZyB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IGdpdmVuIGl0
cyBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLgorICAgICAgICBJdCBpcyByZXNwb25z
aWJsZSBhbHNvIGZvciBkaXNwYXRjaGluZyB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
CisgICAgICAgIG1lc3NhZ2VzLgorCisgICAgICAgIFJlbmRlcmluZ1N1cmZhY2VTZXQgbWFuYWdl
cyBjcmVhdGluZyBhbiBJT1N1cmZhY2UsIGluaXRpYWxpemluZyBpdHMKKyAgICAgICAgR3JhcGhp
Y3NDb250ZXh0IGZvciBkcmF3aW5nIGdpdmVuIFN1cmZhY2VJZGVudGlmaWVyLiBJdCBjYWNoZXMg
aXQgYWxzbworICAgICAgICBmb3IgbGF0ZXIgcmVmZXJlbmNlcy4gV2hlbiB0aGUgV2ViUG9yY2Vz
cyBpcyBkb25lIHdpdGggYSBzaGFyZWQgSU9TdXJmYWNlLAorICAgICAgICBJdCBoYXMgdG8gY2Fs
bCBHUFVQb3JjZXNzIHRvIHJlbW92ZSB0aGlzIElPU3VyZmFjZSBmcm9tIHRoZSBjYWNoZSBvZgor
ICAgICAgICBSZW5kZXJpbmdTdXJmYWNlU2V0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisgICAgICAgICogR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0Jh
Y2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxl
YXNlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgIEFk
ZCBuZXcgbWV0aG9kcyBmb3IgY3JlYXRpbmcvcmVsZWFzaW5nIGEgUmVuZGVyaW5nQmFja2VuZC4K
KworICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6cmVsZWFzZVN1cmZhY2UpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAgICogR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbjogQWRkZWQuCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBDb21tdW5p
Y2F0ZXMgd2l0aCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGluCisgICAgICAgIHRoZSBXZWJQb3Jj
ZXNzLiBJdCBjcmVhdGVzL3JlbGVhc2VzIGFuIElPU1N1cmZhY2UuIEl0IHJlZ2lzdGVycyBpdHNl
bGYgYXMKKyAgICAgICAgYSBtZXNzYWdlIHJlY2VpdmVyIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQg
dW5yZWdpc3RlciBpdHNlbGYgaW4gdGhlIGRlc3RydWN0b3IuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nU3VyZmFjZVNldC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW5kZXJpbmdTdXJmYWNlU2V0OjpjcmVhdGVTdXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVuZGVyaW5nU3VyZmFjZVNldDo6cmVsZWFzZVN1cmZhY2UpOgorICAgICAg
ICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdTdXJmYWNlU2V0Lmg6IEFk
ZGVkLgorICAgICAgICBNYW5nZXMgYSBzZXQgb2YgSU9TdXJmYWNlcy4gICAgICAgIAorCisgICAg
ICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIFdoZW4gdGhlIGF0dHJp
YnV0ZSAnV2FudHNEaXNwYXRjaCcgaXMgYWRkZWQgdGhlIG1lc3NhZ2VzLmluIGZpbGUsIHRoZQor
ICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZSgpIGFuZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoKSB3
aWxsIGluY2x1ZGUgYSBkaXNwYXRjaAorICAgICAgICBjYWxscyBzdWNoIHRoYXQgdGhlIHJlY2Vp
dmVyIHRoZSBhYmlsaXR5IHRvIGRpc3BhdGNoIHRoZW0uCisKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50Ojpj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlU3VyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VTdXJmYWNlKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBB
ZGRlZC4KKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpcyB0aGUgV2ViS2l0IGltcGxl
bWVudGF0aW9uIG9mIFJlbmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllci5oOiBBZGRlZC4KKwogMjAxOS0x
Mi0xMCAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAg
ICBbV2luXSBGaXggTVNWQyB3YXJuaW5nIEM0NzAxOiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVk
IGxvY2FsIHZhcmlhYmxlICd4JyB1c2VkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDNlNmY1NDMzYmY2ZjY3ZWJjNWY0OWZlZDBh
OTUwMTJkNGJlNGJmOS4uMWE4YWY0ZjljMzgzZTQ3ODYzODQ1ZDJiZjRiNTAwYWM0YmE5YTdiZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agpAQCAtMTc0Myw2ICsxNzQzLDcgQEAKIAkJNTVBRjE0RTYxRUFBQzU5QjAwMjZFRUFBIC8qIFVU
SVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUFGMTRFNDFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyODIyNDA3QjIwMDBD
MjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2
ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQwNzNGRTAwQzI2RTMyIC8q
IFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk1NURDRkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0ZBQTIyMzk5QzRE
ODAwNTBDRDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFp
bnRGcmVxdWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFj
a2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTVGQTdGRkIyMTEwRUNENzAwNUFFRkU3IC8qIFNWR1pvb21BbmRQYW5UeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUZBN0ZGQTIxMTBFQ0Q3MDA1
QUVGRTcgLyogU1ZHWm9vbUFuZFBhblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzA0NDA1QTFFNTM5MzYyMDAzNTY2MDEgLyogSlNBZXND
YmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MDQ0MDU5MUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Flc0NiY0NmYlBhcmFtcy5oICovOyB9
OwpAQCAtMjEyMyw2ICsyMTI0LDcgQEAKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpT
RVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87
IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVC
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0
eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hh
bmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3MkFDMzlFNjIzOUVCQkY3MDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUMzOUU0MjM5
RUI4N0YwMEI2M0UwMiAvKiBTdXJmYWNlSWRlbnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAv
KiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29y
ZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3
OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oICovOyB9OwogCQk3NTc5M0VD
OTBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRUM3MEQwQ0U3MkQwMDdGQzBBQyAvKiBK
U01lc3NhZ2VFdmVudC5oICovOyB9OwpAQCAtODY2Miw2ICs4NjY0LDcgQEAKIAkJNTVEQ0M1MjUy
MjQwNzQ5RTAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
UHJpbWl0aXZlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NURDQzUyNjIy
NDA3NEZBMDBDMjZFMzIgLyogU1ZHUHJvcGVydHlBY2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQcm9wZXJ0eUFjY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1REND
NTI3MjI0MDc1MEIwMEMyNkUzMiAvKiBTVkdQcm9wZXJ0eUFjY2Vzc29ySW1wbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdQcm9wZXJ0eUFjY2Vzc29ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk1NURDRkFBMjIzOTlDNEQ4MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU1RUM5NTk3MjA2OUM5MkQwMDdERDBBOSAvKiBQYWludEZyZXF1ZW5jeVRyYWNrZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGFpbnRGcmVxdWVuY3lUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU1RUU1MzU0MjIzQjI5RTkwMEZCQTk0NCAvKiBTVkdNZW1iZXJBY2Nl
c3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdNZW1iZXJBY2Nlc3Nv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVFNTM1NjIyM0IyOUY3MDBGQkE5
NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFByb3BlcnR5QW5pbWF0b3JJbXBsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTgzLDYgKzk1ODYsNyBAQAogCQk3MjdBRkVEMTFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3
QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdB
RkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUMzOUU0MjM5
RUI4N0YwMEI2M0UwMiAvKiBTdXJmYWNlSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXJm
YWNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIz
MEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJF
NDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjUwODcsNiArMjUwOTEsNyBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4
QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVt
b3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBS
ZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTU1RENGQUEyMjM5OUM0RDgwMDUwQ0QyMiAvKiBS
ZW5kZXJpbmdCYWNrZW5kLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJv
dW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRl
ZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5j
cHAgKi8sCkBAIC0yNTA5Nyw2ICsyNTEwMiw3IEBACiAJCQkJQjIzNTQwRjAwRDAwNzgyRTAwMjM4
MkZBIC8qIFN0cmluZ1RydW5jYXRvci5jcHAgKi8sCiAJCQkJQjIzNTQwRjEwRDAwNzgyRTAwMjM4
MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCTg0OUY3Nzc1MEVGRUM2MjAwMDkwODQ5
RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCAqLywKKwkJCQk3MkFDMzlFNDIzOUVCODdGMDBCNjNF
MDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCAqLywKIAkJCQkwODc1NThDMzEzQjRBNTdEMDBGNDkz
MDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcCAqLywKIAkJCQkwODc1NThD
NDEzQjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggKi8s
CiAJCQkJM0JCNkI4MEYyMkE3RDMxMTAwM0EyQTY5IC8qIFRhYlNpemUuaCAqLywKQEAgLTMxODcz
LDYgKzMxODc5LDcgQEAKIAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1h
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJGMDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5k
ZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4
REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTU1RENGQUE0MjM5OUM5QTYwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRl
U2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBG
RjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtMzI0MDAsNiArMzI0
MDcsNyBAQAogCQkJCTkzQjJEODE2MEY5OTIwRDIwMDZBRTZCMiAvKiBTdWRkZW5UZXJtaW5hdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdDMDc4NTAxMTY1RDVCRTAwM0EzMkVGIC8qIFN1ZmZp
eFRyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NjI3Qjk4MTRGQjU0MjQwMDJDRENBMSAvKiBT
dXBwbGVtZW50YWJsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJBQzM5RTYyMzlFQkJGNzAwQjYz
RTAyIC8qIFN1cmZhY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODc1NThDNjEz
QjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk2MkMxMjE3RDExQUI5RTc3MDAzQzQ2MkMgLyogU3VzcGVuZGFibGVUaW1l
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5NzQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4
IGQ3ODFmMzVjYjUzODg3MjVmZGIzMGRiZDMyNTQ0YjJkYzUxYzBkMTIuLjQ0MTk3M2M0NWU1ZDNh
MjA1NTA3MDg1MTFmM2VmNGI2ODBkNTBlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1
ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMu
aCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlYXJjaFBv
cHVwTWVudS5oIgpAQCAtMzA0LDYgKzMwNSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQ
dHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxh
dGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHZpcnR1YWwgUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+
IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisjZW5k
aWYKKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNo
IHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKaW5kZXggNTY1NWRjMmMyOWM3MTYxZTEyYzRjYTAyNzkwODhlYjNmNDNiZWI1Ny4uZWUzMjY4
ZmU1OTNhZDJhOTYwYzIwMGE2ZWFjZWFjZmY4OTBmZDc2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBA
IC0yOTI0LDYgKzI5MjQsMTUgQEAgUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyJiBQYWdlOjpyZW5k
ZXJpbmdVcGRhdGVTY2hlZHVsZXIoKQogICAgIHJldHVybiAqbV9yZW5kZXJpbmdVcGRhdGVTY2hl
ZHVsZXI7CiB9CiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCitSZWZQdHI8UmVuZGVyaW5nQmFj
a2VuZD4gUGFnZTo6cmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0Jh
Y2tlbmQpCisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZCA9IGNocm9tZSgpLmNsaWVudCgpLmNy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kOwor
fQorI2VuZGlmCisKIHZvaWQgUGFnZTo6Zm9yRWFjaERvY3VtZW50KGNvbnN0IEZ1bmN0aW9uPHZv
aWQoRG9jdW1lbnQmKT4mIGZ1bmN0b3IpCiB7CiAgICAgZm9yIChhdXRvJiBkb2N1bWVudCA6IGNv
bGxlY3REb2N1bWVudHMoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggNWY0Y2ViMGEzNjUwYzQyYThlMTdk
MTI2M2Y1Njg0N2VmMTgxYzQ1My4uZmQ1YTg4YjY3ZjdmNzkxNTI0ZGYwM2JkYzcxMjBiZTkzNmQ1
YmQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSVENDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21h
aW4uaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5n
VXBkYXRlU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJT
dXBwbGVtZW50YWJsZS5oIgpAQCAtMjczLDYgKzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgUGVyZm9y
bWFuY2VNb25pdG9yKiBwZXJmb3JtYW5jZU1vbml0b3IoKSB7IHJldHVybiBtX3BlcmZvcm1hbmNl
TW9uaXRvci5nZXQoKTsgfQogCiAgICAgUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyJiByZW5kZXJp
bmdVcGRhdGVTY2hlZHVsZXIoKTsKKyAgICAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAg
UmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IHJlbmRlcmluZ0JhY2tlbmQoKTsKKyNlbmRpZgogCiAg
ICAgVmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQqIHZhbGlkYXRpb25NZXNzYWdlQ2xpZW50KCkgY29u
c3QgeyByZXR1cm4gbV92YWxpZGF0aW9uTWVzc2FnZUNsaWVudC5nZXQoKTsgfQogICAgIHZvaWQg
dXBkYXRlVmFsaWRhdGlvbkJ1YmJsZVN0YXRlSWZOZWVkZWQoKTsKQEAgLTkwMSw2ICs5MDYsMTAg
QEAgcHJpdmF0ZToKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdVcGRhdGVTY2hlZHVs
ZXI+IG1fcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyOwogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorICAgIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CisjZW5k
aWYKKwogICAgIEhhc2hTZXQ8UmVuZGVyT2JqZWN0Kj4gbV9yZWxldmFudFVucGFpbnRlZFJlbmRl
ck9iamVjdHM7CiAgICAgUmVnaW9uIG1fdG9wUmVsZXZhbnRQYWludGVkUmVnaW9uOwogICAgIFJl
Z2lvbiBtX2JvdHRvbVJlbGV2YW50UGFpbnRlZFJlZ2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YWUz
ODJmNzI1ZGEwYWJlZWI3ZGJiZjcyYzUyZGY5ODUzYzQ5YzU2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNv
bG9yU3BhY2UuaCIKKyNpbmNsdWRlICJTdXJmYWNlSWRlbnRpZmllci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEludFNpemU7CitjbGFzcyBJT1N1cmZhY2U7CisKK2NsYXNzIFJl
bmRlcmluZ0JhY2tlbmQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVuZGVyaW5nQmFj
a2VuZD4geworcHVibGljOgorICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1
bHQ7CisgICAgCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVT
dXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50U2l6ZSYg
Y29udGV4dFNpemUsIENvbG9yU3BhY2UpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVsZWFzZVN1
cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIpID0gMDsKK307CisKK30KKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N1cmZhY2VJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TdXJmYWNlSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNDY0Y2UwZjVmODM4ZjM0MzE3NTAw
NzlhMWVhODkzNzg4NWNhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBTdXJmYWNlSWRlbnRpZmllclR5cGUgeyB9
OwordXNpbmcgU3VyZmFjZUlkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFN1cmZhY2VJZGVu
dGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQu
eGNmaWxlbGlzdAppbmRleCA3ZjA4ZjJiMmYxODU4MmVkNTA0MDMyZGNhY2I1NDc4NmExNjlhZDVm
Li5jYzA3MTU1ZjZhNzliNWQ0NGJkYTQ1NGQ4ZWUwNTIyMGRkZDczZjY1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNiw2ICsxNiw3IEBA
ICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1Rf
RElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmluCisk
KFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9OZXR3b3JrUHJvY2Vzcy9D
b29raWVzL1dlYkNvb2tpZU1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL05ldHdv
cmtQcm9jZXNzL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0b21Qcm90b2NvbE1hbmFnZXIubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL05ldHdvcmtQcm9jZXNzL0luZGV4ZWREQi9XZWJJREJD
b25uZWN0aW9uVG9DbGllbnQubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDNiMWU5NDExNzAzOGJmMGQwNGEwNzU3ZjVl
NmQ4NWUzMzRiZDc1YWUuLmZlOGVlZmZkY2U2NTRiMDJiNzU4M2QyMjUyYTUyYTRhMDU4OWVjZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxp
c3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApA
QCAtMTE3LDYgKzExNyw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3Nh
Z2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxp
ZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXgg
YmU1MjVlMTNjNTliYmQxNDU2ZThmMGQ0MjNiYTY0NDFjZThiMDhkYS4uNDVjMGFhNjgxOGJlY2I5
NTRlYzQ4ZmViZjZiMTAyMTdkNTlhMWZiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpA
QCAtMjQsNiArMjQsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpIFwKICAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMgXAorICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL05l
dHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXAog
ICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvY2FjaGUgXApAQCAtMTM2LDYgKzEzNyw3IEBA
IE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFBsdWdpblByb3h5IFwKICAgICBSZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5IFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3Bl
Y3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBiZDEzOWZlNTMzMWJjY2UzNmMzMzQzYjE1MjE3ZDAx
MWYyNTI0YzM4Li41ZTNmZjlhNjgwNzUzNjk1MWFhMmU0MTE5MDU5MDU0ODNhZDFlNmYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCkBAIC0zMywxMCArMzMsNyBAQAogI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKICNp
bmNsdWRlICJHUFVQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHlN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvclRyYW5zYWN0aW9uLmgiCi0jaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAi
V2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAKQEAgLTY4LDEy
ICs2NSwzNyBAQCB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6
Q29ubmVjdGlvbiYpCiB7CiB9CiAKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlz
cGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5
RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5j
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCiB2b2lkIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZl
ck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKQogewogICAgIFdURkxvZ0Fs
d2F5cygiUmVjZWl2ZWQgYW4gaW52YWxpZCBtZXNzYWdlIFwiJXMuJXNcIiBmcm9tIHRoZSB3ZWIg
cHJvY2Vzcy5cbiIsIG1lc3NhZ2VSZWNlaXZlck5hbWUudG9TdHJpbmcoKS5kYXRhKCksIG1lc3Nh
Z2VOYW1lLnRvU3RyaW5nKCkuZGF0YSgpKTsKICAgICBDUkFTSCgpOwogfQogCit2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFj
a2VuZFByb3h5SWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLCBNZXNz
YWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZERl
bGF5ZWRSZXBseSYmIHJlcGx5KQoreworICAgIGF1dG8gcmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHlNYXAuZW5zdXJlKHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIs
IFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyKTsKKyAgICB9KTsKKyAg
ICBBU1NFUlQocmVzdWx0LmlzTmV3RW50cnkpOworICAgIHJlcGx5KHJlc3VsdC5pc05ld0VudHJ5
KTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5n
QmFja2VuZChSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRQ
cm94eUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWFwLmNvbnRhaW5zKHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpKTsKKyAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcC5yZW1vdmUocmVuZGVyaW5nQmFja2VuZFBy
b3h5SWRlbnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggYzY0YTQzZTY0YWY1MTBjMDc0ZDcwODZm
N2I2NDZmYTZjNmE0ZjQ2Ny4uZGFhNTI2NThiYzEyMWI4MWE1ZGQ3YmI3OTIwMWZmYmZmZjJkMTJh
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCkBAIC0yOCwzNyArMjgsNTUgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1
ZGUgIlJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgR1BVUHJv
Y2VzczsKIAorY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OworCiBjbGFzcyBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6
CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJv
Y2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAg
IElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQo
KTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7
IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nl
c3MoKSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNz
SWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJv
Y2Vzc0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rp
b248dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6
OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQotCiBwcml2YXRlOgogICAgIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGll
bnQKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsK
ICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mKTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJl
bmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIsIE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kRGVsYXllZFJlcGx5JiYpOworICAgIHZv
aWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmll
cik7CisKKyAgICB1c2luZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAgPSBIYXNoTWFw
PFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIsIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk+PjsKKyAgICAgICAgCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwor
ICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1hcDsKICAgICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOwogICAgIGNvbnN0
IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2
ZTQ0NTM0NmMwMTIyMWQ4Li4yMGViOTQxNWVhNjQ5ZWRhMjRhNjRkMWQ2Yjk0ZmRmMThkNGFkZTdm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRj
aCB7CisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFj
a2VuZFByb3h5SWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyKSAtPiAo
Ym9vbCBzdWNjZWVkZWQpIFN5bmNocm9ub3VzCisgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFj
a2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVyaW5nQmFj
a2VuZFByb3h5SWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjJiMjMxODE2MDAyN2Y0YTNkZDJjZTgyZTFmNjFhN2Q2YjVhNjE0NDYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdTdXJmYWNlU2V0LmgiCisjaW5jbHVkZSAiV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1JlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcikpOworfQorCitSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5k
UHJveHlJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpCisgICAgOiBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIocmVuZGVy
aW5nQmFja2VuZFByb3h5SWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAg
ICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllci50b1VJbnQ2
NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllci50b1VJbnQ2
NCgpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVN1cmZh
Y2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZVN1cmZhY2U6OkRlbGF5
ZWRSZXBseSYmIHJlcGx5KQoreworICAgIGF1dG8qIHN1cmZhY2UgPSBtX3JlbmRlcmluZ1N1cmZh
Y2VTZXQuY3JlYXRlU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllciwgc2l6ZSwgY29udGV4dFNpemUs
IGNvbG9yU3BhY2UpOworCisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXBseSh7IH0pOwor
ICAgIAorICAgIHJlcGx5KHN1cmZhY2UtPmNyZWF0ZVNlbmRSaWdodCgpKTsKK30KKwordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VTdXJmYWNlKFN1cmZhY2VJZGVudGlm
aWVyIHN1cmZhY2VJZGVudGlmaWVyKQoreworICAgIG1fcmVuZGVyaW5nU3VyZmFjZVNldC5yZWxl
YXNlU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGI5MWQ2NmMwNGYxNTE5ODU5OTk4
NDE3OTZhNWI1ZGQ1OGJiOTk3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlc1JlcGxpZXMuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdTdXJmYWNlU2V0LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXpl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlSWRlbnRpZmllci5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAg
ICA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4KKyAgICAs
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFj
a2VuZFByb3h5SWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgY3JlYXRlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRT
aXplLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpDcmVhdGVTdXJmYWNlRGVsYXllZFJlcGx5JiYpOworICAgIHZvaWQgcmVsZWFzZVN1
cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIpOworICAgICAgICAKKyAgICBXZWFrUHRy
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsK
KyAgICBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZFBy
b3h5SWRlbnRpZmllcjsKKyAgICBSZW5kZXJpbmdTdXJmYWNlU2V0IG1fcmVuZGVyaW5nU3VyZmFj
ZVNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMmNjNDQyNDhmYmZjMzkzNjBlM2QyZmJm
YWZhMmI0ZjE1NTU5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkgeworICAgIHZvaWQgQ3JlYXRlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNl
SWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBXZWJD
b3JlOjpJbnRTaXplIGNvbnRleHRTaXplLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29sb3JTcGFj
ZSBjb2xvclNwYWNlKSAtPiAoTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpIFN5bmNocm9ub3VzCisg
ICAgdm9pZCBSZWxlYXNlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNl
SWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ1N1
cmZhY2VTZXQuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVuZGVyaW5nU3VyZmFjZVNldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzg1NjMxOTU1ODg3M2MzNmI0NDFl
ZGU1NmU1Yzg4NzkyNThkZmMwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ1N1cmZhY2VTZXQuY3BwCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nU3VyZmFjZVNldC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNz
Q29udGV4dENHLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK0lPU3VyZmFjZSogUmVuZGVyaW5nU3VyZmFjZVNldDo6Y3JlYXRlU3VyZmFjZShTdXJm
YWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29u
c3QgSW50U2l6ZSYgY29udGV4dFNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBh
dXRvIHN1cmZhY2UgPSAgSU9TdXJmYWNlOjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNhY2hl
ZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEluaXRhbGl6ZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0u
CisgICAgR3JhcGhpY3NDb250ZXh0JiBzdXJmYWNlQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZUdy
YXBoaWNzQ29udGV4dCgpOworICAgIHN1cmZhY2VDb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOworICAgIHN1cmZhY2VDb250ZXh0LnRyYW5zbGF0ZSgwLCAtY29udGV4dFNpemUuaGVpZ2h0
KCkpOworCisgICAgYXV0byByZXN1bHQgPSBzdXJmYWNlLmdldCgpOworCisgICAgQVNTRVJUKCFt
X3N1cmZhY2VNYXAuY29udGFpbnMoc3VyZmFjZUlkZW50aWZpZXIpKTsKKyAgICBtX3N1cmZhY2VN
YXAuYWRkKHN1cmZhY2VJZGVudGlmaWVyLCBXVEZNb3ZlKHN1cmZhY2UpKTsKKworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgUmVuZGVyaW5nU3VyZmFjZVNldDo6cmVsZWFzZVN1cmZhY2Uo
U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fc3Vy
ZmFjZU1hcC5jb250YWlucyhzdXJmYWNlSWRlbnRpZmllcikpOworICAgIHJldHVybiBtX3N1cmZh
Y2VNYXAucmVtb3ZlKHN1cmZhY2VJZGVudGlmaWVyKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nU3VyZmFjZVNldC5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nU3VyZmFjZVNldC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZiNDExN2MzYjgwODkwODQ1YmFjMzIyMWU3ZGUzYzNiMWQ3YWNhMmYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdT
dXJmYWNlU2V0LmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9J
T1N1cmZhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1N1cmZhY2VJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBS
ZW5kZXJpbmdTdXJmYWNlU2V0IHsKK3B1YmxpYzoKKyAgICBSZW5kZXJpbmdTdXJmYWNlU2V0KCkg
PSBkZWZhdWx0OworCisgICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBjcmVhdGVTdXJmYWNlKFdlYkNv
cmU6OlN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIGJv
b2wgcmVsZWFzZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIpOworCitwcml2YXRl
OgorICAgIHVzaW5nIFN1cmZhY2VNYXAgPSBIYXNoTWFwPFdlYkNvcmU6OlN1cmZhY2VJZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPj47CisgICAgU3VyZmFjZU1h
cCBtX3N1cmZhY2VNYXA7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBlZDExYWMyNzI1
MjI2ZTQ3YTJiNTZiY2M5ZWNmMjIyZGFjMDAwOWFlLi5lMWVjZTNmZDhjOTc0OWUwMjY4NTViNTUy
OGNmODc5NWI2NGQ0M2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMu
cHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNl
cgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5U
U19ESVNQQVRDSF9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaCcKIExFR0FDWV9SRUNFSVZFUl9B
VFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRS
SUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJv
bm91cycKQEAgLTIxNiwxMyArMjE3LDE1IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3
YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyT3JDbGllbnRE
YXRhJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudElkZW50aWZpZXIn
LAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXIn
LAorICAgICAgICAnV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2
aXR5U3RhdGVDaGFuZ2VJRCcsCiAgICAgICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRleHRJ
RCcsCi0gICAgICAgICdXZWJLaXQ6OlRyYW5zYWN0aW9uSUQnLAorICAgICAgICAnV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFn
ZUFyZWFJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyJywKKyAg
ICAgICAgJ1dlYktpdDo6VHJhbnNhY3Rpb25JRCcsCiAgICAgICAgICdXZWJLaXQ6OlVzZXJDb250
ZW50Q29udHJvbGxlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyJywKICAgICBdKQpAQCAtNzYwLDYgKzc2Myw5IEBAIGRlZiBnZW5lcmF0ZV9tZXNz
YWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1
dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQg
Kz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2Fn
ZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShX
QU5UU19ESVNQQVRDSF9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2
ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJl
Y2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNs
YXNzKSkKICAgICAgICAgZWxzZToKQEAgLTc3NSw2ICs3ODEsOSBAQCBkZWYgZ2VuZXJhdGVfbWVz
c2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRy
aWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicp
CiAgICAgICAgIHJlc3VsdCArPSBbc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVz
c2FnZSkgZm9yIG1lc3NhZ2UgaW4gc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIu
aGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAg
ICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNv
bm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShk
ZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVw
bHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA3M2ZmNGQyN2JlZTNkODJhMTE0NjcxNzQ5
MmJjYjY2NDUyMzViNjQyLi45ZjllYWQ4N2U0OWY5NTA4NjlmZDhjODhlYjQ1Mjg1ZGEzNWFhOGVl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKQEAgLTI0LDYgKzI0LDcgQEAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5j
cHAKIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3Mv
R1BVUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW5kZXJpbmdTdXJmYWNlU2V0LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0
cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tl
ci5jcHAKQEAgLTU3Niw2ICs1NzcsNyBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
Y3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvRXZlbnREaXNwYXRjaGVyLmNwcAogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL1BhZ2VCYW5uZXIu
Y3BwCitXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5jcHAKIFdlYlByb2Nlc3MvV2ViUGFn
ZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJC
YWNrRm9yd2FyZExpc3RQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA5ZDI0MmUy
YTA2NGRmZjcyZjQ5YzQyZjU0ZDk3ODEzY2FkOTRkOTJjLi43MzY5ZTMxODE4MmVlNjI4N2FmNjFi
MDJmNzZkYTRkOGE5NWI2ZWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC02MjQsNSArNjI0
LDYgQEAgRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRj
aFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBmNzlkZGMxMjA0MGYyYmY3OTI0MGNjYTU1ZWY5ODkzMGI1MDA3NTM0
Li40YzE4OTdhYWI4NzMwNjM5YjQ4NDgzOGUzZjU3MjkxMDRlMzhhMmMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTExNzQsNiArMTE3
NCw4IEBACiAJCTcxMTcyNUE5MjI4RDU2NDMwMDAxODUxNCAvKiBXZWJzaXRlTGVnYWN5T3ZlcmZs
b3dTY3JvbGxpbmdUb3VjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzExNzI1QTgyMjhENTYzQTAwMDE4NTE0IC8qIFdlYnNpdGVMZWdhY3lP
dmVyZmxvd1Njcm9sbGluZ1RvdWNoUG9saWN5LmggKi87IH07CiAJCTcxQTY3NkE2MjJDNjIzMjUw
MDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxQTY3NkE0MjJDNjIzMTgwMDdENjI5
NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJNzFGQjgxMEIy
MjYwNjI3RTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9s
aWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZC
ODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0
Y2hQb2xpY3kuaCAqLzsgfTsKKwkJNzI2QzVBRTAyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjZDNUFERTIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcCAqLzsgfTsKKwkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5oICovOyB9OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyog
V2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5o
ICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3Jl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJD
NDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk3NUE4RDJENjE4N0QxQzBFMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dl
YnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwpAQCAtMzU4Myw2ICszNTg1LDEwIEBACiAJ
CTUzQ0ZCQkM2MjIyNEQxQjAwMDI2NjU0NiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENoZWNrZXJDb21wbGV0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDRkJCQzcyMjI0RDFCMDAwMjY2
NTQ2IC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBUZXh0Q2hlY2tlckNvbXBsZXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTNGM0NBQTUyMDZDNDQzRTAwODY0OTBFIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0FjdGl2aXR5
VHJhY2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUEwMjM5OUJE
QTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk1NURDRkFBMTIzOTlCREEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU1RENGQUE2MjM5OUU2MEMwMDUwQ0QyMiAvKiBSZW5kZXJpbmdTdXJm
YWNlU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1N1cmZhY2VTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTcyMzk5RTZENDAwNTBDRDIyIC8qIFJlbmRlcmlu
Z1N1cmZhY2VTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nU3VyZmFjZVNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOEYyMjBBRTNCRDcwMEI4QkU4
NyAvKiBTZWNLZXlQcm94eVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY0tleVByb3h5U3RvcmUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI5MDAyMEIyNTE3NDAwQjhCRTg3
IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI5MDMyMEIyNTQxQzAwQjhCRTg3IC8qIFNlY0tleVByb3h5
U3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWNLZXlQ
cm94eVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzgzMSw2ICszODM3
LDEwIEBACiAJCTcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFj
dGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVS
ZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIz
MTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyog
V2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQ
b2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QzVBREQyMzlGMDZFMzAw
RDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkM1QURFMjM5RjA3QUUwMEQzNDI0OCAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QzVBRTUyM0EwMDA3OTAwRDM0MjQ4IC8qIFJlbmRl
cmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFj
a2VuZFByb3h5SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhF
ODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2Vy
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQ
aWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NG
OUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC02MjA2LDYgKzYyMTYsNyBAQAogCQkJCTJEOUZCMjBEMjM3NTIwOUQwMDQ5RjkzNiAv
KiBFbnRyeVBvaW50ICovLAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8s
CiAJCQkJMkQ5RkIyMDYyMzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKKwkJCQk3MkQ1MDJBMzIz
OUYwNUI1MDA0NDY2QTggLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQkyRDlGQjIwQzIzNzUy
MDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJMkQ5
RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywK
IAkJCQkyRDlGQjIwOTIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbiAqLywKQEAgLTc1MzAsNiArNzU0MSwxOCBAQAogCQkJbmFtZSA9IG1hYzsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyRDUwMkEzMjM5RjA1QjUwMDQ0
NjZBOCAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MjZDNUFERTIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MjZDNUFERjIzOUYwN0FFMDBEMzQyNDggLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzI2QzVBREQyMzlGMDZFMzAw
RDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJ
CQk1NURDRkFBNzIzOTlFNkQ0MDA1MENEMjIgLyogUmVuZGVyaW5nU3VyZmFjZVNldC5jcHAgKi8s
CisJCQkJNTVEQ0ZBQTYyMzk5RTYwQzAwNTBDRDIyIC8qIFJlbmRlcmluZ1N1cmZhY2VTZXQuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVy
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTc5MjIsOSAr
Nzk0NSwxMiBAQAogCQkJCTFBOTBDMUYyMTI2NEZENzEwMDNFNDRENCAvKiBGaW5kQ29udHJvbGxl
ci5oICovLAogCQkJCTdDMzg3NDMzMTcyRjU2MTUwMDFCRDg4QSAvKiBQYWdlQmFubmVyLmNwcCAq
LywKIAkJCQk3Q0Y0N0ZGOTE3Mjc1QzU3MDA4QUNCOTEgLyogUGFnZUJhbm5lci5oICovLAorCQkJ
CTU1RENGQUEwMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAq
LywKKwkJCQk1NURDRkFBMTIzOTlCREEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oICovLAogCQkJCUE1NUJBODEyMUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0
b3JVSS5jcHAgKi8sCiAJCQkJQTU1QkE4MTMxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdlYklu
c3BlY3RvclVJLmggKi8sCiAJCQkJQTU1QkE4MTQxQkEyM0UwNTAwN0NEMzNEIC8qIFJlbW90ZVdl
Ykluc3BlY3RvclVJLm1lc3NhZ2VzLmluICovLAorCQkJCTcyNkM1QUU1MjNBMDAwNzkwMEQzNDI0
OCAvKiBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLmggKi8sCiAJCQkJMkQ4MTlCOTkx
ODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwICovLAog
CQkJCTJEODE5QjlBMTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVj
dG9yLmggKi8sCiAJCQkJMkQ4MTlCOUIxODYyNzVCMzAwMUYwM0QxIC8qIFZpZXdHZXN0dXJlR2Vv
bWV0cnlDb2xsZWN0b3IubWVzc2FnZXMuaW4gKi8sCkBAIC05OTk5LDYgKzEwMDI1LDcgQEAKIAkJ
CQkxQTU3MDRGQzFCRTE3NTExMDA4NzRBRjEgLyogUmVtb3RlT2JqZWN0SW52b2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzODAxODU5MEFFNDAwRjNFQzA1IC8qIFJlbW90ZU9iamVj
dFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMxMzM4NjE4NTkwQzQ2MDBGM0VDMDUg
LyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2
QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDdBODE4N0I1MTc2MDA0
Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTE2NTMsNiArMTE2ODAsNyBAQAogCQkJ
CTBGRjI0QTJEMTg3OUU0QkMwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQzE4RkI0MjE4QTZF
OUUwMDI1QTg4RCAvKiBSZW1vdGVMYXllclRyZWVWaWV3cy5tbSBpbiBTb3VyY2VzICovLAogCQkJ
CTFBQzEzMzg1MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3MjZDNUFFMDIzOUYwN0FFMDBEMzQyNDgg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NTk0N0E3MTg3QjUxNzYwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3Nh
Z2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTVCQTgyNjFCQTI1Q0ZEMDA3Q0Qz
M0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMUJCQkU0QTAxOUI2NkM1MzAwNkI3RDgxIC8qIFJlbW90ZVdlYkluc3BlY3Rv
clVJTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cAppbmRleCAzYWJiMWM3ZTM3YzQ3ZGVlMzY4MzQ3MmUyZTMzN2I0NWZhZjU1ODA1Li5hZTQxYTZl
ODEyYjQ3ODlkNTE0YWEzNjAzYjhkYTdmMjBhNDdmNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNp
bmNsdWRlICJQYWdlQmFubmVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
IgogI2luY2x1ZGUgIlVzZXJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC04ODEsMTQgKzg4MiwxOSBAQCBH
cmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9y
eSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9N
T05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6
OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQp
IGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVh
KCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKK1JlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIHJldHVybiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKK30KICNlbmRpZgogCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXll
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCA3MmViZWY1MGRmOWIxNGE4NzJmYzM1NjBhMWM4MTcz
NzQ1MWQ3MDI3Li45Mzc2MDY1MDEyZWUxZWFjYmRmYjQ3NTEwNjFhZDJhNTZjODU5MWFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCkBAIC0yMzAsNiArMjMwLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNr
ZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKwogICAg
IENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29u
c3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1Ry
aWdnZXJGbGFncz4oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkN2U3ZjgxMGMw
NDlmNDU2NmIzMGQxYTcxMDQyNGVhYjYyNDdhNzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
I2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSU9TdXJmYWNlLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVm
UHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwor
ICAgIGJvb2wgc3VjY2VlZGVkOworICAgIAorICAgIFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllciA9IFJlbmRlcmluZ0JhY2tlbmRQ
cm94eUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgY29ubmVjdGlvbi0+c2VuZFN5bmMoTWVz
c2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
cmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllciksIE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kOjpSZXBseShzdWNjZWVkZWQpLCAw
KTsKKworICAgIGlmICghc3VjY2VlZGVkKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQocmVuZGVyaW5nQmFj
a2VuZFByb3h5SWRlbnRpZmllcikpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVy
aW5nQmFja2VuZFByb3h5SWRlbnRpZmllcikKKyAgICA6IG1fcmVuZGVyaW5nQmFja2VuZFByb3h5
SWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyKQoreworfQorCitSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgUmVm
PElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVu
c3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIGNvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJp
bmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllciksIDApOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGVTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBjb25z
dCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKTsKKyAgICBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodDsKKyAgICAKKyAgICBjb25uZWN0aW9u
LT5zZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVT
dXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCBzaXplLCBjb250ZXh0U2l6ZSwgY29sb3JTcGFjZSks
IE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZVN1cmZhY2U6OlJl
cGx5KHNlbmRSaWdodCksIG1fcmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllcik7CisKKyAg
ICBpZiAoIXNlbmRSaWdodCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0
dXJuIFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRS
aWdodCksIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7Cit9CisKK3ZvaWQgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFj
ZUlkZW50aWZpZXIpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpOworICAgIGNvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVsZWFzZVN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpLCBtX3JlbmRlcmlu
Z0JhY2tlbmRQcm94eUlkZW50aWZpZXIpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODY1M2MwMTQ0M2E5ZDI5N2Yx
YTI3ZGFlYmM0NmQ2Y2Y3ZjYyZDAyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW5kZXJpbmdC
YWNrZW5kUHJveHlJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNr
ZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisgICAgCisgICAg
flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpJT1N1cmZhY2U+IGNyZWF0ZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisgICAgdm9pZCByZWxlYXNlU3VyZmFj
ZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcikgb3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgor
ICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmll
cik7CisgICAgCisgICAgUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllciBtX3JlbmRlcmlu
Z0JhY2tlbmRQcm94eUlkZW50aWZpZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTI1MjFmMGJjNGNkOGMwZjdjMjE1NTI2MzQ0MzJjYmQzNGI1NGMyMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbmRlcmluZ0JhY2tlbmRQcm94
eUlkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyVHlwZSB7IH07Cit1c2lu
ZyBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5k
ZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyVHlwZT47CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385359</attachid>
            <date>2019-12-10 23:24:42 -0800</date>
            <delta_ts>2019-12-13 19:56:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191210232441.patch</filename>
            <type>text/plain</type>
            <size>68239</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzMzU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2MyZDgxY2NmMWJmMjNh
MjA0YTVjMDdhY2U4MTcxMGEzM2IzOWVmMy4uNGQ5ZDgyYTM0ZTIzMWUwNmQxODQzNzAxZjA5NTE1
ZmJmZTljMzMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE5LTEyLTEwICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgY2xhc3Mg
UmVuZGVyaW5nQmFja2VuZCB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgdG8gYW5kIHJlY2VpdmluZyByZXBsaWVzCisgICAgICAgIHRv
IGFuZCBmcm9tIHRoZSBHUFVQcm9jZXNzLgorCisgICAgICAgIEluIHRoaXMgcGF0Y2gsIGEgc2lu
Z2xlIGZ1bmN0aW9uYWxpdHkgaXMgYWRkZWQgdG8gUmVuZGVyaW5nQmFja2VuZDoKKyAgICAgICAg
Y3JlYXRpbmcgYW5kIHJlbGVhc2luZyBhIHNoYXJlZCBJT1N1cmZhY2UuCisKKyAgICAgICAgQSBz
aW5nbGV0b24gUmVuZGVyaW5nQmFja2VuZCB3aWxsIGNyZWF0ZWQgYnkgQ2hyb21lQ2xpZW50IGFu
ZCBvd25lZCBieQorICAgICAgICB0aGUgUGFnZS4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlOjpyZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKiBwYWdl
L1BhZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N1cmZhY2VJZGVudGlmaWVyLmg6
IEFkZGVkLgorCiAyMDE5LTEyLTEwICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgogCiAgICAgICAgIFtXaW5dIEZpeCBNU1ZDIHdhcm5pbmcgQzQ3MDE6IHBvdGVudGlh
bGx5IHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGUgJ3gnIHVzZWQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNjNk
YjE0ZjJhNmZjYzdiNTUxOWJlMTQzZDEwODg0OGEwNTZhMWE4ZS4uNjhkYmNkMTFhZDMyMjA0YTUy
ZmU4YmQ2MDVhNmE4NzI5OTMzNDhiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw4MSBAQAorMjAxOS0x
Mi0xMCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIE1ha2UgR1BVIHByb2Nlc3MgY3JlYXRlL3JlbGVhc2UgYSBzaGFyZWQgSU9TdXJmYWNlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kIGFuZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgYXJlIGludHJvZHVj
ZWQgdG8KKyAgICAgICAgbWFuYWdlIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIFdlYlBy
b2Nlc3MgYW5kIHRoZSBHUFVQcm9jZXNzIGZvcgorICAgICAgICByZW5kZXJpbmcgb3BlcmF0aW9u
cy4KKworICAgICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIGlzIHJlc3BvbnNpYmxlIGZv
ciBjcmVhdGluZywgY2FjaGluZyBhbmQKKyAgICAgICAgcmVsZWFzaW5nIHRoZSBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkgZ2l2ZW4gaXRzIFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZp
ZXIuCisgICAgICAgIEl0IGlzIHJlc3BvbnNpYmxlIGFsc28gZm9yIGRpc3BhdGNoaW5nIHRoZSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICAgICAgbWVzc2FnZXMuCisKKyAgICAgICAg
UmVuZGVyaW5nU3VyZmFjZVNldCBtYW5hZ2VzIGNyZWF0aW5nIGFuIElPU3VyZmFjZSwgaW5pdGlh
bGl6aW5nIGl0cworICAgICAgICBHcmFwaGljc0NvbnRleHQgZm9yIGRyYXdpbmcgZ2l2ZW4gU3Vy
ZmFjZUlkZW50aWZpZXIuIEl0IGNhY2hlcyBpdCBhbHNvCisgICAgICAgIGZvciBsYXRlciByZWZl
cmVuY2VzLiBXaGVuIHRoZSBXZWJQb3JjZXNzIGlzIGRvbmUgd2l0aCBhIHNoYXJlZCBJT1N1cmZh
Y2UsCisgICAgICAgIEl0IGhhcyB0byBjYWxsIEdQVVBvcmNlc3MgdG8gcmVtb3ZlIHRoaXMgSU9T
dXJmYWNlIGZyb20gdGhlIGNhY2hlIG9mCisgICAgICAgIFJlbmRlcmluZ1N1cmZhY2VTZXQuCisK
KyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2Vz
Lm1ha2U6CisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRj
aE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50aWZp
ZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIG5ldyBtZXRob2RzIGZvciBjcmVhdGluZy9yZWxl
YXNpbmcgYSBSZW5kZXJpbmdCYWNrZW5kLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlU3VyZmFjZSk6CisgICAgICAgICog
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
OiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5IENvbW11bmljYXRlcyB3aXRoIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQgaW4KKyAgICAgICAgdGhlIFdlYlBvcmNlc3MuIEl0IGNyZWF0ZXMvcmVsZWFzZXMgYW4gSU9T
U3VyZmFjZS4gSXQgcmVnaXN0ZXJzIGl0c2VsZiBhcworICAgICAgICBhIG1lc3NhZ2UgcmVjZWl2
ZXIgaW4gdGhlIGNvbnN0cnVjdG9yIGFuZCB1bnJlZ2lzdGVyIGl0c2VsZiBpbiB0aGUgZGVzdHJ1
Y3Rvci4KKworICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdT
dXJmYWNlU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbmRlcmluZ1N1cmZhY2VT
ZXQ6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW5kZXJpbmdTdXJmYWNlU2V0
OjpyZWxlYXNlU3VyZmFjZSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbmRlcmluZ1N1cmZhY2VTZXQuaDogQWRkZWQuCisgICAgICAgIE1hbmdlcyBhIHNldCBvZiBJ
T1N1cmZhY2VzLiAgICAgICAgCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eToKKyAgICAgICAgV2hlbiB0aGUgYXR0cmlidXRlICdXYW50c0Rpc3BhdGNoJyBpcyBhZGRlZCB0
aGUgbWVzc2FnZXMuaW4gZmlsZSwgdGhlCisgICAgICAgIGRpZFJlY2VpdmVNZXNzYWdlKCkgYW5k
IGRpZFJlY2VpdmVTeW5jTWVzc2FnZSgpIHdpbGwgaW5jbHVkZSBhIGRpc3BhdGNoCisgICAgICAg
IGNhbGxzIHN1Y2ggdGhhdCB0aGUgcmVjZWl2ZXIgdGhlIGFiaWxpdHkgdG8gZGlzcGF0Y2ggdGhl
bS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6
CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6cmVsZWFzZVN1cmZhY2UpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIGlzIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24gb2YgUmVuZGVyaW5nQmFja2VuZC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVu
dGlmaWVyLmg6IEFkZGVkLgorCiAyMDE5LTEyLTEwICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3Jp
LkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dIEZpeCBNU1ZDIHdhcm5pbmcgQzQ3MDE6
IHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGUgJ3gnIHVzZWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCmluZGV4IGVlODllZTNmMGNjYmNkY2YzODk2Zjk0MjU4ZjFhMzYxNGQxNTYzZjYu
LjA3Yjk3ZTMxY2ZhNWRmYTY4MWIyNWMyMDMzY2NkNDE3Mzg5ZjgwODkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQpAQCAtMTEwOCw4ICsxMTA4LDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3Rl
VmlkZW9TYW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9TdHJpbmdUcnVuY2F0b3IuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cmZhY2VJZGVudGlm
aWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9UZXh0UnVuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDAzZTZmNTQzM2JmNmY2N2ViYzVmNDlmZWQwYTk1MDEyZDRiZTRiZjkuLjFhOGFmNGY5YzM4M2U0
Nzg2Mzg0NWQyYmY0YjUwMGFjNGJhOWE3YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE3NDMsNiArMTc0Myw3IEBACiAJCTU1
QUYxNEU2MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBRjE0RTQxRUFBQzU5QjAwMjZFRUFBIC8q
IFVUSVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNTVEQ0M1MjgyMjQwN0IyMDAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RENDNTI1MjI0
MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjkyMjQwN0IyQTAwQzI2RTMyIC8q
IFNWR0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RENDNTIzMjI0MDczRkUwMEMyNkUzMiAvKiBTVkdMaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVEQ0ZBQTQyMzk5QzlBNjAwNTBDRDIy
IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1RENGQUEyMjM5OUM0RDgwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVF
Qzk1OTkyMDZBQTdBMDAwN0REMEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFQzk1OTcyMDY5QzkyRDAw
N0REMEE5IC8qIFBhaW50RnJlcXVlbmN5VHJhY2tlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1RkE3RkZCMjExMEVDRDcwMDVBRUZFNyAvKiBT
Vkdab29tQW5kUGFuVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTVGQTdGRkEyMTEwRUNENzAwNUFFRkU3IC8qIFNWR1pvb21BbmRQYW5UeXBlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcwNDQw
NUExRTUzOTM2MjAwMzU2NjAxIC8qIEpTQWVzQ2JjQ2ZiUGFyYW1zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA0NDA1OTFFNTM5MzYyMDAzNTY2MDEg
LyogSlNBZXNDYmNDZmJQYXJhbXMuaCAqLzsgfTsKQEAgLTIxMjMsNiArMjEyNCw3IEBACiAJCTcy
NEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYx
M0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1
MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVC
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQzM5RTYyMzlFQkJGNzAwQjYz
RTAyIC8qIFN1cmZhY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50
aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0
NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2Fn
ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTg2
NjIsNiArODY2NCw3IEBACiAJCTU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRp
dmVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1pdGl2ZUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MjYyMjQwNzRGQTAwQzI2RTMyIC8qIFNWR1Byb3BlcnR5
QWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NURDQzUyNzIyNDA3NTBCMDBDMjZFMzIgLyogU1ZHUHJv
cGVydHlBY2Nlc3NvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvcklt
cGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTIyMzk5QzREODAwNTBD
RDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVDOTU5NzIwNjlDOTJEMDA3REQw
QTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaW50RnJlcXVl
bmN5VHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVFNTM1NDIyM0Iy
OUU5MDBGQkE5NDQgLyogU1ZHTWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHTWVtYmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTVFRTUzNTYyMjNCMjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBbmlt
YXRvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU4
Myw2ICs5NTg2LDcgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRz
UkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNS
R0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3VyZmFjZUlkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRp
bmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VY
VHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdC
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1
NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VY
VHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MDg3LDYgKzI1MDkxLDcg
QEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDcz
QTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkw
NzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk1
NURDRkFBMjIzOTlDNEQ4MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAogCQkJCUE3
M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1
RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1
RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjUwOTcsNiArMjUxMDIsNyBA
QAogCQkJCUIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICov
LAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLywK
IAkJCQk4NDlGNzc3NTBFRkVDNjIwMDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggKi8s
CisJCQkJNzJBQzM5RTQyMzlFQjg3RjAwQjYzRTAyIC8qIFN1cmZhY2VJZGVudGlmaWVyLmggKi8s
CiAJCQkJMDg3NTU4QzMxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5jcHAgKi8sCiAJCQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2
OSAvKiBUYWJTaXplLmggKi8sCkBAIC0zMTg3Myw2ICszMTg3OSw3IEBACiAJCQkJQkNFQTQ4NzYw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYy
RjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VT
dHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NURDRkFBNDIzOTlDOUE2MDA1MENEMjIg
LyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIyMjEyMzk5
NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTMyNDAwLDYgKzMyNDA3LDcgQEAKIAkJCQk5M0IyRDgxNjBGOTkyMEQy
MDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QzA3
ODUwMTE2NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NzYyN0I5ODE0RkI1NDI0MDAyQ0RDQTEgLyogU3VwcGxlbWVudGFibGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTcyQUMzOUU2MjM5RUJCRjcwMEI2M0UwMiAvKiBTdXJmYWNlSWRlbnRpZmllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDg3NTU4QzYxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBh
aXJBd2FyZVRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJDMTIxN0QxMUFCOUU3
NzAwM0M0NjJDIC8qIFN1c3BlbmRhYmxlVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTc0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBkNzgxZjM1Y2I1Mzg4NzI1ZmRiMzBkYmQzMjU0
NGIyZGM1MWMwZDEyLi40NDE5NzNjNDVlNWQzYTIwNTUwNzA4NTExZjNlZjRiNjgwZDUwZTgxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRl
ICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2lu
Y2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwNCw2ICszMDUsMTAg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3Jl
YXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICB2aXJ0
dWFsIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMg
dGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDU2NTVkYzJjMjljNzE2MWUxMmM0
Y2EwMjc5MDg4ZWIzZjQzYmViNTcuLmVlMzI2OGZlNTkzYWQyYTk2MGMyMDBhNmVhY2VhY2ZmODkw
ZmQ3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMjkyNCw2ICsyOTI0LDE1IEBAIFJlbmRlcmlu
Z1VwZGF0ZVNjaGVkdWxlciYgUGFnZTo6cmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyKCkKICAgICBy
ZXR1cm4gKm1fcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyOwogfQogCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFBhZ2U6OnJlbmRlcmluZ0JhY2tlbmQo
KQoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0Jh
Y2tlbmQgPSBjaHJvbWUoKS5jbGllbnQoKS5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAg
cmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZDsKK30KKyNlbmRpZgorCiB2b2lkIFBhZ2U6OmZvckVh
Y2hEb2N1bWVudChjb25zdCBGdW5jdGlvbjx2b2lkKERvY3VtZW50Jik+JiBmdW5jdG9yKQogewog
ICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBjb2xsZWN0RG9jdW1lbnRzKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5o
CmluZGV4IDVmNGNlYjBhMzY1MGM0MmE4ZTE3ZDEyNjNmNTY4NDdlZjE4MWM0NTMuLmZkNWE4OGI2
N2Y3Zjc5MTUyNGRmMDNiZGM3MTIwYmU5MzZkNWJkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiUlRDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJlZ2lvbi5o
IgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFj
a2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIgogI2luY2x1ZGUg
IlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKQEAgLTI3Myw2ICsy
NzQsMTAgQEAgcHVibGljOgogICAgIFBlcmZvcm1hbmNlTW9uaXRvciogcGVyZm9ybWFuY2VNb25p
dG9yKCkgeyByZXR1cm4gbV9wZXJmb3JtYW5jZU1vbml0b3IuZ2V0KCk7IH0KIAogICAgIFJlbmRl
cmluZ1VwZGF0ZVNjaGVkdWxlciYgcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyKCk7CisgICAgCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiByZW5k
ZXJpbmdCYWNrZW5kKCk7CisjZW5kaWYKIAogICAgIFZhbGlkYXRpb25NZXNzYWdlQ2xpZW50KiB2
YWxpZGF0aW9uTWVzc2FnZUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWRhdGlvbk1lc3Nh
Z2VDbGllbnQuZ2V0KCk7IH0KICAgICB2b2lkIHVwZGF0ZVZhbGlkYXRpb25CdWJibGVTdGF0ZUlm
TmVlZGVkKCk7CkBAIC05MDEsNiArOTA2LDEwIEBAIHByaXZhdGU6CiAKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyPiBtX3JlbmRlcmluZ1VwZGF0ZVNjaGVkdWxl
cjsKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gbV9yZW5kZXJpbmdCYWNrZW5kOworI2VuZGlmCisKICAgICBIYXNoU2V0PFJlbmRlck9iamVj
dCo+IG1fcmVsZXZhbnRVbnBhaW50ZWRSZW5kZXJPYmplY3RzOwogICAgIFJlZ2lvbiBtX3RvcFJl
bGV2YW50UGFpbnRlZFJlZ2lvbjsKICAgICBSZWdpb24gbV9ib3R0b21SZWxldmFudFBhaW50ZWRS
ZWdpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmFlMzgyZjcyNWRhMGFiZWViN2RiYmY3MmM1MmRmOTg1
M2M0OWM1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiU3VyZmFj
ZUlkZW50aWZpZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRTaXplOwor
Y2xhc3MgSU9TdXJmYWNlOworCitjbGFzcyBSZW5kZXJpbmdCYWNrZW5kIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPFJlbmRlcmluZ0JhY2tlbmQ+IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIAorICAgIHZpcnR1YWwgc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlU3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciwgY29u
c3QgSW50U2l6ZSYsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyKSA9IDA7
Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3VyZmFjZUlkZW50aWZpZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YzQ2NGNlMGY1ZjgzOGYzNDMxNzUwMDc5YTFlYTg5Mzc4ODVjYTc0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3VyZmFjZUlkZW50aWZp
ZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gU3VyZmFjZUlkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFN1cmZhY2VJZGVudGlmaWVyID0g
T2JqZWN0SWRlbnRpZmllcjxTdXJmYWNlSWRlbnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggN2YwOGYyYjJmMTg1
ODJlZDUwNDAzMmRjYWNiNTQ3ODZhMTY5YWQ1Zi4uY2MwNzE1NWY2YTc5YjVkNDRiZGE0NTRkOGVl
MDUyMjBkZGQ3M2Y2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1p
bnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQu
eGNmaWxlbGlzdApAQCAtMTYsNiArMTYsNyBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVB
REVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVBy
b2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBs
ZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1lc3Nh
Z2VzLmluCiAkKFBST0pFQ1RfRElSKS9OZXR3b3JrUHJvY2Vzcy9DdXN0b21Qcm90b2NvbHMvTGVn
YWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9OZXR3
b3JrUHJvY2Vzcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvQ2xpZW50Lm1lc3NhZ2VzLmlu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRl
eCAzYjFlOTQxMTcwMzhiZjBkMDRhMDc1N2Y1ZTZkODVlMzM0YmQ3NWFlLi5mZThlZWZmZGNlNjU0
YjAyYjc1ODNkMjI1MmE1MmE0YTA1ODllY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTExNyw2ICsxMTcsOSBAQCAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5TWVzcwogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3Nh
Z2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1l
c3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGJlNTI1ZTEzYzU5YmJkMTQ1NmU4ZjBkNDIzYmE2
NDQxY2U4YjA4ZGEuLjQ1YzBhYTY4MThiZWNiOTU0ZWM0OGZlYmY2YjEwMjE3ZDU5YTFmYjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI0LDYgKzI0LDcgQEAgVlBBVEggPSBcCiAg
ICAgJChXZWJLaXQyKSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3MvbWFjIFwKKyAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2VzcyBcCiAgICAgJChXZWJLaXQy
KS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNz
L2NhY2hlIFwKQEAgLTEzNiw2ICsxMzcsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQ
bHVnaW5Qcm94eSBcCiAgICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBcCiAgICAg
UmVtb3RlT2JqZWN0UmVnaXN0cnkgXAorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBc
CiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXAogICAgIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5IFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JVSSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggYmQx
MzlmZTUzMzFiY2NlMzZjMzM0M2IxNTIxN2QwMTFmMjUyNGMzOC4uNWUzZmY5YTY4MDc1MzY5NTFh
YTJlNDExOTA1OTA1NDgzYWQxZTZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMzMsMTAgKzMzLDcgQEAK
ICNpbmNsdWRlICJHUFVQcm9jZXNzLmgiCiAjaW5jbHVkZSAiR1BVUHJvY2Vzc01lc3NhZ2VzLmgi
CiAjaW5jbHVkZSAiR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgi
Ci0jaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JUcmFuc2FjdGlvbi5oIgotI2lu
Y2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oIgogI2luY2x1ZGUgIldlYkVycm9ycy5oIgogI2luY2x1ZGUgIldlYlBy
b2Nlc3NNZXNzYWdlcy5oIgogCkBAIC02OCwxMiArNjUsMzcgQEAgdm9pZCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewogfQogCitib29sIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2Fn
ZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQor
Citib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3Nh
Z2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlciwg
cmVwbHlFbmNvZGVyKTsKK30KKwogdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRS
ZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlTmFtZSkKIHsKICAgICBXVEZMb2dBbHdheXMoIlJlY2VpdmVkIGFuIGludmFsaWQgbWVz
c2FnZSBcIiVzLiVzXCIgZnJvbSB0aGUgd2ViIHByb2Nlc3MuXG4iLCBtZXNzYWdlUmVjZWl2ZXJO
YW1lLnRvU3RyaW5nKCkuZGF0YSgpLCBtZXNzYWdlTmFtZS50b1N0cmluZygpLmRhdGEoKSk7CiAg
ICAgQ1JBU0goKTsKIH0KIAordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZFByb3h5SWRlbnRpZmllciwgTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmREZWxheWVkUmVwbHkmJiByZXBseSkKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwLmVuc3VyZShyZW5k
ZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLCBbJl0oKSB7CisgICAgICAgIHJldHVybiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZFBy
b3h5SWRlbnRpZmllcik7CisgICAgfSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsK
KyAgICByZXBseShyZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZFByb3h5
SWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyKQoreworICAgIEFTU0VS
VChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcC5jb250YWlucyhyZW5kZXJpbmdCYWNr
ZW5kUHJveHlJZGVudGlmaWVyKSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlN
YXAucmVtb3ZlKHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmlu
ZGV4IGM2NGE0M2U2NGFmNTEwYzA3NGQ3MDg2ZjdiNjQ2ZmE2YzZhNGY0NjcuLmRhYTUyNjU4YmMx
MjFiODFhNWRkN2JiNzkyMDFmZmJmZmYyZDEyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMjgsMzcgKzI4LDU1
IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgot
I2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKKyNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJN
ZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIGNsYXNzIEdQVVByb2Nlc3M7CiAKK2NsYXNzIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTsKKwogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDog
cHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpD
b25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIH5HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24o
KSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7
IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdl
dCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lk
IGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRT
dXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNz
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KLQog
cHJpdmF0ZToKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKEdQVVByb2Nlc3MmLCBXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKIAog
ICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQ2xvc2Uo
SVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2Vp
dmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogCisg
ICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7
CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisgICAgICAgIAorICAgIHZv
aWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVy
LCBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFj
a2VuZERlbGF5ZWRSZXBseSYmKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJl
bmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpOworCisgICAgdXNpbmcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5TWFwID0gSGFzaE1hcDxSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlm
aWVyLCBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Pj47CisgICAgICAgIAogICAgIFJl
ZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNYXAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXA7CiAgICAgUmVmPEdQVVByb2Nl
c3M+IG1fZ3B1UHJvY2VzczsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBt
X3dlYlByb2Nlc3NJZGVudGlmaWVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5k
ZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uMjBlYjk0MTVlYTY0
OWVkYTI0YTY0ZDFkNmI5NGZkZjE4ZDRhZGU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMu
aW4KQEAgLTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2Fn
ZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2ggeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5n
QmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZFByb3h5SWRlbnRpZmllcikgLT4gKGJvb2wgc3VjY2VlZGVkKSBTeW5jaHJvbm91cwor
ICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5k
UHJveHlJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpCiB9CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYjIzMTgxNjAwMjdmNGEzZGQyY2U4MmUx
ZjYxYTdkNmI1YTYxNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAt
MCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5n
U3VyZmFjZVNldC5oIgorI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWY8UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZShH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5k
ZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZp
ZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50
aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kUHJveHlJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1h
a2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdC
YWNrZW5kUHJveHlJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpCit7
CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mt
Pm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0Jh
Y2tlbmRQcm94eUlkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAg
IGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNz
YWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRQcm94eUlkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpjcmVhdGVTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJ
ZGVudGlmaWVyLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpDcmVhdGVTdXJmYWNlOjpEZWxheWVkUmVwbHkmJiByZXBseSkKK3sKKyAgICBhdXRv
KiBzdXJmYWNlID0gbV9yZW5kZXJpbmdTdXJmYWNlU2V0LmNyZWF0ZVN1cmZhY2Uoc3VyZmFjZUlk
ZW50aWZpZXIsIHNpemUsIGNvbnRleHRTaXplLCBjb2xvclNwYWNlKTsKKworICAgIGlmICghc3Vy
ZmFjZSkKKyAgICAgICAgcmVwbHkoeyB9KTsKKyAgICAKKyAgICByZXBseShzdXJmYWNlLT5jcmVh
dGVTZW5kUmlnaHQoKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpy
ZWxlYXNlU3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKK3sKKyAg
ICBtX3JlbmRlcmluZ1N1cmZhY2VTZXQucmVsZWFzZVN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmRiOTFkNjZjMDRmMTUxOTg1OTk5ODQxNzk2YTViNWRkNThiYjk5NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nU3VyZmFjZVNldC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFj
ZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk+CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4g
Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kUHJveHlJ
ZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsK
KworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpOworCisgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNyZWF0ZVN1cmZhY2Uo
V2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlU3VyZmFjZURlbGF5ZWRS
ZXBseSYmKTsKKyAgICB2b2lkIHJlbGVhc2VTdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlm
aWVyKTsKKyAgICAgICAgCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVuZGVyaW5nQmFja2VuZFByb3h5SWRl
bnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXI7CisgICAgUmVuZGVyaW5n
U3VyZmFjZVNldCBtX3JlbmRlcmluZ1N1cmZhY2VTZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mYTJjYzQ0MjQ4ZmJmYzM5MzYwZTNkMmZiZmFmYTJiNGYxNTU1OTk3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IHsKKyAgICB2b2lkIENy
ZWF0ZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIs
IFdlYkNvcmU6OkludFNpemUgc2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBjb250ZXh0U2l6ZSwgZW51
bTp1aW50OF90IFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSkgLT4gKE1hY2hTZW5kUmln
aHQgc2VuZFJpZ2h0KSBTeW5jaHJvbm91cworICAgIHZvaWQgUmVsZWFzZVN1cmZhY2UoV2ViQ29y
ZTo6U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdTdXJmYWNlU2V0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ1N1cmZhY2VTZXQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM4NTYzMTk1NTg4NzNjMzZiNDQxZWRlNTZlNWM4ODc5MjU4ZGZjMDQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5k
ZXJpbmdTdXJmYWNlU2V0LmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ1N1cmZhY2VTZXQuaCIKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitJT1N1cmZhY2UqIFJlbmRlcmluZ1N1
cmZhY2VTZXQ6OmNyZWF0ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZp
ZXIsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYXV0byBzdXJmYWNlID0gIElPU3VyZmFjZTo6Y3Jl
YXRlKHNpemUsIGNvbnRleHRTaXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOwor
ICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBJbml0
YWxpemUgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIEdyYXBoaWNzQ29udGV4dCYgc3VyZmFj
ZUNvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBzdXJmYWNl
Q29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBzdXJmYWNlQ29udGV4dC50cmFu
c2xhdGUoMCwgLWNvbnRleHRTaXplLmhlaWdodCgpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gc3Vy
ZmFjZS5nZXQoKTsKKworICAgIEFTU0VSVCghbV9zdXJmYWNlTWFwLmNvbnRhaW5zKHN1cmZhY2VJ
ZGVudGlmaWVyKSk7CisgICAgbV9zdXJmYWNlTWFwLmFkZChzdXJmYWNlSWRlbnRpZmllciwgV1RG
TW92ZShzdXJmYWNlKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFJlbmRlcmlu
Z1N1cmZhY2VTZXQ6OnJlbGVhc2VTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVu
dGlmaWVyKQoreworICAgIEFTU0VSVChtX3N1cmZhY2VNYXAuY29udGFpbnMoc3VyZmFjZUlkZW50
aWZpZXIpKTsKKyAgICByZXR1cm4gbV9zdXJmYWNlTWFwLnJlbW92ZShzdXJmYWNlSWRlbnRpZmll
cik7Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ1N1cmZh
Y2VTZXQuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRl
cmluZ1N1cmZhY2VTZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYjQxMTdjM2I4MDg5MDg0NWJhYzMyMjFlN2Rl
M2MzYjFkN2FjYTJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nU3VyZmFjZVNldC5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JT
cGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSU9TdXJmYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbnRTaXplLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TdXJmYWNlSWRlbnRpZmllci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZVNldCB7CitwdWJsaWM6
CisgICAgUmVuZGVyaW5nU3VyZmFjZVNldCgpID0gZGVmYXVsdDsKKworICAgIFdlYkNvcmU6OklP
U3VyZmFjZSogY3JlYXRlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRTaXplLCBX
ZWJDb3JlOjpDb2xvclNwYWNlKTsKKyAgICBib29sIHJlbGVhc2VTdXJmYWNlKFdlYkNvcmU6OlN1
cmZhY2VJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICB1c2luZyBTdXJmYWNlTWFwID0gSGFz
aE1hcDxXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OklPU3VyZmFjZT4+OworICAgIFN1cmZhY2VNYXAgbV9zdXJmYWNlTWFwOworfTsKKworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
Y3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHkKaW5kZXggZWQxMWFjMjcyNTIyNmU0N2EyYjU2YmNjOWVjZjIyMmRhYzAwMDlh
ZS4uZTFlY2UzZmQ4Yzk3NDllMDI2ODU1YjU1MjhjZjg3OTViNjRkNDNkNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBz
eXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJV
VEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfQVRUUklCVVRFID0gJ1dhbnRz
RGlzcGF0Y2gnCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwog
Tk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5D
SFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMTYsMTMgKzIxNywxNSBAQCBk
ZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2Vi
Q29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2
aWNlV29ya2VyT3JDbGllbnRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VX
b3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlN1cmZhY2VJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNXU2VydmVyQ29ubmVjdGlvbklkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAogICAgICAgICAn
V2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0SUQnLAotICAgICAgICAnV2ViS2l0OjpUcmFuc2Fj
dGlvbklEJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmll
cicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9y
YWdlTmFtZXNwYWNlSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlRyYW5zYWN0aW9uSUQn
LAogICAgICAgICAnV2ViS2l0OjpVc2VyQ29udGVudENvbnRyb2xsZXJJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllcicsCiAgICAgXSkKQEAgLTc2MCw2
ICs3NjMsOSBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChy
ZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAg
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfQVRUUklCVVRFKToKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0
dXJuO1xuJykKICAgICAgICAgaWYgKHJlY2VpdmVyLnN1cGVyY2xhc3MpOgogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgICVzOjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyKTtcbicgJSAocmVjZWl2ZXIuc3VwZXJjbGFzcykpCiAgICAgICAgIGVsc2U6CkBAIC03NzUs
NiArNzgxLDkgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAg
ICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVS
X0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVz
c2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVz
c2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hf
QVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hT
eW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxuJykKKyAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5k
ZXggNzNmZjRkMjdiZWUzZDgyYTExNDY3MTc0OTJiY2I2NjQ1MjM1YjY0Mi4uOWY5ZWFkODdlNDlm
OTUwODY5ZmQ4Yzg4ZWI0NTI4NWRhMzVhYThlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNCw2ICsyNCw3
IEBACiBHUFVQcm9jZXNzL0dQVVByb2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCiBHUFVQcm9jZXNzL0dQVVByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
Y3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nU3VyZmFjZVNldC5jcHAK
IAogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQ
cm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01NzYsNiArNTc3LDcgQEAgV2Vi
UHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmNwcAogV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50
RGlzcGF0Y2hlci5jcHAKIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKIFdl
YlByb2Nlc3MvV2ViUGFnZS9QYWdlQmFubmVyLmNwcAorV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlV2ViSW5zcGVj
dG9yVUkuY3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIu
Y3BwCiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggOWQyNDJlMmEwNjRkZmY3MmY0OWM0MmY1NGQ5NzgxM2NhZDk0
ZDkyYy4uNzM2OWUzMTgxODJlZTYyODdhZjYxYjAyZjc2ZGE0ZDhhOTViNmVmMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dApAQCAtNjI0LDUgKzYyNCw2IEBAIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVy
TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNl
aXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrTWVzc2FnZVJlY2VpdmVyLmNwcAogVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjc5ZGRjMTIwNDBm
MmJmNzkyNDBjY2E1NWVmOTg5MzBiNTAwNzUzNC4uNGMxODk3YWFiODczMDYzOWI0ODQ4MzhlM2Y1
NzI5MTA0ZTM4YTJjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xMTc0LDYgKzExNzQsOCBAQAogCQk3MTE3MjVBOTIyOEQ1NjQzMDAw
MTg1MTQgLyogV2Vic2l0ZUxlZ2FjeU92ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3kuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxMTcyNUE4MjI4RDU2
M0EwMDAxODUxNCAvKiBXZWJzaXRlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaFBvbGljeS5o
ICovOyB9OwogCQk3MUE2NzZBNjIyQzYyMzI1MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyLmggKi87IH07CiAJCTcxRkI4MTBCMjI2MDYyN0UwMDMyMzY3NyAvKiBXZWJzaXRlU2lt
dWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNp
dGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi87IH07CisJCTcyNkM1QUUw
MjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2QzVBREUyMzlGMDdB
RTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi87IH07CisJCTcy
NkM1QUUxMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNkM1QURGMjM5
RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLzsgfTsKIAkJ
NzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjhFODZFRjE3OTUxODhDMDA4
Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLzsgfTsKIAkJNzVBOEQyQzgxODdDQ0ZBQjAw
QzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0
ZURhdGFTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsg
fTsKIAkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4
RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLzsg
fTsKQEAgLTM1ODMsNiArMzU4NSwxMCBAQAogCQk1M0NGQkJDNjIyMjREMUIwMDAyNjY1NDYgLyog
VGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFRleHRDaGVja2VyQ29tcGxldGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzQ0ZCQkM3MjIyNEQxQjAwMDI2NjU0NiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENoZWNrZXJDb21wbGV0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjNDQUE1MjA2QzQ0M0UwMDg2NDkw
RSAvKiBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1NURDRkFBMDIzOTlCREEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTEyMzk5QkRBMjAwNTBDRDIy
IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBNjIzOTlF
NjBDMDA1MENEMjIgLyogUmVuZGVyaW5nU3VyZmFjZVNldC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdTdXJmYWNlU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUE3
MjM5OUU2RDQwMDUwQ0QyMiAvKiBSZW5kZXJpbmdTdXJmYWNlU2V0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbmRlcmluZ1N1cmZhY2VTZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NzBBQjhGMjIwQUUzQkQ3MDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTU3MEFCOTAwMjBCMjUxNzQwMEI4QkU4NyAvKiBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZVBy
b3h5Q29jb2EubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZVByb3h5Q29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFCOTAzMjBC
MjU0MUMwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTM4MzEsNiArMzgzNywxMCBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3
RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRo
ID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdl
c3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hB
Y3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rp
c3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVT
aW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyNkM1QUREMjM5RjA2RTMwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjZDNUFERTIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkM1QURGMjM5RjA3QUUwMEQzNDI0OCAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkM1
QUU1MjNBMDAwNzkwMEQzNDI0OCAvKiBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNv
bG9yUGlja2VyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9y
UGlja2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjIwNiw2ICs2MjE2LDcgQEAKIAkJ
CQkyRDlGQjIwRDIzNzUyMDlEMDA0OUY5MzYgLyogRW50cnlQb2ludCAqLywKIAkJCQkyRDlGQjIw
NDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5Rjkz
NiAvKiBtYWMgKi8sCisJCQkJNzJENTAyQTMyMzlGMDVCNTAwNDQ2NkE4IC8qIFJlbmRlcmluZ0Jh
Y2tlbmQgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCiAJCQkJMkQ5RkIyMDkyMzc1MjA5RDAwNDlGOTM2
IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gKi8sCkBAIC03NTMwLDYg
Kzc1NDEsMTggQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwog
CQl9OworCQk3MkQ1MDJBMzIzOUYwNUI1MDA0NDY2QTggLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzI2QzVBREUyMzlG
MDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJ
NzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
ICovLAorCQkJCTcyNkM1QUREMjM5RjA2RTMwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNTVEQ0ZBQTcyMzk5RTZENDAwNTBDRDIyIC8q
IFJlbmRlcmluZ1N1cmZhY2VTZXQuY3BwICovLAorCQkJCTU1RENGQUE2MjM5OUU2MEMwMDUwQ0Qy
MiAvKiBSZW5kZXJpbmdTdXJmYWNlU2V0LmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmlu
Z0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QTg0M0ExRDIx
RTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCkBAIC03OTIyLDkgKzc5NDUsMTIgQEAKIAkJCQkxQTkwQzFGMjEyNjRG
RDcxMDAzRTQ0RDQgLyogRmluZENvbnRyb2xsZXIuaCAqLywKIAkJCQk3QzM4NzQzMzE3MkY1NjE1
MDAxQkQ4OEEgLyogUGFnZUJhbm5lci5jcHAgKi8sCiAJCQkJN0NGNDdGRjkxNzI3NUM1NzAwOEFD
QjkxIC8qIFBhZ2VCYW5uZXIuaCAqLywKKwkJCQk1NURDRkFBMDIzOTlCREEyMDA1MENEMjIgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNTVEQ0ZBQTEyMzk5QkRBMjAwNTBD
RDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKIAkJCQlBNTVCQTgxMjFCQTIzRTA1
MDA3Q0QzM0QgLyogUmVtb3RlV2ViSW5zcGVjdG9yVUkuY3BwICovLAogCQkJCUE1NUJBODEzMUJB
MjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5oICovLAogCQkJCUE1NUJBODE0
MUJBMjNFMDUwMDdDRDMzRCAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbiAqLywK
KwkJCQk3MjZDNUFFNTIzQTAwMDc5MDBEMzQyNDggLyogUmVuZGVyaW5nQmFja2VuZFByb3h5SWRl
bnRpZmllci5oICovLAogCQkJCTJEODE5Qjk5MTg2Mjc1QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVy
ZUdlb21ldHJ5Q29sbGVjdG9yLmNwcCAqLywKIAkJCQkyRDgxOUI5QTE4NjI3NUIzMDAxRjAzRDEg
LyogVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5oICovLAogCQkJCTJEODE5QjlCMTg2Mjc1
QjMwMDFGMDNEMSAvKiBWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLm1lc3NhZ2VzLmluICov
LApAQCAtOTk5OSw2ICsxMDAyNSw3IEBACiAJCQkJMUE1NzA0RkMxQkUxNzUxMTAwODc0QUYxIC8q
IFJlbW90ZU9iamVjdEludm9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzEzMzgwMTg1
OTBBRTQwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUFDMTMzODYxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkM1QUUxMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzkwMTg3
QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY1OTQ3QTgxODdCNTE3NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzlCMTg3QjNCNjAwMDQz
Nzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggaW4gSGVhZGVycyAqLywK
QEAgLTExNjUzLDYgKzExNjgwLDcgQEAKIAkJCQkwRkYyNEEyRDE4NzlFNEJDMDAzQUJGMEMgLyog
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyREMxOEZCNDIxOEE2RTlFMDAyNUE4OEQgLyogUmVtb3RlTGF5ZXJUcmVl
Vmlld3MubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUMxMzM4NTE4NTkwQzQ2MDBGM0VDMDUgLyog
UmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNzI2QzVBRTAyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU5NDdBNzE4N0I1MTc2MDA0Mzc4NTcgLyogUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTU1QkE4MjYxQkEyNUNGRDAwN0NEMzNEIC8qIFJlbW90ZVdlYkluc3BlY3RvclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFCQkJFNEEwMTlCNjZDNTMw
MDZCN0Q4MSAvKiBSZW1vdGVXZWJJbnNwZWN0b3JVSU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291
cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggM2FiYjFjN2UzN2M0N2RlZTM2ODM0
NzJlMmUzMzdiNDVmYWY1NTgwNS4uYWU0MWE2ZTgxMmI0Nzg5ZDUxNGFhMzYwM2I4ZGE3ZjIwYTQ3
ZjRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRl
ICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgorI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJVc2VyRGF0YS5oIgogI2lu
Y2x1ZGUgIldlYkNvbG9yQ2hvb3Nlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVy
cy5oIgpAQCAtODgxLDE0ICs4ODIsMTkgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9t
ZUNsaWVudDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZy
ZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3
aW5nQXJlYSA9IG1fcGFnZS5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0Fy
ZWEtPmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBu
dWxscHRyOwogfQorI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCitSZWZQdHI8UmVu
ZGVyaW5nQmFja2VuZD4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7Cit9
CiAjZW5kaWYKIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVy
KEZyYW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggNzJl
YmVmNTBkZjliMTRhODcyZmMzNTYwYTFjODE3Mzc0NTFkNzAyNy4uOTM3NjA2NTAxMmVlMWVhY2Jk
ZmI0NzUxMDYxYWQyYTU2Yzg1OTFhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjMwLDYgKzIz
MCwxMCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0
b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJ
RCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgp
IGNvbnN0IGZpbmFsOworI2VuZGlmCisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxv
d2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lZDdlN2Y4MTBjMDQ5ZjQ1NjZiMzBkMWE3MTA0MjRlYWI2MjQ3YTc5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
V2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0lPU3VyZmFjZS5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZlB0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rp
b24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNz
Q29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICBib29sIHN1Y2NlZWRlZDsKKyAgICAKKyAg
ICBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRQcm94eUlk
ZW50aWZpZXIgPSBSZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwor
ICAgIGNvbm5lY3Rpb24tPnNlbmRTeW5jKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZp
ZXIpLCBNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5n
QmFja2VuZDo6UmVwbHkoc3VjY2VlZGVkKSwgMCk7CisKKyAgICBpZiAoIXN1Y2NlZWRlZCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kKHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpKTsKK30KKwor
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdC
YWNrZW5kUHJveHlJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpCisg
ICAgOiBtX3JlbmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZFBy
b3h5SWRlbnRpZmllcikKK3sKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24g
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKTsKKyAgICBjb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRQ
cm94eUlkZW50aWZpZXIpLCAwKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3Vy
ZmFjZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlU3VyZmFjZShTdXJmYWNlSWRlbnRp
ZmllciBzdXJmYWNlSWRlbnRpZmllciwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6
ZSYgY29udGV4dFNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBSZWY8SVBDOjpD
b25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgTWFjaFNlbmRSaWdodCBzZW5k
UmlnaHQ7CisgICAgCisgICAgY29ubmVjdGlvbi0+c2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllciwgc2l6
ZSwgY29udGV4dFNpemUsIGNvbG9yU3BhY2UpLCBNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpDcmVhdGVTdXJmYWNlOjpSZXBseShzZW5kUmlnaHQpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRQcm94eUlkZW50aWZpZXIpOworCisgICAgaWYgKCFzZW5kUmlnaHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIAorICAgIHJldHVybiBXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0
ZUZyb21TZW5kUmlnaHQoV1RGTW92ZShzZW5kUmlnaHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29s
b3JTcGFjZSkpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VTdXJm
YWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyKQoreworICAgIFJlZjxJUEM6
OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVH
UFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICBjb25uZWN0aW9uLT5zZW5k
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VTdXJmYWNlKHN1
cmZhY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyKTsKK30K
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg2NTNjMDE0NDNhOWQyOTdmMWEyN2RhZWJjNDZkNmNmN2Y2MmQwMjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJp
bmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ+IGNyZWF0ZSgpOworICAgIAorICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBjcmVhdGVTdXJmYWNlKFdl
YkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpIG92ZXJy
aWRlOworICAgIHZvaWQgcmVsZWFzZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIp
IG92ZXJyaWRlOworICAgIAorcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKFJl
bmRlcmluZ0JhY2tlbmRQcm94eUlkZW50aWZpZXIpOworICAgIAorICAgIFJlbmRlcmluZ0JhY2tl
bmRQcm94eUlkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyOworfTsK
KworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmll
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVuZGVyaW5nQmFja2VuZFBy
b3h5SWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyNTIxZjBiYzRjZDhjMGY3YzIxNTUyNjM0NDMy
Y2JkMzRiNTRjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW5kZXJpbmdCYWNrZW5kUHJveHlJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50
aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFja2VuZFBy
b3h5SWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRp
ZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZFByb3h5SWRlbnRpZmllclR5
cGU+OworCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385670</attachid>
            <date>2019-12-13 19:56:56 -0800</date>
            <delta_ts>2019-12-13 20:45:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191213195655.patch</filename>
            <type>text/plain</type>
            <size>111102</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ5YjI1OTQ5YjkxNzNh
ZjAwODZjNDc1NjFlNjU1NTAyODI5M2FjMy4uNzllYTFkOGZhMThmNjY4YzRkNWU4M2JlMTdhZDRi
NGQ5NzljYjhjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTEyLTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgUmVuZGVy
aW5nQmFja2VuZCBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBXZWJQIGFuZCByZWNlaXZpbmcKKyAgICAgICAgcmVw
bGllcyBmcm9tIHRoZSBHUFVQLiBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUg
Y3JlYXRlZCBieQorICAgICAgICBDaHJvbWVDbGllbnQgYW5kIG93bmVkIGJ5IHRoZSBQYWdlLgor
CisgICAgICAgIFJlbmRlcmluZ1N1cmZhY2UgaXMgYWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSBj
cmVhdGluZyBhIHBsYXRmb3JtIHNoYXJlZAorICAgICAgICBzdXJmYWNlLiBDcmVhdGluZyB0aGUg
bWVtb3J5IG9mIHRoZSBzdXJmYWNlIHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBHUFVQLgorICAg
ICAgICBSZW5kZXJpbmdTdXJmYWNlIHdpbGwgY3JlYXRlIGEgcGxhdGZvcm0gc3VyZmFjZSBpbiB0
aGUgV2ViUC4gVGhpcyBzdXJmYWNlCisgICAgICAgIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNh
bWUgbWVtb3J5IGFzIHRoZSBHUFVQIGRvZXMuCisKKyAgICAgICAgUmVuZGVyaW5nU3VyZmFjZSBp
cyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgZm9yIENHLiBJZGVhbGx5IEltYWdlQnVmZmVyCisgICAg
ICAgIHNob3VsZCBoYXZlIGJlZW4gdXNlZCBpbnN0ZWFkLiBCdXQgdG8gdXNlIEltYWdlQnVmZmVy
IGl0IHdpbGwgcmVxdWlyZXMKKyAgICAgICAgZXh0ZW5zaXZlIHJlLWZhY3RvcmluZy4KKworICAg
ICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbmRlcmluZ0JhY2tlbmQpOgor
ICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNl
SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5k
ZXJpbmdTdXJmYWNlQ0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdTdXJm
YWNlOjpwbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFj
ZTo6Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ1N1
cmZhY2U6OlJlbmRlcmluZ1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICBIYXZlIHRvIGRlbGV0ZSB0aGUgdXNp
bmcgc3RhdGVtZW50IGJlY2F1c2UgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IHdhcworICAgICAg
ICBhbWJpZ3VvdXMgc3ltYm9sIGluIFdlYktpdC4KKwogMjAxOS0xMi0xMyAgRGVhbiBKYWNrc29u
ICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgTWFjQ2F0YWx5c3QgYnVpbGQgb2YgbGliQU5H
TEUgaXMgaW5zdGFsbGVkIGluIHRoZSBpbmNvcnJlY3QgbG9jYXRpb24KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggYTU0
ZDM5NzM0MmI5YzRkOWE1ZTJjNWFiMDFlMmI2YmFhY2ZkNWQ2Mi4uYWJmOWIwYjZmYjUxZDkwY2I2
ZGFiYWFlZDNmMTQzNWJmN2IyYjUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTEgQEAKKzIwMTkt
MTItMTMgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAg
ICAgICBNYWtlIEdQVSBwcm9jZXNzIGNyZWF0ZS9yZWxlYXNlIGEgc2hhcmVkIElPU3VyZmFjZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IGFyZSBpbnRyb2R1
Y2VkIHRvCisgICAgICAgIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBXZWJQ
cm9jZXNzIGFuZCB0aGUgR1BVUHJvY2VzcyBmb3IKKyAgICAgICAgcmVuZGVyaW5nIG9wZXJhdGlv
bnMuCisKKyAgICAgICAgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB3aWxsIGJlIHJlc3BvbnNp
YmxlIGZvciBjcmVhdGluZyBhbmQgcmVsZWFzaW5nCisgICAgICAgIHRoZSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkgZ2l2ZW4gaXRzIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLiBJdAor
ICAgICAgICBpcyByZXNwb25zaWJsZSBhbHNvIGZvciBkaXNwYXRjaGluZyB0aGUgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5IG1lc3NhZ2VzLgorCisgICAgICAgIEFsbCB0aGUgUmVuZGVyaW5n
QmFja2VuZCBtZXNzYWdlcyBhcmUgYXN5bmNocm9ub3VzLiBUaGUgbWFpbiB0aHJlYWQgd2lsbAor
ICAgICAgICBub3QgYmUgYmxvY2tlZCB3aGVuIHNlbmRpbmcgYSBtZXNzYWdlIGZyb20gV2ViUCB0
byBHUFVQLiBJbnN0ZWFkIEdQVVAgd2lsbAorICAgICAgICBub3RpZnkgV2ViUCB3aGVuIGl0IGZp
bmlzaGVzIGFuIG9wZXJhdGlvbi4gSW4gdGhlIGNhc2Ugd2hlbiBXZWJQIHdhbnRzCisgICAgICAg
IHRvIGhhdmUgaW1tZWRpYXRlIGFjY2VzcyB0byB0aGUgc3VyZmFjZSwgZS5nLiBmbHVzaGluZyB0
aGUgc3VyZmFjZSBjb250ZXh0LAorICAgICAgICB0aGUgV2ViUCB3aWxsIGJlIGhhdmUgdG8gYmUg
YmxvY2tlZCBmb3IgInNvbWV0aW1lIiB3YWl0aW5nIGZvciBhIGNlcnRhaW4KKyAgICAgICAgbWVz
c2FnZSB0byBiZSBkZWxpdmVyZWQuCisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSBp
cyBhbHNvIGludHJvZHVjZWQgdG8gbWFuYWdlIHRoZSBsaWZlIHRpbWUgb2YgdGhlCisgICAgICAg
IHBsYXRmb3JtIHN1cmZhY2UgaW4gdGhlIFdlYlBvcmNlc3MuIFJlbW90ZVJlbmRlcmluZ1N1cmZh
Y2VQcm94eSB3aWxsIGRvCisgICAgICAgIGEgc2ltaWxhciBqb2IgaW4gdGhlIEdQVSBwcm9jZXNz
LgorCisgICAgICAgIEZsdXNoaW5nIGEgc3VyZmFjZSB3aWxsIGJlIHRyYWNrZWQgYnkgUmVuZGVy
aW5nRmx1c2hJZGVudGlmaWVyLiAKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBzZW5k
cyBhICdSZW5kZXJUb1N1cmZhY2UnIG1lc3NhZ2Ugd2l0aCBhIG5ld2x5CisgICAgICAgIGdlbmVy
YXRlZCBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuIFdoZW4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5CisgICAgICAgIGZpbmlzaGVzIHJlbmRlcmluZyB0byBpdHMgUmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5LCBpdCB3aWxsIHJlcGx5IGJhY2sKKyAgICAgICAgdG8gdGhlIFdlYlAgYnkg
c2VuZGluZyBEaWRSZW5kZXJUb1N1cmZhY2UgbWVzc2FnZSB3aXRoIHRoZSBzYW1lCisgICAgICAg
IFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciB3aGljaCB3aWxsIHNldCBpdCBpbiB0aGUgY29ycmVz
cG9uZGluZworICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLiBSZW1vdGVSZW5kZXJpbmdT
dXJmYWNlIGlzIHBlbmRpbmcgZmx1c2ggaWYgaXRzCisgICAgICAgIHNlbnRGbHVzaElkZW50aWZp
ZXIgYW5kIHJlY2VpdmVkRmx1c2hJZGVudGlmaWVyIGFyZSBkaWZmZXJlbnQuCisKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisK
KyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZSk6
IERlbGV0ZWQuCisgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYXV0byBnZW5lcmF0ZWQgaW4g
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAuCisKKyAgICAgICAg
KiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50aWZp
ZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIG5ldyBtZXNzYWdlcyBhbmQgbWV0aG9kcyBmb3Ig
Y3JlYXRpbmcvcmVsZWFzaW5nIGEgUmVuZGVyaW5nQmFja2VuZC4KKworICAgICAgICAqIEdQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyVG9TdXJmYWNlKToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJv
eHkuaDogQWRkZWQuCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBDb21tdW5p
Y2F0ZXMgd2l0aCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGluCisgICAgICAgIHRoZSBXZWJQb3Jj
ZXNzLiBJdCBtYW5hZ2VzIHRoZSBsaWZlIGN5Y2xlIG9mIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2Uu
IEl0CisgICAgICAgIHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBtZXNzYWdlIHJlY2VpdmVyIGluIHRo
ZSBjb25zdHJ1Y3RvciBhbmQgdW5yZWdpc3RlcgorICAgICAgICBpdHNlbGYgaW4gdGhlIGRlc3Ry
dWN0b3IuIEl0IHNlbmRzIHJlcGxpZXMgdG8gdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKKyAg
ICAgICAgaW4gdGhlIFdlYlBvcmNlc3Mgd2hlbiBpdCBmaW5pc2hlcyBvbmUgb2YgaXRzIGZ1bmN0
aW9ucy4gCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3Rl
UmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlU2VuZFJp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5
OjplbnN1cmVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdTdXJmYWNlUHJveHk6OmZsdXNoR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuaDog
QWRkZWQuCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eSBtYW5hZ2VzIG9wZXJh
dGluZyBvbiB0aGUgcGxhdGZvcm0gc3VyZmFjZSBpbiAKKyAgICAgICAgR1BVUHJvY2Vzcy4KKwor
ICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eTo6flJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KToKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Lmg6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpkaWRSZWNl
aXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQ
cm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgTWFrZSBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eSBhbiBNZXNzYWdlUmVjZWl2ZXIgYnkgYWRkaW5nIGFuZCAKKyAgICAgICAgcmVtb3Zpbmcg
aXRzZWxmIGZyb20gTWVzc2FnZVJlY2VpdmVyTWFwIG9mIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgV2hl
biB0aGUgYXR0cmlidXRlICdXYW50c0Rpc3BhdGNoTWVzc2FnZScgaXMgYWRkZWQgdGhlIG1lc3Nh
Z2VzLmluIGZpbGUsCisgICAgICAgIHRoZSBkaWRSZWNlaXZlTWVzc2FnZSgpIHdpbGwgaW5jbHVk
ZSBhIGRpc3BhdGNoIGNhbGwgc3VjaCB0aGF0IHRoZSByZWNlaXZlcgorICAgICAgICBoYXMgdGhl
IGFiaWxpdHkgdG8gZGlzcGF0Y2ggdGhlbSB0byBpdHMgTWVzc2FnZVJlY2VpdmVyTWFwLgorCisg
ICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAg
ICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vz
c0Nvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgIERpc3BhdGNoIG1l
c3NhZ2VzIGNvbWluZyBmcm9tIHRoZSBHUFVQb3JjZXNzIHRvIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5kU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3Rp
bmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Ojp3YWl0Rm9yRGlkQ3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OndhaXRGb3JEaWRSZW5kZXJUb1N1cmZhY2UpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTdXJmYWNlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkUmVuZGVyVG9TdXJmYWNlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlUHJveHlTdXJmYWNlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZVByb3h5U3Vy
ZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbmRlclRv
UHJveHlTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Zmx1c2hQcm94eVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpzdXJmYWNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjogQWRkZWQuCisg
ICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgaXMgdGhlIFdlYktpdCBpbXBsZW1lbnRhdGlv
biBvZiBSZW5kZXJpbmdCYWNrZW5kLgorICAgICAgICBJdCB3aWxsIGJlIHVzZWQgdG8gaGlkZSB0
aGUgY29tcGxleGl0eSBvZiBzZW5kaW5nIG1lc3NhZ2VzIGZyb20gV2ViUCBhbmQKKyAgICAgICAg
cmVjZWl2aW5nIHJlcGxpZXMgZnJvbSB0aGUgR1BVUC4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpzZW50Rmx1c2hJZGVudGlmaWVyIGNvbnN0KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6cmVjZWl2ZWRGbHVzaElk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNl
OjpzZXRTZW50Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nU3VyZmFjZTo6c2V0UmVjZWl2ZWRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2U6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2Up
OgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlIG1hbmFnZXMgb3BlcmF0aW5nIG9uIHRo
ZSBwbGF0Zm9ybSBzdXJmYWNlIGluIFdlYlAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAg
IENhbiBpZGVudGlmeSBhIFJlbmRlcmluZ0JhY2tlbmQgaW4gdGhlIFdlYlAgYW5kIEdQVVAuCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nRmx1c2hJZGVu
dGlmaWVyLmg6IEFkZGVkLgorICAgICAgICBUcmFja3Mgd2hldGhlciBhIFJlbmRlcmluZ1N1cmZh
Y2UgaXMgcGVuZGluZyBhIGZsdXNoaW5nLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVD
bGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMTktMTItMTMgIERhdmlk
IEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgTUVTU0FHRV9DSEVD
SygpIGZvciBzZWxlY3RlZEluZGV4IGluIE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dQb3B1
cE1lbnUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDJkN2MyY2UyMGYwZmNiY2VkYTEyNGEwZGRkOTVk
NTI1NThmNjExNTIuLjJmZTIzY2M4YTI4MmNjMWEyNWU0NDJlNmFkMzdhMjIzZmExOGVlMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQpAQCAtMTExMCw4ICsxMTEwLDEwIEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVS
YW5nZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1
cmZhY2VJZGVudGlmaWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJh
Y2tpbmcuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9V
c2VyTWVkaWFDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNl
ck1lZGlhQ2xpZW50LmgKaW5kZXggNDNiMmEwZGRjZDUyYjVkMWFjNTYyYWU3YTEyOGU0MWQyMzNk
OTg0Yi4uY2I5YjdlZGJlMmFkMTU3ODljMTMxMGNlOGZiMmI0Y2QxMjU4ZDRmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5o
CkBAIC0zOSw2ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhcHR1cmVE
ZXZpY2U7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBVc2VyTWVkaWFSZXF1
ZXN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggODhiODAxNmExNzNhOGY5ZTM4MThkNzc5ZWU0Y2JiYjJjMGViZTgzYy4uNTIw
MWFmZDFiNGYyMGRkMjcyY2Y0MzMyZjZjOTc1ZWU5YWNmMTdhYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc0NSw2ICsxNzQ1
LDcgQEAKIAkJNTVBRjE0RTYxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUFGMTRFNDFFQUFDNTlC
MDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0
aXZlTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJB
MDBDMjZFMzIgLyogU1ZHTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVEQ0M1MjMyMjQwNzNGRTAwQzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NURDRkFBNDIzOTlD
OUE2MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRl
cmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk1NUVDOTU5OTIwNkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2Vy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVDOTU5
NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVGQTdGRkIyMTEwRUNENzAw
NUFFRkU3IC8qIFNWR1pvb21BbmRQYW5UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUZBN0ZGQTIxMTBFQ0Q3MDA1QUVGRTcgLyogU1ZHWm9vbUFu
ZFBhblR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NzA0NDA1QTFFNTM5MzYyMDAzNTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDQ0MDU5MUU1Mzkz
NjIwMDM1NjYwMSAvKiBKU0Flc0NiY0NmYlBhcmFtcy5oICovOyB9OwpAQCAtMjEyOCw2ICsyMTI5
LDkgQEAKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEz
QThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURD
ODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZp
dHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVF
NTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlFNjFCQTIz
QTQ0MTcwMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5RTYxQjUyM0E0MTIyMTAwMkVGRTc5IC8qIFJl
bmRlcmluZ1N1cmZhY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjlFNjFCQjIzQTQ0MTdBMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZUNH
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlFNjFC
NzIzQTQxMkYzMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZUNHLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQzM5RTYyMzlFQkJGNzAwQjYz
RTAyIC8qIFN1cmZhY2VJZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50
aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0
NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2Fn
ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTg2
NjksNiArODY3Myw3IEBACiAJCTU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRp
dmVMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1pdGl2ZUxpc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTVEQ0M1MjYyMjQwNzRGQTAwQzI2RTMyIC8qIFNWR1Byb3BlcnR5
QWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NURDQzUyNzIyNDA3NTBCMDBDMjZFMzIgLyogU1ZHUHJv
cGVydHlBY2Nlc3NvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvcklt
cGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTIyMzk5QzREODAwNTBD
RDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVDOTU5NzIwNjlDOTJEMDA3REQw
QTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaW50RnJlcXVl
bmN5VHJhY2tlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVFNTM1NDIyM0Iy
OUU5MDBGQkE5NDQgLyogU1ZHTWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHTWVtYmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTVFRTUzNTYyMjNCMjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBbmlt
YXRvckltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQ
cm9wZXJ0eUFuaW1hdG9ySW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5
OSw2ICs5NjA0LDkgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRz
UkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNS
R0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyogUmVuZGVyaW5nU3Vy
ZmFjZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdTdXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyOUU2MUI3MjNBNDEyRjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJm
YWNlQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nU3VyZmFjZUNHLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQUMzOUU0MjM5RUI4N0YwMEI2M0UwMiAvKiBTdXJmYWNlSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdXJmYWNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWlu
dGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpT
RVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNS
R0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0
QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
RVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4ODIsNiArMjQ4OTAs
NyBAQAogCQkJCUE4MEEzOEZEMEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAog
CQkJCUIyNzUzNTM2MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywK
IAkJCQlCMjc1MzUzNzBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAor
CQkJCTcyOUU2MUI3MjNBNDEyRjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLywK
IAkJCQkxRkM0MEZCODE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5j
cHAgKi8sCiAJCQkJMUZDNDBGQjcxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRo
VGltZXIuaCAqLywKIAkJCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRp
b25NYXRyaXhDRy5jcHAgKi8sCkBAIC0yNTExOCw2ICsyNTEyNyw4IEBACiAJCQkJQkNBQjQxODAx
M0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVB
MDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAw
RUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNTVEQ0ZBQTIyMzk5QzREODAw
NTBDRDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjlFNjFCNTIzQTQxMjIxMDAy
RUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMx
QUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5
IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNo
YWRvd0JsdXIuY3BwICovLApAQCAtMjUxMjgsNiArMjUxMzksNyBAQAogCQkJCUIyMzU0MEYwMEQw
MDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYxMEQw
MDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQk4NDlGNzc3NTBFRkVD
NjIwMDA5MDg0OUQgLyogU3Ryb2tlU3R5bGVBcHBsaWVyLmggKi8sCisJCQkJNzJBQzM5RTQyMzlF
Qjg3RjAwQjYzRTAyIC8qIFN1cmZhY2VJZGVudGlmaWVyLmggKi8sCiAJCQkJMDg3NTU4QzMxM0I0
QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAgKi8sCiAJ
CQkJMDg3NTU4QzQxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVy
YXRvci5oICovLAogCQkJCTNCQjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8s
CkBAIC0zMTkwOSw2ICszMTkyMSw5IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VD
NDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFENDgx
MjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NURDRkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2Vu
ZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI5RTYxQkEyM0E0NDE3MDAwMkVGRTc5IC8qIFJlbmRl
cmluZ1N1cmZhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOUU2MUJCMjNBNDQxN0EwMDJFRkU3
OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIx
MjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUI1OTVGRjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMjQzNiw2ICszMjQ1MSw3IEBACiAJCQkJOTNCMkQ4MTYwRjk5
MjBEMjAwNkFFNkIyIC8qIFN1ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
N0MwNzg1MDExNjVENUJFMDAzQTMyRUYgLyogU3VmZml4VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc2MjdCOTgxNEZCNTQyNDAwMkNEQ0ExIC8qIFN1cHBsZW1lbnRhYmxlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MkFDMzlFNjIzOUVCQkY3MDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA4NzU1OEM2MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dh
dGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyQzEyMTdEMTFB
QjlFNzcwMDNDNDYyQyAvKiBTdXNwZW5kYWJsZVRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
MjIyNzk3NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggZDc4MWYzNWNiNTM4ODcyNWZkYjMwZGJk
MzI1NDRiMmRjNTFjMGQxMi4uNDQxOTczYzQ1ZTVkM2EyMDU1MDcwODUxMWYzZWY0YjY4MGQ1MGU4
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5j
bHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIK
ICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nv
b3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDQsNiArMzA1
LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+
IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgeyBy
ZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAg
dmlydHVhbCBSZWZQdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgp
IGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyNlbmRpZgorCiAgICAgLy8gUGFzcyBudWxscHRy
IGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdy
YXBoaWNzTGF5ZXIqKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCA1NjU1ZGMyYzI5YzcxNjFl
MTJjNGNhMDI3OTA4OGViM2Y0M2JlYjU3Li5lZTMyNjhmZTU5M2FkMmE5NjBjMjAwYTZlYWNlYWNm
Zjg5MGZkNzY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTI5MjQsNiArMjkyNCwxNSBAQCBSZW5k
ZXJpbmdVcGRhdGVTY2hlZHVsZXImIFBhZ2U6OnJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpCiAg
ICAgcmV0dXJuICptX3JlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcjsKIH0KIAorI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKK1JlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBQYWdlOjpyZW5kZXJpbmdCYWNr
ZW5kKCkKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJp
bmdCYWNrZW5kID0gY2hyb21lKCkuY2xpZW50KCkuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOwor
ICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmQ7Cit9CisjZW5kaWYKKwogdm9pZCBQYWdlOjpm
b3JFYWNoRG9jdW1lbnQoY29uc3QgRnVuY3Rpb248dm9pZChEb2N1bWVudCYpPiYgZnVuY3RvcikK
IHsKICAgICBmb3IgKGF1dG8mIGRvY3VtZW50IDogY29sbGVjdERvY3VtZW50cygpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2UuaAppbmRleCA1ZjRjZWIwYTM2NTBjNDJhOGUxN2QxMjYzZjU2ODQ3ZWYxODFjNDUzLi5mZDVh
ODhiNjdmN2Y3OTE1MjRkZjAzYmRjNzEyMGJlOTM2ZDViZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlJUQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJSZWdp
b24uaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmQuaCIKICNpbmNsdWRlICJSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCIKICNpbmNs
dWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCkBAIC0yNzMs
NiArMjc0LDEwIEBAIHB1YmxpYzoKICAgICBQZXJmb3JtYW5jZU1vbml0b3IqIHBlcmZvcm1hbmNl
TW9uaXRvcigpIHsgcmV0dXJuIG1fcGVyZm9ybWFuY2VNb25pdG9yLmdldCgpOyB9CiAKICAgICBS
ZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXImIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpOworICAg
IAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5nQmFja2VuZD4g
cmVuZGVyaW5nQmFja2VuZCgpOworI2VuZGlmCiAKICAgICBWYWxpZGF0aW9uTWVzc2FnZUNsaWVu
dCogdmFsaWRhdGlvbk1lc3NhZ2VDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRpb25N
ZXNzYWdlQ2xpZW50LmdldCgpOyB9CiAgICAgdm9pZCB1cGRhdGVWYWxpZGF0aW9uQnViYmxlU3Rh
dGVJZk5lZWRlZCgpOwpAQCAtOTAxLDYgKzkwNiwxMCBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcj4gbV9yZW5kZXJpbmdVcGRhdGVTY2hl
ZHVsZXI7CiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFJlbmRlcmluZ0Jh
Y2tlbmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKKyNlbmRpZgorCiAgICAgSGFzaFNldDxSZW5kZXJP
YmplY3QqPiBtX3JlbGV2YW50VW5wYWludGVkUmVuZGVyT2JqZWN0czsKICAgICBSZWdpb24gbV90
b3BSZWxldmFudFBhaW50ZWRSZWdpb247CiAgICAgUmVnaW9uIG1fYm90dG9tUmVsZXZhbnRQYWlu
dGVkUmVnaW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyZDk4MjgwMDM3NDBlY2ZiNzAzNjYxMzg2ZTA1
MTA5NjM4ZjlhYTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlN1
cmZhY2VJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRTaXplOworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZTsK
KworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERpc3BsYXlMaXN0OworfQorCitjbGFz
cyBSZW5kZXJpbmdCYWNrZW5kIDogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyaW5nQmFja2VuZD4g
eworcHVibGljOgorICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisK
KyAgICAvLyBUaGVzZSBmdW5jdGlvbiBzZW5kIElQQyBhc3luYyBtZXNzYWdlcyBidXQgdGhleSBk
byBub3QgYmxvY2sgdGhlIG1haW4gdGhyZWFkLgorICAgIHZpcnR1YWwgU3VyZmFjZUlkZW50aWZp
ZXIgY3JlYXRlUHJveHlTdXJmYWNlKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRTaXplJiBjb250
ZXh0U2l6ZSwgQ29sb3JTcGFjZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHlT
dXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclRv
UHJveHlTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmLCBjb25zdCBGbG9hdFJlY3QmIGNsaXApID0gMDsKKworICAgIC8vIFRoZXNlIGZ1bmN0
aW9ucyBtYXkgYmxvY2sgdGhlIG1haW4gdGhyZWFkIGZvciAic29tZXRpbWUiIHRpbGwgdGhleSBy
ZWNlaXZlIG91dC1vZi1wcm9jZXNzIHJlcGxpZXMuCisgICAgdmlydHVhbCBib29sIGZsdXNoUHJv
eHlTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8UmVu
ZGVyaW5nU3VyZmFjZT4gc3VyZmFjZShTdXJmYWNlSWRlbnRpZmllcikgPSAwOworfTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkN2ExZTg2
YTYxN2EwNTA5NjM2OTZhY2U5YWU4ZjQxNGNiNGQzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdTdXJmYWNlLmgKQEAgLTAsMCAr
MSwyOCBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlJl
bmRlcmluZ1N1cmZhY2VDRy5oIgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU3VyZmFjZUlkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzQ2NGNlMGY1
ZjgzOGYzNDMxNzUwMDc5YTFlYTg5Mzc4ODVjYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3VyZmFjZUlkZW50aWZpZXIuaApAQCAtMCwwICsx
LDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0
SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gU3VyZmFjZUlkZW50
aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFN1cmZhY2VJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmll
cjxTdXJmYWNlSWRlbnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5kZXJpbmdTdXJmYWNlQ0cuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1JlbmRlcmluZ1N1cmZhY2VDRy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlhMGY4NjYwOGE4MjAxNzVlOTQzMTZkNGVkNjk0MTVlY2FlNmU0MzIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5kZXJpbmdTdXJmYWNl
Q0cuaApAQCAtMCwwICsxLDYzIEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFy
ZSBtZXQ6CisqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQu
aD4KKworI2lmIFVTRShDRykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZSA6IHB1
YmxpYyBSZWZDb3VudGVkPFJlbmRlcmluZ1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiYgcGxhdGZvcm1TdXJmYWNlKCkgeyByZXR1cm4gbV9wbGF0ZnJv
bVN1cmZhY2U7IH0KKworICAgIGJvb2wgY3JlYXRlUGxhdGZvcm1TdXJmYWNlKE1hY2hTZW5kUmln
aHQgc2VuZFJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3BsYXRmcm9tU3VyZmFjZSk7
CisgICAgICAgIG1fcGxhdGZyb21TdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJp
Z2h0KFdURk1vdmUoc2VuZFJpZ2h0KSwgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSkp
OworICAgICAgICByZXR1cm4gbV9wbGF0ZnJvbVN1cmZhY2UuZ2V0KCk7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgUmVuZGVyaW5nU3VyZmFjZShDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAg
ICAgIDogbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworcHJpdmF0ZToK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3BsYXRmcm9tU3VyZmFjZTsKKyAgICBD
b2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDRykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaAppbmRleCAyOGUyNjQ0ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi5mNDhl
MTRjYTY3YmFjN2Y4NGM0ZDgxMWE4YzJlOTBlYzc3YTZlMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaApAQCAtMjUxLDYgKzI1MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlz
dDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
V1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0g
Ly8gV2ViQ29yZQotCi11c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAw
N2QzMzA1YjgyMzk3MmU3ODdmZmVlN2RiODBlMTE0ZDIyNTExMjY2Li5iMTUxMzYxNmE5NTI3OWQy
MjZkNzUxNWRmZDQ0OTdmNGQzNGRjYzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNSw2ICsxNSw3IEBAICQoSkFWQVNDUklQVENPUkVf
UFJJVkFURV9IRUFERVJTX0RJUikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVf
SEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQ
VVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgog
JChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9X
ZWJDb29raWVNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMTIsNiArMTEzLDcgQEAgJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9Ob3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ2xpZW50
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdl
L1dlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElS
KS9XZWJQcm9jZXNzL1VzZXJDb250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdl
cy5pbgpAQCAtMTIxLDYgKzEyMyw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xs
ZWN0b3IubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
VXBkYXRlRGlzcGF0Y2hlci5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggOTg2OWNmMTcxNjFmZWQ5NDQ5MmIyZWI2NzZh
MzA5NjExN2NlNjUyZi4uNmMwYzVlMWFhYTc0ZjI5OTg2MmY2MjNkMGUyZDU0MDg2NmMwYzg1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlz
dAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBA
IC0xMjMsNiArMTIzLDEyIEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3Nh
Z2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxp
ZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5o
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3Nh
Z2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDE3YmRjYjVmMmRhYWE5YmIxYjZhZjRkNzRhYjU4ZTUw
NGE4MTIxODMuLjBlZWY1M2YxMTg4ZjU4NWRiMTdmOTdmNjk3ZWNhYWM0M2Q1NDUyZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTU5LDYgKzU5LDcgQEAgVlBBVEggPSBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMgXAogICAgICQoV2ViS2l0MikvV2Vi
UHJvY2Vzcy9PcmlnaW5EYXRhIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUGx1Z2lucyBc
CisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2Vi
S2l0MikvV2ViUHJvY2Vzcy9SZXNvdXJjZUNhY2hlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nl
c3MvU3RvcmFnZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1VzZXJDb250ZW50IFwKQEAg
LTE0MCw2ICsxNDEsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRpYVBs
YXllck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwKICAgICBS
ZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBcCisgICAg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3Bl
Y3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBjMzQ4ZTMwZGU4YTI5ZTk3M2VhZWFhNmE5YjhhOGUw
OTMzYWE4ODI1Li4zOTc3Yzk4ZWZkYTJhMzRiYWI2YTcyNTAwYWNlNzI2YjQxZGQ0MmYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCkBAIC0zMywxMSArMzMsOSBAQAogI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKICNp
bmNsdWRlICJHUFVQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHlN
ZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5
TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0
aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC03MCw2ICs2OCwxNiBAQCB2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAK
K2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Cit9CisKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1
cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCiB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIG1lc3NhZ2VOYW1lKQogewogICAgIFdURkxvZ0Fsd2F5cygiUmVjZWl2ZWQgYW4gaW52
YWxpZCBtZXNzYWdlIFwiJXMuJXNcIiBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy5cbiIsIG1lc3NhZ2VS
ZWNlaXZlck5hbWUudG9TdHJpbmcoKS5kYXRhKCksIG1lc3NhZ2VOYW1lLnRvU3RyaW5nKCkuZGF0
YSgpKTsKQEAgLTg0LDIyICs5MiwxOCBAQCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSYg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZwogICAgIHJl
dHVybiAqbV9yZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKIH0KIAotdm9pZCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIHsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0ID0gbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAuZW5zdXJlKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLCBbJl0oKSB7CisgICAgICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OmNyZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIH0pOworICAg
IEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYg
cmVwbHlFbmNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVu
ZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcikKIHsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNl
aXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVu
Y29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwLmNvbnRhaW5z
KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHlNYXAucmVtb3ZlKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBiYmZjMTY4MGJiYjMwZTE5N2RhZjgwMzYw
NWNmYzRhMjE3OWFlZjQ5Li43NjQ0N2JkOWJjYWVhZTJjOGYxYWYxYjZkYWNiODlhMGVhZjU0NzVj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmgKQEAgLTI4LDMyICsyOCwzNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
IAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0
ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEdQ
VVByb2Nlc3M7CiBjbGFzcyBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKK2NsYXNzIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcwogICAgIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4K
KyAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgog
ICAgICwgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKICAgICB2aXJ0
dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1l
c3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdl
UmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9n
cHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJv
Y2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9
CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAg
ICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50
aWZpZXI7IH0KLQogcHJpdmF0ZToKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKEdQVVBy
b2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyKTsKIApAQCAtNjEsMTQgKzY0LDI0IEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNv
bm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
aWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3Rk
Ojp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2Vp
dmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBt
ZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3Zl
cnJpZGU7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKworICAg
IHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllcik7CisKKyAgICB1c2luZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAgPSBIYXNo
TWFwPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Pj47CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAg
UmVmPEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1h
cCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eT4gbV9yZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsK
KyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHlNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFk
OC4uOTMyYzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CittZXNzYWdl
cyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAg
ICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VSZW5k
ZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iZDkwNDY2Y2ZjZjVlZjhiOGVmYjI3N2RhYTRkYjQ4NWRiZjg1NjQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUv
R3JhcGhpY3NDb250ZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK1JlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcyht
YWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYg
KGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQo
KSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFw
KCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25u
ZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisK
K3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVTdXJmYWNlKFN1cmZhY2VJ
ZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJ
bnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGlmICht
X3N1cmZhY2VNYXAuY29udGFpbnMoc3VyZmFjZUlkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGF1dG8g
cmVuZGVyaW5nU3VyZmFjZSA9IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlKHNp
emUsIGNvbnRleHRTaXplLCBjb2xvclNwYWNlKTsKKyAgICBpZiAoIXJlbmRlcmluZ1N1cmZhY2Up
CisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2VuZFJpZ2h0ID0gcmVuZGVyaW5nU3VyZmFj
ZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7CisgICAgbV9zdXJmYWNlTWFwLmFkZChzdXJmYWNlSWRlbnRp
ZmllciwgV1RGTW92ZShyZW5kZXJpbmdTdXJmYWNlKSk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRDcmVhdGVTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVy
LCBXVEZNb3ZlKHNlbmRSaWdodCkpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30K
Kwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VTdXJmYWNlKFN1cmZh
Y2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZVN1cmZhY2Ug
bWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGlzIG9uZS4KKyAgICBp
ZiAoIW1fc3VyZmFjZU1hcC5jb250YWlucyhzdXJmYWNlSWRlbnRpZmllcikpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdXJm
YWNlTWFwLnJlbW92ZShzdXJmYWNlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpyZW5kZXJUb1N1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFj
ZUlkZW50aWZpZXIsIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciByZW5kZXJpbmdGbHVzaElkZW50
aWZpZXIsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0
IEZsb2F0UmVjdCYgY2xpcCkKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3N1cmZhY2VNYXAuZmluZChz
dXJmYWNlSWRlbnRpZmllcik7CisgICAgCisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNo
b3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIC8vIEFuZCB3ZSBk
byBub3QgaGF2ZSB0aGUgc3VyZmFjZSBpbmZvIHRvIGNyZWF0ZSBpdC4KKyAgICBpZiAoaXRlciA9
PSBtX3N1cmZhY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBHZXQgdGhlIHN1cmZhY2UgR3JhcGhpY3ND
b250ZXh0LgorICAgIGF1dG8mIHJlbmRlcmluZ1N1cmZhY2UgPSBpdGVyLT52YWx1ZTsKKyAgICBH
cmFwaGljc0NvbnRleHQmIHN1cmZhY2VDb250ZXh0ID0gcmVuZGVyaW5nU3VyZmFjZS0+ZW5zdXJl
R3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAvLyBSZW5kZXIgdGhlIGRpc3BsYXkgbGlzdCBpbnRv
IHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgRGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVy
KHN1cmZhY2VDb250ZXh0LCBkaXNwbGF5TGlzdCk7CisgICAgcmVwbGF5ZXIucmVwbGF5KGNsaXAp
OworCisgICAgLy8gTWFrZSBzdXJlIHRoZSByZW5kZXJpbmcgb3BlcmF0aW9ucyBhcmUgZmx1c2hl
ZCB0byB0aGUgR3JhcGhpY3NDb250ZXh0LgorICAgIHJlbmRlcmluZ1N1cmZhY2UtPmZsdXNoR3Jh
cGhpY3NDb250ZXh0KCk7CisKKyAgICAvLyBOb3RpZnkgdGhlIFdlYlByb2Nlc3MuCisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlkUmVuZGVyVG9TdXJmYWNlKHN1
cmZhY2VJZGVudGlmaWVyLCByZW5kZXJpbmdGbHVzaElkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZmUzNTRkNzQ1NTAzZTkyZGU1MWFiMzE1NWQ2ODVhMGU0
MzIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDgzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VT
ZW5kZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlc1Jl
cGxpZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkuaCIKKyNpbmNs
dWRlICJSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3Bs
YXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VJZGVudGlmaWVyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERpc3BsYXlMaXN0OworfQorY2xhc3MgRmxvYXRSZWN0
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwdWJsaWMg
UmVmQ291bnRlZDxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+CisgICAgLCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0
ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCitwcml2YXRl
OgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdl
U2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBj
b25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBjcmVhdGVTdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVy
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGV4
dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIHZvaWQgcmVsZWFzZVN1cmZhY2UoV2Vi
Q29yZTo6U3VyZmFjZUlkZW50aWZpZXIpOworICAgIHZvaWQgcmVuZGVyVG9TdXJmYWNlKFdlYkNv
cmU6OlN1cmZhY2VJZGVudGlmaWVyLCBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVj
dCYpOworICAgICAgICAKKyAgICB1c2luZyBTdXJmYWNlTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpT
dXJmYWNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQ
cm94eT4+OworCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKKyAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZU1hcDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZDcyYWI2NWViNDE2MDcyMzRlYzU5ZjdkY2VmZmMw
YjBkYmQwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAg
LTAsMCArMSwzMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkgeworICAgIHZvaWQgQ3JlYXRlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRp
ZmllciBzdXJmYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBXZWJDb3JlOjpJ
bnRTaXplIGNvbnRleHRTaXplLCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xv
clNwYWNlKQorICAgIHZvaWQgUmVsZWFzZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZp
ZXIgc3VyZmFjZUlkZW50aWZpZXIpCisgICAgdm9pZCBSZW5kZXJUb1N1cmZhY2UoV2ViQ29yZTo6
U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIFdlYktpdDo6UmVuZGVyaW5nRmx1
c2hJZGVudGlmaWVyIHJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgY2xpcCkKK30K
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94
eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRhOGU0YzlmMmMzYWViMjRjYzlhOWQx
YTY3ZmE3NzE2YjQ4NzAzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oCkBAIC0w
LDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eUNHLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQ
cm94eUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2Nn
L1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmVhZjRlMTJk
ZGEwZGQ1ZTlmNmE3ZmYzMDcxZGIyZGJkYWVkOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3Vy
ZmFjZVByb3h5Q0cuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmgiCisKKyNpZiBVU0UoQ0cpICYmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3Jh
cGhpY3NDb250ZXh0Q0cuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk+IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6
Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYXV0byBzdXJmYWNlID0gIElPU3VyZmFjZTo6
Y3JlYXRlKHNpemUsIGNvbnRleHRTaXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkp
OworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBJ
bml0YWxpemUgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCA9IHN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGNvbnRleHQuc2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLWNvbnRleHRT
aXplLmhlaWdodCgpKTsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9
IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dCgpOworICAgIGlmICghY2dDb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRl
eHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNvbnRleHRTaXplKSk7CisgICAgCisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk+KG5l
dyBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkoV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitS
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eShz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBtX3N1cmZhY2UoV1RG
TW92ZShzdXJmYWNlKSkKK3sKK30KKworTWFjaFNlbmRSaWdodCBSZW1vdGVSZW5kZXJpbmdTdXJm
YWNlUHJveHk6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFj
ZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgUmVtb3RlUmVuZGVy
aW5nU3VyZmFjZVByb3h5OjplbnN1cmVHcmFwaGljc0NvbnRleHQoKQoreworICAgIHJldHVybiBt
X3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ1N1cmZhY2VQcm94eTo6Zmx1c2hHcmFwaGljc0NvbnRleHQoKQoreworICAgIENHQ29udGV4
dEZsdXNoKGVuc3VyZUdyYXBoaWNzQ29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmggYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9jZy9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJv
eHlDRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZkMzcyMTA1MTEwZGUxYzI5ZjIxZWYwN2I5MGIyZjg2NTdlOWQx
NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9jZy9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5oCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIElPU3VyZmFjZTsKK30KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eSB7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJv
eHk+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworCisgICAgTWFjaFNlbmRSaWdo
dCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworICAgIHZvaWQgZmx1c2hHcmFwaGljc0NvbnRleHQo
KTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4mJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFVTRShDRykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eS5jcHAKaW5kZXggOGM3NmU2YmNmYmJjODNmYzE5ODJiZDBhNjA5YTYyMjA5
Y2I4NGE5Zi4uODgzMGZhYTY5MTJkNzllYzM4ODFiYzdhNTRkYmZhOTY2MDFmMzk3MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCkBAIC01NiwxMCArNTYsMTIgQEAgUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KEdQVUNv
bm5lY3Rpb25Ub1dlYlAKICAgICAsIG1fbG9nSWRlbnRpZmllcihXVEY6OkxvZ2dlckhlbHBlcjo6
dW5pcXVlTG9nSWRlbnRpZmllcigpKQogI2VuZGlmCiB7CisgICAgbV93ZWJQcm9jZXNzQ29ubmVj
dGlvbi5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIDAsICp0
aGlzKTsKIH0KIAogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6On5SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXJQcm94eSgpCiB7CisgICAgbV93ZWJQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
UmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIDApOwogfQogCiB2b2lk
IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpjcmVhdGVNZWRpYVBsYXllcihjb25zdCBN
ZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJiBpZCwgTWVkaWFQbGF5ZXJFbnVtczo6
TWVkaWFFbmdpbmVJZGVudGlmaWVyIGVuZ2luZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCBzdWNjZWVkZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyUHJveHkuaAppbmRleCA4MWZhYmJhODQ4OWIyMzhlOTQwMWI1NDI0ZTY3ZTFjM2NlYmQ3
ZjQ1Li5kNDRjNzlkMzU1YzQyOWI0MGQxYzNkY2FhMTdkYzYwZjA0Yzc4YWQ1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkuaApAQCAtNTIsOSArNTIsNiBAQCBwdWJsaWM6CiAgICAgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYgd2ViUHJvY2Vzc0Nvbm5lY3Rpb24oKSBjb25zdCB7IHJldHVy
biBtX3dlYlByb2Nlc3NDb25uZWN0aW9uOyB9CiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKSB7IGRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOyB9Ci0gICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJv
Y2VzcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIGVuY29kZXIpIHsgZGlkUmVjZWl2ZVN5bmNN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIGVuY29kZXIpOyB9Ci0KICNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKICAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOwogICAg
IGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ0lk
ZW50aWZpZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4
IGYyZTllZDdhYjU0MDJlZjUxMTg4ZjdlOGRiZTM5NmJhOGFjZTBmYWQuLmRiMmI2MjIwYzkzMWIw
OTZiYjU4NTMzY2RkZjhmMjBlZDJjZjQxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weQpAQCAtMjcsNiArMjcsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdCBp
bXBvcnQgcGFyc2VyCiAKIFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFID0gJ1dhbnRzQ29ubmVj
dGlvbicKK1dBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFID0gJ1dhbnRzRGlzcGF0Y2hN
ZXNzYWdlJwogTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIE5P
VF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVkJwogU1lOQ0hS
T05PVVNfQVRUUklCVVRFID0gJ1N5bmNocm9ub3VzJwpAQCAtMjE2LDEwICsyMTcsMTMgQEAgZGVm
IHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLAogICAgICAgICAnV2ViQ29yZTo6U2Vydmlj
ZVdvcmtlck9yQ2xpZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29y
a2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllcicsCisgICAgICAgICdXZWJDb3JlOjpTdXJmYWNlSWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTV1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6QWN0aXZpdHlTdGF0ZUNoYW5nZUlEJywKICAgICAgICAgJ1dl
YktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5
ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nRmx1c2hJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0
b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyJywKQEAgLTc1NSwxMyArNzU5LDE2IEBAIGRlZiBnZW5l
cmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAg
ICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdl
czoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRT
X0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9p
ZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBp
ZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2Ug
JycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2
ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50
KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAg
ICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJ
QlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNl
OgpAQCAtNzcwLDEzICs3NzcsMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNl
aXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNz
YWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FO
VFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdc
bicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZl
ci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JF
Q0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicp
CiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JF
Q0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5
bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5
bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElT
UEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rl
cikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dAppbmRleCA1NDI0ZTVkZmJiMTUyMDEwYjBiMzJkNmY1ZWE2ZDUzNTg5MTRlNTZi
Li4xYjliMDk0Mjc5Y2Q1MzFhZjI5NDUzMDhhZGQ4ZmIzMzMyY2RlYmZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQK
QEAgLTI1LDYgKzI1LDkgQEAgR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmNwcAogR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzQ3JlYXRp
b25QYXJhbWV0ZXJzLmNwcAogCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1Jl
bW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcAorCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNr
QXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJh
Y2tlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtDT1JTUHJlZmxpZ2h0Q2hlY2tlci5jcHAK
QEAgLTU0Miw2ICs1NDUsOCBAQCBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVC
cm93c2VyRnVuY3MuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05l
dHNjYXBlUGx1Z2luLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9O
ZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgQG5vLXVuaWZ5CiAKK1dlYlByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorCiBXZWJQcm9jZXNzL1N0b3JhZ2Uv
V2ViU1dDbGllbnRDb25uZWN0aW9uLmNwcAogV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4
dE1hbmFnZXJDb25uZWN0aW9uLmNwcAogV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXT3JpZ2luVGFi
bGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMzZmMjk1ZDNmMzAyNjhjZTkxMjIyNGMz
MzVlMDgwNjcwYTRiZjIzYS4uYjVmN2Q3YmJkNDhjNDQ0ZjNjN2ViMDMyZDZlY2FmMzMyZGI4NTA4
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNjI4LDkgKzYyOCwxMiBAQCBXZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAv
LyBEZXJpdmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVy
LmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVBy
b2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKLS8vUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAotLy9SZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlck1l
c3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKK1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3Jr
ZXJGZXRjaFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagppbmRleCA1Yzg1ZmMxNTQ5NGUxYjIyMzE1NmEzNTRjYWE5ZDJiMmY2
ZTg5YjlkLi40ZGVmZDk3MWVlM2RmZjQwZWI0Y2ZmZmZlMWMxYzNhYWIxNmM4MGU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkyLDcg
KzkyLDYgQEAKIAkJMDc2RTg4NEUxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xp
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzZF
ODg0RDFBMTNDQURGMDA1RTkwRkMgLyogQVBJQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJ
MDc3MjgxMUQyMTIzNEZGNjAwQzhFRjJFIC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0
MTBGNDMxOUFGN0IyNzAwMkVCQUI1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdl
ci5oICovOyB9OwogCQkwNzkyMzE0ODIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHlNZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIzMTQyMjM5Q0JDQjUwMDk1OThFMiAvKiBSZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwotCQkwNzkyMzE0
OTIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
OTIzMTQzMjM5Q0JDQjYwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwICovOyB9OwogCQkwNzkyMzE0QTIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMzE0NDIzOUNCQ0I2MDA5NTk4RTIgLyogUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmggKi87IH07CiAJCTA3OTIzMTRC
MjM5Q0JDQjgwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwNzkyMzE0NTIzOUNCQ0I3MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkwNzkyMzE0QzIzOUNCQ0I4MDA5NTk4RTIg
LyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5MjMxNDYyMzlDQkNCNzAwOTU5OEUy
IC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKQEAgLTEx
OTMsNiArMTE5Miw3IEBACiAJCTcxMTcyNUE5MjI4RDU2NDMwMDAxODUxNCAvKiBXZWJzaXRlTGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzExNzI1QTgyMjhENTYzQTAwMDE4NTE0IC8qIFdlYnNp
dGVMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNoUG9saWN5LmggKi87IH07CiAJCTcxQTY3NkE2
MjJDNjIzMjUwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxQTY3NkE0MjJDNjIz
MTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJ
NzFGQjgxMEIyMjYwNjI3RTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rp
c3BhdGNoUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZl
bnRzRGlzcGF0Y2hQb2xpY3kuaCAqLzsgfTsKKwkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oICovOyB9OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUg
LyogV2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1h
Yy5oICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0
b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4
RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwogCQk3NUE4RDJENjE4N0QxQzBFMDBD
MzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBX
S1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovOyB9OwpAQCAtMzY0OSw2ICszNjQ5LDggQEAK
IAkJNTNDRkJCQzYyMjI0RDFCMDAwMjY2NTQ2IC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q2hlY2tlckNvbXBsZXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NGQkJDNzIyMjREMUIwMDAy
NjY1NDYgLyogVGV4dENoZWNrZXJDb21wbGV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRleHRDaGVja2VyQ29tcGxldGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0YzQ0FBNTIwNkM0NDNFMDA4NjQ5MEUgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQWN0aXZp
dHlUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTAyMzk5
QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTU1RENGQUExMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI4RjIyMEFFM0JENzAwQjhCRTg3IC8qIFNlY0tleVByb3h5
U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NzBBQjkwMDIwQjI1MTc0MDBCOEJFODcgLyogQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VQcm94eUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzBBQjkwMzIwQjI1NDFDMDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFNlY0tleVByb3h5U3RvcmUubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODk3LDggKzM4OTksMTkgQEAKIAkJNzFBNjc2
QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdL
VG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9
IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVk
TW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5NTIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjMwODQ5NjIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzA4
NDk3MjNBNDczMjgwMDkyQTFBNiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2Fn
ZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5ODIzQTQ3
MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5QTIzQTQ3MzU1MDA5MkExQTYgLyogUmVt
b3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5QjIzQTQ3MzU1MDA5MkExQTYgLyogUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZVByb3h5Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QzVBRTUyM0EwMDA3OTAwRDM0MjQ4IC8qIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkM1QUVFMjNB
MUQwRTEwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW47IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBX
ZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJD
b2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBRDMwMDMyM0EzMDdDQzAwN0JFMjlBIC8qIFJlbmRlcmluZ0Zs
dXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBRDMwMDQyM0EzMTU4OTAwN0JFMjlB
IC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVy
aW5nU3VyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0ND
RjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0
b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBD
MzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzksNiArNjI5Miw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAogCQkJCUE3OENDREQ4MTkzQUM5RTMwMDVFQ0MyNiAvKiBjb20uYXBw
bGUuV2ViS2l0LkdQVS5zYiAqLywKKwkJCQk3MjZDNUFERjIzOUYwN0FFMDBEMzQyNDggLyogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJSZWNvdmVy
ZWQgUmVmZXJlbmNlcyI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNjMxMiw2ICs2
MzI2LDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJE
OUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5QTNEQjAw
ODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMDVBRjI0MjNBNDcyQzEwMDJEQzM3QiAvKiBSZW5k
ZXJpbmdCYWNrZW5kICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYg
LyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLAogCQkJCTJEOUZCMjA5MjM3NTIwOUQw
MDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovLApAQCAt
NzY0NCw2ICs3NjU5LDQwIEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKIAkJfTsKKwkJNzIwNUFGMjQyM0E0NzJDMTAwMkRDMzdCIC8qIFJlbmRlcmluZ0JhY2tl
bmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMzA4
NDk5MjNBNDczMkQwMDkyQTFBNiAvKiBjZyAqLywKKwkJCQk3MjMwODQ5NjIzQTQ3MzI4MDA5MkEx
QTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MjMwODQ5NTIz
QTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJ
NzIzMDg0OTcyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbiAqLywKKwkJCQk3MjMwODQ5ODIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZVByb3h5LmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MjMwODQ5OTIzQTQ3MzJE
MDA5MkExQTYgLyogY2cgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTcyMzA4NDlBMjNBNDczNTUwMDkyQTFBNiAvKiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNl
UHJveHlDRy5jcHAgKi8sCisJCQkJNzIzMDg0OUIyM0E0NzM1NTAwOTJBMUE2IC8qIFJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eUNHLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNnOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzJBRDMwMDUyM0EzMTVFMzAwN0JFMjlBIC8q
IFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTU1RENGQUEwMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcCAqLywKKwkJCQk1NURDRkFBMTIzOTlCREEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oICovLAorCQkJCTcyNkM1QUVFMjNBMUQwRTEwMEQzNDI0OCAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluICovLAorCQkJCTcyQUQzMDA0MjNBMzE1ODkwMDdC
RTI5QSAvKiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmggKi8sCisJCQkJNzI2QzVBRTUyM0EwMDA3
OTAwRDM0MjQ4IC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkJNzJBRDMw
MDMyM0EzMDdDQzAwN0JFMjlBIC8qIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oICovLAorCQkJ
KTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNzk0Myw2ICs3OTkyLDcg
QEAKIAkJCQk1MTA1QjBEMjE2MkY3QTVFMDBFMjc3MDkgLyogTmV0d29yayAqLywKIAkJCQkzMTA5
OTk3NDE0NkM4QUE4MDAyOURFQjkgLyogTm90aWZpY2F0aW9ucyAoVXNlcikgKi8sCiAJCQkJMUE2
RkI3QUExMUU2NEI0OTAwREIxMzcxIC8qIFBsdWdpbnMgKi8sCisJCQkJNzJBRDMwMDUyM0EzMTVF
MzAwN0JFMjlBIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNTExOEU5OTgxRjI5NTI1OTAw
M0VGOUY1IC8qIFN0b3JhZ2UgKi8sCiAJCQkJMUFBRjA4QUExOTI2OTMwQjAwQjYzOTBDIC8qIFVz
ZXJDb250ZW50ICovLAogCQkJCTU3NjA4MjhBMjAyOTg0QzkwMDExNjY3OCAvKiBXZWJBdXRoZW50
aWNhdGlvbiAqLywKQEAgLTEwMTM5LDYgKzEwMTg5LDcgQEAKIAkJCQkxQTU3MDRGQzFCRTE3NTEx
MDA4NzRBRjEgLyogUmVtb3RlT2JqZWN0SW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MUFDMTMzODAxODU5MEFFNDAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxQUMxMzM4NjE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVn
aXN0cnlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0
MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDdBODE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OUIx
ODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBI
ZWFkZXJzICovLApAQCAtMTE3OTksNyArMTE4NTAsNiBAQAogCQkJCTJENzJBMUZBMjEyQkY0NkUw
MDUxN0EyMCAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjI0QTJEMTg3OUU0QkMwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQzE4RkI0MjE4
QTZFOUUwMDI1QTg4RCAvKiBSZW1vdGVMYXllclRyZWVWaWV3cy5tbSBpbiBTb3VyY2VzICovLAot
CQkJCTA3OTIzMTQ5MjM5Q0JDQjgwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc5MjMxNEIyMzlDQkNCODAw
OTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBQzEzMzg1MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVP
YmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU5
NDdBNzE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdl
UmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE3ODU0NWJmZTEyZDY4
OGQ5OWM5N2QzNjhhOGUzNTMyMzkxZTc4NzYuLjFmYzE3ZjJlNjM2YzIyMjcyMTczZWM3ZGM4Njll
MzQyMmZlMGNmN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC01NCw2ICs1NCwxNiBAQCB2b2lkIEdQVVByb2Nl
c3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewogfQogCitib29sIEdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9v
bCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpOworfQorCiB2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5n
UmVmZXJlbmNlKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IGU3ZGE3MmU1MzA1MDliZTg3OTVhNGVhNTJiMmQ0
MzFjZDM4MjkyZmEuLjY0OTZiMDY2MmNmY2YwMDRhZjE5OGMxM2Q4Yzc2NWQ0MGM5ODQ1NGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmgKQEAgLTQ2LDE2ICs0NiwyMyBAQCBwdWJsaWM6CiAgICAgfkdQVVByb2Nlc3NDb25uZWN0
aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4g
bV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3Nh
Z2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAKIHByaXZh
dGU6CiAgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
KTsKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJ
UEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52
YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRl
OwogCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICAvLyBU
aGUgY29ubmVjdGlvbiBmcm9tIGEgd2ViIHByb2Nlc3MgdG8gdGhpcyBHUFUgcHJvY2Vzcy4KICAg
ICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4
M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7
CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iNzNmOWExNjJmZjYyYzg4OThjMTE4MDMyY2Y4YTM1YmVmYjYxYzYzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRl
ICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWZQdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOwor
fQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKKyAg
ICA6IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXI6OmdlbmVyYXRlKCkpCit7CisgICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJl
Y2VpdmVyIGluIHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNl
aXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNz
YWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2
ZXIuCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2Fn
ZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcigqdGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOwor
fQorCitSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5k
U3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRv
IGl0ZXIgPSBtX3N1cmZhY2VNYXAuZmluZChzdXJmYWNlSWRlbnRpZmllcik7CisKKyAgICBpZiAo
aXRlciAgPT0gbV9zdXJmYWNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICByZXR1cm4gaXRlci0+dmFsdWUucHRyKCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAor
eworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OndhaXRGb3JEaWRDcmVhdGVTdXJmYWNlKCkKK3sKKyAgICBSZWY8
SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5l
Y3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpEaWRDcmVhdGVTdXJmYWNlPihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3Nh
Z2VBcnJpdmVzKTsKK30KKworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWl0Rm9yRGlk
UmVuZGVyVG9TdXJmYWNlKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9u
ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRSZW5kZXJUb1N1
cmZhY2U+KG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0
aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIg
c3VyZmFjZUlkZW50aWZpZXIsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIC8vIFN1
cmZhY2UgbWlnaHQgaGF2ZSBiZWVuIHJlbGVhc2VkIGJlZm9yZSB0aGlzIG1lc3NhZ2UgaXMgcmVj
ZWl2ZWQuCisgICAgaWYgKGF1dG8qIHN1cmZhY2UgPSBmaW5kU3VyZmFjZShzdXJmYWNlSWRlbnRp
ZmllcikpIHsKKyAgICAgICAgQVNTRVJUKCFzdXJmYWNlLT5wbGF0Zm9ybVN1cmZhY2UoKSk7Cisg
ICAgICAgIGlmICghc3VyZmFjZS0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKFdURk1vdmUoc2VuZFJp
Z2h0KSkpIHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmVsZWFzZVByb3h5U3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkUmVuZGVyVG9TdXJmYWNlKFdl
YkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBSZW5kZXJpbmdGbHVz
aElkZW50aWZpZXIgcmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyKQoreworICAgIC8vIFN1cmZhY2Ug
bWlnaHQgaGF2ZSBiZWVuIHJlbGVhc2VkIGJlZm9yZSBwYWludGluZyBoYXMgZmluaXNoZWQuCisg
ICAgaWYgKGF1dG8qIHN1cmZhY2UgPSBmaW5kU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcikpIHsK
KyAgICAgICAgLy8gRGlkQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVj
ZWl2ZWQgYmVmb3JlIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UuCisgICAgICAgIEFTU0VSVChzdXJm
YWNlLT5wbGF0Zm9ybVN1cmZhY2UoKSk7CisgICAgICAgIEFTU0VSVChzdXJmYWNlLT5zZW50Rmx1
c2hJZGVudGlmaWVyKCkpOworICAgICAgICBzdXJmYWNlLT5zZXRSZWNlaXZlZEZsdXNoSWRlbnRp
ZmllcihyZW5kZXJpbmdGbHVzaElkZW50aWZpZXIpOworICAgIH0KK30KKworU3VyZmFjZUlkZW50
aWZpZXIgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlUHJveHlTdXJmYWNlKGNvbnN0IElu
dFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCit7CisgICAgU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIgPSBTdXJm
YWNlSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBBU1NFUlQoIW1fc3VyZmFjZU1hcC5jb250
YWlucyhzdXJmYWNlSWRlbnRpZmllcikpOworCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCBzaXpl
LCBjb250ZXh0U2l6ZSwgY29sb3JTcGFjZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgIG1fc3VyZmFjZU1hcC5hZGQoc3VyZmFjZUlkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2U6OmNyZWF0ZShjb2xvclNwYWNlKSk7CisgICAgcmV0dXJuIHN1cmZhY2VJZGVudGlm
aWVyOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VQcm94eVN1cmZh
Y2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX3N1
cmZhY2VNYXAucmVtb3ZlKHN1cmZhY2VJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VTdXJmYWNlKHN1cmZhY2VJZGVudGlm
aWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6cmVuZGVyVG9Qcm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3Vy
ZmFjZUlkZW50aWZpZXIsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcCkKK3sKKyAgICBhdXRvKiBzdXJmYWNlID0gZmluZFN1
cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworCisgICAgLy8gVGhlIGNhbGxlciBtdXN0IGNhbGwg
Y3JlYXRlUHJveHlTdXJmYWNlKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICBp
ZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBzdXJmYWNlLT5zZXRTZW50Rmx1c2hJZGVudGlmaWVyKFJlbmRl
cmluZ0ZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW5kZXJUb1N1cmZhY2Uoc3VyZmFjZUlkZW50aWZp
ZXIsIHN1cmZhY2UtPnNlbnRGbHVzaElkZW50aWZpZXIoKSwgZGlzcGxheUxpc3QsIGNsaXApLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworYm9vbCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpmbHVzaFByb3h5U3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRp
ZmllcikKK3sKKyAgICBhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZp
ZXIpOworCisgICAgLy8gVGhlIGNhbGxlciBtdXN0IGNhbGwgY3JlYXRlUHJveHlTdXJmYWNlKCkg
YmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9y
ICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgd2FpdHNDb3VudC0tOyApIHsK
KyAgICAgICAgaWYgKCFzdXJmYWNlLT5pc1BlbmRpbmdGbHVzaCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIC8vIFdlIG5vdCBoYXZlIHJlY2VpdmVkIERpZFJlbmRlclRvU3VyZmFjZSwg
c28gd2FpdCBmb3IgaXQuCisgICAgICAgIGlmICghd2FpdEZvckRpZFJlbmRlclRvU3VyZmFjZSgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdXJmYWNlID0gZmluZFN1cmZh
Y2Uoc3VyZmFjZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIC8vIG1fc3VyZmFjZU1hcCBtYXkg
aGF2ZSBjaGFuZ2VkIHdoaWxlIHdhaXRpbmcgZm9yIERpZFJlbmRlclRvU3VyZmFjZS4KKyAgICBp
ZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzdXJmYWNl
LT5pc1BlbmRpbmdGbHVzaCgpOworfQorCitSZWZQdHI8UmVuZGVyaW5nU3VyZmFjZT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6c3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRp
ZmllcikKK3sKKyAgICBhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZp
ZXIpOworCisgICAgLy8gVGhlIGNhbGxlciBkaWQgbm90IGNyZWF0ZVByb3h5U3VyZmFjZSgpIGJl
Zm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICAvLyBEaWRDcmVhdGVTdXJmYWNlIGhhcyBub3QgcmVjZWl2ZWQgeWV0LCBzbyB3YWl0IGZv
ciBpdC4KKyAgICBpZiAoIXN1cmZhY2UtPnBsYXRmb3JtU3VyZmFjZSgpKSB7CisgICAgICAgIGlm
ICghd2FpdEZvckRpZENyZWF0ZVN1cmZhY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworICAg
IH0KKworICAgIC8vIG1fc3VyZmFjZU1hcCBtYXkgaGF2ZSBjaGFuZ2VkIHdoaWxlIHdhaXRpbmcg
Zm9yIERpZENyZWF0ZVN1cmZhY2UuCisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIC8vIERpZENyZWF0ZVN1cmZhY2Ugd2FzIHJlY2VpdmVkIGJ1dCBpdCBy
ZXR1cm5zIGEgd3Jvbmcgc3VyZmFjZUlkZW50aWZpZXIuCisgICAgaWYgKCFzdXJmYWNlLT5wbGF0
Zm9ybVN1cmZhY2UoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIHJldHVybiBtYWtlUmVmUHRyKHN1cmZh
Y2UpOworfQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJlOTNiZDE5ZDE1ZDI5ODUzZTgx
MmY4YmRhMDNkMzBmZTNjZDdhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCww
ICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nU3VyZmFjZS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdC
YWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJp
dmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4g
Y3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8gSVBD
OjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIK
KyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpIG92ZXJyaWRlOworCisgICAgLy8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRGb3JEaWRDcmVh
dGVTdXJmYWNlKCk7CisgICAgYm9vbCB3YWl0Rm9yRGlkUmVuZGVyVG9TdXJmYWNlKCk7CisKKyAg
ICAvLyBkaWRSZWNlaXZlTWVzc2FnZSgpIGhhbmRsZXJzCisgICAgdm9pZCBkaWRDcmVhdGVTdXJm
YWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBNYWNoU2VuZFJpZ2h0KTsKKyAgICB2b2lk
IGRpZFJlbmRlclRvU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgUmVuZGVyaW5n
Rmx1c2hJZGVudGlmaWVyKTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBXZWJDb3Jl
OjpTdXJmYWNlSWRlbnRpZmllciBjcmVhdGVQcm94eVN1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpDb2xv
clNwYWNlKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eVN1cmZhY2UoV2ViQ29yZTo6
U3VyZmFjZUlkZW50aWZpZXIpIG92ZXJyaWRlOworICAgIHZvaWQgcmVuZGVyVG9Qcm94eVN1cmZh
Y2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisg
ICAgYm9vbCBmbHVzaFByb3h5U3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcikgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ1N1cmZhY2U+IHN1cmZhY2UoV2Vi
Q29yZTo6U3VyZmFjZUlkZW50aWZpZXIpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKiBmaW5kU3Vy
ZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcik7CisKKyAgICB1c2luZyBTdXJmYWNlTWFw
ID0gSGFzaE1hcDxXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgUmVmPFJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2U+PjsKKyAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZU1hcDsKKyAgICBSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE1MzdmMGFjN2VhNTNl
MDllZjUzMzEzNzdiNTc5NTEwODJmNDdmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVz
c2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kIHsKKyAgICB2b2lkIERpZENyZWF0ZVN1cmZhY2UoV2ViQ29yZTo6U3Vy
ZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0
KQorICAgIHZvaWQgRGlkUmVuZGVyVG9TdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVy
IHN1cmZhY2VJZGVudGlmaWVyLCBXZWJLaXQ6OlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciByZW5k
ZXJpbmdGbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY2MDVlNTlj
YTg2OWUzNGM0MTBjNTMzYmQyZjcwODNhMzMzNGFhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ1N1cmZh
Y2UuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nv
bG9yU3BhY2UuaD4KKworCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdTdXJmYWNlLmg+Cisj
aW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nU3Vy
ZmFjZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlPiBj
cmVhdGUoV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZShjb2xvclNwYWNlKSk7Cisg
ICAgfQorCisgICAgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXI7IH0KKyAgICBSZW5kZXJpbmdG
bHVzaElkZW50aWZpZXIgcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisgICAgCisgICAgdm9pZCBzZXRTZW50Rmx1c2hJ
ZGVudGlmaWVyKFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciBzZW50Rmx1c2hJZGVudGlmaWVyKQor
ICAgIHsKKyAgICAgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gc2VudEZsdXNoSWRlbnRpZmll
cjsKKyAgICB9CisKKyAgICB2b2lkIHNldFJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKFJlbmRlcmlu
Z0ZsdXNoSWRlbnRpZmllciByZWNlaXZlZEZsdXNoSWRlbnRpZmllcikKKyAgICB7CisgICAgICAg
IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSByZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKKyAg
ICB9CisKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1
c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToK
KyAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKKyAgICAgICAgOiBXZWJDb3JlOjpSZW5kZXJpbmdTdXJmYWNlKGNvbG9yU3BhY2UpCisgICAg
eworICAgIH0KKworICAgIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50
aWZpZXI7CisgICAgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50
aWZpZXI7Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCisKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NjQ3OTVj
OTRiYThhMWIzYThlYTBiYWU1YjdkNmJmOWM2N2IyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitlbnVtIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdGbHVzaElkZW50aWZpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44N2E0MjhiOWFiN2IyZTNlYTljZDE0OGFhNGI3NTNhNjJlYjE4NDE5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyVHlwZSB7
IH07Cit1c2luZyBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJl
bmRlcmluZ0ZsdXNoSWRlbnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmlu
ZGV4IDNhYmIxYzdlMzdjNDdkZWUzNjgzNDcyZTJlMzM3YjQ1ZmFmNTU4MDUuLmFlNDFhNmU4MTJi
NDc4OWQ1MTRhYTM2MDNiOGRhN2YyMGE0N2Y0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBA
IC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1
ZGUgIlBhZ2VCYW5uZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCiAj
aW5jbHVkZSAiVXNlckRhdGEuaCIKICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNs
dWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTg4MSwxNCArODgyLDE5IEBAIEdyYXBo
aWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkg
Y29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklU
T1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3Jl
YXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29u
c3QKIHsKICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkK
ICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
ZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50
OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCmluZGV4IDcyZWJlZjUwZGY5YjE0YTg3MmZjMzU2MGExYzgxNzM3NDUx
ZDcwMjcuLjkzNzYwNjUwMTJlZTFlYWNiZGZiNDc1MTA2MWFkMmE1NmM4NTkxYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKQEAgLTIzMCw2ICsyMzAsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2Vi
Q29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
V2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+
IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiAgICAgQ29t
cG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBm
aW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dl
ckZsYWdzPigK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385673</attachid>
            <date>2019-12-13 20:45:33 -0800</date>
            <delta_ts>2019-12-13 22:41:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191213204532.patch</filename>
            <type>text/plain</type>
            <size>111619</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY2ZDBkMWExNWE4MWZm
NjE1NTJlZjk1ZjE3MzVmZmVmYzc0OWFlNy4uYzFlNTkzMjVmZWQ5OTU5ODNjOTRhZTNmZWY4MGM5
YjUyMDMzOGEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTEyLTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgUmVuZGVy
aW5nQmFja2VuZCBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBXZWJQIGFuZCByZWNlaXZpbmcKKyAgICAgICAgcmVw
bGllcyBmcm9tIHRoZSBHUFVQLiBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUg
Y3JlYXRlZCBieQorICAgICAgICBDaHJvbWVDbGllbnQgYW5kIG93bmVkIGJ5IHRoZSBQYWdlLgor
CisgICAgICAgIFJlbmRlcmluZ1N1cmZhY2UgaXMgYWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSBj
cmVhdGluZyBhIHBsYXRmb3JtIHNoYXJlZAorICAgICAgICBzdXJmYWNlLiBDcmVhdGluZyB0aGUg
bWVtb3J5IG9mIHRoZSBzdXJmYWNlIHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBHUFVQLgorICAg
ICAgICBSZW5kZXJpbmdTdXJmYWNlIHdpbGwgY3JlYXRlIGEgcGxhdGZvcm0gc3VyZmFjZSBpbiB0
aGUgV2ViUC4gVGhpcyBzdXJmYWNlCisgICAgICAgIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNh
bWUgbWVtb3J5IGFzIHRoZSBHUFVQIGRvZXMuCisKKyAgICAgICAgUmVuZGVyaW5nU3VyZmFjZSBp
cyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgZm9yIENHLiBJZGVhbGx5IEltYWdlQnVmZmVyCisgICAg
ICAgIHNob3VsZCBoYXZlIGJlZW4gdXNlZCBpbnN0ZWFkLiBCdXQgdG8gdXNlIEltYWdlQnVmZmVy
IGl0IHdpbGwgcmVxdWlyZXMKKyAgICAgICAgZXh0ZW5zaXZlIHJlLWZhY3RvcmluZy4KKworICAg
ICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbmRlcmluZ0JhY2tlbmQpOgor
ICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNl
SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5k
ZXJpbmdTdXJmYWNlQ0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdTdXJm
YWNlOjpwbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFj
ZTo6Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ1N1
cmZhY2U6OlJlbmRlcmluZ1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICBIYXZlIHRvIGRlbGV0ZSB0aGUgdXNp
bmcgc3RhdGVtZW50IGJlY2F1c2UgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IHdhcworICAgICAg
ICBhbWJpZ3VvdXMgc3ltYm9sIGluIFdlYktpdC4KKwogMjAxOS0xMi0xMyAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgU2NyaXB0Q29udHJvbGxl
cidzIHByb2xpZmVyYXRpb24gb2YgRXhjZXB0aW9uRGV0YWlscyouCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ1Nzhj
N2I1ZTMzMGMzYzNjMDI3ZTZiNzRmMjMxYWViMzE3Mjk3Y2IuLjQyMzgyNTczOGVmNzA4NzBhMDE3
YTM1Njg4N2M3MzAxNjViNjhmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUxIEBACisyMDE5LTEy
LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgTWFrZSBHUFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBhcmUgaW50cm9kdWNl
ZCB0bworICAgICAgICBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgV2ViUHJv
Y2VzcyBhbmQgdGhlIEdQVVByb2Nlc3MgZm9yCisgICAgICAgIHJlbmRlcmluZyBvcGVyYXRpb25z
LgorCisgICAgICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mgd2lsbCBiZSByZXNwb25zaWJs
ZSBmb3IgY3JlYXRpbmcgYW5kIHJlbGVhc2luZworICAgICAgICB0aGUgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5IGdpdmVuIGl0cyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci4gSXQKKyAg
ICAgICAgaXMgcmVzcG9uc2libGUgYWxzbyBmb3IgZGlzcGF0Y2hpbmcgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSBtZXNzYWdlcy4KKworICAgICAgICBBbGwgdGhlIFJlbmRlcmluZ0Jh
Y2tlbmQgbWVzc2FnZXMgYXJlIGFzeW5jaHJvbm91cy4gVGhlIG1haW4gdGhyZWFkIHdpbGwKKyAg
ICAgICAgbm90IGJlIGJsb2NrZWQgd2hlbiBzZW5kaW5nIGEgbWVzc2FnZSBmcm9tIFdlYlAgdG8g
R1BVUC4gSW5zdGVhZCBHUFVQIHdpbGwKKyAgICAgICAgbm90aWZ5IFdlYlAgd2hlbiBpdCBmaW5p
c2hlcyBhbiBvcGVyYXRpb24uIEluIHRoZSBjYXNlIHdoZW4gV2ViUCB3YW50cworICAgICAgICB0
byBoYXZlIGltbWVkaWF0ZSBhY2Nlc3MgdG8gdGhlIHN1cmZhY2UsIGUuZy4gZmx1c2hpbmcgdGhl
IHN1cmZhY2UgY29udGV4dCwKKyAgICAgICAgdGhlIFdlYlAgd2lsbCBiZSBoYXZlIHRvIGJlIGJs
b2NrZWQgZm9yICJzb21ldGltZSIgd2FpdGluZyBmb3IgYSBjZXJ0YWluCisgICAgICAgIG1lc3Nh
Z2UgdG8gYmUgZGVsaXZlcmVkLgorCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UgaXMg
YWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSB0aGUgbGlmZSB0aW1lIG9mIHRoZQorICAgICAgICBw
bGF0Zm9ybSBzdXJmYWNlIGluIHRoZSBXZWJQb3JjZXNzLiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNl
UHJveHkgd2lsbCBkbworICAgICAgICBhIHNpbWlsYXIgam9iIGluIHRoZSBHUFUgcHJvY2Vzcy4K
KworICAgICAgICBGbHVzaGluZyBhIHN1cmZhY2Ugd2lsbCBiZSB0cmFja2VkIGJ5IFJlbmRlcmlu
Z0ZsdXNoSWRlbnRpZmllci4gCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgc2VuZHMg
YSAnUmVuZGVyVG9TdXJmYWNlJyBtZXNzYWdlIHdpdGggYSBuZXdseQorICAgICAgICBnZW5lcmF0
ZWQgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLiBXaGVuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eQorICAgICAgICBmaW5pc2hlcyByZW5kZXJpbmcgdG8gaXRzIFJlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eSwgaXQgd2lsbCByZXBseSBiYWNrCisgICAgICAgIHRvIHRoZSBXZWJQIGJ5IHNl
bmRpbmcgRGlkUmVuZGVyVG9TdXJmYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgc2FtZQorICAgICAgICBS
ZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgd2hpY2ggd2lsbCBzZXQgaXQgaW4gdGhlIGNvcnJlc3Bv
bmRpbmcKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZC4gUmVtb3RlUmVuZGVyaW5nU3Vy
ZmFjZSBpcyBwZW5kaW5nIGZsdXNoIGlmIGl0cworICAgICAgICBzZW50Rmx1c2hJZGVudGlmaWVy
IGFuZCByZWNlaXZlZEZsdXNoSWRlbnRpZmllciBhcmUgZGlmZmVyZW50LgorCisgICAgICAgICog
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisg
ICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToK
KyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBE
ZWxldGVkLgorICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGF1dG8gZ2VuZXJhdGVkIGluIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwLgorCisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVy
IGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW46CisgICAgICAgIEFkZCBuZXcgbWVzc2FnZXMgYW5kIG1ldGhvZHMgZm9yIGNy
ZWF0aW5nL3JlbGVhc2luZyBhIFJlbmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVN1cmZhY2UpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlclRvU3VyZmFjZSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAg
KiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5
Lmg6IEFkZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgQ29tbXVuaWNh
dGVzIHdpdGggUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpbgorICAgICAgICB0aGUgV2ViUG9yY2Vz
cy4gSXQgbWFuYWdlcyB0aGUgbGlmZSBjeWNsZSBvZiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlLiBJ
dAorICAgICAgICByZWdpc3RlcnMgaXRzZWxmIGFzIGEgbWVzc2FnZSByZWNlaXZlciBpbiB0aGUg
Y29uc3RydWN0b3IgYW5kIHVucmVnaXN0ZXIKKyAgICAgICAgaXRzZWxmIGluIHRoZSBkZXN0cnVj
dG9yLiBJdCBzZW5kcyByZXBsaWVzIHRvIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAg
ICAgIGluIHRoZSBXZWJQb3JjZXNzIHdoZW4gaXQgZmluaXNoZXMgb25lIG9mIGl0cyBmdW5jdGlv
bnMuIAorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nU3VyZmFjZVByb3h5OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmNyZWF0ZVNlbmRSaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6
ZW5zdXJlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5OjpmbHVzaEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmg6IEFk
ZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkgbWFuYWdlcyBvcGVyYXRp
bmcgb24gdGhlIHBsYXRmb3JtIHN1cmZhY2UgaW4gCisgICAgICAgIEdQVVByb2Nlc3MuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk6On5SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSk6CisgICAg
ICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJv
Y2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIE1ha2UgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkgYW4gTWVzc2FnZVJlY2VpdmVyIGJ5IGFkZGluZyBhbmQgCisgICAgICAgIHJlbW92aW5nIGl0
c2VsZiBmcm9tIE1lc3NhZ2VSZWNlaXZlck1hcCBvZiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIFdoZW4g
dGhlIGF0dHJpYnV0ZSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnIGlzIGFkZGVkIHRoZSBtZXNzYWdl
cy5pbiBmaWxlLAorICAgICAgICB0aGUgZGlkUmVjZWl2ZU1lc3NhZ2UoKSB3aWxsIGluY2x1ZGUg
YSBkaXNwYXRjaCBjYWxsIHN1Y2ggdGhhdCB0aGUgcmVjZWl2ZXIKKyAgICAgICAgaGFzIHRoZSBh
YmlsaXR5IHRvIGRpc3BhdGNoIHRoZW0gdG8gaXRzIE1lc3NhZ2VSZWNlaXZlck1hcC4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3ND
b25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICBEaXNwYXRjaCBtZXNz
YWdlcyBjb21pbmcgZnJvbSB0aGUgR1BVUG9yY2VzcyB0byBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6ZmluZFN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
d2FpdEZvckRpZENyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjp3YWl0Rm9yRGlkUmVuZGVyVG9TdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZFJlbmRlclRvU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZVByb3h5U3VyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VQcm94eVN1cmZh
Y2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZW5kZXJUb1By
b3h5U3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZs
dXNoUHJveHlTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6c3VyZmFjZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IEFkZGVkLgorICAg
ICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGlzIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24g
b2YgUmVuZGVyaW5nQmFja2VuZC4KKyAgICAgICAgSXQgd2lsbCBiZSB1c2VkIHRvIGhpZGUgdGhl
IGNvbXBsZXhpdHkgb2Ygc2VuZGluZyBtZXNzYWdlcyBmcm9tIFdlYlAgYW5kCisgICAgICAgIHJl
Y2VpdmluZyByZXBsaWVzIGZyb20gdGhlIEdQVVAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6c2VudEZsdXNoSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2U6OnJlY2VpdmVkRmx1c2hJZGVu
dGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6
c2V0U2VudEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2U6OnNldFJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKToK
KyAgICAgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSBtYW5hZ2VzIG9wZXJhdGluZyBvbiB0aGUg
cGxhdGZvcm0gc3VyZmFjZSBpbiBXZWJQLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICBD
YW4gaWRlbnRpZnkgYSBSZW5kZXJpbmdCYWNrZW5kIGluIHRoZSBXZWJQIGFuZCBHUFVQLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0ZsdXNoSWRlbnRp
Zmllci5oOiBBZGRlZC4KKyAgICAgICAgVHJhY2tzIHdoZXRoZXIgYSBSZW5kZXJpbmdTdXJmYWNl
IGlzIHBlbmRpbmcgYSBmbHVzaGluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xp
ZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDE5LTEyLTEzICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBTY3JpcHRDb250
cm9sbGVyJ3MgcHJvbGlmZXJhdGlvbiBvZiBFeGNlcHRpb25EZXRhaWxzKi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDJkN2MyY2UyMGYwZmNiY2VkYTEyNGEwZGRkOTVkNTI1NThmNjExNTIuLjJmZTIz
Y2M4YTI4MmNjMWEyNWU0NDJlNmFkMzdhMjIzZmExOGVlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMTExMCw4ICsxMTEwLDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURF
UlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9T
YW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJp
bmdUcnVuY2F0b3IuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cmZhY2VJZGVudGlmaWVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
ZXh0UnVuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xpZW50LmgKaW5k
ZXggNDNiMmEwZGRjZDUyYjVkMWFjNTYyYWU3YTEyOGU0MWQyMzNkOTg0Yi4uY2I5YjdlZGJlMmFk
MTU3ODljMTMxMGNlOGZiMmI0Y2QxMjU4ZDRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oCkBAIC0zOSw2ICszOSw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2U7CitjbGFzcyBEb2N1
bWVudDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBVc2VyTWVkaWFSZXF1ZXN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODhiODAx
NmExNzNhOGY5ZTM4MThkNzc5ZWU0Y2JiYjJjMGViZTgzYy4uNTIwMWFmZDFiNGYyMGRkMjcyY2Y0
MzMyZjZjOTc1ZWU5YWNmMTdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc0NSw2ICsxNzQ1LDcgQEAKIAkJNTVBRjE0RTYx
RUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUFGMTRFNDFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVn
aXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1NURDQzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAw
QzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1
MjMyMjQwNzNGRTAwQzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NURDRkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVu
ZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIw
NkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkg
LyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVGQTdGRkIyMTEwRUNENzAwNUFFRkU3IC8qIFNWR1pvb21B
bmRQYW5UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUZBN0ZGQTIxMTBFQ0Q3MDA1QUVGRTcgLyogU1ZHWm9vbUFuZFBhblR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzA0NDA1QTFFNTM5
MzYyMDAzNTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDQ0MDU5MUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Fl
c0NiY0NmYlBhcmFtcy5oICovOyB9OwpAQCAtMjEyOCw2ICsyMTI5LDkgQEAKIAkJNzI0RUQzMzIx
QTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBK
U0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBE
ODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlFNjFCQTIzQTQ0MTcwMDAyRUZFNzkgLyog
UmVuZGVyaW5nU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI5RTYxQjUyM0E0MTIyMTAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1cmZhY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlFNjFC
QjIzQTQ0MTdBMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZUNHLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlFNjFCNzIzQTQxMkYzMDAyRUZFNzkg
LyogUmVuZGVyaW5nU3VyZmFjZUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzJBQzM5RTYyMzlFQkJGNzAwQjYzRTAyIC8qIFN1cmZhY2VJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAv
KiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsK
IAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3
RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTg2NjksNiArODY3Myw3IEBACiAJ
CTU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR1ByaW1pdGl2ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVEQ0M1MjYyMjQwNzRGQTAwQzI2RTMyIC8qIFNWR1Byb3BlcnR5QWNjZXNzb3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NURDQzUyNzIyNDA3NTBCMDBDMjZFMzIgLyogU1ZHUHJvcGVydHlBY2Nlc3NvckltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3NvckltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVu
Y3lUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaW50RnJlcXVlbmN5VHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVFNTM1NDIyM0IyOUU5MDBGQkE5NDQgLyogU1ZH
TWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWVt
YmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVFRTUzNTYyMjNC
MjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvckltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5OSw2ICs5NjA0LDkgQEAKIAkJ
NzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJpbmdTdXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
OUU2MUI3MjNBNDEyRjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyaW5nU3VyZmFjZUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUMzOUU0MjM5RUI4N0YwMEI2M0UwMiAvKiBTdXJmYWNlSWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdXJmYWNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdC
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4ODIsNiArMjQ4OTAsNyBAQAogCQkJCUE4MEEzOEZE
MEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4
MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTcyOUU2MUI3MjNBNDEy
RjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLywKIAkJCQkxRkM0MEZCODE2NTVD
NTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBG
QjcxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlC
Mjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8s
CkBAIC0yNTExOCw2ICsyNTEyNyw4IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8q
IFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRl
b1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZp
ZGVvU2FtcGxlLmggKi8sCisJCQkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCAqLywKKwkJCQk3MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyogUmVuZGVyaW5n
U3VyZmFjZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVj
dC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0Lmgg
Ki8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApA
QCAtMjUxMjgsNiArMjUxMzksNyBAQAogCQkJCUIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQk4NDlGNzc3NTBFRkVDNjIwMDA5MDg0OUQgLyogU3Ry
b2tlU3R5bGVBcHBsaWVyLmggKi8sCisJCQkJNzJBQzM5RTQyMzlFQjg3RjAwQjYzRTAyIC8qIFN1
cmZhY2VJZGVudGlmaWVyLmggKi8sCiAJCQkJMDg3NTU4QzMxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJMDg3NTU4QzQxM0I0QTU3
RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oICovLAogCQkJCTNC
QjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCkBAIC0zMTkwOSw2ICszMTky
MSw5IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8q
IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NURD
RkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzI5RTYxQkEyM0E0NDE3MDAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1cmZhY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOUU2MUJCMjNBNDQxN0EwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJm
YWNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBS
ZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OTVG
RjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjQzNiw2ICszMjQ1MSw3IEBACiAJCQkJOTNCMkQ4MTYwRjk5MjBEMjAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0MwNzg1MDExNjVENUJFMDAz
QTMyRUYgLyogU3VmZml4VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2MjdCOTgxNEZCNTQy
NDAwMkNEQ0ExIC8qIFN1cHBsZW1lbnRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFDMzlF
NjIzOUVCQkY3MDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4NzU1OEM2MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyQzEyMTdEMTFBQjlFNzcwMDNDNDYyQyAvKiBT
dXNwZW5kYWJsZVRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3NDBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggZDc4MWYzNWNiNTM4ODcyNWZkYjMwZGJkMzI1NDRiMmRjNTFjMGQxMi4u
NDQxOTczYzQ1ZTVkM2EyMDU1MDcwODUxMWYzZWY0YjY4MGQ1MGU4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xp
ZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJSZW5kZXJF
bWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRl
ICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5j
bHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDQsNiArMzA1LDEwIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgdmlydHVhbCBSZWZQdHI8UmVu
ZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KKyNlbmRpZgorCiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xh
eWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAppbmRleCA1NjU1ZGMyYzI5YzcxNjFlMTJjNGNhMDI3OTA4OGViM2Y0
M2JlYjU3Li5lZTMyNjhmZTU5M2FkMmE5NjBjMjAwYTZlYWNlYWNmZjg5MGZkNzY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKQEAgLTI5MjQsNiArMjkyNCwxNSBAQCBSZW5kZXJpbmdVcGRhdGVTY2hlZHVs
ZXImIFBhZ2U6OnJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpCiAgICAgcmV0dXJuICptX3JlbmRl
cmluZ1VwZGF0ZVNjaGVkdWxlcjsKIH0KIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKK1JlZlB0
cjxSZW5kZXJpbmdCYWNrZW5kPiBQYWdlOjpyZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICBpZiAo
IW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kID0gY2hyb21l
KCkuY2xpZW50KCkuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmQ7Cit9CisjZW5kaWYKKwogdm9pZCBQYWdlOjpmb3JFYWNoRG9jdW1lbnQoY29u
c3QgRnVuY3Rpb248dm9pZChEb2N1bWVudCYpPiYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8m
IGRvY3VtZW50IDogY29sbGVjdERvY3VtZW50cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCA1ZjRjZWIw
YTM2NTBjNDJhOGUxN2QxMjYzZjU2ODQ3ZWYxODFjNDUzLi5mZDVhODhiNjdmN2Y3OTE1MjRkZjAz
YmRjNzEyMGJlOTM2ZDViZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIlJUQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJS
ZWdpc3RyYWJsZURvbWFpbi5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNs
dWRlICJSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5o
IgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCkBAIC0yNzMsNiArMjc0LDEwIEBAIHB1Ymxp
YzoKICAgICBQZXJmb3JtYW5jZU1vbml0b3IqIHBlcmZvcm1hbmNlTW9uaXRvcigpIHsgcmV0dXJu
IG1fcGVyZm9ybWFuY2VNb25pdG9yLmdldCgpOyB9CiAKICAgICBSZW5kZXJpbmdVcGRhdGVTY2hl
ZHVsZXImIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpOworICAgIAorI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5nQmFja2VuZD4gcmVuZGVyaW5nQmFja2VuZCgp
OworI2VuZGlmCiAKICAgICBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudCogdmFsaWRhdGlvbk1lc3Nh
Z2VDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmdldCgp
OyB9CiAgICAgdm9pZCB1cGRhdGVWYWxpZGF0aW9uQnViYmxlU3RhdGVJZk5lZWRlZCgpOwpAQCAt
OTAxLDYgKzkwNiwxMCBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z1VwZGF0ZVNjaGVkdWxlcj4gbV9yZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXI7CiAKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVuZGVyaW5n
QmFja2VuZDsKKyNlbmRpZgorCiAgICAgSGFzaFNldDxSZW5kZXJPYmplY3QqPiBtX3JlbGV2YW50
VW5wYWludGVkUmVuZGVyT2JqZWN0czsKICAgICBSZWdpb24gbV90b3BSZWxldmFudFBhaW50ZWRS
ZWdpb247CiAgICAgUmVnaW9uIG1fYm90dG9tUmVsZXZhbnRQYWludGVkUmVnaW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIyZDk4MjgwMDM3NDBlY2ZiNzAzNjYxMzg2ZTA1MTA5NjM4ZjlhYTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlN1cmZhY2VJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbnRTaXplOworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZTsKKworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKK2NsYXNzIERpc3BsYXlMaXN0OworfQorCitjbGFzcyBSZW5kZXJpbmdCYWNrZW5k
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyaW5nQmFja2VuZD4geworcHVibGljOgorICAgIHZp
cnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbiBzZW5kIElQQyBhc3luYyBtZXNzYWdlcyBidXQgdGhleSBkbyBub3QgYmxvY2sgdGhlIG1h
aW4gdGhyZWFkLgorICAgIHZpcnR1YWwgU3VyZmFjZUlkZW50aWZpZXIgY3JlYXRlUHJveHlTdXJm
YWNlKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFj
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHlTdXJmYWNlKFN1cmZhY2VJZGVu
dGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclRvUHJveHlTdXJmYWNlKFN1cmZh
Y2VJZGVudGlmaWVyLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBjb25zdCBGbG9h
dFJlY3QmIGNsaXApID0gMDsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBtYXkgYmxvY2sgdGhl
IG1haW4gdGhyZWFkIGZvciAic29tZXRpbWUiIHRpbGwgdGhleSByZWNlaXZlIG91dC1vZi1wcm9j
ZXNzIHJlcGxpZXMuCisgICAgdmlydHVhbCBib29sIGZsdXNoUHJveHlTdXJmYWNlKFN1cmZhY2VJ
ZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8UmVuZGVyaW5nU3VyZmFjZT4gc3Vy
ZmFjZShTdXJmYWNlSWRlbnRpZmllcikgPSAwOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkN2ExZTg2YTYxN2EwNTA5NjM2OTZhY2U5
YWU4ZjQxNGNiNGQzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdTdXJmYWNlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlJlbmRlcmluZ1N1cmZhY2VDRy5o
IgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
dXJmYWNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vy
ZmFjZUlkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzQ2NGNlMGY1ZjgzOGYzNDMxNzUwMDc5YTFl
YTg5Mzc4ODVjYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU3VyZmFjZUlkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gU3VyZmFjZUlkZW50aWZpZXJUeXBlIHsgfTsKK3Vz
aW5nIFN1cmZhY2VJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxTdXJmYWNlSWRlbnRpZmll
clR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9SZW5kZXJpbmdTdXJmYWNlQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1JlbmRlcmluZ1N1cmZhY2VDRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMGY4NjYwOGE4MjAxNzVl
OTQzMTZkNGVkNjk0MTVlY2FlNmU0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5kZXJpbmdTdXJmYWNlQ0cuaApAQCAtMCwwICsxLDYz
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9T
dXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworI2lmIFVTRShDRykg
JiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElP
U3VyZmFjZTsKKworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
bmRlcmluZ1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiYgcGxhdGZvcm1TdXJmYWNlKCkgeyByZXR1cm4gbV9wbGF0ZnJvbVN1cmZhY2U7IH0KKworICAg
IGJvb2wgY3JlYXRlUGxhdGZvcm1TdXJmYWNlKE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3BsYXRmcm9tU3VyZmFjZSk7CisgICAgICAgIG1fcGxhdGZy
b21TdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoc2VuZFJp
Z2h0KSwgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSkpOworICAgICAgICByZXR1cm4g
bV9wbGF0ZnJvbVN1cmZhY2UuZ2V0KCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVy
aW5nU3VyZmFjZShDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9jb2xvclNwYWNl
KGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBtX3BsYXRmcm9tU3VyZmFjZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JT
cGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykg
JiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAyOGUyNjQ0
ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi5mNDhlMTRjYTY3YmFjN2Y4NGM0ZDgx
MWE4YzJlOTBlYzc3YTZlMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMjUxLDYgKzI1
MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0gLy8gV2ViQ29yZQotCi11c2lu
ZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAwN2QzMzA1YjgyMzk3MmU3ODdm
ZmVlN2RiODBlMTE0ZDIyNTExMjY2Li5iMTUxMzYxNmE5NTI3OWQyMjZkNzUxNWRmZDQ0OTdmNGQz
NGRjYzA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0CkBAIC0xNSw2ICsxNSw3IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJ
UikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5w
bAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMu
aW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1l
c3NhZ2VzLmluCkBAIC0xMTIsNiArMTEzLDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ2xpZW50Q29ubmVjdGlvbi5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFn
ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgpAQCAtMTIxLDYgKzEy
Myw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tp
bmdDb250cm9sbGVyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9XZWJQYWdlL0V2ZW50RGlzcGF0Y2hlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ci5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVXZWJJbnNwZWN0b3JVSS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5t
ZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRw
dXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3QKaW5kZXggOTg2OWNmMTcxNjFmZWQ5NDQ5MmIyZWI2NzZhMzA5NjExN2NlNjUyZi4uNmMw
YzVlMWFhYTc0ZjI5OTg2MmY2MjNkMGUyZDU0MDg2NmMwYzg1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjMsNiArMTIzLDEyIEBA
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5TWVzc2FnCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJl
Z2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1l
c3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2Fn
ZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtl
CmluZGV4IDE3YmRjYjVmMmRhYWE5YmIxYjZhZjRkNzRhYjU4ZTUwNGE4MTIxODMuLjBlZWY1M2Yx
MTg4ZjU4NWRiMTdmOTdmNjk3ZWNhYWM0M2Q1NDUyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKQEAgLTU5LDYgKzU5LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL05vdGlmaWNhdGlvbnMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9PcmlnaW5EYXRh
IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUGx1Z2lucyBcCisgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9S
ZXNvdXJjZUNhY2hlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvU3RvcmFnZSBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL1VzZXJDb250ZW50IFwKQEAgLTE0MCw2ICsxNDEsOCBAQCBN
RVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIgXAogICAg
IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3Ry
eSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cAppbmRleCBjMzQ4ZTMwZGU4YTI5ZTk3M2VhZWFhNmE5YjhhOGUwOTMzYWE4ODI1Li4zOTc3Yzk4
ZWZkYTJhMzRiYWI2YTcyNTAwYWNlNzI2YjQxZGQ0MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0zMywx
MSArMzMsOSBAQAogI2luY2x1ZGUgIkdQVVByb2Nlc3MuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNz
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNzUHJveHlNZXNzYWdlcy5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
TWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oIgog
I2luY2x1ZGUgIlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKLSNpbmNs
dWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSAi
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01l
c3NhZ2VzLmgiCkBAIC03MCw2ICs2OCwxNiBAQCB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKK2Jvb2wgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJN
YXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpOworfQorCiB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1l
KQogewogICAgIFdURkxvZ0Fsd2F5cygiUmVjZWl2ZWQgYW4gaW52YWxpZCBtZXNzYWdlIFwiJXMu
JXNcIiBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy5cbiIsIG1lc3NhZ2VSZWNlaXZlck5hbWUudG9TdHJp
bmcoKS5kYXRhKCksIG1lc3NhZ2VOYW1lLnRvU3RyaW5nKCkuZGF0YSgpKTsKQEAgLTg0LDIyICs5
MiwxOCBAQCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSYgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZwogICAgIHJldHVybiAqbV9yZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eTsKIH0KIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVj
b2RlciYgZGVjb2RlcikKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVu
ZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcikKIHsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNl
aXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0ID0gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHlNYXAuZW5zdXJlKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBbJl0oKSB7CisgICAg
ICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIH0pOworICAgIEFTU0VSVChyZXN1bHQuaXNO
ZXdFbnRyeSk7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQordm9p
ZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIHsKLSAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAg
cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9t
V2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQVNTRVJUKG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWFwLmNvbnRhaW5zKHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAucmVtb3Zl
KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaAppbmRleCBiYmZjMTY4MGJiYjMwZTE5N2RhZjgwMzYwNWNmYzRhMjE3OWFlZjQ5Li43
NjQ0N2JkOWJjYWVhZTJjOGYxYWYxYjZkYWNiODlhMGVhZjU0NzVjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4
LDMyICsyOCwzNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBs
aWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAi
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIEdQVVByb2Nlc3M7CiBjbGFzcyBS
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVibGlj
IFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1YmxpYyBDYW5N
YWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpDb25uZWN0
aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwg
SVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAg
ICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9
CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFu
dXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5z
aW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KLQogcHJpdmF0
ZToKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKIApAQCAtNjEs
MTQgKzY0LDI0IEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAog
ICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5h
bWUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CisKKyAgICBib29s
IGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBi
b29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVy
aW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNl
UmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICB1c2lu
ZyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAgPSBIYXNoTWFwPFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLCBSZWY8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Pj47CiAKICAgICBS
ZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVByb2Nlc3M+IG1f
Z3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZl
ck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eT4gbV9yZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKKyAgICBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHlNYXAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXgg
M2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVk
ZTliYjllZmI1NmY5YmM1MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4K
QEAgLTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMg
LT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktp
dDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDkwNDY2Y2ZjZjVlZjhi
OGVmYjI3N2RhYTRkYjQ4NWRiZjg1NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNp
bmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlz
cGxheUxpc3RSZXBsYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikp
OworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIo
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAg
ICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCks
ICp0aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30K
KworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAg
cmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpjcmVhdGVTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJ
ZGVudGlmaWVyLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIGlmIChtX3N1cmZhY2VNYXAuY29udGFp
bnMoc3VyZmFjZUlkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGF1dG8gcmVuZGVyaW5nU3VyZmFjZSA9
IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlKHNpemUsIGNvbnRleHRTaXplLCBj
b2xvclNwYWNlKTsKKyAgICBpZiAoIXJlbmRlcmluZ1N1cmZhY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGF1dG8gc2VuZFJpZ2h0ID0gcmVuZGVyaW5nU3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0
KCk7CisgICAgbV9zdXJmYWNlTWFwLmFkZChzdXJmYWNlSWRlbnRpZmllciwgV1RGTW92ZShyZW5k
ZXJpbmdTdXJmYWNlKSk7CisKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpEaWRDcmVhdGVTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCBXVEZNb3ZlKHNlbmRSaWdo
dCkpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZh
Y2VJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91bGQgaGF2
ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGlzIG9uZS4KKyAgICBpZiAoIW1fc3VyZmFjZU1hcC5j
b250YWlucyhzdXJmYWNlSWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9zdXJmYWNlTWFwLnJlbW92ZShzdXJm
YWNlSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpy
ZW5kZXJUb1N1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIFJlbmRl
cmluZ0ZsdXNoSWRlbnRpZmllciByZW5kZXJpbmdGbHVzaElkZW50aWZpZXIsIGNvbnN0IERpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcCkK
K3sKKyAgICBhdXRvIGl0ZXIgPSBtX3N1cmZhY2VNYXAuZmluZChzdXJmYWNlSWRlbnRpZmllcik7
CisgICAgCisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVj
ZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIC8vIEFuZCB3ZSBkbyBub3QgaGF2ZSB0aGUgc3Vy
ZmFjZSBpbmZvIHRvIGNyZWF0ZSBpdC4KKyAgICBpZiAoaXRlciA9PSBtX3N1cmZhY2VNYXAuZW5k
KCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBHZXQgdGhlIHN1cmZhY2UgR3JhcGhpY3NDb250ZXh0LgorICAgIGF1dG8m
IHJlbmRlcmluZ1N1cmZhY2UgPSBpdGVyLT52YWx1ZTsKKyAgICBHcmFwaGljc0NvbnRleHQmIHN1
cmZhY2VDb250ZXh0ID0gcmVuZGVyaW5nU3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7
CisKKyAgICAvLyBSZW5kZXIgdGhlIGRpc3BsYXkgbGlzdCBpbnRvIHRoZSBHcmFwaGljc0NvbnRl
eHQuCisgICAgRGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKHN1cmZhY2VDb250ZXh0LCBk
aXNwbGF5TGlzdCk7CisgICAgcmVwbGF5ZXIucmVwbGF5KGNsaXApOworCisgICAgLy8gTWFrZSBz
dXJlIHRoZSByZW5kZXJpbmcgb3BlcmF0aW9ucyBhcmUgZmx1c2hlZCB0byB0aGUgR3JhcGhpY3ND
b250ZXh0LgorICAgIHJlbmRlcmluZ1N1cmZhY2UtPmZsdXNoR3JhcGhpY3NDb250ZXh0KCk7CisK
KyAgICAvLyBOb3RpZnkgdGhlIFdlYlByb2Nlc3MuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6RGlkUmVuZGVyVG9TdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCBy
ZW5kZXJpbmdGbHVzaElkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQ1ZmUzNTRkNzQ1NTAzZTkyZGU1MWFiMzE1NWQ2ODVhMGU0MzIxMzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRl
ICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlc1JlcGxpZXMuaCIKKyNpbmNsdWRl
ICJSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdGbHVz
aElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1N1cmZhY2VJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsK
K2NsYXNzIERpc3BsYXlMaXN0OworfQorY2xhc3MgRmxvYXRSZWN0OworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk+CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgor
ICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6
Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCBj
cmVhdGVTdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UpOworICAgIHZvaWQgcmVsZWFzZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50
aWZpZXIpOworICAgIHZvaWQgcmVuZGVyVG9TdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlm
aWVyLCBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgICAgICAKKyAg
ICB1c2luZyBTdXJmYWNlTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwg
c3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eT4+OworCisgICAgV2Vh
a1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcjsKKyAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZU1hcDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUyZDcyYWI2NWViNDE2MDcyMzRlYzU5ZjdkY2VmZmMwYjBkYmQwNjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgeworICAgIHZv
aWQgQ3JlYXRlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRp
ZmllciwgV2ViQ29yZTo6SW50U2l6ZSBzaXplLCBXZWJDb3JlOjpJbnRTaXplIGNvbnRleHRTaXpl
LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIHZvaWQg
UmVsZWFzZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZp
ZXIpCisgICAgdm9pZCBSZW5kZXJUb1N1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIg
c3VyZmFjZUlkZW50aWZpZXIsIFdlYktpdDo6UmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIHJlbmRl
cmluZ0ZsdXNoSWRlbnRpZmllciwgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRp
c3BsYXlMaXN0LCBXZWJDb3JlOjpGbG9hdFJlY3QgY2xpcCkKK30KKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWRhOGU0YzlmMmMzYWViMjRjYzlhOWQxYTY3ZmE3NzE2YjQ4NzAzMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94
eUNHLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eUNHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmVhZjRlMTJkZGEwZGQ1ZTlmNmE3ZmYzMDcx
ZGIyZGJkYWVkOGM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoK
KyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ1N1cmZh
Y2VQcm94eUNHLmgiCisKKyNpZiBVU0UoQ0cpICYmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4K
KyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdTdXJm
YWNlUHJveHk+IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlKGNvbnN0IEludFNp
emUmIHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCit7CisgICAgYXV0byBzdXJmYWNlID0gIElPU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGNvbnRl
eHRTaXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFj
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBJbml0YWxpemUgdGhlIGNvb3Jk
aW5hdGUgc3lzdGVtLgorICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHN1cmZhY2UtPmVu
c3VyZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0x
KSk7CisgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLWNvbnRleHRTaXplLmhlaWdodCgpKTsKKwor
ICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBs
YXRmb3JtQ29udGV4dCgpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGNvbnRleHRTaXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdT
dXJmYWNlUHJveHkoV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitSZW1vdGVSZW5kZXJpbmdTdXJm
YWNlUHJveHk6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eShzdGQ6OnVuaXF1ZV9wdHI8SU9T
dXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sK
K30KKworTWFjaFNlbmRSaWdodCBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmNyZWF0ZVNl
bmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0
KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Ojpl
bnN1cmVHcmFwaGljc0NvbnRleHQoKQoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdy
YXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6
Zmx1c2hHcmFwaGljc0NvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGVuc3VyZUdyYXBo
aWNzQ29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eUNHLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9jZy9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmZkMzcyMTA1MTEwZGUxYzI5ZjIxZWYwN2I5MGIyZjg2NTdlOWQxNWUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9jZy9SZW1vdGVS
ZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3Mg
SW50U2l6ZTsKK2NsYXNzIElPU3VyZmFjZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk+IGNyZWF0ZShjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGV4dFNpemUsIFdl
YkNvcmU6OkNvbG9yU3BhY2UpOworCisgICAgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQo
KSBjb25zdDsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGVuc3VyZUdyYXBoaWNzQ29u
dGV4dCgpOworICAgIHZvaWQgZmx1c2hHcmFwaGljc0NvbnRleHQoKTsKKworcHJpdmF0ZToKKyAg
ICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklP
U3VyZmFjZT4mJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBt
X3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShD
RykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHAK
aW5kZXggNjc1OGY0YzkzMTJlNDQzYjcyYTY4MzdhZDljYTJjNjBjNWZkNjMyMy4uYzZkYmFiODE3
NzI3MzNiMGNjYTE0NmUwN2RiZjg3YmUwOWFiNmIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHkuY3BwCkBAIC01NiwxMCArNTYsMTIgQEAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHk6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlAKICAg
ICAsIG1fbG9nSWRlbnRpZmllcihXVEY6OkxvZ2dlckhlbHBlcjo6dW5pcXVlTG9nSWRlbnRpZmll
cigpKQogI2VuZGlmCiB7CisgICAgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgMCwgKnRoaXMpOwogfQogCiBS
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6flJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5KCkKIHsKKyAgICBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZVJlY2VpdmVy
TWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAwKTsKIH0KIAogdm9pZCBSZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eTo6Y3JlYXRlTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXJQcml2
YXRlUmVtb3RlSWRlbnRpZmllciBpZCwgTWVkaWFQbGF5ZXJFbnVtczo6TWVkaWFFbmdpbmVJZGVu
dGlmaWVyIGVuZ2luZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBzdWNj
ZWVkZWQpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuaApp
bmRleCBkNmNkNzBjM2ZjZjkzYWJhMTc5MGM4YjkzM2Y1MTU5YWY2NDA0YzU2Li5jY2EzNTViYWFj
Y2JjNDkwZWZmNWViZGI2NjQ0MTBmMWZiZTliNzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkuaApAQCAtNTIsOSArNTIsNiBAQCBwdWJsaWM6CiAgICAgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzczsgfQogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2VzcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6RGVjb2RlciYgZGVjb2RlcikgeyBkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsgfQotICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3Mo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBlbmNvZGVyKSB7IGRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyLCBlbmNvZGVyKTsgfQotCiAjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECiAgICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbDsKICAgICBjb25z
dCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlm
aWVyOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBmMmU5
ZWQ3YWI1NDAyZWY1MTE4OGY3ZThkYmUzOTZiYThhY2UwZmFkLi5kYjJiNjIyMGM5MzFiMDk2YmI1
ODUzM2NkZGY4ZjIwZWQyY2Y0MTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0
IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24n
CitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2Fn
ZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVG
Q09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VT
X0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIxNiwxMCArMjE3LDEzIEBAIGRlZiB0eXBl
c190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpT
ZXJ2aWNlV29ya2VyT3JDbGllbnREYXRhJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3Jr
ZXJPckNsaWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbklkZW50aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCiAgICAgICAgICdXZWJLaXQ6
OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJp
dmF0ZVJlbW90ZUlkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdl
TmFtZXNwYWNlSWRlbnRpZmllcicsCkBAIC03NTUsMTMgKzc1OSwxNiBAQCBkZWYgZ2VuZXJhdGVf
bWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFz
eW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6Cisg
ICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQ
QVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6
OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRl
Y29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVj
ZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhh
c19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNl
aXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlm
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUp
OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAg
ICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAg
LTc3MCwxMyArNzc3LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIp
OgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xu
JykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVzc2FnZXM6
CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJ
U1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2ZXIubmFt
ZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZF
Ul9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAg
ICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZF
Ul9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21l
c3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21l
c3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENI
X01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAo
ZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxu
JykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNl
cy50eHQKaW5kZXggNTQyNGU1ZGZiYjE1MjAxMGIwYjMyZDZmNWVhNmQ1MzU4OTE0ZTU2Yi4uMWI5
YjA5NDI3OWNkNTMxYWYyOTQ1MzA4YWRkOGZiMzMzMmNkZWJmZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0y
NSw2ICsyNSw5IEBAIEdQVVByb2Nlc3MvR1BVUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5jcHAKIAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9jZy9SZW1vdGVS
ZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5jcHAKKwogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJp
YnV0aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIu
Y3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXIuY3BwCkBAIC01
NDIsNiArNTQ1LDggQEAgV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3Nl
ckZ1bmNzLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2Fw
ZVBsdWdpbi5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2Nh
cGVQbHVnaW5TdHJlYW0uY3BwIEBuby11bmlmeQogCitXZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKwogV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNX
Q2xpZW50Q29ubmVjdGlvbi5jcHAKIFdlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5h
Z2VyQ29ubmVjdGlvbi5jcHAKIFdlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV09yaWdpblRhYmxlLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDM2ZjI5NWQzZjMwMjY4Y2U5MTIyMjRjMzM1ZTA4
MDY3MGE0YmYyM2EuLmI1ZjdkN2JiZDQ4YzQ0NGYzYzdlYjAzMmQ2ZWNhZjMzMmRiODUwOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTYyOCw5ICs2MjgsMTIgQEAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVy
aXZlZCBTb3VyY2VzCiBFZGl0YWJsZUltYWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAK
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAKIEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCi0vL1JlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKLS8vUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwCitSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2VyRmV0
Y2hUYXNrTWVzc2FnZVJlY2VpdmVyLmNwcAogVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggNWM4NWZjMTU0OTRlMWIyMjMxNTZhMzU0Y2FhOWQyYjJmNmU4OWI5
ZC4uNGRlZmQ5NzFlZTNkZmY0MGViNGNmZmZmZTFjMWMzYWFiMTZjODBlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05Miw3ICs5Miw2
IEBACiAJCTA3NkU4ODRFMUExM0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2RTg4NEQx
QTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50LmggKi87IH07CiAJCTA3NzI4
MTFEMjEyMzRGRjYwMEM4RUYyRSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNDEwRjQz
MTlBRjdCMjcwMDJFQkFCNSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCAq
LzsgfTsKIAkJMDc5MjMxNDgyMzlDQkNCODAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5TWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzkyMzE0MjIzOUNCQ0I1MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlc1JlcGxpZXMuaCAqLzsgfTsKLQkJMDc5MjMxNDkyMzlD
QkNCODAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMzE0
MzIzOUNCQ0I2MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcCAqLzsgfTsKIAkJMDc5MjMxNEEyMzlDQkNCODAwOTU5OEUyIC8qIFJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5MjMxNDQyMzlDQkNCNjAwOTU5OEUyIC8qIFJlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwogCQkwNzkyMzE0QjIzOUNC
Q0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5
MjMxNDUyMzlDQkNCNzAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJMDc5MjMxNEMyMzlDQkNCODAwOTU5OEUyIC8qIFJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIzMTQ2MjM5Q0JDQjcwMDk1OThFMiAvKiBS
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CkBAIC0xMTkzLDYg
KzExOTIsNyBAQAogCQk3MTE3MjVBOTIyOEQ1NjQzMDAwMTg1MTQgLyogV2Vic2l0ZUxlZ2FjeU92
ZXJmbG93U2Nyb2xsaW5nVG91Y2hQb2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcxMTcyNUE4MjI4RDU2M0EwMDAxODUxNCAvKiBXZWJzaXRlTGVn
YWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaFBvbGljeS5oICovOyB9OwogCQk3MUE2NzZBNjIyQzYy
MzI1MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUE2NzZBNDIyQzYyMzE4MDA3
RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi87IH07CiAJCTcxRkI4
MTBCMjI2MDYyN0UwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRj
aFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rp
c3BhdGNoUG9saWN5LmggKi87IH07CisJCTcyNkM1QUUxMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyNkM1QURGMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaCAqLzsgfTsKIAkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8qIFdl
YkNvbG9yUGlja2VyTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAq
LzsgfTsKIAkJNzVBOEQyQzgxODdDQ0ZBQjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyQzQx
ODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKIAkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlF
IC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTM2NDksNiArMzY0OSw4IEBACiAJCTUz
Q0ZCQkM2MjIyNEQxQjAwMDI2NjU0NiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dENoZWNrZXJDb21wbGV0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNDRkJCQzcyMjI0RDFCMDAwMjY2NTQ2
IC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBUZXh0Q2hlY2tlckNvbXBsZXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNGM0NBQTUyMDZDNDQzRTAwODY0OTBFIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0FjdGl2aXR5VHJh
Y2tlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUEwMjM5OUJEQTIw
MDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1NURDRkFBMTIzOTlCREEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU3MEFCOEYyMjBBRTNCRDcwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3Jl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY0tleVByb3h5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTcwQUI5MDAyMEIyNTE3NDAwQjhCRTg3IC8qIEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlUHJveHlDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlUHJveHlDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcw
QUI5MDMyMEIyNTQxQzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzg5Nyw4ICszODk5LDE5IEBACiAJCTcxQTY3NkE0MjJD
NjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
Lmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNo
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3Mv
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNl
RXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIzMDg0OTUyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIzMDg0OTYyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5NzIz
QTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzMDg0OTgyM0E0NzMyODAw
OTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzMDg0OUEyM0E0NzM1NTAwOTJBMUE2IC8qIFJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzIzMDg0OUIyM0E0NzM1NTAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2VQcm94eUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90
ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyNkM1QURGMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkM1QUU1MjNBMDAwNzkwMEQzNDI0OCAvKiBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjZDNUFFRTIzQTFEMEUx
MDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29s
b3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQ
aWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4
QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQUQzMDAzMjNBMzA3Q0MwMDdCRTI5QSAvKiBSZW5kZXJpbmdGbHVzaElk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUQzMDA0MjNBMzE1ODkwMDdCRTI5QSAvKiBS
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ1N1
cmZhY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAw
QzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlF
IC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02Mjc5LDYgKzYyOTIsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlBNzhDQ0REODE5M0FDOUUzMDA1RUNDMjYgLyogY29tLmFwcGxlLldl
YktpdC5HUFUuc2IgKi8sCisJCQkJNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSAiUmVjb3ZlcmVkIFJl
ZmVyZW5jZXMiOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYzMTIsNiArNjMyNiw3
IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIw
NjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1
QiAvKiBtZWRpYSAqLywKKwkJCQk3MjA1QUYyNDIzQTQ3MkMxMDAyREMzN0IgLyogUmVuZGVyaW5n
QmFja2VuZCAqLywKIAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywKIAkJCQkyRDlGQjIwOTIzNzUyMDlEMDA0OUY5
MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKQEAgLTc2NDQs
NiArNzY1OSw0MCBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTcyMDVBRjI0MjNBNDcyQzEwMDJEQzM3QiAvKiBSZW5kZXJpbmdCYWNrZW5kICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjMwODQ5OTIz
QTQ3MzJEMDA5MkExQTYgLyogY2cgKi8sCisJCQkJNzIzMDg0OTYyM0E0NzMyODAwOTJBMUE2IC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzIzMDg0OTUyM0E0NzMy
ODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAorCQkJCTcyMzA4
NDk3MjNBNDczMjgwMDkyQTFBNiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2Fn
ZXMuaW4gKi8sCisJCQkJNzIzMDg0OTgyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2VQcm94eS5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzIzMDg0OTkyM0E0NzMyRDAwOTJB
MUE2IC8qIGNnICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJ
CQk3MjMwODQ5QTIzQTQ3MzU1MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5
Q0cuY3BwICovLAorCQkJCTcyMzA4NDlCMjNBNDczNTUwMDkyQTFBNiAvKiBSZW1vdGVSZW5kZXJp
bmdTdXJmYWNlUHJveHlDRy5oICovLAorCQkJKTsKKwkJCXBhdGggPSBjZzsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQUQzMDA1MjNBMzE1RTMwMDdCRTI5QSAvKiBSZW5k
ZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQk1NURDRkFBMDIzOTlCREEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8sCisJCQkJNTVEQ0ZBQTEyMzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLywKKwkJCQk3MjZDNUFFRTIzQTFEMEUxMDBEMzQyNDggLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MkFEMzAwNDIzQTMxNTg5MDA3QkUyOUEg
LyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oICovLAorCQkJCTcyNkM1QUU1MjNBMDAwNzkwMEQz
NDI0OCAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJCTcyQUQzMDAzMjNB
MzA3Q0MwMDdCRTI5QSAvKiBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJ
CQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTc5NDMsNiArNzk5Miw3IEBACiAJ
CQkJNTEwNUIwRDIxNjJGN0E1RTAwRTI3NzA5IC8qIE5ldHdvcmsgKi8sCiAJCQkJMzEwOTk5NzQx
NDZDOEFBODAwMjlERUI5IC8qIE5vdGlmaWNhdGlvbnMgKFVzZXIpICovLAogCQkJCTFBNkZCN0FB
MTFFNjRCNDkwMERCMTM3MSAvKiBQbHVnaW5zICovLAorCQkJCTcyQUQzMDA1MjNBMzE1RTMwMDdC
RTI5QSAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTUxMThFOTk4MUYyOTUyNTkwMDNFRjlG
NSAvKiBTdG9yYWdlICovLAogCQkJCTFBQUYwOEFBMTkyNjkzMEIwMEI2MzkwQyAvKiBVc2VyQ29u
dGVudCAqLywKIAkJCQk1NzYwODI4QTIwMjk4NEM5MDAxMTY2NzggLyogV2ViQXV0aGVudGljYXRp
b24gKi8sCkBAIC0xMDEzOSw2ICsxMDE4OSw3IEBACiAJCQkJMUE1NzA0RkMxQkUxNzUxMTAwODc0
QUYxIC8qIFJlbW90ZU9iamVjdEludm9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzEz
MzgwMTg1OTBBRTQwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUFDMTMzODYxODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5
TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyNkM1QUUxMjM5RjA3QUUwMEQzNDI0OCAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0
NzkwMTg3QjNCM0EwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1OTQ3QTgxODdCNTE3NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzlCMTg3QjNC
NjAwMDQzNzg1NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTExNzk5LDcgKzExODUwLDYgQEAKIAkJCQkyRDcyQTFGQTIxMkJGNDZFMDA1MTdB
MjAgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gaW4gU291cmNlcyAqLywKIAkJCQkw
RkYyNEEyRDE4NzlFNEJDMDAzQUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyREMxOEZCNDIxOEE2RTlF
MDAyNUE4OEQgLyogUmVtb3RlTGF5ZXJUcmVlVmlld3MubW0gaW4gU291cmNlcyAqLywKLQkJCQkw
NzkyMzE0OTIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2Fn
ZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3OTIzMTRCMjM5Q0JDQjgwMDk1OThF
MiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQUMxMzM4NTE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0
UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1OTQ3QTcx
ODdCNTE3NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2Vp
dmVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCA1ODRhMWIzZGY2M2Q4Mzc5ZmQ2
ODliY2NmODdkODY3NTZkZWQ5MmM3Li5lNWE4MWRkNGJiZDFkNDI4ODk1ZmJkZTBiZTdiZjg5Njdi
ZGY1NWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNTYsMTYgKzU2LDE4IEBAIHZvaWQgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCitib29sIEdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZl
ck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9pZCBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCiB7Ci0gICAg
aWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5k
ZXggOGI3NDI5OWU0YWE2Yjc2MzY4MDcxNTg3NmYwZDRlNTc0MmE3MzJkNC4uNDBmMWUxNWEwYTM3
MWU5ZjE1ZGM0ZmQ1MDU4NTEyNTFiYTM0NTkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtNDYsNiArNDYsNyBAQCBw
dWJsaWM6CiAgICAgfkdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAg
SVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1f
bWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAKIHByaXZhdGU6CiAgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKQEAgLTUzLDEwICs1NCwxNSBAQCBwcml2
YXRlOgogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJ
UEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52
YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRl
OwogCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisgICAgCiAgICAg
Ly8gVGhlIGNvbm5lY3Rpb24gZnJvbSBhIHdlYiBwcm9jZXNzIHRvIHRoaXMgR1BVIHByb2Nlc3Mu
CiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCBkMzZmOGEwOTVmNmE3N2JiYjZj
YWM4ODNhNjUxZTg0Y2U5ZDY0YjMwLi41N2ZlY2RlOWRmMjdjNzM5YTZjYmYwMjY5ODA2NTkyYjVl
MjE3OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKIAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24geworbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gV2FudHNEaXNwYXRjaE1lc3Nh
Z2UgewogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjczZjlhMTYyZmY2MmM4ODk4YzExODAzMmNmOGEzNWJlZmI2MWM2MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVm
UHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
KTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
CisgICAgOiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyOjpnZW5lcmF0ZSgpKQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3Nh
Z2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdl
UmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAg
bWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCgpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJl
Y2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1l
c3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAw
KTsKK30KKworUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
ZmluZFN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAg
YXV0byBpdGVyID0gbV9zdXJmYWNlTWFwLmZpbmQoc3VyZmFjZUlkZW50aWZpZXIpOworCisgICAg
aWYgKGl0ZXIgID09IG1fc3VyZmFjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgcmV0dXJuIGl0ZXItPnZhbHVlLnB0cigpOworfQorCitJUEM6OkNvbm5lY3Rp
b24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWl0Rm9yRGlkQ3JlYXRlU3VyZmFjZSgpCit7CisgICAg
UmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBj
b25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6RGlkQ3JlYXRlU3VyZmFjZT4obV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNN
ZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6d2FpdEZv
ckRpZFJlbmRlclRvU3VyZmFjZSgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVj
dGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0
Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlkUmVuZGVy
VG9TdXJmYWNlPihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZv
ck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTdXJmYWNlKFN1cmZhY2VJZGVudGlm
aWVyIHN1cmZhY2VJZGVudGlmaWVyLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKK3sKKyAgICAv
LyBTdXJmYWNlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBiZWZvcmUgdGhpcyBtZXNzYWdlIGlz
IHJlY2VpdmVkLgorICAgIGlmIChhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlk
ZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVCghc3VyZmFjZS0+cGxhdGZvcm1TdXJmYWNlKCkp
OworICAgICAgICBpZiAoIXN1cmZhY2UtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZShXVEZNb3ZlKHNl
bmRSaWdodCkpKSB7CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJlbGVhc2VQcm94eVN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZFJlbmRlclRvU3VyZmFj
ZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgUmVuZGVyaW5n
Rmx1c2hJZGVudGlmaWVyIHJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllcikKK3sKKyAgICAvLyBTdXJm
YWNlIG1pZ2h0IGhhdmUgYmVlbiByZWxlYXNlZCBiZWZvcmUgcGFpbnRpbmcgaGFzIGZpbmlzaGVk
LgorICAgIGlmIChhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIp
KSB7CisgICAgICAgIC8vIERpZENyZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVu
IHJlY2VpdmVkIGJlZm9yZSByZWNlaXZpbmcgdGhpcyBtZXNzYWdlLgorICAgICAgICBBU1NFUlQo
c3VyZmFjZS0+cGxhdGZvcm1TdXJmYWNlKCkpOworICAgICAgICBBU1NFUlQoc3VyZmFjZS0+c2Vu
dEZsdXNoSWRlbnRpZmllcigpKTsKKyAgICAgICAgc3VyZmFjZS0+c2V0UmVjZWl2ZWRGbHVzaElk
ZW50aWZpZXIocmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK1N1cmZhY2VJ
ZGVudGlmaWVyIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZVByb3h5U3VyZmFjZShjb25z
dCBJbnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQoreworICAgIFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyID0g
U3VyZmFjZUlkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgQVNTRVJUKCFtX3N1cmZhY2VNYXAu
Y29udGFpbnMoc3VyZmFjZUlkZW50aWZpZXIpKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllciwg
c2l6ZSwgY29udGV4dFNpemUsIGNvbG9yU3BhY2UpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKKyAgICBtX3N1cmZhY2VNYXAuYWRkKHN1cmZhY2VJZGVudGlmaWVyLCBSZW1vdGVSZW5k
ZXJpbmdTdXJmYWNlOjpjcmVhdGUoY29sb3JTcGFjZSkpOworICAgIHJldHVybiBzdXJmYWNlSWRl
bnRpZmllcjsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUHJveHlT
dXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyKQoreworICAgIGlmICgh
bV9zdXJmYWNlTWFwLnJlbW92ZShzdXJmYWNlSWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxlYXNlU3VyZmFjZShzdXJmYWNlSWRl
bnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbmRlclRvUHJveHlTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVy
IHN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBjb25zdCBGbG9hdFJlY3QmIGNsaXApCit7CisgICAgYXV0byogc3VyZmFjZSA9IGZp
bmRTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKTsKKworICAgIC8vIFRoZSBjYWxsZXIgbXVzdCBj
YWxsIGNyZWF0ZVByb3h5U3VyZmFjZSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisg
ICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgc3VyZmFjZS0+c2V0U2VudEZsdXNoSWRlbnRpZmllcihS
ZW5kZXJpbmdGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCkpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVuZGVyVG9TdXJmYWNlKHN1cmZhY2VJZGVu
dGlmaWVyLCBzdXJmYWNlLT5zZW50Rmx1c2hJZGVudGlmaWVyKCksIGRpc3BsYXlMaXN0LCBjbGlw
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK2Jvb2wgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Zmx1c2hQcm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlk
ZW50aWZpZXIpCit7CisgICAgYXV0byogc3VyZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJZGVu
dGlmaWVyKTsKKworICAgIC8vIFRoZSBjYWxsZXIgbXVzdCBjYWxsIGNyZWF0ZVByb3h5U3VyZmFj
ZSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgaWYgKCFzdXJmYWNlKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOworICAg
IGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7IHdhaXRzQ291bnQtLTsg
KSB7CisgICAgICAgIGlmICghc3VyZmFjZS0+aXNQZW5kaW5nRmx1c2goKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAvLyBXZSBub3QgaGF2ZSByZWNlaXZlZCBEaWRSZW5kZXJUb1N1cmZh
Y2UsIHNvIHdhaXQgZm9yIGl0LgorICAgICAgICBpZiAoIXdhaXRGb3JEaWRSZW5kZXJUb1N1cmZh
Y2UoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc3VyZmFjZSA9IGZpbmRT
dXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICAvLyBtX3N1cmZhY2VNYXAg
bWF5IGhhdmUgY2hhbmdlZCB3aGlsZSB3YWl0aW5nIGZvciBEaWRSZW5kZXJUb1N1cmZhY2UuCisg
ICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3Vy
ZmFjZS0+aXNQZW5kaW5nRmx1c2goKTsKK30KKworUmVmUHRyPFJlbmRlcmluZ1N1cmZhY2U+IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlk
ZW50aWZpZXIpCit7CisgICAgYXV0byogc3VyZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJZGVu
dGlmaWVyKTsKKworICAgIC8vIFRoZSBjYWxsZXIgZGlkIG5vdCBjcmVhdGVQcm94eVN1cmZhY2Uo
KSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorICAgIGlmICghc3VyZmFjZSkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgLy8gRGlkQ3JlYXRlU3VyZmFjZSBoYXMgbm90IHJlY2VpdmVkIHlldCwgc28gd2Fp
dCBmb3IgaXQuCisgICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybVN1cmZhY2UoKSkgeworICAgICAg
ICBpZiAoIXdhaXRGb3JEaWRDcmVhdGVTdXJmYWNlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgc3VyZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICAvLyBtX3N1cmZhY2VNYXAgbWF5IGhhdmUgY2hhbmdlZCB3aGlsZSB3YWl0
aW5nIGZvciBEaWRDcmVhdGVTdXJmYWNlLgorICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAvLyBEaWRDcmVhdGVTdXJmYWNlIHdhcyByZWNlaXZlZCBidXQg
aXQgcmV0dXJucyBhIHdyb25nIHN1cmZhY2VJZGVudGlmaWVyLgorICAgIGlmICghc3VyZmFjZS0+
cGxhdGZvcm1TdXJmYWNlKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWFrZVJlZlB0cihz
dXJmYWNlKTsKK30KKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZTkzYmQxOWQxNWQyOTg1
M2U4MTJmOGJkYTAzZDMwZmUzY2Q3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAg
LTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ1N1cmZhY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
aW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAs
IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8v
IElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKKworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Rm9yRGlk
Q3JlYXRlU3VyZmFjZSgpOworICAgIGJvb2wgd2FpdEZvckRpZFJlbmRlclRvU3VyZmFjZSgpOwor
CisgICAgLy8gZGlkUmVjZWl2ZU1lc3NhZ2UoKSBoYW5kbGVycworICAgIHZvaWQgZGlkQ3JlYXRl
U3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgTWFjaFNlbmRSaWdodCk7CisgICAg
dm9pZCBkaWRSZW5kZXJUb1N1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIFJlbmRl
cmluZ0ZsdXNoSWRlbnRpZmllcik7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNrZW5kCisgICAgV2Vi
Q29yZTo6U3VyZmFjZUlkZW50aWZpZXIgY3JlYXRlUHJveHlTdXJmYWNlKGNvbnN0IFdlYkNvcmU6
OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6
Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisgICAgdm9pZCByZWxlYXNlUHJveHlTdXJmYWNlKFdlYkNv
cmU6OlN1cmZhY2VJZGVudGlmaWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbmRlclRvUHJveHlT
dXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsK
KworICAgIGJvb2wgZmx1c2hQcm94eVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIp
IG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpSZW5kZXJpbmdTdXJmYWNlPiBzdXJmYWNl
KFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSogZmlu
ZFN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIpOworCisgICAgdXNpbmcgU3VyZmFj
ZU1hcCA9IEhhc2hNYXA8V2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIFJlZjxSZW1vdGVSZW5k
ZXJpbmdTdXJmYWNlPj47CisgICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VNYXA7CisgICAgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisK
K30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNTM3ZjBhYzdl
YTUzZTA5ZWY1MzMxMzc3YjU3OTUxMDgyZjQ3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZCB7CisgICAgdm9pZCBEaWRDcmVhdGVTdXJmYWNlKFdlYkNvcmU6
OlN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBNYWNoU2VuZFJpZ2h0IHNlbmRS
aWdodCkKKyAgICB2b2lkIERpZFJlbmRlclRvU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRp
ZmllciBzdXJmYWNlSWRlbnRpZmllciwgV2ViS2l0OjpSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIg
cmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNjA1
ZTU5Y2E4NjllMzRjNDEwYzUzM2JkMmY3MDgzYTMzMzRhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdT
dXJmYWNlLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Db2xvclNwYWNlLmg+CisKKworI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nU3VyZmFjZS5o
PgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmlu
Z1N1cmZhY2UgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVtb3RlUmVuZGVyaW5nU3VyZmFj
ZT4gY3JlYXRlKFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UoY29sb3JTcGFjZSkp
OworICAgIH0KKworICAgIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciBzZW50Rmx1c2hJZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyOyB9CisgICAgUmVuZGVy
aW5nRmx1c2hJZGVudGlmaWVyIHJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQorICAgIAorICAgIHZvaWQgc2V0U2VudEZs
dXNoSWRlbnRpZmllcihSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgc2VudEZsdXNoSWRlbnRpZmll
cikKKyAgICB7CisgICAgICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IHNlbnRGbHVzaElkZW50
aWZpZXI7CisgICAgfQorCisgICAgdm9pZCBzZXRSZWNlaXZlZEZsdXNoSWRlbnRpZmllcihSZW5k
ZXJpbmdGbHVzaElkZW50aWZpZXIgcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIpCisgICAgeworICAg
ICAgICBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyID0gcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7
CisgICAgfQorCisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vu
dEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKK3ByaXZh
dGU6CisgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZShXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCisgICAgICAgIDogV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFjZShjb2xvclNwYWNlKQor
ICAgIHsKKyAgICB9CisKKyAgICBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJ
ZGVudGlmaWVyOworICAgIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJ
ZGVudGlmaWVyOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzY0
Nzk1Yzk0YmE4YTFiM2E4ZWEwYmFlNWI3ZDZiZjljNjdiMmRjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nRmx1c2hJZGVudGlm
aWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODdhNDI4YjlhYjdiMmUzZWE5Y2QxNDhhYTRiNzUzYTYyZWIxODQx
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllclR5
cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmll
cjxSZW5kZXJpbmdGbHVzaElkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cAppbmRleCAzYWJiMWM3ZTM3YzQ3ZGVlMzY4MzQ3MmUyZTMzN2I0NWZhZjU1ODA1Li5hZTQxYTZl
ODEyYjQ3ODlkNTE0YWEzNjAzYjhkYTdmMjBhNDdmNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNp
bmNsdWRlICJQYWdlQmFubmVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
IgogI2luY2x1ZGUgIlVzZXJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC04ODEsMTQgKzg4MiwxOSBAQCBH
cmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9y
eSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9N
T05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6
OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQp
IGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVh
KCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKK1JlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIHJldHVybiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKK30KICNlbmRpZgogCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXll
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCA3MmViZWY1MGRmOWIxNGE4NzJmYzM1NjBhMWM4MTcz
NzQ1MWQ3MDI3Li45Mzc2MDY1MDEyZWUxZWFjYmRmYjQ3NTEwNjFhZDJhNTZjODU5MWFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCkBAIC0yMzAsNiArMjMwLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNr
ZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKwogICAg
IENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29u
c3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1Ry
aWdnZXJGbGFncz4oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385682</attachid>
            <date>2019-12-13 22:41:19 -0800</date>
            <delta_ts>2019-12-13 22:57:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191213224118.patch</filename>
            <type>text/plain</type>
            <size>111309</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY2ZDBkMWExNWE4MWZm
NjE1NTJlZjk1ZjE3MzVmZmVmYzc0OWFlNy4uYzFlNTkzMjVmZWQ5OTU5ODNjOTRhZTNmZWY4MGM5
YjUyMDMzOGEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTEyLTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgUmVuZGVy
aW5nQmFja2VuZCBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBXZWJQIGFuZCByZWNlaXZpbmcKKyAgICAgICAgcmVw
bGllcyBmcm9tIHRoZSBHUFVQLiBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUg
Y3JlYXRlZCBieQorICAgICAgICBDaHJvbWVDbGllbnQgYW5kIG93bmVkIGJ5IHRoZSBQYWdlLgor
CisgICAgICAgIFJlbmRlcmluZ1N1cmZhY2UgaXMgYWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSBj
cmVhdGluZyBhIHBsYXRmb3JtIHNoYXJlZAorICAgICAgICBzdXJmYWNlLiBDcmVhdGluZyB0aGUg
bWVtb3J5IG9mIHRoZSBzdXJmYWNlIHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBHUFVQLgorICAg
ICAgICBSZW5kZXJpbmdTdXJmYWNlIHdpbGwgY3JlYXRlIGEgcGxhdGZvcm0gc3VyZmFjZSBpbiB0
aGUgV2ViUC4gVGhpcyBzdXJmYWNlCisgICAgICAgIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNh
bWUgbWVtb3J5IGFzIHRoZSBHUFVQIGRvZXMuCisKKyAgICAgICAgUmVuZGVyaW5nU3VyZmFjZSBp
cyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgZm9yIENHLiBJZGVhbGx5IEltYWdlQnVmZmVyCisgICAg
ICAgIHNob3VsZCBoYXZlIGJlZW4gdXNlZCBpbnN0ZWFkLiBCdXQgdG8gdXNlIEltYWdlQnVmZmVy
IGl0IHdpbGwgcmVxdWlyZXMKKyAgICAgICAgZXh0ZW5zaXZlIHJlLWZhY3RvcmluZy4KKworICAg
ICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbmRlcmluZ0JhY2tlbmQpOgor
ICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNl
SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5k
ZXJpbmdTdXJmYWNlQ0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdTdXJm
YWNlOjpwbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFj
ZTo6Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ1N1
cmZhY2U6OlJlbmRlcmluZ1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICBIYXZlIHRvIGRlbGV0ZSB0aGUgdXNp
bmcgc3RhdGVtZW50IGJlY2F1c2UgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IHdhcworICAgICAg
ICBhbWJpZ3VvdXMgc3ltYm9sIGluIFdlYktpdC4KKwogMjAxOS0xMi0xMyAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgU2NyaXB0Q29udHJvbGxl
cidzIHByb2xpZmVyYXRpb24gb2YgRXhjZXB0aW9uRGV0YWlscyouCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ1Nzhj
N2I1ZTMzMGMzYzNjMDI3ZTZiNzRmMjMxYWViMzE3Mjk3Y2IuLjQyMzgyNTczOGVmNzA4NzBhMDE3
YTM1Njg4N2M3MzAxNjViNjhmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUxIEBACisyMDE5LTEy
LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgTWFrZSBHUFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBhcmUgaW50cm9kdWNl
ZCB0bworICAgICAgICBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgV2ViUHJv
Y2VzcyBhbmQgdGhlIEdQVVByb2Nlc3MgZm9yCisgICAgICAgIHJlbmRlcmluZyBvcGVyYXRpb25z
LgorCisgICAgICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mgd2lsbCBiZSByZXNwb25zaWJs
ZSBmb3IgY3JlYXRpbmcgYW5kIHJlbGVhc2luZworICAgICAgICB0aGUgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5IGdpdmVuIGl0cyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci4gSXQKKyAg
ICAgICAgaXMgcmVzcG9uc2libGUgYWxzbyBmb3IgZGlzcGF0Y2hpbmcgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSBtZXNzYWdlcy4KKworICAgICAgICBBbGwgdGhlIFJlbmRlcmluZ0Jh
Y2tlbmQgbWVzc2FnZXMgYXJlIGFzeW5jaHJvbm91cy4gVGhlIG1haW4gdGhyZWFkIHdpbGwKKyAg
ICAgICAgbm90IGJlIGJsb2NrZWQgd2hlbiBzZW5kaW5nIGEgbWVzc2FnZSBmcm9tIFdlYlAgdG8g
R1BVUC4gSW5zdGVhZCBHUFVQIHdpbGwKKyAgICAgICAgbm90aWZ5IFdlYlAgd2hlbiBpdCBmaW5p
c2hlcyBhbiBvcGVyYXRpb24uIEluIHRoZSBjYXNlIHdoZW4gV2ViUCB3YW50cworICAgICAgICB0
byBoYXZlIGltbWVkaWF0ZSBhY2Nlc3MgdG8gdGhlIHN1cmZhY2UsIGUuZy4gZmx1c2hpbmcgdGhl
IHN1cmZhY2UgY29udGV4dCwKKyAgICAgICAgdGhlIFdlYlAgd2lsbCBiZSBoYXZlIHRvIGJlIGJs
b2NrZWQgZm9yICJzb21ldGltZSIgd2FpdGluZyBmb3IgYSBjZXJ0YWluCisgICAgICAgIG1lc3Nh
Z2UgdG8gYmUgZGVsaXZlcmVkLgorCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UgaXMg
YWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSB0aGUgbGlmZSB0aW1lIG9mIHRoZQorICAgICAgICBw
bGF0Zm9ybSBzdXJmYWNlIGluIHRoZSBXZWJQb3JjZXNzLiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNl
UHJveHkgd2lsbCBkbworICAgICAgICBhIHNpbWlsYXIgam9iIGluIHRoZSBHUFUgcHJvY2Vzcy4K
KworICAgICAgICBGbHVzaGluZyBhIHN1cmZhY2Ugd2lsbCBiZSB0cmFja2VkIGJ5IFJlbmRlcmlu
Z0ZsdXNoSWRlbnRpZmllci4gCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgc2VuZHMg
YSAnUmVuZGVyVG9TdXJmYWNlJyBtZXNzYWdlIHdpdGggYSBuZXdseQorICAgICAgICBnZW5lcmF0
ZWQgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLiBXaGVuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eQorICAgICAgICBmaW5pc2hlcyByZW5kZXJpbmcgdG8gaXRzIFJlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eSwgaXQgd2lsbCByZXBseSBiYWNrCisgICAgICAgIHRvIHRoZSBXZWJQIGJ5IHNl
bmRpbmcgRGlkUmVuZGVyVG9TdXJmYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgc2FtZQorICAgICAgICBS
ZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgd2hpY2ggd2lsbCBzZXQgaXQgaW4gdGhlIGNvcnJlc3Bv
bmRpbmcKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZC4gUmVtb3RlUmVuZGVyaW5nU3Vy
ZmFjZSBpcyBwZW5kaW5nIGZsdXNoIGlmIGl0cworICAgICAgICBzZW50Rmx1c2hJZGVudGlmaWVy
IGFuZCByZWNlaXZlZEZsdXNoSWRlbnRpZmllciBhcmUgZGlmZmVyZW50LgorCisgICAgICAgICog
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisg
ICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToK
KyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBE
ZWxldGVkLgorICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGF1dG8gZ2VuZXJhdGVkIGluIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwLgorCisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVy
IGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW46CisgICAgICAgIEFkZCBuZXcgbWVzc2FnZXMgYW5kIG1ldGhvZHMgZm9yIGNy
ZWF0aW5nL3JlbGVhc2luZyBhIFJlbmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVN1cmZhY2UpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlclRvU3VyZmFjZSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAg
KiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5
Lmg6IEFkZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgQ29tbXVuaWNh
dGVzIHdpdGggUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpbgorICAgICAgICB0aGUgV2ViUG9yY2Vz
cy4gSXQgbWFuYWdlcyB0aGUgbGlmZSBjeWNsZSBvZiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlLiBJ
dAorICAgICAgICByZWdpc3RlcnMgaXRzZWxmIGFzIGEgbWVzc2FnZSByZWNlaXZlciBpbiB0aGUg
Y29uc3RydWN0b3IgYW5kIHVucmVnaXN0ZXIKKyAgICAgICAgaXRzZWxmIGluIHRoZSBkZXN0cnVj
dG9yLiBJdCBzZW5kcyByZXBsaWVzIHRvIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAg
ICAgIGluIHRoZSBXZWJQb3JjZXNzIHdoZW4gaXQgZmluaXNoZXMgb25lIG9mIGl0cyBmdW5jdGlv
bnMuIAorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nU3VyZmFjZVByb3h5OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmNyZWF0ZVNlbmRSaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6
ZW5zdXJlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5OjpmbHVzaEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmg6IEFk
ZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkgbWFuYWdlcyBvcGVyYXRp
bmcgb24gdGhlIHBsYXRmb3JtIHN1cmZhY2UgaW4gCisgICAgICAgIEdQVVByb2Nlc3MuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk6On5SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSk6CisgICAg
ICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJv
Y2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIE1ha2UgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkgYW4gTWVzc2FnZVJlY2VpdmVyIGJ5IGFkZGluZyBhbmQgCisgICAgICAgIHJlbW92aW5nIGl0
c2VsZiBmcm9tIE1lc3NhZ2VSZWNlaXZlck1hcCBvZiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIFdoZW4g
dGhlIGF0dHJpYnV0ZSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnIGlzIGFkZGVkIHRoZSBtZXNzYWdl
cy5pbiBmaWxlLAorICAgICAgICB0aGUgZGlkUmVjZWl2ZU1lc3NhZ2UoKSB3aWxsIGluY2x1ZGUg
YSBkaXNwYXRjaCBjYWxsIHN1Y2ggdGhhdCB0aGUgcmVjZWl2ZXIKKyAgICAgICAgaGFzIHRoZSBh
YmlsaXR5IHRvIGRpc3BhdGNoIHRoZW0gdG8gaXRzIE1lc3NhZ2VSZWNlaXZlck1hcC4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3ND
b25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICBEaXNwYXRjaCBtZXNz
YWdlcyBjb21pbmcgZnJvbSB0aGUgR1BVUG9yY2VzcyB0byBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6ZmluZFN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
d2FpdEZvckRpZENyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjp3YWl0Rm9yRGlkUmVuZGVyVG9TdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZFJlbmRlclRvU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZVByb3h5U3VyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VQcm94eVN1cmZh
Y2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZW5kZXJUb1By
b3h5U3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZs
dXNoUHJveHlTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6c3VyZmFjZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IEFkZGVkLgorICAg
ICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGlzIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24g
b2YgUmVuZGVyaW5nQmFja2VuZC4KKyAgICAgICAgSXQgd2lsbCBiZSB1c2VkIHRvIGhpZGUgdGhl
IGNvbXBsZXhpdHkgb2Ygc2VuZGluZyBtZXNzYWdlcyBmcm9tIFdlYlAgYW5kCisgICAgICAgIHJl
Y2VpdmluZyByZXBsaWVzIGZyb20gdGhlIEdQVVAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6c2VudEZsdXNoSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2U6OnJlY2VpdmVkRmx1c2hJZGVu
dGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6
c2V0U2VudEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2U6OnNldFJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKToK
KyAgICAgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSBtYW5hZ2VzIG9wZXJhdGluZyBvbiB0aGUg
cGxhdGZvcm0gc3VyZmFjZSBpbiBXZWJQLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICBD
YW4gaWRlbnRpZnkgYSBSZW5kZXJpbmdCYWNrZW5kIGluIHRoZSBXZWJQIGFuZCBHUFVQLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0ZsdXNoSWRlbnRp
Zmllci5oOiBBZGRlZC4KKyAgICAgICAgVHJhY2tzIHdoZXRoZXIgYSBSZW5kZXJpbmdTdXJmYWNl
IGlzIHBlbmRpbmcgYSBmbHVzaGluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xp
ZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDE5LTEyLTEzICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBTY3JpcHRDb250
cm9sbGVyJ3MgcHJvbGlmZXJhdGlvbiBvZiBFeGNlcHRpb25EZXRhaWxzKi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDJkN2MyY2UyMGYwZmNiY2VkYTEyNGEwZGRkOTVkNTI1NThmNjExNTIuLjJmZTIz
Y2M4YTI4MmNjMWEyNWU0NDJlNmFkMzdhMjIzZmExOGVlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMTExMCw4ICsxMTEwLDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURF
UlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9T
YW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJp
bmdUcnVuY2F0b3IuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cmZhY2VJZGVudGlmaWVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
ZXh0UnVuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xpZW50LmgKaW5k
ZXggNDNiMmEwZGRjZDUyYjVkMWFjNTYyYWU3YTEyOGU0MWQyMzNkOTg0Yi4uY2I5YjdlZGJlMmFk
MTU3ODljMTMxMGNlOGZiMmI0Y2QxMjU4ZDRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oCkBAIC0zOSw2ICszOSw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2U7CitjbGFzcyBEb2N1
bWVudDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBVc2VyTWVkaWFSZXF1ZXN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODhiODAx
NmExNzNhOGY5ZTM4MThkNzc5ZWU0Y2JiYjJjMGViZTgzYy4uNTIwMWFmZDFiNGYyMGRkMjcyY2Y0
MzMyZjZjOTc1ZWU5YWNmMTdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc0NSw2ICsxNzQ1LDcgQEAKIAkJNTVBRjE0RTYx
RUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUFGMTRFNDFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVn
aXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1NURDQzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAw
QzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1
MjMyMjQwNzNGRTAwQzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NURDRkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVu
ZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIw
NkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkg
LyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVGQTdGRkIyMTEwRUNENzAwNUFFRkU3IC8qIFNWR1pvb21B
bmRQYW5UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUZBN0ZGQTIxMTBFQ0Q3MDA1QUVGRTcgLyogU1ZHWm9vbUFuZFBhblR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzA0NDA1QTFFNTM5
MzYyMDAzNTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDQ0MDU5MUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Fl
c0NiY0NmYlBhcmFtcy5oICovOyB9OwpAQCAtMjEyOCw2ICsyMTI5LDkgQEAKIAkJNzI0RUQzMzIx
QTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBK
U0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBE
ODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlFNjFCQTIzQTQ0MTcwMDAyRUZFNzkgLyog
UmVuZGVyaW5nU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI5RTYxQjUyM0E0MTIyMTAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1cmZhY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlFNjFC
QjIzQTQ0MTdBMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZUNHLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlFNjFCNzIzQTQxMkYzMDAyRUZFNzkg
LyogUmVuZGVyaW5nU3VyZmFjZUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzJBQzM5RTYyMzlFQkJGNzAwQjYzRTAyIC8qIFN1cmZhY2VJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAv
KiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsK
IAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3
RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTg2NjksNiArODY3Myw3IEBACiAJ
CTU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR1ByaW1pdGl2ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVEQ0M1MjYyMjQwNzRGQTAwQzI2RTMyIC8qIFNWR1Byb3BlcnR5QWNjZXNzb3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NURDQzUyNzIyNDA3NTBCMDBDMjZFMzIgLyogU1ZHUHJvcGVydHlBY2Nlc3NvckltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3NvckltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVu
Y3lUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaW50RnJlcXVlbmN5VHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVFNTM1NDIyM0IyOUU5MDBGQkE5NDQgLyogU1ZH
TWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWVt
YmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVFRTUzNTYyMjNC
MjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvckltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5OSw2ICs5NjA0LDkgQEAKIAkJ
NzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJpbmdTdXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
OUU2MUI3MjNBNDEyRjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyaW5nU3VyZmFjZUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUMzOUU0MjM5RUI4N0YwMEI2M0UwMiAvKiBTdXJmYWNlSWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdXJmYWNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdC
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4ODIsNiArMjQ4OTAsNyBAQAogCQkJCUE4MEEzOEZE
MEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4
MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTcyOUU2MUI3MjNBNDEy
RjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLywKIAkJCQkxRkM0MEZCODE2NTVD
NTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBG
QjcxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlC
Mjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8s
CkBAIC0yNTExOCw2ICsyNTEyNyw4IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8q
IFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRl
b1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZp
ZGVvU2FtcGxlLmggKi8sCisJCQkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCAqLywKKwkJCQk3MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyogUmVuZGVyaW5n
U3VyZmFjZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVj
dC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0Lmgg
Ki8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApA
QCAtMjUxMjgsNiArMjUxMzksNyBAQAogCQkJCUIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQk4NDlGNzc3NTBFRkVDNjIwMDA5MDg0OUQgLyogU3Ry
b2tlU3R5bGVBcHBsaWVyLmggKi8sCisJCQkJNzJBQzM5RTQyMzlFQjg3RjAwQjYzRTAyIC8qIFN1
cmZhY2VJZGVudGlmaWVyLmggKi8sCiAJCQkJMDg3NTU4QzMxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJMDg3NTU4QzQxM0I0QTU3
RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oICovLAogCQkJCTNC
QjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCkBAIC0zMTkwOSw2ICszMTky
MSw5IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8q
IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NURD
RkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzI5RTYxQkEyM0E0NDE3MDAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1cmZhY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOUU2MUJCMjNBNDQxN0EwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJm
YWNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBS
ZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OTVG
RjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjQzNiw2ICszMjQ1MSw3IEBACiAJCQkJOTNCMkQ4MTYwRjk5MjBEMjAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0MwNzg1MDExNjVENUJFMDAz
QTMyRUYgLyogU3VmZml4VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2MjdCOTgxNEZCNTQy
NDAwMkNEQ0ExIC8qIFN1cHBsZW1lbnRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFDMzlF
NjIzOUVCQkY3MDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4NzU1OEM2MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyQzEyMTdEMTFBQjlFNzcwMDNDNDYyQyAvKiBT
dXNwZW5kYWJsZVRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3NDBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggZDc4MWYzNWNiNTM4ODcyNWZkYjMwZGJkMzI1NDRiMmRjNTFjMGQxMi4u
NDQxOTczYzQ1ZTVkM2EyMDU1MDcwODUxMWYzZWY0YjY4MGQ1MGU4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xp
ZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJSZW5kZXJF
bWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRl
ICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5j
bHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDQsNiArMzA1LDEwIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgdmlydHVhbCBSZWZQdHI8UmVu
ZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KKyNlbmRpZgorCiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xh
eWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAppbmRleCA1NjU1ZGMyYzI5YzcxNjFlMTJjNGNhMDI3OTA4OGViM2Y0
M2JlYjU3Li5lZTMyNjhmZTU5M2FkMmE5NjBjMjAwYTZlYWNlYWNmZjg5MGZkNzY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKQEAgLTI5MjQsNiArMjkyNCwxNSBAQCBSZW5kZXJpbmdVcGRhdGVTY2hlZHVs
ZXImIFBhZ2U6OnJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpCiAgICAgcmV0dXJuICptX3JlbmRl
cmluZ1VwZGF0ZVNjaGVkdWxlcjsKIH0KIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKK1JlZlB0
cjxSZW5kZXJpbmdCYWNrZW5kPiBQYWdlOjpyZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICBpZiAo
IW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kID0gY2hyb21l
KCkuY2xpZW50KCkuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmQ7Cit9CisjZW5kaWYKKwogdm9pZCBQYWdlOjpmb3JFYWNoRG9jdW1lbnQoY29u
c3QgRnVuY3Rpb248dm9pZChEb2N1bWVudCYpPiYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8m
IGRvY3VtZW50IDogY29sbGVjdERvY3VtZW50cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCA1ZjRjZWIw
YTM2NTBjNDJhOGUxN2QxMjYzZjU2ODQ3ZWYxODFjNDUzLi5mZDVhODhiNjdmN2Y3OTE1MjRkZjAz
YmRjNzEyMGJlOTM2ZDViZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIlJUQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJS
ZWdpc3RyYWJsZURvbWFpbi5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNs
dWRlICJSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5o
IgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCkBAIC0yNzMsNiArMjc0LDEwIEBAIHB1Ymxp
YzoKICAgICBQZXJmb3JtYW5jZU1vbml0b3IqIHBlcmZvcm1hbmNlTW9uaXRvcigpIHsgcmV0dXJu
IG1fcGVyZm9ybWFuY2VNb25pdG9yLmdldCgpOyB9CiAKICAgICBSZW5kZXJpbmdVcGRhdGVTY2hl
ZHVsZXImIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpOworICAgIAorI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5nQmFja2VuZD4gcmVuZGVyaW5nQmFja2VuZCgp
OworI2VuZGlmCiAKICAgICBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudCogdmFsaWRhdGlvbk1lc3Nh
Z2VDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmdldCgp
OyB9CiAgICAgdm9pZCB1cGRhdGVWYWxpZGF0aW9uQnViYmxlU3RhdGVJZk5lZWRlZCgpOwpAQCAt
OTAxLDYgKzkwNiwxMCBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z1VwZGF0ZVNjaGVkdWxlcj4gbV9yZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXI7CiAKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVuZGVyaW5n
QmFja2VuZDsKKyNlbmRpZgorCiAgICAgSGFzaFNldDxSZW5kZXJPYmplY3QqPiBtX3JlbGV2YW50
VW5wYWludGVkUmVuZGVyT2JqZWN0czsKICAgICBSZWdpb24gbV90b3BSZWxldmFudFBhaW50ZWRS
ZWdpb247CiAgICAgUmVnaW9uIG1fYm90dG9tUmVsZXZhbnRQYWludGVkUmVnaW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIyZDk4MjgwMDM3NDBlY2ZiNzAzNjYxMzg2ZTA1MTA5NjM4ZjlhYTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlN1cmZhY2VJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbnRTaXplOworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZTsKKworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKK2NsYXNzIERpc3BsYXlMaXN0OworfQorCitjbGFzcyBSZW5kZXJpbmdCYWNrZW5k
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyaW5nQmFja2VuZD4geworcHVibGljOgorICAgIHZp
cnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbiBzZW5kIElQQyBhc3luYyBtZXNzYWdlcyBidXQgdGhleSBkbyBub3QgYmxvY2sgdGhlIG1h
aW4gdGhyZWFkLgorICAgIHZpcnR1YWwgU3VyZmFjZUlkZW50aWZpZXIgY3JlYXRlUHJveHlTdXJm
YWNlKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFj
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHlTdXJmYWNlKFN1cmZhY2VJZGVu
dGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclRvUHJveHlTdXJmYWNlKFN1cmZh
Y2VJZGVudGlmaWVyLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBjb25zdCBGbG9h
dFJlY3QmIGNsaXApID0gMDsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBtYXkgYmxvY2sgdGhl
IG1haW4gdGhyZWFkIGZvciAic29tZXRpbWUiIHRpbGwgdGhleSByZWNlaXZlIG91dC1vZi1wcm9j
ZXNzIHJlcGxpZXMuCisgICAgdmlydHVhbCBib29sIGZsdXNoUHJveHlTdXJmYWNlKFN1cmZhY2VJ
ZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8UmVuZGVyaW5nU3VyZmFjZT4gc3Vy
ZmFjZShTdXJmYWNlSWRlbnRpZmllcikgPSAwOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkN2ExZTg2YTYxN2EwNTA5NjM2OTZhY2U5
YWU4ZjQxNGNiNGQzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdTdXJmYWNlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlJlbmRlcmluZ1N1cmZhY2VDRy5o
IgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
dXJmYWNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vy
ZmFjZUlkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzQ2NGNlMGY1ZjgzOGYzNDMxNzUwMDc5YTFl
YTg5Mzc4ODVjYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU3VyZmFjZUlkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gU3VyZmFjZUlkZW50aWZpZXJUeXBlIHsgfTsKK3Vz
aW5nIFN1cmZhY2VJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxTdXJmYWNlSWRlbnRpZmll
clR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9SZW5kZXJpbmdTdXJmYWNlQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1JlbmRlcmluZ1N1cmZhY2VDRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMGY4NjYwOGE4MjAxNzVl
OTQzMTZkNGVkNjk0MTVlY2FlNmU0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5kZXJpbmdTdXJmYWNlQ0cuaApAQCAtMCwwICsxLDYz
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9T
dXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworI2lmIFVTRShDRykg
JiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElP
U3VyZmFjZTsKKworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
bmRlcmluZ1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiYgcGxhdGZvcm1TdXJmYWNlKCkgeyByZXR1cm4gbV9wbGF0ZnJvbVN1cmZhY2U7IH0KKworICAg
IGJvb2wgY3JlYXRlUGxhdGZvcm1TdXJmYWNlKE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3BsYXRmcm9tU3VyZmFjZSk7CisgICAgICAgIG1fcGxhdGZy
b21TdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoc2VuZFJp
Z2h0KSwgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSkpOworICAgICAgICByZXR1cm4g
bV9wbGF0ZnJvbVN1cmZhY2UuZ2V0KCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVy
aW5nU3VyZmFjZShDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9jb2xvclNwYWNl
KGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBtX3BsYXRmcm9tU3VyZmFjZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JT
cGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykg
JiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAyOGUyNjQ0
ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi5mNDhlMTRjYTY3YmFjN2Y4NGM0ZDgx
MWE4YzJlOTBlYzc3YTZlMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMjUxLDYgKzI1
MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0gLy8gV2ViQ29yZQotCi11c2lu
ZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAwN2QzMzA1YjgyMzk3MmU3ODdm
ZmVlN2RiODBlMTE0ZDIyNTExMjY2Li40MTUyZjljYzgyMzNhNmU4ZjQyNGVhZTAxYzE3NzNjMGZi
ZmUyOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0CkBAIC0xNSw2ICsxNSw3IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJ
UikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5w
bAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMu
aW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1l
c3NhZ2VzLmluCkBAIC0xMTIsNiArMTEzLDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ2xpZW50Q29ubmVjdGlvbi5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFn
ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggOTg2OWNmMTcxNjFm
ZWQ5NDQ5MmIyZWI2NzZhMzA5NjExN2NlNjUyZi4uNmMwYzVlMWFhYTc0ZjI5OTg2MmY2MjNkMGUy
ZDU0MDg2NmMwYzg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CkBAIC0xMjMsNiArMTIzLDEyIEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2Fn
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0
cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZl
ci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1Jl
cGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDE3YmRjYjVmMmRhYWE5YmIx
YjZhZjRkNzRhYjU4ZTUwNGE4MTIxODMuLjRiMGMyNDkzMDFiOTY5NDkyNzdlNmIxNjkyMGFkNzc1
Mzg1YzRmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAg
VlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQ
VVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL05l
dHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXAog
ICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvY2FjaGUgXApAQCAtNTksNiArNjAsNyBAQCBW
UEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucyBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL09yaWdpbkRhdGEgXAogICAgICQoV2ViS2l0MikvV2ViUHJv
Y2Vzcy9QbHVnaW5zIFwKKyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUgXAogICAgICQoV2Vi
S2l0MikvV2ViUHJvY2Vzcy9TdG9yYWdlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvVXNl
ckNvbnRlbnQgXApAQCAtMTQwLDYgKzE0Miw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAg
IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHkgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAg
UmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGMzNDhlMzBkZThhMjllOTcz
ZWFlYWE2YTliOGE4ZTA5MzNhYTg4MjUuLjM5NzdjOThlZmRhMmEzNGJhYjZhNzI1MDBhY2U3MjZi
NDFkZDQyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTMzLDExICszMyw5IEBACiAjaW5jbHVkZSAiR1BV
UHJvY2Vzcy5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkdQ
VVByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
IlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJF
cnJvcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTcwLDYgKzY4LDE2
IEBAIHZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikKIHsKIH0KIAorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIp
Cit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVy
KQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKIHZvaWQgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCiB7CiAgICAgV1RGTG9nQWx3YXlzKCJS
ZWNlaXZlZCBhbiBpbnZhbGlkIG1lc3NhZ2UgXCIlcy4lc1wiIGZyb20gdGhlIHdlYiBwcm9jZXNz
LlxuIiwgbWVzc2FnZVJlY2VpdmVyTmFtZS50b1N0cmluZygpLmRhdGEoKSwgbWVzc2FnZU5hbWUu
dG9TdHJpbmcoKS5kYXRhKCkpOwpAQCAtODQsMjIgKzkyLDE4IEBAIFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdGVNZWRpYVBsYXll
ck1hbmFnCiAgICAgcmV0dXJuICptX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwogfQog
Ci12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQordm9pZCBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3Mo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBy
ZXN1bHQgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcC5lbnN1cmUocmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIsIFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisgICAgfSk7CisgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5KTsKIH0KIAotdm9pZCBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJ
UEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRl
Y29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNYXAuY29udGFpbnMocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKKyAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcC5yZW1vdmUocmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IGJiZmMxNjgwYmJi
MzBlMTk3ZGFmODAzNjA1Y2ZjNGEyMTc5YWVmNDkuLjc2NDQ3YmQ5YmNhZWFlMmM4ZjFhZjFiNmRh
Y2I4OWEwZWFmNTQ3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMjgsMzIgKzI4LDM1IEBACiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lk
ZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9V
bmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogY2xhc3MgR1BVUHJvY2VzczsKIGNsYXNzIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5OworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OwogCiBjbGFzcyBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2Vz
cyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZp
ZXIpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsg
fQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJl
dHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3Mo
KSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRl
bnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vz
c0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248
dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93
ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQotCiBwcml2YXRlOgogICAgIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNv
bm5lY3Rpb246OklkZW50aWZpZXIpOwogCkBAIC02MSwxNCArNjQsMjQgQEAgcHJpdmF0ZToKIAog
ICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNv
bm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOworICAg
IHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VOYW1lKSBvdmVycmlkZTsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIHVzaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1hcCA9IEhhc2hNYXA8UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIFJlZjxSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk+PjsKIAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29u
bmVjdGlvbjsKICAgICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVz
c2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6
OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5OworICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcCBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2
ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRj
aE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZv
aWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmJkOTA0NjZjZmNmNWVmOGI4ZWZiMjc3ZGFhNGRiNDg1ZGJmODU2NDYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1l
c3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAg
ICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAg
IGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNz
YWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAor
eworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0
X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9V
SW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVN1
cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IEludFNpemUm
IHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
Cit7CisgICAgaWYgKG1fc3VyZmFjZU1hcC5jb250YWlucyhzdXJmYWNlSWRlbnRpZmllcikpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgYXV0byByZW5kZXJpbmdTdXJmYWNlID0gUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVBy
b3h5OjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNvbG9yU3BhY2UpOworICAgIGlmICghcmVu
ZGVyaW5nU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzZW5kUmlnaHQgPSBy
ZW5kZXJpbmdTdXJmYWNlLT5jcmVhdGVTZW5kUmlnaHQoKTsKKyAgICBtX3N1cmZhY2VNYXAuYWRk
KHN1cmZhY2VJZGVudGlmaWVyLCBXVEZNb3ZlKHJlbmRlcmluZ1N1cmZhY2UpKTsKKworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENyZWF0ZVN1cmZhY2Uoc3Vy
ZmFjZUlkZW50aWZpZXIsIFdURk1vdmUoc2VuZFJpZ2h0KSksIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFz
ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAgLy8g
Q3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRo
aXMgb25lLgorICAgIGlmICghbV9zdXJmYWNlTWFwLmNvbnRhaW5zKHN1cmZhY2VJZGVudGlmaWVy
KSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX3N1cmZhY2VNYXAucmVtb3ZlKHN1cmZhY2VJZGVudGlmaWVyKTsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlclRvU3VyZmFjZShTdXJmYWNlSWRl
bnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIHJlbmRl
cmluZ0ZsdXNoSWRlbnRpZmllciwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNw
bGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwKQoreworICAgIGF1dG8gaXRlciA9IG1fc3Vy
ZmFjZU1hcC5maW5kKHN1cmZhY2VJZGVudGlmaWVyKTsKKyAgICAKKyAgICAvLyBDcmVhdGVTdXJm
YWNlIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisg
ICAgLy8gQW5kIHdlIGRvIG5vdCBoYXZlIHRoZSBzdXJmYWNlIGluZm8gdG8gY3JlYXRlIGl0Lgor
ICAgIGlmIChpdGVyID09IG1fc3VyZmFjZU1hcC5lbmQoKSkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEdldCB0aGUgc3Vy
ZmFjZSBHcmFwaGljc0NvbnRleHQuCisgICAgYXV0byYgcmVuZGVyaW5nU3VyZmFjZSA9IGl0ZXIt
PnZhbHVlOworICAgIEdyYXBoaWNzQ29udGV4dCYgc3VyZmFjZUNvbnRleHQgPSByZW5kZXJpbmdT
dXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIC8vIFJlbmRlciB0aGUgZGlz
cGxheSBsaXN0IGludG8gdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICBEaXNwbGF5TGlzdDo6UmVw
bGF5ZXIgcmVwbGF5ZXIoc3VyZmFjZUNvbnRleHQsIGRpc3BsYXlMaXN0KTsKKyAgICByZXBsYXll
ci5yZXBsYXkoY2xpcCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHJlbmRlcmluZyBvcGVyYXRp
b25zIGFyZSBmbHVzaGVkIHRvIHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgcmVuZGVyaW5nU3Vy
ZmFjZS0+Zmx1c2hHcmFwaGljc0NvbnRleHQoKTsKKworICAgIC8vIE5vdGlmeSB0aGUgV2ViUHJv
Y2Vzcy4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRSZW5k
ZXJUb1N1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIsIHJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciks
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVmZTM1NGQ3NDU1MDNlOTJkZTUx
YWIzMTU1ZDY4NWEwZTQzMjEzNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBA
IC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1lc3NhZ2VzUmVwbGllcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQ
cm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU3VyZmFjZUlk
ZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRGlzcGxheUxpc3Q7Cit9Citj
bGFzcyBGbG9hdFJlY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkK
KyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4KKyAg
ICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
KCk7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAv
LyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoV2ViQ29yZTo6U3Vy
ZmFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSk7CisgICAgdm9pZCByZWxl
YXNlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcik7CisgICAgdm9pZCByZW5kZXJU
b1N1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIFJlbmRlcmluZ0ZsdXNoSWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgY29uc3QgV2Vi
Q29yZTo6RmxvYXRSZWN0Jik7CisgICAgICAgIAorICAgIHVzaW5nIFN1cmZhY2VNYXAgPSBIYXNo
TWFwPFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZVByb3h5Pj47CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworICAgIFN1cmZhY2VNYXAg
bV9zdXJmYWNlTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJkNzJhYjY1ZWI0MTYwNzIz
NGVjNTlmN2RjZWZmYzBiMGRiZDA2NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMxIEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB7CisgICAgdm9pZCBDcmVhdGVTdXJmYWNlKFdlYkNvcmU6
OlN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBXZWJDb3JlOjpJbnRTaXplIHNp
emUsIFdlYkNvcmU6OkludFNpemUgY29udGV4dFNpemUsIGVudW06dWludDhfdCBXZWJDb3JlOjpD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgdm9pZCBSZWxlYXNlU3VyZmFjZShXZWJDb3JlOjpT
dXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbmRlclRvU3Vy
ZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgV2ViS2l0
OjpSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgcmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYkNvcmU6OkZsb2F0
UmVjdCBjbGlwKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nU3VyZmFjZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGE4ZTRjOWYy
YzNhZWIyNGNjOWE5ZDFhNjdmYTc3MTZiNDg3MDMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFj
ZVByb3h5LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiBVU0UoQ0cpCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuaCIKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmEyZWFmNGUxMmRkYTBkZDVlOWY2YTdmZjMwNzFkYjJkYmRhZWQ4YzQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9jZy9SZW1v
dGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5jcHAKQEAgLTAsMCArMSw4MSBAQAorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuaCIKKworI2lmIFVTRShD
RykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eT4gUmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYg
Y29udGV4dFNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBhdXRvIHN1cmZhY2Ug
PSAgSU9TdXJmYWNlOjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNhY2hlZENHQ29sb3JTcGFj
ZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIEluaXRhbGl6ZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0uCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cisg
ICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0
ZSgwLCAtY29udGV4dFNpemUuaGVpZ2h0KCkpOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KCk7CisgICAgaWYg
KCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xl
YXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgY29udGV4dFNp
emUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eShXVEZNb3ZlKHN1cmZh
Y2UpKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6UmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5KHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKKyAgICA6
IG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworfQorCitNYWNoU2VuZFJpZ2h0IFJlbW90
ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlU2VuZFJpZ2h0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVTZW5kUmlnaHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0
JiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpCit7
CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3Zv
aWQgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5OjpmbHVzaEdyYXBoaWNzQ29udGV4dCgpCit7
CisgICAgQ0dDb250ZXh0Rmx1c2goZW5zdXJlR3JhcGhpY3NDb250ZXh0KCkucGxhdGZvcm1Db250
ZXh0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDRykg
JiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuaCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRl
cmluZ1N1cmZhY2VQcm94eUNHLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQzNzIxMDUxMTBkZTFjMjlmMjFlZjA3
YjkwYjJmODY1N2U5ZDE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmgK
QEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENH
KSAmJiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2Uu
aD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRTaXplOworY2xhc3MgSU9TdXJmYWNl
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nU3VyZmFj
ZVByb3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRl
cmluZ1N1cmZhY2VQcm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSk7CisKKyAg
ICBNYWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0OworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCYgZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgdm9pZCBmbHVzaEdy
YXBoaWNzQ29udGV4dCgpOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQ
cm94eShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiYmKTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENHKSAmJiBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcAppbmRleCA2NzU4ZjRjOTMxMmU0NDNiNzJh
NjgzN2FkOWNhMmM2MGM1ZmQ2MzIzLi5jNmRiYWI4MTc3MjczM2IwY2NhMTQ2ZTA3ZGJmODdiZTA5
YWI2YjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHAKQEAgLTU2LDEwICs1Niwx
MiBAQCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUAogICAgICwgbV9sb2dJZGVudGlmaWVyKFdURjo6
TG9nZ2VySGVscGVyOjp1bmlxdWVMb2dJZGVudGlmaWVyKCkpCiAjZW5kaWYKIHsKKyAgICBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCAwLCAqdGhpcyk7CiB9CiAKIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKQogeworICAgIG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIDApOwogfQogCiB2b2lkIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Ojpj
cmVhdGVNZWRpYVBsYXllcihNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyIGlkLCBN
ZWRpYVBsYXllckVudW1zOjpNZWRpYUVuZ2luZUlkZW50aWZpZXIgZW5naW5lSWRlbnRpZmllciwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHN1Y2NlZWRlZCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oCmluZGV4IGQ2Y2Q3MGMzZmNmOTNhYmExNzkw
YzhiOTMzZjUxNTlhZjY0MDRjNTYuLmNjYTM1NWJhYWNjYmM0OTBlZmY1ZWJkYjY2NDQxMGYxZmJl
OWI3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oCkBAIC01Miw5ICs1Miw2IEBAIHB1
YmxpYzoKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOyB9CiAg
ICAgdm9pZCBjbGVhcigpOwogCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9j
ZXNzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKSB7
IGRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOyB9Ci0gICAgdm9pZCBkaWRS
ZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2VzcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4m
IGVuY29kZXIpIHsgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIGVu
Y29kZXIpOyB9Ci0KICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICBjb25zdCBMb2dnZXIm
IGxvZ2dlcigpIGNvbnN0IGZpbmFsOwogICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGYyZTllZDdhYjU0MDJlZjUxMTg4ZjdlOGRiZTM5
NmJhOGFjZTBmYWQuLmRiMmI2MjIwYzkzMWIwOTZiYjU4NTMzY2RkZjhmMjBlZDJjZjQxM2QgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjcsNiArMjcsNyBA
QCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyCiAKIFdBTlRTX0NPTk5FQ1RJ
T05fQVRUUklCVVRFID0gJ1dhbnRzQ29ubmVjdGlvbicKK1dBTlRTX0RJU1BBVENIX01FU1NBR0Vf
QVRUUklCVVRFID0gJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJwogTEVHQUNZX1JFQ0VJVkVSX0FUVFJJ
QlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVU
RSA9ICdOb3RSZWZDb3VudGVkJwogU1lOQ0hST05PVVNfQVRUUklCVVRFID0gJ1N5bmNocm9ub3Vz
JwpAQCAtMjE2LDEwICsyMTcsMTMgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRf
ZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEn
LAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50SWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllcicsCisg
ICAgICAgICdXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpT
V1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6QWN0aXZpdHlT
dGF0ZUNoYW5nZUlEJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywK
ICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCisg
ICAgICAgICdXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyJywKKyAgICAgICAgJ1dl
YktpdDo6UmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFn
ZUFyZWFJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJZGVudGlmaWVyJywKQEAg
LTc1NSwxMyArNzU5LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIp
OgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3Nh
Z2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciBy
ZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVj
ZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FD
WV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7
XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRF
RF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1
dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQg
Kz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2Fn
ZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShX
QU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlm
IChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAl
czo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVy
LnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzcwLDEzICs3NzcsMTYgQEAgZGVmIGdl
bmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9y
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUp
OgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3Zv
aWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYg
cmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNf
YXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7
XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIs
IG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5V
U0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVO
VVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVT
RURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1NDI0ZTVkZmJiMTUy
MDEwYjBiMzJkNmY1ZWE2ZDUzNTg5MTRlNTZiLi4xYjliMDk0Mjc5Y2Q1MzFhZjI5NDUzMDhhZGQ4
ZmIzMzMyY2RlYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI1LDYgKzI1LDkgQEAgR1BVUHJvY2Vzcy9H
UFVQcm9jZXNzLmNwcAogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAog
R1BVUHJvY2Vzcy9HUFVQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAogCitHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmNw
cAorCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtDT1JTUHJlZmxpZ2h0Q2hlY2tlci5jcHAKQEAgLTU0Miw2ICs1NDUsOCBAQCBXZWJQcm9jZXNz
L1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3BwIEBuby11bmlmeQogV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNwcCBAbm8tdW5pZnkKIFdl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0cmVhbS5jcHAgQG5vLXVu
aWZ5CiAKK1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcAorCiBXZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dDbGllbnRDb25uZWN0aW9uLmNwcAogV2Vi
UHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0aW9uLmNwcAogV2ViUHJv
Y2Vzcy9TdG9yYWdlL1dlYlNXT3JpZ2luVGFibGUuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5k
ZXggMzZmMjk1ZDNmMzAyNjhjZTkxMjIyNGMzMzVlMDgwNjcwYTRiZjIzYS4uYjVmN2Q3YmJkNDhj
NDQ0ZjNjN2ViMDMyZDZlY2FmMzMyZGI4NTA4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
b3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAt
NjI4LDkgKzYyOCwxMiBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1h
Z2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHAKLS8vUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcAotLy9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAK
K1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1Yzg1ZmMx
NTQ5NGUxYjIyMzE1NmEzNTRjYWE5ZDJiMmY2ZTg5YjlkLi40ZGVmZDk3MWVlM2RmZjQwZWI0Y2Zm
ZmZlMWMxYzNhYWIxNmM4MGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTkyLDcgKzkyLDYgQEAKIAkJMDc2RTg4NEUxQTEzQ0FERjAw
NUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzZFODg0RDFBMTNDQURGMDA1RTkwRkMgLyogQVBJQ29u
dGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJMDc3MjgxMUQyMTIzNEZGNjAwQzhFRjJFIC8qIFVz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0MTBGNDMxOUFGN0IyNzAwMkVCQUI1IC8qIFVzZXJN
ZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oICovOyB9OwogCQkwNzkyMzE0ODIzOUNCQ0I4
MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlc1JlcGxpZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIzMTQy
MjM5Q0JDQjUwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2Vz
UmVwbGllcy5oICovOyB9OwotCQkwNzkyMzE0OTIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIzMTQzMjM5Q0JDQjYwMDk1OThFMiAvKiBSZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9OwogCQkwNzkyMzE0
QTIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBs
aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzky
MzE0NDIzOUNCQ0I2MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZXNS
ZXBsaWVzLmggKi87IH07CiAJCTA3OTIzMTRCMjM5Q0JDQjgwMDk1OThFMiAvKiBSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMzE0NTIzOUNCQ0I3MDA5NTk4RTIgLyog
UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwICovOyB9Owog
CQkwNzkyMzE0QzIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDc5MjMxNDYyMzlDQkNCNzAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5TWVzc2FnZXMuaCAqLzsgfTsKQEAgLTExOTMsNiArMTE5Miw3IEBACiAJCTcxMTcyNUE5MjI4
RDU2NDMwMDAxODUxNCAvKiBXZWJzaXRlTGVnYWN5T3ZlcmZsb3dTY3JvbGxpbmdUb3VjaFBvbGlj
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzExNzI1
QTgyMjhENTYzQTAwMDE4NTE0IC8qIFdlYnNpdGVMZWdhY3lPdmVyZmxvd1Njcm9sbGluZ1RvdWNo
UG9saWN5LmggKi87IH07CiAJCTcxQTY3NkE2MjJDNjIzMjUwMDdENjI5NSAvKiBXS1RvdWNoQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJNzFGQjgxMEIyMjYwNjI3RTAwMzIzNjc3IC8qIFdl
YnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZCODEwQTIyNjA2MjdBMDAzMjM2Nzcg
LyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLzsgfTsKKwkJ
NzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI2QzVBREYy
MzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovOyB9Owog
CQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOEU4NkVGMTc5NTE4OEMw
MDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovOyB9OwogCQk3NUE4RDJDODE4N0NDRkFC
MDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9
OyB9OwogCQk3NUE4RDJENjE4N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50
ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1
QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICov
OyB9OwpAQCAtMzY0OSw2ICszNjQ5LDggQEAKIAkJNTNDRkJCQzYyMjI0RDFCMDAwMjY2NTQ2IC8q
IFRleHRDaGVja2VyQ29tcGxldGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1M0NGQkJDNzIyMjREMUIwMDAyNjY1NDYgLyogVGV4dENoZWNrZXJDb21wbGV0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDaGVja2VyQ29tcGxldGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YzQ0FBNTIwNkM0NDNFMDA4NjQ5
MEUgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTAyMzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUExMjM5OUJEQTIwMDUwQ0Qy
MiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI4RjIyMEFF
M0JENzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjS2V5
UHJveHlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMDIwQjI1
MTc0MDBCOEJFODcgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eUNvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMzIwQjI1NDFDMDBCOEJFODcgLyog
U2VjS2V5UHJveHlTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFNlY0tleVByb3h5U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0z
ODk3LDggKzM4OTksMTkgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hB
Y3Rpb25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFB
Njc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25H
ZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0Ew
MDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVu
dHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5
NTIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5NjIzQTQ3MzI4MDA5MkExQTYg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzA4NDk3MjNBNDczMjgwMDkyQTFBNiAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjMwODQ5ODIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMw
ODQ5QTIzQTQ3MzU1MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nU3Vy
ZmFjZVByb3h5Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5QjIz
QTQ3MzU1MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4
IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2
QzVBRTUyM0EwMDA3OTAwRDM0MjQ4IC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyNkM1QUVFMjNBMUQwRTEwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
OEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNr
ZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xv
clBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBRDMwMDMyM0Ez
MDdDQzAwN0JFMjlBIC8qIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBRDMwMDQyM0EzMTU4OTAwN0JFMjlBIC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50
ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0
b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYyNzksNiArNjI5
Miw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCUE3OENDREQ4
MTkzQUM5RTMwMDVFQ0MyNiAvKiBjb20uYXBwbGUuV2ViS2l0LkdQVS5zYiAqLywKKwkJCQk3MjZD
NUFERjIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8s
CiAJCQkpOwogCQkJbmFtZSA9ICJSZWNvdmVyZWQgUmVmZXJlbmNlcyI7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwpAQCAtNjMxMiw2ICs2MzI2LDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlE
MDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMg
Ki8sCiAJCQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMDVB
RjI0MjNBNDcyQzEwMDJEQzM3QiAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTJEOUZCMjBD
MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJ
CQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
ICovLAogCQkJCTJEOUZCMjA5MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluICovLApAQCAtNzY0NCw2ICs3NjU5LDQwIEBACiAJCQluYW1lID0g
bWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzIwNUFGMjQyM0E0NzJD
MTAwMkRDMzdCIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMzA4NDk5MjNBNDczMkQwMDkyQTFBNiAvKiBjZyAqLywK
KwkJCQk3MjMwODQ5NjIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCAqLywKKwkJCQk3MjMwODQ5NTIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzIzMDg0OTcyM0E0NzMyODAwOTJBMUE2IC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjMwODQ5ODIz
QTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5LmggKi8sCisJCQkp
OworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OworCQk3MjMwODQ5OTIzQTQ3MzJEMDA5MkExQTYgLyogY2cgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMzA4NDlBMjNBNDczNTUwMDkyQTFB
NiAvKiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5jcHAgKi8sCisJCQkJNzIzMDg0OUIy
M0E0NzM1NTAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmggKi8sCisJ
CQkpOworCQkJcGF0aCA9IGNnOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJ
NzJBRDMwMDUyM0EzMTVFMzAwN0JFMjlBIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTU1RENGQUEwMjM5OUJEQTIwMDUw
Q0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk1NURDRkFBMTIzOTlC
REEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyNkM1QUVF
MjNBMUQwRTEwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluICov
LAorCQkJCTcyQUQzMDA0MjNBMzE1ODkwMDdCRTI5QSAvKiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNl
LmggKi8sCisJCQkJNzI2QzVBRTUyM0EwMDA3OTAwRDM0MjQ4IC8qIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmggKi8sCisJCQkJNzJBRDMwMDMyM0EzMDdDQzAwN0JFMjlBIC8qIFJlbmRlcmlu
Z0ZsdXNoSWRlbnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5k
OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAw
REVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKApAQCAtNzk0Myw2ICs3OTkyLDcgQEAKIAkJCQk1MTA1QjBEMjE2MkY3QTVFMDBFMjc3
MDkgLyogTmV0d29yayAqLywKIAkJCQkzMTA5OTk3NDE0NkM4QUE4MDAyOURFQjkgLyogTm90aWZp
Y2F0aW9ucyAoVXNlcikgKi8sCiAJCQkJMUE2RkI3QUExMUU2NEI0OTAwREIxMzcxIC8qIFBsdWdp
bnMgKi8sCisJCQkJNzJBRDMwMDUyM0EzMTVFMzAwN0JFMjlBIC8qIFJlbmRlcmluZ0JhY2tlbmQg
Ki8sCiAJCQkJNTExOEU5OTgxRjI5NTI1OTAwM0VGOUY1IC8qIFN0b3JhZ2UgKi8sCiAJCQkJMUFB
RjA4QUExOTI2OTMwQjAwQjYzOTBDIC8qIFVzZXJDb250ZW50ICovLAogCQkJCTU3NjA4MjhBMjAy
OTg0QzkwMDExNjY3OCAvKiBXZWJBdXRoZW50aWNhdGlvbiAqLywKQEAgLTEwMTM5LDYgKzEwMTg5
LDcgQEAKIAkJCQkxQTU3MDRGQzFCRTE3NTExMDA4NzRBRjEgLyogUmVtb3RlT2JqZWN0SW52b2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzODAxODU5MEFFNDAwRjNFQzA1IC8qIFJl
bW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUMxMzM4NjE4NTkwQzQ2
MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OTAxODdCM0IzQTAwNDM3ODU3IC8qIFJl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU5NDdBODE4
N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3IC8qIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAtMTE3OTksNyArMTE4NTAs
NiBAQAogCQkJCTJENzJBMUZBMjEyQkY0NkUwMDUxN0EyMCAvKiBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRjI0QTJEMTg3OUU0QkMwMDNBQkYwQyAv
KiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTJEQzE4RkI0MjE4QTZFOUUwMDI1QTg4RCAvKiBSZW1vdGVMYXllclRy
ZWVWaWV3cy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTA3OTIzMTQ5MjM5Q0JDQjgwMDk1OThFMiAv
KiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMDc5MjMxNEIyMzlDQkNCODAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBQzEzMzg1
MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU5NDdBNzE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwCmluZGV4IDU4NGExYjNkZjYzZDgzNzlmZDY4OWJjY2Y4N2Q4Njc1NmRlZDkyYzcuLmU1
YTgxZGQ0YmJkMWQ0Mjg4OTVmYmRlMGJlN2JmODk2N2JkZjU1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC01
NiwxNiArNTYsMTggQEAgdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpD
b25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSkKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNo
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
cikKIHsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYg
ZGVjb2RlcikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
ciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNl
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKIHsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2
ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1l
bnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQ
cm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCA4Yjc0Mjk5ZTRhYTZiNzYzNjgwNzE1
ODc2ZjBkNGU1NzQyYTczMmQ0Li40MGYxZTE1YTBhMzcxZTlmMTVkYzRmZDUwNTg1MTI1MWJhMzQ1
OTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKTsKICAgICAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAog
cHJpdmF0ZToKICAgICBHUFVQcm9jZXNzQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIpOwpAQCAtNTMsMTAgKzU0LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDOjpDb25uZWN0
aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNo
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mKTsKKyAgICAKICAgICAvLyBUaGUgY29ubmVjdGlvbiBmcm9tIGEg
d2ViIHByb2Nlc3MgdG8gdGhpcyBHUFUgcHJvY2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVj
ZWl2ZXJNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3
ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQog
Ci1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9j
ZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzNmOWExNjJmZjYyYzg4OThj
MTE4MDMyY2Y4YTM1YmVmYjYxYzYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAg
LTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWZQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKKyAgICA6IG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkpCit7Cisg
ICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9j
ZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2Vp
dmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRo
aXMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisg
ICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVy
aW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBV
bi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNzYWdl
UmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAg
bWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAgICAv
LyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNz
YWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQo
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdT
dXJmYWNlKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5kU3VyZmFjZShTdXJmYWNlSWRlbnRp
ZmllciBzdXJmYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGl0ZXIgPSBtX3N1cmZhY2VNYXAu
ZmluZChzdXJmYWNlSWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRlciAgPT0gbV9zdXJmYWNlTWFw
LmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gaXRlci0+
dmFsdWUucHRyKCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Ondh
aXRGb3JEaWRDcmVhdGVTdXJmYWNlKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25u
ZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNw
YXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRDcmVh
dGVTdXJmYWNlPihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZv
ck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKworYm9v
bCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWl0Rm9yRGlkUmVuZGVyVG9TdXJmYWNlKCkKK3sK
KyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRSZW5kZXJUb1N1cmZhY2U+KG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5n
SWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmRpZENyZWF0ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIE1h
Y2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIC8vIFN1cmZhY2UgbWlnaHQgaGF2ZSBiZWVu
IHJlbGVhc2VkIGJlZm9yZSB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQuCisgICAgaWYgKGF1dG8q
IHN1cmZhY2UgPSBmaW5kU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNT
RVJUKCFzdXJmYWNlLT5wbGF0Zm9ybVN1cmZhY2UoKSk7CisgICAgICAgIGlmICghc3VyZmFjZS0+
Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKFdURk1vdmUoc2VuZFJpZ2h0KSkpIHsKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmVsZWFzZVByb3h5U3VyZmFjZShz
dXJmYWNlSWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6ZGlkUmVuZGVyVG9TdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlm
aWVyIHN1cmZhY2VJZGVudGlmaWVyLCBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgcmVuZGVyaW5n
Rmx1c2hJZGVudGlmaWVyKQoreworICAgIC8vIFN1cmZhY2UgbWlnaHQgaGF2ZSBiZWVuIHJlbGVh
c2VkIGJlZm9yZSBwYWludGluZyBoYXMgZmluaXNoZWQuCisgICAgaWYgKGF1dG8qIHN1cmZhY2Ug
PSBmaW5kU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcikpIHsKKyAgICAgICAgLy8gRGlkQ3JlYXRl
U3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHJlY2Vpdmlu
ZyB0aGlzIG1lc3NhZ2UuCisgICAgICAgIEFTU0VSVChzdXJmYWNlLT5wbGF0Zm9ybVN1cmZhY2Uo
KSk7CisgICAgICAgIEFTU0VSVChzdXJmYWNlLT5zZW50Rmx1c2hJZGVudGlmaWVyKCkpOworICAg
ICAgICBzdXJmYWNlLT5zZXRSZWNlaXZlZEZsdXNoSWRlbnRpZmllcihyZW5kZXJpbmdGbHVzaElk
ZW50aWZpZXIpOworICAgIH0KK30KKworU3VyZmFjZUlkZW50aWZpZXIgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Y3JlYXRlUHJveHlTdXJmYWNlKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IElu
dFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgU3VyZmFj
ZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIgPSBTdXJmYWNlSWRlbnRpZmllcjo6Z2VuZXJh
dGUoKTsKKyAgICBBU1NFUlQoIW1fc3VyZmFjZU1hcC5jb250YWlucyhzdXJmYWNlSWRlbnRpZmll
cikpOworCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpD
cmVhdGVTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCBzaXplLCBjb250ZXh0U2l6ZSwgY29sb3JT
cGFjZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fc3VyZmFjZU1hcC5h
ZGQoc3VyZmFjZUlkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2U6OmNyZWF0ZShjb2xv
clNwYWNlKSk7CisgICAgcmV0dXJuIHN1cmZhY2VJZGVudGlmaWVyOworfQorCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VQcm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIg
c3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX3N1cmZhY2VNYXAucmVtb3ZlKHN1cmZh
Y2VJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OlJlbGVhc2VTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVuZGVy
VG9Qcm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0
IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYg
Y2xpcCkKK3sKKyAgICBhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZp
ZXIpOworCisgICAgLy8gVGhlIGNhbGxlciBtdXN0IGNhbGwgY3JlYXRlUHJveHlTdXJmYWNlKCkg
YmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBz
dXJmYWNlLT5zZXRTZW50Rmx1c2hJZGVudGlmaWVyKFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllcjo6
Z2VuZXJhdGUoKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpSZW5kZXJUb1N1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIsIHN1cmZhY2UtPnNlbnRGbHVz
aElkZW50aWZpZXIoKSwgZGlzcGxheUxpc3QsIGNsaXApLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKK30KKworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmbHVzaFByb3h5U3Vy
ZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvKiBz
dXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworCisgICAgLy8gVGhlIGNh
bGxlciBtdXN0IGNhbGwgY3JlYXRlUHJveHlTdXJmYWNlKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBm
dW5jdGlvbi4KKyAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdGV4cHIgY29uc3Qg
dW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50
ID0gTWF4V2FpdHNDb3VudDsgd2FpdHNDb3VudC0tOyApIHsKKyAgICAgICAgaWYgKCFzdXJmYWNl
LT5pc1BlbmRpbmdGbHVzaCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFdlIG5v
dCBoYXZlIHJlY2VpdmVkIERpZFJlbmRlclRvU3VyZmFjZSwgc28gd2FpdCBmb3IgaXQuCisgICAg
ICAgIGlmICghd2FpdEZvckRpZFJlbmRlclRvU3VyZmFjZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIp
OworICAgIH0KKworICAgIC8vIG1fc3VyZmFjZU1hcCBtYXkgaGF2ZSBjaGFuZ2VkIHdoaWxlIHdh
aXRpbmcgZm9yIERpZFJlbmRlclRvU3VyZmFjZS4KKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzdXJmYWNlLT5pc1BlbmRpbmdGbHVzaCgpOwor
fQorCitSZWZQdHI8UmVuZGVyaW5nU3VyZmFjZT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6c3Vy
ZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvKiBz
dXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworCisgICAgLy8gVGhlIGNh
bGxlciBkaWQgbm90IGNyZWF0ZVByb3h5U3VyZmFjZSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVu
Y3Rpb24uCisgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBEaWRDcmVhdGVTdXJm
YWNlIGhhcyBub3QgcmVjZWl2ZWQgeWV0LCBzbyB3YWl0IGZvciBpdC4KKyAgICBpZiAoIXN1cmZh
Y2UtPnBsYXRmb3JtU3VyZmFjZSgpKSB7CisgICAgICAgIGlmICghd2FpdEZvckRpZENyZWF0ZVN1
cmZhY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBzdXJmYWNlID0g
ZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIC8vIG1fc3VyZmFj
ZU1hcCBtYXkgaGF2ZSBjaGFuZ2VkIHdoaWxlIHdhaXRpbmcgZm9yIERpZENyZWF0ZVN1cmZhY2Uu
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIERp
ZENyZWF0ZVN1cmZhY2Ugd2FzIHJlY2VpdmVkIGJ1dCBpdCByZXR1cm5zIGEgd3Jvbmcgc3VyZmFj
ZUlkZW50aWZpZXIuCisgICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybVN1cmZhY2UoKSkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIAorICAgIHJldHVybiBtYWtlUmVmUHRyKHN1cmZhY2UpOworfQorCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTJlOTNiZDE5ZDE1ZDI5ODUzZTgxMmY4YmRhMDNkMzBmZTNjZDdhMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNs
dWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5o
IgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0
ZW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMg
V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5k
ZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWZQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVt
b3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAg
Ly8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRGb3JEaWRDcmVhdGVTdXJmYWNlKCk7CisgICAgYm9v
bCB3YWl0Rm9yRGlkUmVuZGVyVG9TdXJmYWNlKCk7CisKKyAgICAvLyBkaWRSZWNlaXZlTWVzc2Fn
ZSgpIGhhbmRsZXJzCisgICAgdm9pZCBkaWRDcmVhdGVTdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJ
ZGVudGlmaWVyLCBNYWNoU2VuZFJpZ2h0KTsKKyAgICB2b2lkIGRpZFJlbmRlclRvU3VyZmFjZShX
ZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyKTsKKwor
ICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBj
cmVhdGVQcm94eVN1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpDb2xvclNwYWNlKSBvdmVycmlkZTsKKyAg
ICB2b2lkIHJlbGVhc2VQcm94eVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVuZGVyVG9Qcm94eVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlk
ZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIGNvbnN0
IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgYm9vbCBmbHVzaFByb3h5U3Vy
ZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcikgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdl
YkNvcmU6OlJlbmRlcmluZ1N1cmZhY2U+IHN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZp
ZXIpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsK
KyAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKiBmaW5kU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNl
SWRlbnRpZmllcik7CisKKyAgICB1c2luZyBTdXJmYWNlTWFwID0gSGFzaE1hcDxXZWJDb3JlOjpT
dXJmYWNlSWRlbnRpZmllciwgUmVmPFJlbW90ZVJlbmRlcmluZ1N1cmZhY2U+PjsKKyAgICBTdXJm
YWNlTWFwIG1fc3VyZmFjZU1hcDsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVz
c2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE1MzdmMGFjN2VhNTNlMDllZjUzMzEzNzdiNTc5NTEwODJm
NDdmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwz
MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHsKKyAg
ICB2b2lkIERpZENyZWF0ZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFj
ZUlkZW50aWZpZXIsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAgIHZvaWQgRGlkUmVuZGVy
VG9TdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBX
ZWJLaXQ6OlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciByZW5kZXJpbmdGbHVzaElkZW50aWZpZXIp
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNl
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY2MDVlNTljYTg2OWUzNGM0MTBjNTMzYmQyZjcw
ODNhMzMzNGFhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2UuaApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW5kZXJpbmdGbHVz
aElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKworCisjaW5j
bHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdTdXJmYWNlLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5k
UmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ1N1
cmZhY2UgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFjZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlPiBjcmVhdGUoV2ViQ29yZTo6Q29sb3JT
cGFjZSBjb2xvclNwYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVt
b3RlUmVuZGVyaW5nU3VyZmFjZShjb2xvclNwYWNlKSk7CisgICAgfQorCisgICAgUmVuZGVyaW5n
Rmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3Nl
bnRGbHVzaElkZW50aWZpZXI7IH0KKyAgICBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgcmVjZWl2
ZWRGbHVzaElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY2VpdmVkRmx1c2hJZGVudGlm
aWVyOyB9CisgICAgCisgICAgdm9pZCBzZXRTZW50Rmx1c2hJZGVudGlmaWVyKFJlbmRlcmluZ0Zs
dXNoSWRlbnRpZmllciBzZW50Rmx1c2hJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgbV9zZW50
Rmx1c2hJZGVudGlmaWVyID0gc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICB9CisKKyAgICB2b2lk
IHNldFJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciByZWNl
aXZlZEZsdXNoSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50
aWZpZXIgPSByZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKKyAgICB9CisKKyAgICBib29sIGlzUGVu
ZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVj
ZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdT
dXJmYWNlKFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICAgICAgOiBXZWJDb3Jl
OjpSZW5kZXJpbmdTdXJmYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworICAgIFJlbmRl
cmluZ0ZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CisgICAgUmVuZGVyaW5n
Rmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7Cit9OworCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NjQ3OTVjOTRiYThhMWIzYThlYTBiYWU1Yjdk
NmJmOWM2N2IyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJ
ZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciA9
IE9iamVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlPjsKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVu
ZGVyaW5nRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44N2E0Mjhi
OWFiN2IyZTNlYTljZDE0OGFhNGI3NTNhNjJlYjE4NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nRmx1c2hJZGVu
dGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdG
bHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmll
clR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDNhYmIxYzdlMzdjNDdkZWUz
NjgzNDcyZTJlMzM3YjQ1ZmFmNTU4MDUuLmFlNDFhNmU4MTJiNDc4OWQ1MTRhYTM2MDNiOGRhN2Yy
MGE0N2Y0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUg
Ik5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKKyNp
bmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiVXNlckRhdGEuaCIK
ICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCIKQEAgLTg4MSwxNCArODgyLDE5IEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJD
aHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIH0KIAogI2lmIFVTRShS
RVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5
UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKICAgICBpZiAoYXV0byog
ZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIGRyYXdp
bmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKICAgICByZXR1
cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorUmVmUHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgp
OworfQogI2VuZGlmCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NM
YXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4
IDcyZWJlZjUwZGY5YjE0YTg3MmZjMzU2MGExYzgxNzM3NDUxZDcwMjcuLjkzNzYwNjUwMTJlZTFl
YWNiZGZiNDc1MTA2MWFkMmE1NmM4NTkxYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMCw2
ICsyMzAsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNw
bGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisg
ICAgUmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3Mg
YWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385684</attachid>
            <date>2019-12-13 22:57:28 -0800</date>
            <delta_ts>2019-12-14 10:16:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191213225727.patch</filename>
            <type>text/plain</type>
            <size>111324</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY2ZDBkMWExNWE4MWZm
NjE1NTJlZjk1ZjE3MzVmZmVmYzc0OWFlNy4uYzFlNTkzMjVmZWQ5OTU5ODNjOTRhZTNmZWY4MGM5
YjUyMDMzOGEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTEyLTEzICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgUmVuZGVy
aW5nQmFja2VuZCBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBXZWJQIGFuZCByZWNlaXZpbmcKKyAgICAgICAgcmVw
bGllcyBmcm9tIHRoZSBHUFVQLiBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUg
Y3JlYXRlZCBieQorICAgICAgICBDaHJvbWVDbGllbnQgYW5kIG93bmVkIGJ5IHRoZSBQYWdlLgor
CisgICAgICAgIFJlbmRlcmluZ1N1cmZhY2UgaXMgYWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSBj
cmVhdGluZyBhIHBsYXRmb3JtIHNoYXJlZAorICAgICAgICBzdXJmYWNlLiBDcmVhdGluZyB0aGUg
bWVtb3J5IG9mIHRoZSBzdXJmYWNlIHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBHUFVQLgorICAg
ICAgICBSZW5kZXJpbmdTdXJmYWNlIHdpbGwgY3JlYXRlIGEgcGxhdGZvcm0gc3VyZmFjZSBpbiB0
aGUgV2ViUC4gVGhpcyBzdXJmYWNlCisgICAgICAgIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNh
bWUgbWVtb3J5IGFzIHRoZSBHUFVQIGRvZXMuCisKKyAgICAgICAgUmVuZGVyaW5nU3VyZmFjZSBp
cyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgZm9yIENHLiBJZGVhbGx5IEltYWdlQnVmZmVyCisgICAg
ICAgIHNob3VsZCBoYXZlIGJlZW4gdXNlZCBpbnN0ZWFkLiBCdXQgdG8gdXNlIEltYWdlQnVmZmVy
IGl0IHdpbGwgcmVxdWlyZXMKKyAgICAgICAgZXh0ZW5zaXZlIHJlLWZhY3RvcmluZy4KKworICAg
ICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbmRlcmluZ0JhY2tlbmQpOgor
ICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNl
SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5k
ZXJpbmdTdXJmYWNlQ0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdTdXJm
YWNlOjpwbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFj
ZTo6Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ1N1
cmZhY2U6OlJlbmRlcmluZ1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICBIYXZlIHRvIGRlbGV0ZSB0aGUgdXNp
bmcgc3RhdGVtZW50IGJlY2F1c2UgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IHdhcworICAgICAg
ICBhbWJpZ3VvdXMgc3ltYm9sIGluIFdlYktpdC4KKwogMjAxOS0xMi0xMyAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgU2NyaXB0Q29udHJvbGxl
cidzIHByb2xpZmVyYXRpb24gb2YgRXhjZXB0aW9uRGV0YWlscyouCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ1Nzhj
N2I1ZTMzMGMzYzNjMDI3ZTZiNzRmMjMxYWViMzE3Mjk3Y2IuLjQyMzgyNTczOGVmNzA4NzBhMDE3
YTM1Njg4N2M3MzAxNjViNjhmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUxIEBACisyMDE5LTEy
LTEzICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgTWFrZSBHUFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQgYW5kIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBhcmUgaW50cm9kdWNl
ZCB0bworICAgICAgICBtYW5hZ2UgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgV2ViUHJv
Y2VzcyBhbmQgdGhlIEdQVVByb2Nlc3MgZm9yCisgICAgICAgIHJlbmRlcmluZyBvcGVyYXRpb25z
LgorCisgICAgICAgIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mgd2lsbCBiZSByZXNwb25zaWJs
ZSBmb3IgY3JlYXRpbmcgYW5kIHJlbGVhc2luZworICAgICAgICB0aGUgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5IGdpdmVuIGl0cyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci4gSXQKKyAg
ICAgICAgaXMgcmVzcG9uc2libGUgYWxzbyBmb3IgZGlzcGF0Y2hpbmcgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSBtZXNzYWdlcy4KKworICAgICAgICBBbGwgdGhlIFJlbmRlcmluZ0Jh
Y2tlbmQgbWVzc2FnZXMgYXJlIGFzeW5jaHJvbm91cy4gVGhlIG1haW4gdGhyZWFkIHdpbGwKKyAg
ICAgICAgbm90IGJlIGJsb2NrZWQgd2hlbiBzZW5kaW5nIGEgbWVzc2FnZSBmcm9tIFdlYlAgdG8g
R1BVUC4gSW5zdGVhZCBHUFVQIHdpbGwKKyAgICAgICAgbm90aWZ5IFdlYlAgd2hlbiBpdCBmaW5p
c2hlcyBhbiBvcGVyYXRpb24uIEluIHRoZSBjYXNlIHdoZW4gV2ViUCB3YW50cworICAgICAgICB0
byBoYXZlIGltbWVkaWF0ZSBhY2Nlc3MgdG8gdGhlIHN1cmZhY2UsIGUuZy4gZmx1c2hpbmcgdGhl
IHN1cmZhY2UgY29udGV4dCwKKyAgICAgICAgdGhlIFdlYlAgd2lsbCBiZSBoYXZlIHRvIGJlIGJs
b2NrZWQgZm9yICJzb21ldGltZSIgd2FpdGluZyBmb3IgYSBjZXJ0YWluCisgICAgICAgIG1lc3Nh
Z2UgdG8gYmUgZGVsaXZlcmVkLgorCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UgaXMg
YWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSB0aGUgbGlmZSB0aW1lIG9mIHRoZQorICAgICAgICBw
bGF0Zm9ybSBzdXJmYWNlIGluIHRoZSBXZWJQb3JjZXNzLiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNl
UHJveHkgd2lsbCBkbworICAgICAgICBhIHNpbWlsYXIgam9iIGluIHRoZSBHUFUgcHJvY2Vzcy4K
KworICAgICAgICBGbHVzaGluZyBhIHN1cmZhY2Ugd2lsbCBiZSB0cmFja2VkIGJ5IFJlbmRlcmlu
Z0ZsdXNoSWRlbnRpZmllci4gCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgc2VuZHMg
YSAnUmVuZGVyVG9TdXJmYWNlJyBtZXNzYWdlIHdpdGggYSBuZXdseQorICAgICAgICBnZW5lcmF0
ZWQgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLiBXaGVuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eQorICAgICAgICBmaW5pc2hlcyByZW5kZXJpbmcgdG8gaXRzIFJlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eSwgaXQgd2lsbCByZXBseSBiYWNrCisgICAgICAgIHRvIHRoZSBXZWJQIGJ5IHNl
bmRpbmcgRGlkUmVuZGVyVG9TdXJmYWNlIG1lc3NhZ2Ugd2l0aCB0aGUgc2FtZQorICAgICAgICBS
ZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgd2hpY2ggd2lsbCBzZXQgaXQgaW4gdGhlIGNvcnJlc3Bv
bmRpbmcKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZC4gUmVtb3RlUmVuZGVyaW5nU3Vy
ZmFjZSBpcyBwZW5kaW5nIGZsdXNoIGlmIGl0cworICAgICAgICBzZW50Rmx1c2hJZGVudGlmaWVy
IGFuZCByZWNlaXZlZEZsdXNoSWRlbnRpZmllciBhcmUgZGlmZmVyZW50LgorCisgICAgICAgICog
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisg
ICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToK
KyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBE
ZWxldGVkLgorICAgICAgICBUaGVzZSBmdW5jdGlvbnMgYXJlIGF1dG8gZ2VuZXJhdGVkIGluIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwLgorCisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVy
IGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW46CisgICAgICAgIEFkZCBuZXcgbWVzc2FnZXMgYW5kIG1ldGhvZHMgZm9yIGNy
ZWF0aW5nL3JlbGVhc2luZyBhIFJlbmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZVN1cmZhY2UpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlclRvU3VyZmFjZSk6Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAg
KiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5
Lmg6IEFkZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgQ29tbXVuaWNh
dGVzIHdpdGggUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBpbgorICAgICAgICB0aGUgV2ViUG9yY2Vz
cy4gSXQgbWFuYWdlcyB0aGUgbGlmZSBjeWNsZSBvZiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlLiBJ
dAorICAgICAgICByZWdpc3RlcnMgaXRzZWxmIGFzIGEgbWVzc2FnZSByZWNlaXZlciBpbiB0aGUg
Y29uc3RydWN0b3IgYW5kIHVucmVnaXN0ZXIKKyAgICAgICAgaXRzZWxmIGluIHRoZSBkZXN0cnVj
dG9yLiBJdCBzZW5kcyByZXBsaWVzIHRvIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAg
ICAgIGluIHRoZSBXZWJQb3JjZXNzIHdoZW4gaXQgZmluaXNoZXMgb25lIG9mIGl0cyBmdW5jdGlv
bnMuIAorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nU3VyZmFjZVByb3h5OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmNyZWF0ZVNlbmRSaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6
ZW5zdXJlR3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5OjpmbHVzaEdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmg6IEFk
ZGVkLgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkgbWFuYWdlcyBvcGVyYXRp
bmcgb24gdGhlIHBsYXRmb3JtIHN1cmZhY2UgaW4gCisgICAgICAgIEdQVVByb2Nlc3MuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk6On5SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSk6CisgICAg
ICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpkaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJv
Y2Vzcyk6IERlbGV0ZWQuCisgICAgICAgIE1ha2UgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkgYW4gTWVzc2FnZVJlY2VpdmVyIGJ5IGFkZGluZyBhbmQgCisgICAgICAgIHJlbW92aW5nIGl0
c2VsZiBmcm9tIE1lc3NhZ2VSZWNlaXZlck1hcCBvZiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgIFdoZW4g
dGhlIGF0dHJpYnV0ZSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnIGlzIGFkZGVkIHRoZSBtZXNzYWdl
cy5pbiBmaWxlLAorICAgICAgICB0aGUgZGlkUmVjZWl2ZU1lc3NhZ2UoKSB3aWxsIGluY2x1ZGUg
YSBkaXNwYXRjaCBjYWxsIHN1Y2ggdGhhdCB0aGUgcmVjZWl2ZXIKKyAgICAgICAgaGFzIHRoZSBh
YmlsaXR5IHRvIGRpc3BhdGNoIHRoZW0gdG8gaXRzIE1lc3NhZ2VSZWNlaXZlck1hcC4KKworICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3ND
b25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICBEaXNwYXRjaCBtZXNz
YWdlcyBjb21pbmcgZnJvbSB0aGUgR1BVUG9yY2VzcyB0byBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6ZmluZFN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
d2FpdEZvckRpZENyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjp3YWl0Rm9yRGlkUmVuZGVyVG9TdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkQ3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZFJlbmRlclRvU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZVByb3h5U3VyZmFjZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VQcm94eVN1cmZh
Y2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZW5kZXJUb1By
b3h5U3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmZs
dXNoUHJveHlTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6c3VyZmFjZSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW46IEFkZGVkLgorICAg
ICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGlzIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24g
b2YgUmVuZGVyaW5nQmFja2VuZC4KKyAgICAgICAgSXQgd2lsbCBiZSB1c2VkIHRvIGhpZGUgdGhl
IGNvbXBsZXhpdHkgb2Ygc2VuZGluZyBtZXNzYWdlcyBmcm9tIFdlYlAgYW5kCisgICAgICAgIHJl
Y2VpdmluZyByZXBsaWVzIGZyb20gdGhlIEdQVVAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6c2VudEZsdXNoSWRlbnRpZmllciBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2U6OnJlY2VpdmVkRmx1c2hJZGVu
dGlmaWVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6
c2V0U2VudEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2U6OnNldFJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKToK
KyAgICAgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSBtYW5hZ2VzIG9wZXJhdGluZyBvbiB0aGUg
cGxhdGZvcm0gc3VyZmFjZSBpbiBXZWJQLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICBD
YW4gaWRlbnRpZnkgYSBSZW5kZXJpbmdCYWNrZW5kIGluIHRoZSBXZWJQIGFuZCBHUFVQLgorCisg
ICAgICAgICogV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0ZsdXNoSWRlbnRp
Zmllci5oOiBBZGRlZC4KKyAgICAgICAgVHJhY2tzIHdoZXRoZXIgYSBSZW5kZXJpbmdTdXJmYWNl
IGlzIHBlbmRpbmcgYSBmbHVzaGluZy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xp
ZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDE5LTEyLTEzICBCcmFkeSBF
aWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBTY3JpcHRDb250
cm9sbGVyJ3MgcHJvbGlmZXJhdGlvbiBvZiBFeGNlcHRpb25EZXRhaWxzKi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCmluZGV4IDJkN2MyY2UyMGYwZmNiY2VkYTEyNGEwZGRkOTVkNTI1NThmNjExNTIuLjJmZTIz
Y2M4YTI4MmNjMWEyNWU0NDJlNmFkMzdhMjIzZmExOGVlMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpA
QCAtMTExMCw4ICsxMTEwLDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURF
UlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9T
YW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJp
bmdUcnVuY2F0b3IuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N1cmZhY2VJZGVudGlmaWVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
ZXh0UnVuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xpZW50LmgKaW5k
ZXggNDNiMmEwZGRjZDUyYjVkMWFjNTYyYWU3YTEyOGU0MWQyMzNkOTg0Yi4uY2I5YjdlZGJlMmFk
MTU3ODljMTMxMGNlOGZiMmI0Y2QxMjU4ZDRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oCkBAIC0zOSw2ICszOSw3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2U7CitjbGFzcyBEb2N1
bWVudDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBVc2VyTWVkaWFSZXF1ZXN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggODhiODAx
NmExNzNhOGY5ZTM4MThkNzc5ZWU0Y2JiYjJjMGViZTgzYy4uNTIwMWFmZDFiNGYyMGRkMjcyY2Y0
MzMyZjZjOTc1ZWU5YWNmMTdhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTc0NSw2ICsxNzQ1LDcgQEAKIAkJNTVBRjE0RTYx
RUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUFGMTRFNDFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVn
aXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1NURDQzUyODIyNDA3QjIwMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1MjUyMjQwNzQ5RTAw
QzI2RTMyIC8qIFNWR1ByaW1pdGl2ZUxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NURDQzUyOTIyNDA3QjJBMDBDMjZFMzIgLyogU1ZHTGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVEQ0M1
MjMyMjQwNzNGRTAwQzI2RTMyIC8qIFNWR0xpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NURDRkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVu
ZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUVDOTU5OTIw
NkFBN0EwMDA3REQwQTkgLyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkg
LyogUGFpbnRGcmVxdWVuY3lUcmFja2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVGQTdGRkIyMTEwRUNENzAwNUFFRkU3IC8qIFNWR1pvb21B
bmRQYW5UeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUZBN0ZGQTIxMTBFQ0Q3MDA1QUVGRTcgLyogU1ZHWm9vbUFuZFBhblR5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzA0NDA1QTFFNTM5
MzYyMDAzNTY2MDEgLyogSlNBZXNDYmNDZmJQYXJhbXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDQ0MDU5MUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Fl
c0NiY0NmYlBhcmFtcy5oICovOyB9OwpAQCAtMjEyOCw2ICsyMTI5LDkgQEAKIAkJNzI0RUQzMzIx
QTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBK
U0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBE
ODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlFNjFCQTIzQTQ0MTcwMDAyRUZFNzkgLyog
UmVuZGVyaW5nU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI5RTYxQjUyM0E0MTIyMTAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1cmZhY2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlFNjFC
QjIzQTQ0MTdBMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZUNHLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlFNjFCNzIzQTQxMkYzMDAyRUZFNzkg
LyogUmVuZGVyaW5nU3VyZmFjZUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzJBQzM5RTYyMzlFQkJGNzAwQjYzRTAyIC8qIFN1cmZhY2VJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkFDMzlFNDIzOUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNG
MDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAv
KiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsK
IAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3
RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTg2NjksNiArODY3Myw3IEBACiAJ
CTU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR1ByaW1pdGl2ZUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVEQ0M1MjYyMjQwNzRGQTAwQzI2RTMyIC8qIFNWR1Byb3BlcnR5QWNjZXNzb3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1NURDQzUyNzIyNDA3NTBCMDBDMjZFMzIgLyogU1ZHUHJvcGVydHlBY2Nlc3NvckltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBY2Nlc3NvckltcGwuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NUVDOTU5NzIwNjlDOTJEMDA3REQwQTkgLyogUGFpbnRGcmVxdWVu
Y3lUcmFja2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhaW50RnJlcXVlbmN5VHJhY2tlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUVFNTM1NDIyM0IyOUU5MDBGQkE5NDQgLyogU1ZH
TWVtYmVyQWNjZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHTWVt
YmVyQWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVFRTUzNTYyMjNC
MjlGNzAwRkJBOTQ0IC8qIFNWR0FuaW1hdGVkUHJvcGVydHlBbmltYXRvckltcGwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFuaW1hdG9ySW1w
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5OSw2ICs5NjA0LDkgQEAKIAkJ
NzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyogUmVuZGVyaW5nU3VyZmFjZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJpbmdTdXJmYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
OUU2MUI3MjNBNDEyRjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyaW5nU3VyZmFjZUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQUMzOUU0MjM5RUI4N0YwMEI2M0UwMiAvKiBTdXJmYWNlSWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTdXJmYWNlSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdC
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ4ODIsNiArMjQ4OTAsNyBAQAogCQkJCUE4MEEzOEZE
MEU1MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4
MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUz
ODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTcyOUU2MUI3MjNBNDEy
RjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLywKIAkJCQkxRkM0MEZCODE2NTVD
NTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBG
QjcxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlC
Mjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8s
CkBAIC0yNTExOCw2ICsyNTEyNyw4IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8q
IFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRl
b1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZp
ZGVvU2FtcGxlLmggKi8sCisJCQkJNTVEQ0ZBQTIyMzk5QzREODAwNTBDRDIyIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCAqLywKKwkJCQk3MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyogUmVuZGVyaW5n
U3VyZmFjZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVj
dC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0Lmgg
Ki8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApA
QCAtMjUxMjgsNiArMjUxMzksNyBAQAogCQkJCUIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBT
dHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQk4NDlGNzc3NTBFRkVDNjIwMDA5MDg0OUQgLyogU3Ry
b2tlU3R5bGVBcHBsaWVyLmggKi8sCisJCQkJNzJBQzM5RTQyMzlFQjg3RjAwQjYzRTAyIC8qIFN1
cmZhY2VJZGVudGlmaWVyLmggKi8sCiAJCQkJMDg3NTU4QzMxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAgKi8sCiAJCQkJMDg3NTU4QzQxM0I0QTU3
RDAwRjQ5MzA3IC8qIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oICovLAogCQkJCTNC
QjZCODBGMjJBN0QzMTEwMDNBMkE2OSAvKiBUYWJTaXplLmggKi8sCkBAIC0zMTkwOSw2ICszMTky
MSw5IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8q
IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk1NURD
RkFBNDIzOTlDOUE2MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzI5RTYxQkEyM0E0NDE3MDAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1cmZhY2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOUU2MUJCMjNBNDQxN0EwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJm
YWNlQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBS
ZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OTVG
RjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjQzNiw2ICszMjQ1MSw3IEBACiAJCQkJOTNCMkQ4MTYwRjk5MjBEMjAwNkFFNkIyIC8qIFN1
ZGRlblRlcm1pbmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0MwNzg1MDExNjVENUJFMDAz
QTMyRUYgLyogU3VmZml4VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc2MjdCOTgxNEZCNTQy
NDAwMkNEQ0ExIC8qIFN1cHBsZW1lbnRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFDMzlF
NjIzOUVCQkY3MDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTA4NzU1OEM2MTNCNEE1N0QwMEY0OTMwNyAvKiBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyQzEyMTdEMTFBQjlFNzcwMDNDNDYyQyAvKiBT
dXNwZW5kYWJsZVRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk3NDBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHQUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKaW5kZXggZDc4MWYzNWNiNTM4ODcyNWZkYjMwZGJkMzI1NDRiMmRjNTFjMGQxMi4u
NDQxOTczYzQ1ZTVkM2EyMDU1MDcwODUxMWYzZWY0YjY4MGQ1MGU4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xp
ZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJSZW5kZXJF
bWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRl
ICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5j
bHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDQsNiArMzA1LDEwIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQog
I2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgdmlydHVhbCBSZWZQdHI8UmVu
ZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KKyNlbmRpZgorCiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xh
eWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJv
b3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmNwcAppbmRleCA1NjU1ZGMyYzI5YzcxNjFlMTJjNGNhMDI3OTA4OGViM2Y0
M2JlYjU3Li5lZTMyNjhmZTU5M2FkMmE5NjBjMjAwYTZlYWNlYWNmZjg5MGZkNzY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZS5jcHAKQEAgLTI5MjQsNiArMjkyNCwxNSBAQCBSZW5kZXJpbmdVcGRhdGVTY2hlZHVs
ZXImIFBhZ2U6OnJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpCiAgICAgcmV0dXJuICptX3JlbmRl
cmluZ1VwZGF0ZVNjaGVkdWxlcjsKIH0KIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKK1JlZlB0
cjxSZW5kZXJpbmdCYWNrZW5kPiBQYWdlOjpyZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICBpZiAo
IW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kID0gY2hyb21l
KCkuY2xpZW50KCkuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmQ7Cit9CisjZW5kaWYKKwogdm9pZCBQYWdlOjpmb3JFYWNoRG9jdW1lbnQoY29u
c3QgRnVuY3Rpb248dm9pZChEb2N1bWVudCYpPiYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8m
IGRvY3VtZW50IDogY29sbGVjdERvY3VtZW50cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaAppbmRleCA1ZjRjZWIw
YTM2NTBjNDJhOGUxN2QxMjYzZjU2ODQ3ZWYxODFjNDUzLi5mZDVhODhiNjdmN2Y3OTE1MjRkZjAz
YmRjNzEyMGJlOTM2ZDViZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIlJUQ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJS
ZWdpc3RyYWJsZURvbWFpbi5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNs
dWRlICJSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5o
IgogI2luY2x1ZGUgIlN1cHBsZW1lbnRhYmxlLmgiCkBAIC0yNzMsNiArMjc0LDEwIEBAIHB1Ymxp
YzoKICAgICBQZXJmb3JtYW5jZU1vbml0b3IqIHBlcmZvcm1hbmNlTW9uaXRvcigpIHsgcmV0dXJu
IG1fcGVyZm9ybWFuY2VNb25pdG9yLmdldCgpOyB9CiAKICAgICBSZW5kZXJpbmdVcGRhdGVTY2hl
ZHVsZXImIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpOworICAgIAorI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5nQmFja2VuZD4gcmVuZGVyaW5nQmFja2VuZCgp
OworI2VuZGlmCiAKICAgICBWYWxpZGF0aW9uTWVzc2FnZUNsaWVudCogdmFsaWRhdGlvbk1lc3Nh
Z2VDbGllbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkYXRpb25NZXNzYWdlQ2xpZW50LmdldCgp
OyB9CiAgICAgdm9pZCB1cGRhdGVWYWxpZGF0aW9uQnViYmxlU3RhdGVJZk5lZWRlZCgpOwpAQCAt
OTAxLDYgKzkwNiwxMCBAQCBwcml2YXRlOgogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z1VwZGF0ZVNjaGVkdWxlcj4gbV9yZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXI7CiAKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVuZGVyaW5n
QmFja2VuZDsKKyNlbmRpZgorCiAgICAgSGFzaFNldDxSZW5kZXJPYmplY3QqPiBtX3JlbGV2YW50
VW5wYWludGVkUmVuZGVyT2JqZWN0czsKICAgICBSZWdpb24gbV90b3BSZWxldmFudFBhaW50ZWRS
ZWdpb247CiAgICAgUmVnaW9uIG1fYm90dG9tUmVsZXZhbnRQYWludGVkUmVnaW9uOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIyZDk4MjgwMDM3NDBlY2ZiNzAzNjYxMzg2ZTA1MTA5NjM4ZjlhYTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlN1cmZhY2VJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbnRTaXplOworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZTsKKworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKK2NsYXNzIERpc3BsYXlMaXN0OworfQorCitjbGFzcyBSZW5kZXJpbmdCYWNrZW5k
IDogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyaW5nQmFja2VuZD4geworcHVibGljOgorICAgIHZp
cnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisKKyAgICAvLyBUaGVzZSBmdW5j
dGlvbiBzZW5kIElQQyBhc3luYyBtZXNzYWdlcyBidXQgdGhleSBkbyBub3QgYmxvY2sgdGhlIG1h
aW4gdGhyZWFkLgorICAgIHZpcnR1YWwgU3VyZmFjZUlkZW50aWZpZXIgY3JlYXRlUHJveHlTdXJm
YWNlKGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFj
ZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWxlYXNlUHJveHlTdXJmYWNlKFN1cmZhY2VJZGVu
dGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbmRlclRvUHJveHlTdXJmYWNlKFN1cmZh
Y2VJZGVudGlmaWVyLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBjb25zdCBGbG9h
dFJlY3QmIGNsaXApID0gMDsKKworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBtYXkgYmxvY2sgdGhl
IG1haW4gdGhyZWFkIGZvciAic29tZXRpbWUiIHRpbGwgdGhleSByZWNlaXZlIG91dC1vZi1wcm9j
ZXNzIHJlcGxpZXMuCisgICAgdmlydHVhbCBib29sIGZsdXNoUHJveHlTdXJmYWNlKFN1cmZhY2VJ
ZGVudGlmaWVyKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8UmVuZGVyaW5nU3VyZmFjZT4gc3Vy
ZmFjZShTdXJmYWNlSWRlbnRpZmllcikgPSAwOworfTsKKworfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVkN2ExZTg2YTYxN2EwNTA5NjM2OTZhY2U5
YWU4ZjQxNGNiNGQzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdTdXJmYWNlLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyoKKyogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisqLworCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIlJlbmRlcmluZ1N1cmZhY2VDRy5o
IgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
dXJmYWNlSWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vy
ZmFjZUlkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzQ2NGNlMGY1ZjgzOGYzNDMxNzUwMDc5YTFl
YTg5Mzc4ODVjYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU3VyZmFjZUlkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gU3VyZmFjZUlkZW50aWZpZXJUeXBlIHsgfTsKK3Vz
aW5nIFN1cmZhY2VJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxTdXJmYWNlSWRlbnRpZmll
clR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9SZW5kZXJpbmdTdXJmYWNlQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1JlbmRlcmluZ1N1cmZhY2VDRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMGY4NjYwOGE4MjAxNzVl
OTQzMTZkNGVkNjk0MTVlY2FlNmU0MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5kZXJpbmdTdXJmYWNlQ0cuaApAQCAtMCwwICsxLDYz
IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9T
dXJmYWNlLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworI2lmIFVTRShDRykg
JiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElP
U3VyZmFjZTsKKworY2xhc3MgUmVuZGVyaW5nU3VyZmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
bmRlcmluZ1N1cmZhY2U+IHsKK3B1YmxpYzoKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiYgcGxhdGZvcm1TdXJmYWNlKCkgeyByZXR1cm4gbV9wbGF0ZnJvbVN1cmZhY2U7IH0KKworICAg
IGJvb2wgY3JlYXRlUGxhdGZvcm1TdXJmYWNlKE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX3BsYXRmcm9tU3VyZmFjZSk7CisgICAgICAgIG1fcGxhdGZy
b21TdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoc2VuZFJp
Z2h0KSwgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSkpOworICAgICAgICByZXR1cm4g
bV9wbGF0ZnJvbVN1cmZhY2UuZ2V0KCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVy
aW5nU3VyZmFjZShDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9jb2xvclNwYWNl
KGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBtX3BsYXRmcm9tU3VyZmFjZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JT
cGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykg
JiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAyOGUyNjQ0
ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi5mNDhlMTRjYTY3YmFjN2Y4NGM0ZDgx
MWE4YzJlOTBlYzc3YTZlMGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMjUxLDYgKzI1
MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29kZXIm
IGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
Y29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0gLy8gV2ViQ29yZQotCi11c2lu
ZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAwN2QzMzA1YjgyMzk3MmU3ODdm
ZmVlN2RiODBlMTE0ZDIyNTExMjY2Li40MTUyZjljYzgyMzNhNmU4ZjQyNGVhZTAxYzE3NzNjMGZi
ZmUyOTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVs
aXN0CkBAIC0xNSw2ICsxNSw3IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJ
UikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5w
bAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMu
aW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvTmV0d29ya1Byb2Nlc3MvQ29va2llcy9XZWJDb29raWVNYW5hZ2VyLm1l
c3NhZ2VzLmluCkBAIC0xMTIsNiArMTEzLDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9O
b3RpZmljYXRpb25zL1dlYk5vdGlmaWNhdGlvbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NDb25u
ZWN0aW9uTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ2xpZW50Q29ubmVjdGlvbi5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFn
ZXJDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL1VzZXJD
b250ZW50L1dlYlVzZXJDb250ZW50Q29udHJvbGxlci5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggOTg2OWNmMTcxNjFm
ZWQ5NDQ5MmIyZWI2NzZhMzA5NjExN2NlNjUyZi4uNmMwYzVlMWFhYTc0ZjI5OTg2MmY2MjNkMGUy
ZDU0MDg2NmMwYzg1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0CkBAIC0xMjMsNiArMTIzLDEyIEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2Fn
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0
cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZl
ci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1Jl
cGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDE3YmRjYjVmMmRhYWE5YmIx
YjZhZjRkNzRhYjU4ZTUwNGE4MTIxODMuLjRiMGMyNDkzMDFiOTY5NDkyNzdlNmIxNjkyMGFkNzc1
Mzg1YzRmNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAg
VlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQ
VVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL05l
dHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXAog
ICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvY2FjaGUgXApAQCAtNTksNiArNjAsNyBAQCBW
UEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTm90aWZpY2F0aW9ucyBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL09yaWdpbkRhdGEgXAogICAgICQoV2ViS2l0MikvV2ViUHJv
Y2Vzcy9QbHVnaW5zIFwKKyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUgXAogICAgICQoV2Vi
S2l0MikvV2ViUHJvY2Vzcy9TdG9yYWdlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvVXNl
ckNvbnRlbnQgXApAQCAtMTQwLDYgKzE0Miw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAg
IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHkgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kIFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAg
UmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGMzNDhlMzBkZThhMjllOTcz
ZWFlYWE2YTliOGE4ZTA5MzNhYTg4MjUuLjFmZjc4ODJlNTIzODFhMDIwNDBiMWRhNTg4NjkzMDQ2
Nzg4NzJkNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTMzLDExICszMyw5IEBACiAjaW5jbHVkZSAiR1BV
UHJvY2Vzcy5oIgogI2luY2x1ZGUgIkdQVVByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkdQ
VVByb2Nlc3NQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
IlJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIlJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJF
cnJvcnMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKQEAgLTcwLDYgKzY4LDE2
IEBAIHZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikKIHsKIH0KIAorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIp
Cit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVy
KQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKIHZvaWQgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpCiB7CiAgICAgV1RGTG9nQWx3YXlzKCJS
ZWNlaXZlZCBhbiBpbnZhbGlkIG1lc3NhZ2UgXCIlcy4lc1wiIGZyb20gdGhlIHdlYiBwcm9jZXNz
LlxuIiwgbWVzc2FnZVJlY2VpdmVyTmFtZS50b1N0cmluZygpLmRhdGEoKSwgbWVzc2FnZU5hbWUu
dG9TdHJpbmcoKS5kYXRhKCkpOwpAQCAtODQsMjIgKzkyLDE4IEBAIFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdGVNZWRpYVBsYXll
ck1hbmFnCiAgICAgcmV0dXJuICptX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwogfQog
Ci12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQordm9pZCBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3Mo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBy
ZXN1bHQgPSBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcC5lbnN1cmUocmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIsIFsmXSgpIHsKKyAgICAgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisgICAgfSk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
IH0KIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit2b2lkIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNz
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHlNYXAuY29udGFpbnMocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
KTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcC5yZW1vdmUocmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmlu
ZGV4IGJiZmMxNjgwYmJiMzBlMTk3ZGFmODAzNjA1Y2ZjNGEyMTc5YWVmNDkuLjc2NDQ3YmQ5YmNh
ZWFlMmM4ZjFhZjFiNmRhY2I4OWEwZWFmNTQ3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMjgsMzIgKzI4LDM1
IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgot
I2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNp
bmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgot
I2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgR1BVUHJvY2VzczsKIGNsYXNzIFJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Owog
CiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRl
ZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRy
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBj
cmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5l
Y3Rpb246OklkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29u
bmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVj
ZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nl
c3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3Bl
bnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAot
ICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29u
c3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQotCiBwcml2YXRlOgogICAgIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVu
dGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwogCkBAIC02MSwxNCArNjQsMjQg
QEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBk
aWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNz
YWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYp
IG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKKworICAgIGJvb2wgZGlzcGF0Y2hN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0
Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdC
YWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIHVzaW5nIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1hcCA9IEhhc2hNYXA8UmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIsIFJlZjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+PjsKIAogICAgIFJlZjxJUEM6OkNv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNz
OworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogICAg
IGNvbnN0IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5PiBtX3Jl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OworICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1hcCBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1hcDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJl
MDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2
ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyAr
MjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJkOTA0NjZjZmNmNWVmOGI4ZWZiMjc3ZGFh
NGRiNDg1ZGJmODU2NDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0w
LDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJl
cGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVmPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDog
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOwor
fQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNv
bm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
ID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UpCit7CisgICAgaWYgKG1fc3VyZmFjZU1hcC5jb250YWlucyhzdXJmYWNl
SWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byByZW5kZXJpbmdTdXJmYWNlID0gUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZVByb3h5OjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNvbG9yU3BhY2Up
OworICAgIGlmICghcmVuZGVyaW5nU3VyZmFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byBzZW5kUmlnaHQgPSByZW5kZXJpbmdTdXJmYWNlLT5jcmVhdGVTZW5kUmlnaHQoKTsKKyAgICBt
X3N1cmZhY2VNYXAuYWRkKHN1cmZhY2VJZGVudGlmaWVyLCBXVEZNb3ZlKHJlbmRlcmluZ1N1cmZh
Y2UpKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkRpZENy
ZWF0ZVN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIsIFdURk1vdmUoc2VuZFJpZ2h0KSksIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6cmVsZWFzZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZp
ZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVj
ZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9zdXJmYWNlTWFwLmNvbnRhaW5zKHN1
cmZhY2VJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX3N1cmZhY2VNYXAucmVtb3ZlKHN1cmZhY2VJZGVudGlm
aWVyKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlclRvU3Vy
ZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgUmVuZGVyaW5nRmx1c2hJ
ZGVudGlmaWVyIHJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciwgY29uc3QgRGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3QgRmxvYXRSZWN0JiBjbGlwKQoreworICAgIGF1
dG8gaXRlciA9IG1fc3VyZmFjZU1hcC5maW5kKHN1cmZhY2VJZGVudGlmaWVyKTsKKyAgICAKKyAg
ICAvLyBDcmVhdGVTdXJmYWNlIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZv
cmUgdGhpcyBvbmUuCisgICAgLy8gQW5kIHdlIGRvIG5vdCBoYXZlIHRoZSBzdXJmYWNlIGluZm8g
dG8gY3JlYXRlIGl0LgorICAgIGlmIChpdGVyID09IG1fc3VyZmFjZU1hcC5lbmQoKSkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEdldCB0aGUgc3VyZmFjZSBHcmFwaGljc0NvbnRleHQuCisgICAgYXV0byYgcmVuZGVyaW5n
U3VyZmFjZSA9IGl0ZXItPnZhbHVlOworICAgIEdyYXBoaWNzQ29udGV4dCYgc3VyZmFjZUNvbnRl
eHQgPSByZW5kZXJpbmdTdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIC8v
IFJlbmRlciB0aGUgZGlzcGxheSBsaXN0IGludG8gdGhlIEdyYXBoaWNzQ29udGV4dC4KKyAgICBE
aXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoc3VyZmFjZUNvbnRleHQsIGRpc3BsYXlMaXN0
KTsKKyAgICByZXBsYXllci5yZXBsYXkoY2xpcCk7CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIHJl
bmRlcmluZyBvcGVyYXRpb25zIGFyZSBmbHVzaGVkIHRvIHRoZSBHcmFwaGljc0NvbnRleHQuCisg
ICAgcmVuZGVyaW5nU3VyZmFjZS0+Zmx1c2hHcmFwaGljc0NvbnRleHQoKTsKKworICAgIC8vIE5v
dGlmeSB0aGUgV2ViUHJvY2Vzcy4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpEaWRSZW5kZXJUb1N1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIsIHJlbmRlcmluZ0Zs
dXNoSWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDVmZTM1
NGQ3NDU1MDNlOTJkZTUxYWIzMTU1ZDY4NWEwZTQzMjEzNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvU3VyZmFjZUlkZW50aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRGlz
cGxheUxpc3Q7Cit9CitjbGFzcyBGbG9hdFJlY3Q7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkKKyAgICA6IHB1YmxpYyBSZWZDb3VudGVkPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eT4KKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KCk7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9u
KiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90
IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNyZWF0ZVN1cmZh
Y2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSk7
CisgICAgdm9pZCByZWxlYXNlU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcik7Cisg
ICAgdm9pZCByZW5kZXJUb1N1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIFJlbmRl
cmluZ0ZsdXNoSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0JiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7CisgICAgICAgIAorICAgIHVzaW5nIFN1
cmZhY2VNYXAgPSBIYXNoTWFwPFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1
ZV9wdHI8UmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Pj47CisKKyAgICBXZWFrUHRyPEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOwor
ICAgIFN1cmZhY2VNYXAgbV9zdXJmYWNlTWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJk
NzJhYjY1ZWI0MTYwNzIzNGVjNTlmN2RjZWZmYzBiMGRiZDA2NwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMxIEBACisjIENvcHlyaWdodCAo
QykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisj
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21l
c3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB7CisgICAgdm9pZCBDcmVhdGVT
dXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBXZWJD
b3JlOjpJbnRTaXplIHNpemUsIFdlYkNvcmU6OkludFNpemUgY29udGV4dFNpemUsIGVudW06dWlu
dDhfdCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgdm9pZCBSZWxlYXNlU3Vy
ZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKKyAgICB2
b2lkIFJlbmRlclRvU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRl
bnRpZmllciwgV2ViS2l0OjpSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgcmVuZGVyaW5nRmx1c2hJ
ZGVudGlmaWVyLCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3Qs
IFdlYkNvcmU6OkZsb2F0UmVjdCBjbGlwKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45ZGE4ZTRjOWYyYzNhZWIyNGNjOWE5ZDFhNjdmYTc3MTZiNDg3MDMxCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nU3VyZmFjZVByb3h5LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZiBVU0UoQ0cpCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuaCIKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5
Q0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmEyZWFmNGUxMmRkYTBkZDVlOWY2YTdmZjMwNzFkYjJkYmRhZWQ4
YzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9jZy9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5jcHAKQEAgLTAsMCArMSw4
MSBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0OgorKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cu
aCIKKworI2lmIFVTRShDRykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250
ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eT4g
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5OjpjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Y29uc3QgSW50U2l6ZSYgY29udGV4dFNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAg
ICBhdXRvIHN1cmZhY2UgPSAgSU9TdXJmYWNlOjpjcmVhdGUoc2l6ZSwgY29udGV4dFNpemUsIGNh
Y2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEluaXRhbGl6ZSB0aGUgY29vcmRpbmF0ZSBzeXN0
ZW0uCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlR3JhcGhp
Y3NDb250ZXh0KCk7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBj
b250ZXh0LnRyYW5zbGF0ZSgwLCAtY29udGV4dFNpemUuaGVpZ2h0KCkpOworCisgICAgUmV0YWlu
UHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250
ZXh0KCk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgY29udGV4dFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94
eShXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5KHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYg
c3VyZmFjZSkKKyAgICA6IG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworfQorCitNYWNo
U2VuZFJpZ2h0IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlU2VuZFJpZ2h0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVTZW5kUmlnaHQoKTsKK30KKwor
R3JhcGhpY3NDb250ZXh0JiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmVuc3VyZUdyYXBo
aWNzQ29udGV4dCgpCit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250
ZXh0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5OjpmbHVzaEdyYXBo
aWNzQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1c2goZW5zdXJlR3JhcGhpY3NDb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFVTRShDRykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3Vy
ZmFjZVByb3h5Q0cuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQzNzIxMDUx
MTBkZTFjMjlmMjFlZjA3YjkwYjJmODY1N2U5ZDE1ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eUNHLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKENHKSAmJiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDxXZWJD
b3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbnRTaXplOwor
Y2xhc3MgSU9TdXJmYWNlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3Rl
UmVuZGVyaW5nU3VyZmFjZVByb3h5IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eT4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6Q29s
b3JTcGFjZSk7CisKKyAgICBNYWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Owor
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cisg
ICAgdm9pZCBmbHVzaEdyYXBoaWNzQ29udGV4dCgpOworCitwcml2YXRlOgorICAgIFJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiYm
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IG1fc3VyZmFjZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENHKSAmJiBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcAppbmRleCA2NzU4
ZjRjOTMxMmU0NDNiNzJhNjgzN2FkOWNhMmM2MGM1ZmQ2MzIzLi5jNmRiYWI4MTc3MjczM2IwY2Nh
MTQ2ZTA3ZGJmODdiZTA5YWI2YjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHAK
QEAgLTU2LDEwICs1NiwxMiBAQCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6UmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUAogICAgICwgbV9sb2dJ
ZGVudGlmaWVyKFdURjo6TG9nZ2VySGVscGVyOjp1bmlxdWVMb2dJZGVudGlmaWVyKCkpCiAjZW5k
aWYKIHsKKyAgICBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZVJlY2VpdmVyTWFw
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAwLCAqdGhpcyk7CiB9CiAKIFJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKQogewor
ICAgIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIDApOwogfQogCiB2b2lkIFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5OjpjcmVhdGVNZWRpYVBsYXllcihNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJ
ZGVudGlmaWVyIGlkLCBNZWRpYVBsYXllckVudW1zOjpNZWRpYUVuZ2luZUlkZW50aWZpZXIgZW5n
aW5lSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sIHN1Y2NlZWRlZCk+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oCmluZGV4IGQ2Y2Q3
MGMzZmNmOTNhYmExNzkwYzhiOTMzZjUxNTlhZjY0MDRjNTYuLmNjYTM1NWJhYWNjYmM0OTBlZmY1
ZWJkYjY2NDQxMGYxZmJlOWI3NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5oCkBAIC01
Miw5ICs1Miw2IEBAIHB1YmxpYzoKICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOyB9CiAgICAgdm9pZCBjbGVhcigpOwogCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZUZyb21XZWJQcm9jZXNzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyKSB7IGRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOyB9
Ci0gICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2VzcyhJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRy
PElQQzo6RW5jb2Rlcj4mIGVuY29kZXIpIHsgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIsIGVuY29kZXIpOyB9Ci0KICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAg
ICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsOwogICAgIGNvbnN0IHZvaWQqIGxv
Z0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGYyZTllZDdhYjU0MDJl
ZjUxMTg4ZjdlOGRiZTM5NmJhOGFjZTBmYWQuLmRiMmI2MjIwYzkzMWIwOTZiYjU4NTMzY2RkZjhm
MjBlZDJjZjQxM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpA
QCAtMjcsNiArMjcsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyCiAK
IFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFID0gJ1dhbnRzQ29ubmVjdGlvbicKK1dBTlRTX0RJ
U1BBVENIX01FU1NBR0VfQVRUUklCVVRFID0gJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJwogTEVHQUNZ
X1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIE5PVF9SRUZDT1VOVEVEX1JF
Q0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVkJwogU1lOQ0hST05PVVNfQVRUUklCVVRF
ID0gJ1N5bmNocm9ub3VzJwpAQCAtMjE2LDEwICsyMTcsMTMgQEAgZGVmIHR5cGVzX3RoYXRfY2Fu
bm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3Jr
ZXJPckNsaWVudERhdGEnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
SWRlbnRpZmllcicsCisgICAgICAgICdXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJDb3JlOjpTV1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YktpdDo6QWN0aXZpdHlTdGF0ZUNoYW5nZUlEJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0
aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3Rl
SWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
JywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFn
ZUFyZWFJbXBsSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VOYW1lc3BhY2VJ
ZGVudGlmaWVyJywKQEAgLTc1NSwxMyArNzU5LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hh
bmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2Fn
ZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3lu
Y19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NB
R0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2
ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVj
b2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNf
YXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0
ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAog
ICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNz
YWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIu
aGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtc
bicpCiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzcwLDEzICs3
NzcsMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAg
ICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBz
eW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVT
U0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZl
ci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVU
RSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5v
dCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVU
RSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0
ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisg
ICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9B
VFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5
bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRl
eCA1NDI0ZTVkZmJiMTUyMDEwYjBiMzJkNmY1ZWE2ZDUzNTg5MTRlNTZiLi4xYjliMDk0Mjc5Y2Q1
MzFhZjI5NDUzMDhhZGQ4ZmIzMzMyY2RlYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI1LDYgKzI1LDkg
QEAgR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLmNwcAogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAogR1BVUHJvY2Vzcy9HUFVQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNw
cAogCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eUNHLmNwcAorCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5h
Z2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtDT1JTUHJlZmxpZ2h0Q2hlY2tlci5jcHAKQEAgLTU0Miw2ICs1NDUs
OCBAQCBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVCcm93c2VyRnVuY3MuY3Bw
IEBuby11bmlmeQogV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlUGx1Z2luLmNw
cCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpblN0
cmVhbS5jcHAgQG5vLXVuaWZ5CiAKK1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcAorCiBXZWJQcm9jZXNzL1N0b3JhZ2UvV2ViU1dDbGllbnRDb25u
ZWN0aW9uLmNwcAogV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ29udGV4dE1hbmFnZXJDb25uZWN0
aW9uLmNwcAogV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXT3JpZ2luVGFibGUuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKaW5kZXggMzZmMjk1ZDNmMzAyNjhjZTkxMjIyNGMzMzVlMDgwNjcwYTRiZjIz
YS4uYjVmN2Q3YmJkNDhjNDQ0ZjNjN2ViMDMyZDZlY2FmMzMyZGI4NTA4YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dApAQCAtNjI4LDkgKzYyOCwxMiBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJj
ZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAog
R1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKLS8vUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcAotLy9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKK1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5j
cHAKK1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVt
b3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2tNZXNz
YWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCA1Yzg1ZmMxNTQ5NGUxYjIyMzE1NmEzNTRjYWE5ZDJiMmY2ZTg5YjlkLi40ZGVmZDk3
MWVlM2RmZjQwZWI0Y2ZmZmZlMWMxYzNhYWIxNmM4MGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTkyLDcgKzkyLDYgQEAKIAkJMDc2
RTg4NEUxQTEzQ0FERjAwNUU5MEZDIC8qIEFQSUNvbnRleHRNZW51Q2xpZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzZFODg0RDFBMTNDQURGMDA1
RTkwRkMgLyogQVBJQ29udGV4dE1lbnVDbGllbnQuaCAqLzsgfTsKIAkJMDc3MjgxMUQyMTIzNEZG
NjAwQzhFRjJFIC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0MTBGNDMxOUFGN0IyNzAw
MkVCQUI1IC8qIFVzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5oICovOyB9OwogCQkw
NzkyMzE0ODIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlN
ZXNzYWdlc1JlcGxpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3OTIzMTQyMjM5Q0JDQjUwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oICovOyB9OwotCQkwNzkyMzE0OTIzOUNCQ0I4MDA5NTk4
RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3OTIzMTQzMjM5Q0JDQjYw
MDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwICov
OyB9OwogCQkwNzkyMzE0QTIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyTWVzc2FnZXNSZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwNzkyMzE0NDIzOUNCQ0I2MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmggKi87IH07CiAJCTA3OTIzMTRCMjM5Q0JDQjgwMDk1OThF
MiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMzE0NTIzOUNC
Q0I3MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwICovOyB9OwogCQkwNzkyMzE0QzIzOUNCQ0I4MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDc5MjMxNDYyMzlDQkNCNzAwOTU5OEUyIC8qIFJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5TWVzc2FnZXMuaCAqLzsgfTsKQEAgLTExOTMsNiArMTE5Miw3IEBA
CiAJCTcxMTcyNUE5MjI4RDU2NDMwMDAxODUxNCAvKiBXZWJzaXRlTGVnYWN5T3ZlcmZsb3dTY3Jv
bGxpbmdUb3VjaFBvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzExNzI1QTgyMjhENTYzQTAwMDE4NTE0IC8qIFdlYnNpdGVMZWdhY3lPdmVyZmxv
d1Njcm9sbGluZ1RvdWNoUG9saWN5LmggKi87IH07CiAJCTcxQTY3NkE2MjJDNjIzMjUwMDdENjI5
NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBX
S1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLzsgfTsKIAkJNzFGQjgxMEIyMjYwNjI3
RTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUZCODEwQTIy
NjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xp
Y3kuaCAqLzsgfTsKKwkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oICovOyB9OwogCQk3MjhFODZGMTE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNr
ZXJNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
OEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovOyB9OwogCQk3
NUE4RDJDODE4N0NDRkFCMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NUE4RDJDNDE4N0NDRjlGMDBD
MzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHVibGljLCApOyB9OyB9OwogCQk3NUE4RDJENjE4N0QxQzBFMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3Rv
cmVJbnRlcm5hbC5oICovOyB9OwpAQCAtMzY0OSw2ICszNjQ5LDggQEAKIAkJNTNDRkJCQzYyMjI0
RDFCMDAwMjY2NTQ2IC8qIFRleHRDaGVja2VyQ29tcGxldGlvbi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1M0NGQkJDNzIyMjREMUIwMDAyNjY1NDYgLyogVGV4dENo
ZWNrZXJDb21wbGV0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRD
aGVja2VyQ29tcGxldGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0YzQ0FB
NTIwNkM0NDNFMDA4NjQ5MEUgLyogTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVEQ0ZBQTAyMzk5QkRBMjAwNTBDRDIyIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUEx
MjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTcwQUI4RjIyMEFFM0JENzAwQjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2VjS2V5UHJveHlTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzBBQjkwMDIwQjI1MTc0MDBCOEJFODcgLyogQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eUNvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQ
cm94eUNvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzBBQjkwMzIwQjI1
NDFDMDBCOEJFODcgLyogU2VjS2V5UHJveHlTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFNlY0tleVByb3h5U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0zODk3LDggKzM4OTksMTkgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2
Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9
IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0
dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9
IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcx
RkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNw
YXRjaFBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2lt
dWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjMwODQ5NTIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5NjIz
QTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzA4NDk3MjNBNDczMjgwMDky
QTFBNiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5ODIzQTQ3MzI4MDA5MkExQTYgLyog
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjMwODQ5QTIzQTQ3MzU1MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3Vy
ZmFjZVByb3h5Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjMwODQ5QjIzQTQ3MzU1MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVBy
b3h5Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5Q0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI2QzVBREYy
MzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI2QzVBRTUyM0EwMDA3OTAwRDM0MjQ4IC8qIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkM1QUVFMjNBMUQwRTEwMEQzNDI0OCAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1h
Yy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUg
LyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJBRDMwMDMyM0EzMDdDQzAwN0JFMjlBIC8qIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJBRDMwMDQyM0EzMTU4OTAwN0JFMjlBIC8qIFJlbW90ZVJlbmRl
cmluZ1N1cmZhY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nU3VyZmFjZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyog
V0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
V2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJD
NTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTYyNzksNiArNjI5Miw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCUE3OENDREQ4MTkzQUM5RTMwMDVFQ0MyNiAvKiBjb20uYXBwbGUuV2ViS2l0LkdQVS5z
YiAqLywKKwkJCQk3MjZDNUFERjIzOUYwN0FFMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmggKi8sCiAJCQkpOwogCQkJbmFtZSA9ICJSZWNvdmVyZWQgUmVmZXJlbmNlcyI7
CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtNjMxMiw2ICs2MzI2LDcgQEAKIAkJCQky
RDlGQjIwNDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQw
MDQ5RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlh
ICovLAorCQkJCTcyMDVBRjI0MjNBNDcyQzEwMDJEQzM3QiAvKiBSZW5kZXJpbmdCYWNrZW5kICov
LAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oICovLAogCQkJCTJEOUZCMjA5MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluICovLApAQCAtNzY0NCw2ICs3NjU5LDQw
IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJ
NzIwNUFGMjQyM0E0NzJDMTAwMkRDMzdCIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMzA4NDk5MjNBNDczMkQwMDky
QTFBNiAvKiBjZyAqLywKKwkJCQk3MjMwODQ5NjIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MjMwODQ5NTIzQTQ3MzI4MDA5MkExQTYg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzIzMDg0OTcyM0E0NzMy
ODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywK
KwkJCQk3MjMwODQ5ODIzQTQ3MzI4MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVBy
b3h5LmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQk3MjMwODQ5OTIzQTQ3MzJEMDA5MkExQTYgLyogY2cg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMzA4NDlB
MjNBNDczNTUwMDkyQTFBNiAvKiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5jcHAgKi8s
CisJCQkJNzIzMDg0OUIyM0E0NzM1NTAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQ
cm94eUNHLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNnOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJNzJBRDMwMDUyM0EzMTVFMzAwN0JFMjlBIC8qIFJlbmRlcmluZ0JhY2tl
bmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTU1RENG
QUEwMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJ
CQk1NURDRkFBMTIzOTlCREEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICov
LAorCQkJCTcyNkM1QUVFMjNBMUQwRTEwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Lm1lc3NhZ2VzLmluICovLAorCQkJCTcyQUQzMDA0MjNBMzE1ODkwMDdCRTI5QSAvKiBSZW1vdGVS
ZW5kZXJpbmdTdXJmYWNlLmggKi8sCisJCQkJNzI2QzVBRTUyM0EwMDA3OTAwRDM0MjQ4IC8qIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkJNzJBRDMwMDMyM0EzMDdDQzAwN0JF
MjlBIC8qIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBS
ZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4
NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNzk0Myw2ICs3OTkyLDcgQEAKIAkJCQk1MTA1QjBE
MjE2MkY3QTVFMDBFMjc3MDkgLyogTmV0d29yayAqLywKIAkJCQkzMTA5OTk3NDE0NkM4QUE4MDAy
OURFQjkgLyogTm90aWZpY2F0aW9ucyAoVXNlcikgKi8sCiAJCQkJMUE2RkI3QUExMUU2NEI0OTAw
REIxMzcxIC8qIFBsdWdpbnMgKi8sCisJCQkJNzJBRDMwMDUyM0EzMTVFMzAwN0JFMjlBIC8qIFJl
bmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNTExOEU5OTgxRjI5NTI1OTAwM0VGOUY1IC8qIFN0b3Jh
Z2UgKi8sCiAJCQkJMUFBRjA4QUExOTI2OTMwQjAwQjYzOTBDIC8qIFVzZXJDb250ZW50ICovLAog
CQkJCTU3NjA4MjhBMjAyOTg0QzkwMDExNjY3OCAvKiBXZWJBdXRoZW50aWNhdGlvbiAqLywKQEAg
LTEwMTM5LDYgKzEwMTg5LDcgQEAKIAkJCQkxQTU3MDRGQzFCRTE3NTExMDA4NzRBRjEgLyogUmVt
b3RlT2JqZWN0SW52b2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzODAxODU5MEFF
NDAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QUMxMzM4NjE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzI2QzVBRTEyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OTAxODdCM0Iz
QTAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjU5NDdBODE4N0I1MTc2MDA0Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0
b3JNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1OTQ3OUIxODdCM0I2MDAwNDM3ODU3
IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJveHkuaCBpbiBIZWFkZXJzICovLApAQCAt
MTE3OTksNyArMTE4NTAsNiBAQAogCQkJCTJENzJBMUZBMjEyQkY0NkUwMDUxN0EyMCAvKiBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGRjI0QTJEMTg3
OUU0QkMwMDNBQkYwQyAvKiBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJEQzE4RkI0MjE4QTZFOUUwMDI1QTg4RCAv
KiBSZW1vdGVMYXllclRyZWVWaWV3cy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTA3OTIzMTQ5MjM5
Q0JDQjgwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDc5MjMxNEIyMzlDQkNCODAwOTU5OEUyIC8qIFJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTFBQzEzMzg1MTg1OTBDNDYwMEYzRUMwNSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeU1l
c3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU5NDdBNzE4N0I1MTc2MDA0
Mzc4NTcgLyogUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDU4NGExYjNkZjYzZDgzNzlmZDY4OWJjY2Y4N2Q4
Njc1NmRlZDkyYzcuLmU1YTgxZGQ0YmJkMWQ0Mjg4OTVmYmRlMGJlN2JmODk2N2JkZjU1ZGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uY3BwCkBAIC01NiwxNiArNTYsMTggQEAgdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6
RGVjb2RlciYgZGVjb2RlcikKIHsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlz
cGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVVByb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3Bh
dGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7
CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKIHsKLSAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnN1cHBsZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZl
TWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCA4Yjc0Mjk5
ZTRhYTZiNzYzNjgwNzE1ODc2ZjBkNGU1NzQyYTczMmQ0Li40MGYxZTE1YTBhMzcxZTlmMTVkYzRm
ZDUwNTg1MTI1MWJhMzQ1OTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKICAg
ICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVj
ZWl2ZXJNYXA7IH0KIAogcHJpdmF0ZToKICAgICBHUFVQcm9jZXNzQ29ubmVjdGlvbihJUEM6OkNv
bm5lY3Rpb246OklkZW50aWZpZXIpOwpAQCAtNTMsMTAgKzU0LDE1IEBAIHByaXZhdGU6CiAgICAg
Ly8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBi
b29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAg
ICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKyAgICAKICAgICAvLyBUaGUgY29u
bmVjdGlvbiBmcm9tIGEgd2ViIHByb2Nlc3MgdG8gdGhpcyBHUFUgcHJvY2Vzcy4KICAgICBSZWY8
SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJN
YXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFl
ODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNz
YWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzNm
OWExNjJmZjYyYzg4OThjMTE4MDMyY2Y4YTM1YmVmYjYxYzYzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZWZQdHI8UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKKyAgICA6IG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6Omdl
bmVyYXRlKCkpCit7CisgICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVy
IGluIHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1h
cCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVj
ZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIu
dG9VSW50NjQoKSwgKnRoaXMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwg
MCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2Vp
dmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigq
dGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
CisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJl
bmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitS
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5kU3VyZmFj
ZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikKK3sKKyAgICBhdXRvIGl0ZXIg
PSBtX3N1cmZhY2VNYXAuZmluZChzdXJmYWNlSWRlbnRpZmllcik7CisKKyAgICBpZiAoaXRlciAg
PT0gbV9zdXJmYWNlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAg
ICByZXR1cm4gaXRlci0+dmFsdWUucHRyKCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAg
IHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OndhaXRGb3JEaWRDcmVhdGVTdXJmYWNlKCkKK3sKKyAgICBSZWY8SVBDOjpD
b25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24t
PndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpEaWRDcmVhdGVTdXJmYWNlPihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAx
X3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJp
dmVzKTsKK30KKworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWl0Rm9yRGlkUmVuZGVy
VG9TdXJmYWNlKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0
aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0
ZWx5PE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRSZW5kZXJUb1N1cmZhY2U+
KG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJ
bnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmRpZENyZWF0ZVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFj
ZUlkZW50aWZpZXIsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIC8vIFN1cmZhY2Ug
bWlnaHQgaGF2ZSBiZWVuIHJlbGVhc2VkIGJlZm9yZSB0aGlzIG1lc3NhZ2UgaXMgcmVjZWl2ZWQu
CisgICAgaWYgKGF1dG8qIHN1cmZhY2UgPSBmaW5kU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcikp
IHsKKyAgICAgICAgQVNTRVJUKCFzdXJmYWNlLT5wbGF0Zm9ybVN1cmZhY2UoKSk7CisgICAgICAg
IGlmICghc3VyZmFjZS0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKFdURk1vdmUoc2VuZFJpZ2h0KSkp
IHsKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmVsZWFz
ZVByb3h5U3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcik7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkUmVuZGVyVG9TdXJmYWNlKFdlYkNvcmU6
OlN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBSZW5kZXJpbmdGbHVzaElkZW50
aWZpZXIgcmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyKQoreworICAgIC8vIFN1cmZhY2UgbWlnaHQg
aGF2ZSBiZWVuIHJlbGVhc2VkIGJlZm9yZSBwYWludGluZyBoYXMgZmluaXNoZWQuCisgICAgaWYg
KGF1dG8qIHN1cmZhY2UgPSBmaW5kU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllcikpIHsKKyAgICAg
ICAgLy8gRGlkQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQg
YmVmb3JlIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UuCisgICAgICAgIEFTU0VSVChzdXJmYWNlLT5w
bGF0Zm9ybVN1cmZhY2UoKSk7CisgICAgICAgIEFTU0VSVChzdXJmYWNlLT5zZW50Rmx1c2hJZGVu
dGlmaWVyKCkpOworICAgICAgICBzdXJmYWNlLT5zZXRSZWNlaXZlZEZsdXNoSWRlbnRpZmllcihy
ZW5kZXJpbmdGbHVzaElkZW50aWZpZXIpOworICAgIH0KK30KKworU3VyZmFjZUlkZW50aWZpZXIg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlUHJveHlTdXJmYWNlKGNvbnN0IEludFNpemUm
IHNpemUsIGNvbnN0IEludFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
Cit7CisgICAgU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIgPSBTdXJmYWNlSWRl
bnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBBU1NFUlQoIW1fc3VyZmFjZU1hcC5jb250YWlucyhz
dXJmYWNlSWRlbnRpZmllcikpOworCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpDcmVhdGVTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCBzaXplLCBjb250
ZXh0U2l6ZSwgY29sb3JTcGFjZSksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAg
IG1fc3VyZmFjZU1hcC5hZGQoc3VyZmFjZUlkZW50aWZpZXIsIFJlbW90ZVJlbmRlcmluZ1N1cmZh
Y2U6OmNyZWF0ZShjb2xvclNwYWNlKSk7CisgICAgcmV0dXJuIHN1cmZhY2VJZGVudGlmaWVyOwor
fQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VQcm94eVN1cmZhY2UoU3Vy
ZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAgaWYgKCFtX3N1cmZhY2VN
YXAucmVtb3ZlKHN1cmZhY2VJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6cmVuZGVyVG9Qcm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlk
ZW50aWZpZXIsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNv
bnN0IEZsb2F0UmVjdCYgY2xpcCkKK3sKKyAgICBhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uo
c3VyZmFjZUlkZW50aWZpZXIpOworCisgICAgLy8gVGhlIGNhbGxlciBtdXN0IGNhbGwgY3JlYXRl
UHJveHlTdXJmYWNlKCkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICBpZiAoIXN1
cmZhY2UpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBzdXJmYWNlLT5zZXRTZW50Rmx1c2hJZGVudGlmaWVyKFJlbmRlcmluZ0Zs
dXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpSZW5kZXJUb1N1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIsIHN1
cmZhY2UtPnNlbnRGbHVzaElkZW50aWZpZXIoKSwgZGlzcGxheUxpc3QsIGNsaXApLCBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpmbHVzaFByb3h5U3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikK
K3sKKyAgICBhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOwor
CisgICAgLy8gVGhlIGNhbGxlciBtdXN0IGNhbGwgY3JlYXRlUHJveHlTdXJmYWNlKCkgYmVmb3Jl
IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KKyAgICBpZiAoIXN1cmZhY2UpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBj
b25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNp
Z25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgd2FpdHNDb3VudC0tOyApIHsKKyAgICAg
ICAgaWYgKCFzdXJmYWNlLT5pc1BlbmRpbmdGbHVzaCgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIC8vIFdlIG5vdCBoYXZlIHJlY2VpdmVkIERpZFJlbmRlclRvU3VyZmFjZSwgc28gd2Fp
dCBmb3IgaXQuCisgICAgICAgIGlmICghd2FpdEZvckRpZFJlbmRlclRvU3VyZmFjZSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3Vy
ZmFjZUlkZW50aWZpZXIpOworICAgIH0KKworICAgIC8vIG1fc3VyZmFjZU1hcCBtYXkgaGF2ZSBj
aGFuZ2VkIHdoaWxlIHdhaXRpbmcgZm9yIERpZFJlbmRlclRvU3VyZmFjZS4KKyAgICBpZiAoIXN1
cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBzdXJmYWNlLT5pc1Bl
bmRpbmdGbHVzaCgpOworfQorCitSZWZQdHI8UmVuZGVyaW5nU3VyZmFjZT4gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6c3VyZmFjZShTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllcikK
K3sKKyAgICBhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOwor
CisgICAgLy8gVGhlIGNhbGxlciBkaWQgbm90IGNyZWF0ZVByb3h5U3VyZmFjZSgpIGJlZm9yZSBj
YWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAv
LyBEaWRDcmVhdGVTdXJmYWNlIGhhcyBub3QgcmVjZWl2ZWQgeWV0LCBzbyB3YWl0IGZvciBpdC4K
KyAgICBpZiAoIXN1cmZhY2UtPnBsYXRmb3JtU3VyZmFjZSgpKSB7CisgICAgICAgIGlmICghd2Fp
dEZvckRpZENyZWF0ZVN1cmZhY2UoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworICAgIH0KKwor
ICAgIC8vIG1fc3VyZmFjZU1hcCBtYXkgaGF2ZSBjaGFuZ2VkIHdoaWxlIHdhaXRpbmcgZm9yIERp
ZENyZWF0ZVN1cmZhY2UuCisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIERpZENyZWF0ZVN1cmZhY2Ugd2FzIHJlY2VpdmVkIGJ1dCBpdCByZXR1cm5z
IGEgd3Jvbmcgc3VyZmFjZUlkZW50aWZpZXIuCisgICAgaWYgKCFzdXJmYWNlLT5wbGF0Zm9ybVN1
cmZhY2UoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIHJldHVybiBtYWtlUmVmUHRyKHN1cmZhY2UpOwor
fQorCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTJlOTNiZDE5ZDE1ZDI5ODUzZTgxMmY4YmRh
MDNkMzBmZTNjZDdhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDgz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5k
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
CisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4gY3JlYXRl
KCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNz
YWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92
ZXJyaWRlOworCisgICAgLy8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRGb3JEaWRDcmVhdGVTdXJm
YWNlKCk7CisgICAgYm9vbCB3YWl0Rm9yRGlkUmVuZGVyVG9TdXJmYWNlKCk7CisKKyAgICAvLyBk
aWRSZWNlaXZlTWVzc2FnZSgpIGhhbmRsZXJzCisgICAgdm9pZCBkaWRDcmVhdGVTdXJmYWNlKFdl
YkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBNYWNoU2VuZFJpZ2h0KTsKKyAgICB2b2lkIGRpZFJl
bmRlclRvU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgUmVuZGVyaW5nRmx1c2hJ
ZGVudGlmaWVyKTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBXZWJDb3JlOjpTdXJm
YWNlSWRlbnRpZmllciBjcmVhdGVQcm94eVN1cmZhY2UoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGNvbnRleHRTaXplLCBXZWJDb3JlOjpDb2xvclNwYWNl
KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbGVhc2VQcm94eVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFj
ZUlkZW50aWZpZXIpIG92ZXJyaWRlOworICAgIHZvaWQgcmVuZGVyVG9Qcm94eVN1cmZhY2UoV2Vi
Q29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYsIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgYm9v
bCBmbHVzaFByb3h5U3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcikgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ1N1cmZhY2U+IHN1cmZhY2UoV2ViQ29yZTo6
U3VyZmFjZUlkZW50aWZpZXIpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQoKTsKKyAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlKiBmaW5kU3VyZmFjZShX
ZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllcik7CisKKyAgICB1c2luZyBTdXJmYWNlTWFwID0gSGFz
aE1hcDxXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgUmVmPFJlbW90ZVJlbmRlcmluZ1N1cmZh
Y2U+PjsKKyAgICBTdXJmYWNlTWFwIG1fc3VyZmFjZU1hcDsKKyAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfQorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDE1MzdmMGFjN2VhNTNlMDllZjUz
MzEzNzdiNTc5NTEwODJmNDdmNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMu
aW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kIHsKKyAgICB2b2lkIERpZENyZWF0ZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlk
ZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAg
IHZvaWQgRGlkUmVuZGVyVG9TdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyIHN1cmZh
Y2VJZGVudGlmaWVyLCBXZWJLaXQ6OlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciByZW5kZXJpbmdG
bHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdTdXJmYWNlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmY2MDVlNTljYTg2OWUz
NGM0MTBjNTMzYmQyZjcwODNhMzMzNGFhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2UuaApA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3Bh
Y2UuaD4KKworCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdTdXJmYWNlLmg+CisjaW5jbHVk
ZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJl
bW90ZVJlbmRlcmluZ1N1cmZhY2UgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFjZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlPiBjcmVhdGUo
V2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZShjb2xvclNwYWNlKSk7CisgICAgfQor
CisgICAgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIHNlbnRGbHVzaElkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXI7IH0KKyAgICBSZW5kZXJpbmdGbHVzaElk
ZW50aWZpZXIgcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlY2Vp
dmVkRmx1c2hJZGVudGlmaWVyOyB9CisgICAgCisgICAgdm9pZCBzZXRTZW50Rmx1c2hJZGVudGlm
aWVyKFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciBzZW50Rmx1c2hJZGVudGlmaWVyKQorICAgIHsK
KyAgICAgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gc2VudEZsdXNoSWRlbnRpZmllcjsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKFJlbmRlcmluZ0ZsdXNo
SWRlbnRpZmllciByZWNlaXZlZEZsdXNoSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIG1fcmVj
ZWl2ZWRGbHVzaElkZW50aWZpZXIgPSByZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKKyAgICB9CisK
KyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVu
dGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBS
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlKFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAg
ICAgICAgOiBXZWJDb3JlOjpSZW5kZXJpbmdTdXJmYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAg
IH0KKworICAgIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7
CisgICAgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7
Cit9OworCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NjQ3OTVjOTRiYThh
MWIzYThlYTBiYWU1YjdkNmJmOWM2N2IyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVt
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44N2E0MjhiOWFiN2IyZTNlYTljZDE0OGFhNGI3NTNhNjJlYjE4NDE5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVu
ZGVyaW5nRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1
c2luZyBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmlu
Z0ZsdXNoSWRlbnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDNh
YmIxYzdlMzdjNDdkZWUzNjgzNDcyZTJlMzM3YjQ1ZmFmNTU4MDUuLmFlNDFhNmU4MTJiNDc4OWQ1
MTRhYTM2MDNiOGRhN2YyMGE0N2Y0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zOSw2
ICszOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
cy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlBh
Z2VCYW5uZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVk
ZSAiVXNlckRhdGEuaCIKICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNsdWRlICJX
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTg4MSwxNCArODgyLDE5IEBAIEdyYXBoaWNzTGF5
ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QK
IH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0K
IFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlz
cGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsK
ICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAg
ICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxh
eUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRl
UmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZSgpOworfQogI2VuZGlmCiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCmluZGV4IDcyZWJlZjUwZGY5YjE0YTg3MmZjMzU2MGExYzgxNzM3NDUxZDcwMjcu
LjkzNzYwNjUwMTJlZTFlYWNiZGZiNDc1MTA2MWFkMmE1NmM4NTkxYWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKQEAgLTIzMCw2ICsyMzAsMTAgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29y
ZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisgICAgUmVmUHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKyNlbmRpZgorCiAgICAgQ29tcG9zaXRp
bmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAog
ICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdz
PigK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385689</attachid>
            <date>2019-12-14 10:16:24 -0800</date>
            <delta_ts>2020-01-05 16:17:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20191214101623.patch</filename>
            <type>text/plain</type>
            <size>111943</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNTI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjYxOGExMDJiMTFmNDRi
YzJkZDQ0MjlkYmZmNWYzYzJiNjdlNGZkMC4uOWM4Mjc0ZTNiMjZlYTIzMjk1NGVlNjEwYTkxZTAy
M2UzZGMwZTFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTEyLTE0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBH
UFUgcHJvY2VzcyBjcmVhdGUvcmVsZWFzZSBhIHNoYXJlZCBJT1N1cmZhY2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjZSB0aGUgUmVuZGVy
aW5nQmFja2VuZCBjbGFzcyB3aGljaCB3aWxsIG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbgorICAg
ICAgICBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIHRoZSBHUFVQcm9jZXNzIGZvciByZW5kZXJpbmcu
IFRoaXMgY2xhc3Mgd2lsbCBiZSAKKyAgICAgICAgdXNlZCB0byBoaWRlIHRoZSBjb21wbGV4aXR5
IG9mIHNlbmRpbmcgbWVzc2FnZXMgZnJvbSBXZWJQIGFuZCByZWNlaXZpbmcKKyAgICAgICAgcmVw
bGllcyBmcm9tIHRoZSBHUFVQLiBBIHNpbmdsZXRvbiBSZW5kZXJpbmdCYWNrZW5kIHdpbGwgYmUg
Y3JlYXRlZCBieQorICAgICAgICBDaHJvbWVDbGllbnQgYW5kIG93bmVkIGJ5IHRoZSBQYWdlLgor
CisgICAgICAgIFJlbmRlcmluZ1N1cmZhY2UgaXMgYWxzbyBpbnRyb2R1Y2VkIHRvIG1hbmFnZSBj
cmVhdGluZyBhIHBsYXRmb3JtIHNoYXJlZAorICAgICAgICBzdXJmYWNlLiBDcmVhdGluZyB0aGUg
bWVtb3J5IG9mIHRoZSBzdXJmYWNlIHNob3VsZCBiZSBzdGFydGVkIGJ5IHRoZSBHUFVQLgorICAg
ICAgICBSZW5kZXJpbmdTdXJmYWNlIHdpbGwgY3JlYXRlIGEgcGxhdGZvcm0gc3VyZmFjZSBpbiB0
aGUgV2ViUC4gVGhpcyBzdXJmYWNlCisgICAgICAgIHdpbGwgaGF2ZSBhY2Nlc3MgdG8gdGhlIHNh
bWUgbWVtb3J5IGFzIHRoZSBHUFVQIGRvZXMuCisKKyAgICAgICAgUmVuZGVyaW5nU3VyZmFjZSBp
cyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgZm9yIENHLiBJZGVhbGx5IEltYWdlQnVmZmVyCisgICAg
ICAgIHNob3VsZCBoYXZlIGJlZW4gdXNlZCBpbnN0ZWFkLiBCdXQgdG8gdXNlIEltYWdlQnVmZmVy
IGl0IHdpbGwgcmVxdWlyZXMKKyAgICAgICAgZXh0ZW5zaXZlIHJlLWZhY3RvcmluZy4KKworICAg
ICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2Vy
TWVkaWFDbGllbnQuaDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNo
cm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGFn
ZS9QYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OnJlbmRlcmluZ0JhY2tlbmQpOgor
ICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nU3VyZmFjZS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNl
SWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9SZW5k
ZXJpbmdTdXJmYWNlQ0cuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdTdXJm
YWNlOjpwbGF0Zm9ybVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFj
ZTo6Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ1N1
cmZhY2U6OlJlbmRlcmluZ1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorICAgICAgICBIYXZlIHRvIGRlbGV0ZSB0aGUgdXNp
bmcgc3RhdGVtZW50IGJlY2F1c2UgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IHdhcworICAgICAg
ICBhbWJpZ3VvdXMgc3ltYm9sIGluIFdlYktpdC4KKwogMjAxOS0xMi0xNCAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lGQ10gQWRkIHN1cHBvcnQgZm9y
IHdoaXRlLXNwYWNlOiBicmVhay1zcGFjZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNThmNGZiOTM1MTk5MjU3YTZk
MDRlNmY5MWU4ZDFhY2Q3YmIyMjJjNi4uZDVmYzcxZjEzYmNjOGVhYjAxZDFhOWFkNmNiZTQ5YTlm
NjJmMzViYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNTIgQEAKKzIwMTktMTItMTQgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEdQVSBw
cm9jZXNzIGNyZWF0ZS9yZWxlYXNlIGEgc2hhcmVkIElPU3VyZmFjZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBh
bmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IGFyZSBpbnRyb2R1Y2VkIHRvCisgICAgICAg
IG1hbmFnZSB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBXZWJQcm9jZXNzIGFuZCB0aGUg
R1BVUHJvY2VzcyBmb3IKKyAgICAgICAgcmVuZGVyaW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBjcmVhdGlu
ZyBhbmQgcmVsZWFzaW5nCisgICAgICAgIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkg
Z2l2ZW4gaXRzIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLiBJdAorICAgICAgICBpcyByZXNw
b25zaWJsZSBhbHNvIGZvciBkaXNwYXRjaGluZyB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5IG1lc3NhZ2VzLgorCisgICAgICAgIEFsbCB0aGUgUmVuZGVyaW5nQmFja2VuZCBtZXNzYWdl
cyBhcmUgYXN5bmNocm9ub3VzLiBUaGUgbWFpbiB0aHJlYWQgd2lsbAorICAgICAgICBub3QgYmUg
YmxvY2tlZCB3aGVuIHNlbmRpbmcgYSBtZXNzYWdlIGZyb20gV2ViUCB0byBHUFVQLiBJbnN0ZWFk
IEdQVVAgd2lsbAorICAgICAgICBub3RpZnkgV2ViUCB3aGVuIGl0IGZpbmlzaGVzIGFuIG9wZXJh
dGlvbi4gSW4gdGhlIGNhc2Ugd2hlbiBXZWJQIHdhbnRzCisgICAgICAgIHRvIGhhdmUgaW1tZWRp
YXRlIGFjY2VzcyB0byB0aGUgc3VyZmFjZSwgZS5nLiBmbHVzaGluZyB0aGUgc3VyZmFjZSBjb250
ZXh0LAorICAgICAgICB0aGUgV2ViUCB3aWxsIGJlIGhhdmUgdG8gYmUgYmxvY2tlZCBmb3IgInNv
bWV0aW1lIiB3YWl0aW5nIGZvciBhIGNlcnRhaW4KKyAgICAgICAgbWVzc2FnZSB0byBiZSBkZWxp
dmVyZWQuCisKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSBpcyBhbHNvIGludHJvZHVj
ZWQgdG8gbWFuYWdlIHRoZSBsaWZlIHRpbWUgb2YgdGhlCisgICAgICAgIHBsYXRmb3JtIHN1cmZh
Y2UgaW4gdGhlIFdlYlBvcmNlc3MuIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eSB3aWxsIGRv
CisgICAgICAgIGEgc2ltaWxhciBqb2IgaW4gdGhlIEdQVSBwcm9jZXNzLgorCisgICAgICAgIEZs
dXNoaW5nIGEgc3VyZmFjZSB3aWxsIGJlIHRyYWNrZWQgYnkgUmVuZGVyaW5nRmx1c2hJZGVudGlm
aWVyLiAKKyAgICAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBzZW5kcyBhICdSZW5kZXJUb1N1
cmZhY2UnIG1lc3NhZ2Ugd2l0aCBhIG5ld2x5CisgICAgICAgIGdlbmVyYXRlZCBSZW5kZXJpbmdG
bHVzaElkZW50aWZpZXIuIFdoZW4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgICAg
IGZpbmlzaGVzIHJlbmRlcmluZyB0byBpdHMgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5LCBp
dCB3aWxsIHJlcGx5IGJhY2sKKyAgICAgICAgdG8gdGhlIFdlYlAgYnkgc2VuZGluZyBEaWRSZW5k
ZXJUb1N1cmZhY2UgbWVzc2FnZSB3aXRoIHRoZSBzYW1lCisgICAgICAgIFJlbmRlcmluZ0ZsdXNo
SWRlbnRpZmllciB3aGljaCB3aWxsIHNldCBpdCBpbiB0aGUgY29ycmVzcG9uZGluZworICAgICAg
ICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlIGlzIHBlbmRp
bmcgZmx1c2ggaWYgaXRzCisgICAgICAgIHNlbnRGbHVzaElkZW50aWZpZXIgYW5kIHJlY2VpdmVk
Rmx1c2hJZGVudGlmaWVyIGFyZSBkaWZmZXJlbnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNw
YXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0
OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVT
eW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgYXV0byBn
ZW5lcmF0ZWQgaW4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAu
CisKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAg
ICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVy
TWFwKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJv
Y2Vzc0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIG5ldyBtZXNzYWdlcyBhbmQg
bWV0aG9kcyBmb3IgY3JlYXRpbmcvcmVsZWFzaW5nIGEgUmVuZGVyaW5nQmFja2VuZC4KKworICAg
ICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVTdXJmYWNlKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlU3VyZmFj
ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVy
VG9TdXJmYWNlKToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IEFk
ZGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdTdXJmYWNlUHJveHkuaDogQWRkZWQuCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSBDb21tdW5pY2F0ZXMgd2l0aCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIGluCisgICAgICAg
IHRoZSBXZWJQb3JjZXNzLiBJdCBtYW5hZ2VzIHRoZSBsaWZlIGN5Y2xlIG9mIFJlbW90ZVJlbmRl
cmluZ1N1cmZhY2UuIEl0CisgICAgICAgIHJlZ2lzdGVycyBpdHNlbGYgYXMgYSBtZXNzYWdlIHJl
Y2VpdmVyIGluIHRoZSBjb25zdHJ1Y3RvciBhbmQgdW5yZWdpc3RlcgorICAgICAgICBpdHNlbGYg
aW4gdGhlIGRlc3RydWN0b3IuIEl0IHNlbmRzIHJlcGxpZXMgdG8gdGhlIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQKKyAgICAgICAgaW4gdGhlIFdlYlBvcmNlc3Mgd2hlbiBpdCBmaW5pc2hlcyBvbmUg
b2YgaXRzIGZ1bmN0aW9ucy4gCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OlJlbW90ZVJlbmRlcmluZ1N1cmZh
Y2VQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6
Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
U3VyZmFjZVByb3h5OjplbnN1cmVHcmFwaGljc0NvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmZsdXNoR3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvY2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFj
ZVByb3h5Q0cuaDogQWRkZWQuCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eSBt
YW5hZ2VzIG9wZXJhdGluZyBvbiB0aGUgcGxhdGZvcm0gc3VyZmFjZSBpbiAKKyAgICAgICAgR1BV
UHJvY2Vzcy4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eTo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6flJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZUZyb21XZWJQcm9jZXNzKTogRGVsZXRlZC4KKyAgICAgICAgTWFrZSBSZW1vdGVNZWRpYVBs
YXllck1hbmFnZXJQcm94eSBhbiBNZXNzYWdlUmVjZWl2ZXIgYnkgYWRkaW5nIGFuZCAKKyAgICAg
ICAgcmVtb3ZpbmcgaXRzZWxmIGZyb20gTWVzc2FnZVJlY2VpdmVyTWFwIG9mIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToK
KyAgICAgICAgV2hlbiB0aGUgYXR0cmlidXRlICdXYW50c0Rpc3BhdGNoTWVzc2FnZScgaXMgYWRk
ZWQgdGhlIG1lc3NhZ2VzLmluIGZpbGUsCisgICAgICAgIHRoZSBkaWRSZWNlaXZlTWVzc2FnZSgp
IHdpbGwgaW5jbHVkZSBhIGRpc3BhdGNoIGNhbGwgc3VjaCB0aGF0IHRoZSByZWNlaXZlcgorICAg
ICAgICBoYXMgdGhlIGFiaWxpdHkgdG8gZGlzcGF0Y2ggdGhlbSB0byBpdHMgTWVzc2FnZVJlY2Vp
dmVyTWFwLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29h
LnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktp
dDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAg
IERpc3BhdGNoIG1lc3NhZ2VzIGNvbWluZyBmcm9tIHRoZSBHUFVQb3JjZXNzIHRvIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpmaW5kU3VyZmFjZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjp3YWl0Rm9yRGlkQ3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OndhaXRGb3JEaWRSZW5kZXJUb1N1cmZhY2UpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpkaWRDcmVhdGVTdXJmYWNlKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZGlkUmVuZGVyVG9TdXJm
YWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlUHJv
eHlTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVs
ZWFzZVByb3h5U3VyZmFjZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OnJlbmRlclRvUHJveHlTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Zmx1c2hQcm94eVN1cmZhY2UpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpzdXJmYWNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5p
bjogQWRkZWQuCisgICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgaXMgdGhlIFdlYktpdCBp
bXBsZW1lbnRhdGlvbiBvZiBSZW5kZXJpbmdCYWNrZW5kLgorICAgICAgICBJdCB3aWxsIGJlIHVz
ZWQgdG8gaGlkZSB0aGUgY29tcGxleGl0eSBvZiBzZW5kaW5nIG1lc3NhZ2VzIGZyb20gV2ViUCBh
bmQKKyAgICAgICAgcmVjZWl2aW5nIHJlcGxpZXMgZnJvbSB0aGUgR1BVUC4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpzZW50Rmx1c2hJZGVudGlm
aWVyIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6cmVj
ZWl2ZWRGbHVzaElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdTdXJmYWNlOjpzZXRTZW50Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nU3VyZmFjZTo6c2V0UmVjZWl2ZWRGbHVzaElkZW50aWZpZXIpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjppc1BlbmRpbmdGbHVzaCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ1N1cmZhY2U6OlJlbW90ZVJlbmRl
cmluZ1N1cmZhY2UpOgorICAgICAgICBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlIG1hbmFnZXMgb3Bl
cmF0aW5nIG9uIHRoZSBwbGF0Zm9ybSBzdXJmYWNlIGluIFdlYlAuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQWRk
ZWQuCisgICAgICAgIENhbiBpZGVudGlmeSBhIFJlbmRlcmluZ0JhY2tlbmQgaW4gdGhlIFdlYlAg
YW5kIEdQVVAuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nRmx1c2hJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICBUcmFja3Mgd2hldGhlciBhIFJl
bmRlcmluZ1N1cmZhY2UgaXMgcGVuZGluZyBhIGZsdXNoaW5nLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMTkt
MTItMTQgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
cmVsZWFzZSBhc3NlcnQgZm9yIHNlbGVjdGVkSW5kZXggaW4gV2ViS2l0OjpXZWJQb3B1cE1lbnU6
OnNob3coKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMmQ3YzJjZTIwZjBmY2JjZWRhMTI0YTBkZGQ5
NWQ1MjU1OGY2MTE1Mi4uMmZlMjNjYzhhMjgyY2MxYTI1ZTQ0MmU2YWQzN2EyMjNmYTE4ZWUwYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMTEwLDggKzExMTAsMTAgQEAgc2V0KFdlYkNvcmVfUFJJ
VkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGlt
ZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
U3VyZmFjZUlkZW50aWZpZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RpbGVk
QmFja2luZy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1VzZXJNZWRpYUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9V
c2VyTWVkaWFDbGllbnQuaAppbmRleCA0M2IyYTBkZGNkNTJiNWQxYWM1NjJhZTdhMTI4ZTQxZDIz
M2Q5ODRiLi5jYjliN2VkYmUyYWQxNTc4OWMxMzEwY2U4ZmIyYjRjZDEyNThkNGY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xpZW50
LmgKQEAgLTM5LDYgKzM5LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVy
ZURldmljZTsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgUGFnZTsKIGNsYXNzIFVzZXJNZWRpYVJl
cXVlc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA4OGI4MDE2YTE3M2E4ZjllMzgxOGQ3NzllZTRjYmJiMmMwZWJlODNjLi41
MjAxYWZkMWI0ZjIwZGQyNzJjZjQzMzJmNmM5NzVlZTlhY2YxN2FjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNzQ1LDYgKzE3
NDUsNyBAQAogCQk1NUFGMTRFNjFFQUFDNTlCMDAyNkVFQUEgLyogVVRJUmVnaXN0cnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QUYxNEU0MUVBQUM1
OUIwMDI2RUVBQSAvKiBVVElSZWdpc3RyeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTU1RENDNTI4MjI0MDdCMjAwMEMyNkUzMiAvKiBTVkdQcmlt
aXRpdmVMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NURDQzUyNTIyNDA3NDlFMDBDMjZFMzIgLyogU1ZHUHJpbWl0aXZlTGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU1RENDNTI5MjI0MDdC
MkEwMEMyNkUzMiAvKiBTVkdMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NURDQzUyMzIyNDA3M0ZFMDBDMjZFMzIgLyogU1ZHTGlzdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1RENGQUE0MjM5
OUM5QTYwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NURDRkFBMjIzOTlDNEQ4MDA1MENEMjIgLyogUmVu
ZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTU1RUM5NTk5MjA2QUE3QTAwMDdERDBBOSAvKiBQYWludEZyZXF1ZW5jeVRyYWNr
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUM5
NTk3MjA2OUM5MkQwMDdERDBBOSAvKiBQYWludEZyZXF1ZW5jeVRyYWNrZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NUZBN0ZGQjIxMTBFQ0Q3
MDA1QUVGRTcgLyogU1ZHWm9vbUFuZFBhblR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RkE3RkZBMjExMEVDRDcwMDVBRUZFNyAvKiBTVkdab29t
QW5kUGFuVHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTU3MDQ0MDVBMUU1MzkzNjIwMDM1NjYwMSAvKiBKU0Flc0NiY0NmYlBhcmFtcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwNDQwNTkxRTUz
OTM2MjAwMzU2NjAxIC8qIEpTQWVzQ2JjQ2ZiUGFyYW1zLmggKi87IH07CkBAIC0yMTI4LDYgKzIx
MjksOSBAQAogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMzAx
QTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKIAkJNzI0RUU1NTAx
REM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0
RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOUU2MUJB
MjNBNDQxNzAwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjlFNjFCNTIzQTQxMjIxMDAyRUZFNzkgLyog
UmVuZGVyaW5nU3VyZmFjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyOUU2MUJCMjNBNDQxN0EwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNl
Q0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyOUU2
MUI3MjNBNDEyRjMwMDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlQ0cuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFDMzlFNjIzOUVCQkY3MDBC
NjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQUMzOUU0MjM5RUI4N0YwMEI2M0UwMiAvKiBTdXJmYWNlSWRl
bnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4
RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNF
ODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1l
c3NhZ2VFdmVudC5oICovOyB9OwogCQk3NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNz
YWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc1NzkzRUM3MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9OwpAQCAt
ODY2OSw2ICs4NjczLDcgQEAKIAkJNTVEQ0M1MjUyMjQwNzQ5RTAwQzI2RTMyIC8qIFNWR1ByaW1p
dGl2ZUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJpbWl0aXZlTGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1NURDQzUyNjIyNDA3NEZBMDBDMjZFMzIgLyogU1ZHUHJvcGVy
dHlBY2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eUFjY2Vzc29yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RENDNTI3MjI0MDc1MEIwMEMyNkUzMiAvKiBTVkdQ
cm9wZXJ0eUFjY2Vzc29ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcm9wZXJ0eUFjY2Vzc29y
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBMjIzOTlDNEQ4MDA1
MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RUM5NTk3MjA2OUM5MkQwMDdE
RDBBOSAvKiBQYWludEZyZXF1ZW5jeVRyYWNrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFpbnRGcmVx
dWVuY3lUcmFja2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RUU1MzU0MjIz
QjI5RTkwMEZCQTk0NCAvKiBTVkdNZW1iZXJBY2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdNZW1iZXJBY2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1NUVFNTM1NjIyM0IyOUY3MDBGQkE5NDQgLyogU1ZHQW5pbWF0ZWRQcm9wZXJ0eUFu
aW1hdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZFByb3BlcnR5QW5pbWF0b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
NTk5LDYgKzk2MDQsOSBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhU
c1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyOUU2MUI1MjNBNDEyMjEwMDJFRkU3OSAvKiBSZW5kZXJpbmdT
dXJmYWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ1N1cmZhY2UuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzI5RTYxQjcyM0E0MTJGMzAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1
cmZhY2VDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdTdXJmYWNlQ0cuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQzM5RTQyMzlFQjg3RjAwQjYzRTAyIC8qIFN1cmZhY2VJ
ZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN1cmZhY2VJZGVudGlmaWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyog
SlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhU
c1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYw
MDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDg4Miw2ICsyNDg5
MCw3IEBACiAJCQkJQTgwQTM4RkQwRTUwQ0M4MjAwQTI1RUJDIC8qIFBhdHRlcm5DRy5jcHAgKi8s
CiAJCQkJQjI3NTM1MzYwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuY3BwICov
LAogCQkJCUIyNzUzNTM3MEIwNTM4MTQwMDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmggKi8s
CisJCQkJNzI5RTYxQjcyM0E0MTJGMzAwMkVGRTc5IC8qIFJlbmRlcmluZ1N1cmZhY2VDRy5oICov
LAogCQkJCTFGQzQwRkI4MTY1NUM1OTEwMDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVy
LmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdp
dGhUaW1lci5oICovLAogCQkJCUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1h
dGlvbk1hdHJpeENHLmNwcCAqLywKQEAgLTI1MTE4LDYgKzI1MTI3LDggQEAKIAkJCQlCQ0FCNDE4
MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAw
RUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlB
MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk1NURDRkFBMjIzOTlDNEQ4
MDA1MENEMjIgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyOUU2MUI1MjNBNDEyMjEw
MDJFRkU3OSAvKiBSZW5kZXJpbmdTdXJmYWNlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAw
MzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFB
RjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyog
U2hhZG93Qmx1ci5jcHAgKi8sCkBAIC0yNTEyOCw2ICsyNTEzOSw3IEBACiAJCQkJQjIzNTQwRjAw
RDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5jcHAgKi8sCiAJCQkJQjIzNTQwRjEw
RDAwNzgyRTAwMjM4MkZBIC8qIFN0cmluZ1RydW5jYXRvci5oICovLAogCQkJCTg0OUY3Nzc1MEVG
RUM2MjAwMDkwODQ5RCAvKiBTdHJva2VTdHlsZUFwcGxpZXIuaCAqLywKKwkJCQk3MkFDMzlFNDIz
OUVCODdGMDBCNjNFMDIgLyogU3VyZmFjZUlkZW50aWZpZXIuaCAqLywKIAkJCQkwODc1NThDMzEz
QjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcCAqLywK
IAkJCQkwODc1NThDNDEzQjRBNTdEMDBGNDkzMDcgLyogU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0
ZXJhdG9yLmggKi8sCiAJCQkJM0JCNkI4MEYyMkE3RDMxMTAwM0EyQTY5IC8qIFRhYlNpemUuaCAq
LywKQEAgLTMxOTA5LDYgKzMxOTIxLDkgQEAKIAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJGMDBBMTIxM0U2MTcwMERD
RUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODY0MUQ0
ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTU1RENGQUE0MjM5OUM5QTYwMDUwQ0QyMiAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjlFNjFCQTIzQTQ0MTcwMDAyRUZFNzkgLyogUmVu
ZGVyaW5nU3VyZmFjZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI5RTYxQkIyM0E0NDE3QTAwMkVG
RTc5IC8qIFJlbmRlcmluZ1N1cmZhY2VDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIy
MjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTMyNDM2LDYgKzMyNDUxLDcgQEAKIAkJCQk5M0IyRDgxNjBG
OTkyMEQyMDA2QUU2QjIgLyogU3VkZGVuVGVybWluYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk3QzA3ODUwMTE2NUQ1QkUwMDNBMzJFRiAvKiBTdWZmaXhUcmVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NzYyN0I5ODE0RkI1NDI0MDAyQ0RDQTEgLyogU3VwcGxlbWVudGFibGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyQUMzOUU2MjM5RUJCRjcwMEI2M0UwMiAvKiBTdXJmYWNlSWRlbnRpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg3NTU4QzYxM0I0QTU3RDAwRjQ5MzA3IC8qIFN1cnJv
Z2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJDMTIxN0Qx
MUFCOUU3NzAwM0M0NjJDIC8qIFN1c3BlbmRhYmxlVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUIyMjI3OTc0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBkNzgxZjM1Y2I1Mzg4NzI1ZmRiMzBk
YmQzMjU0NGIyZGM1MWMwZDEyLi40NDE5NzNjNDVlNWQzYTIwNTUwNzA4NTExZjNlZjRiNjgwZDUw
ZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNp
bmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5o
IgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5n
QmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwNCw2ICsz
MDUsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7
IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAg
ICB2aXJ0dWFsIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorI2VuZGlmCisKICAgICAvLyBQYXNzIG51bGxw
dHIgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVy
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDU2NTVkYzJjMjljNzE2
MWUxMmM0Y2EwMjc5MDg4ZWIzZjQzYmViNTcuLmVlMzI2OGZlNTkzYWQyYTk2MGMyMDBhNmVhY2Vh
Y2ZmODkwZmQ3NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtMjkyNCw2ICsyOTI0LDE1IEBAIFJl
bmRlcmluZ1VwZGF0ZVNjaGVkdWxlciYgUGFnZTo6cmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyKCkK
ICAgICByZXR1cm4gKm1fcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyOwogfQogCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorUmVmUHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFBhZ2U6OnJlbmRlcmluZ0Jh
Y2tlbmQoKQoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRl
cmluZ0JhY2tlbmQgPSBjaHJvbWUoKS5jbGllbnQoKS5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7
CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZDsKK30KKyNlbmRpZgorCiB2b2lkIFBhZ2U6
OmZvckVhY2hEb2N1bWVudChjb25zdCBGdW5jdGlvbjx2b2lkKERvY3VtZW50Jik+JiBmdW5jdG9y
KQogewogICAgIGZvciAoYXV0byYgZG9jdW1lbnQgOiBjb2xsZWN0RG9jdW1lbnRzKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5oCmluZGV4IDVmNGNlYjBhMzY1MGM0MmE4ZTE3ZDEyNjNmNTY4NDdlZjE4MWM0NTMuLmZk
NWE4OGI2N2Y3Zjc5MTUyNGRmMDNiZGM3MTIwYmU5MzZkNWJkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiUlRDQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlJl
Z2lvbi5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU3VwcGxlbWVudGFibGUuaCIKQEAgLTI3
Myw2ICsyNzQsMTAgQEAgcHVibGljOgogICAgIFBlcmZvcm1hbmNlTW9uaXRvciogcGVyZm9ybWFu
Y2VNb25pdG9yKCkgeyByZXR1cm4gbV9wZXJmb3JtYW5jZU1vbml0b3IuZ2V0KCk7IH0KIAogICAg
IFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlciYgcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyKCk7Cisg
ICAgCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIFJlZlB0cjxSZW5kZXJpbmdCYWNrZW5k
PiByZW5kZXJpbmdCYWNrZW5kKCk7CisjZW5kaWYKIAogICAgIFZhbGlkYXRpb25NZXNzYWdlQ2xp
ZW50KiB2YWxpZGF0aW9uTWVzc2FnZUNsaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsaWRhdGlv
bk1lc3NhZ2VDbGllbnQuZ2V0KCk7IH0KICAgICB2b2lkIHVwZGF0ZVZhbGlkYXRpb25CdWJibGVT
dGF0ZUlmTmVlZGVkKCk7CkBAIC05MDEsNiArOTA2LDEwIEBAIHByaXZhdGU6CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyPiBtX3JlbmRlcmluZ1VwZGF0ZVNj
aGVkdWxlcjsKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBSZWZQdHI8UmVuZGVyaW5n
QmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOworI2VuZGlmCisKICAgICBIYXNoU2V0PFJlbmRl
ck9iamVjdCo+IG1fcmVsZXZhbnRVbnBhaW50ZWRSZW5kZXJPYmplY3RzOwogICAgIFJlZ2lvbiBt
X3RvcFJlbGV2YW50UGFpbnRlZFJlZ2lvbjsKICAgICBSZWdpb24gbV9ib3R0b21SZWxldmFudFBh
aW50ZWRSZWdpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJkOTgyODAwMzc0MGVjZmI3MDM2NjEzODZl
MDUxMDk2MzhmOWFhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAi
U3VyZmFjZUlkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNpemU7CitjbGFzcyBSZW5kZXJpbmdTdXJmYWNl
OworCituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRGlzcGxheUxpc3Q7Cit9CisKK2Ns
YXNzIFJlbmRlcmluZ0JhY2tlbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxSZW5kZXJpbmdCYWNrZW5k
PiB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsK
KworICAgIC8vIFRoZXNlIGZ1bmN0aW9uIHNlbmQgSVBDIGFzeW5jIG1lc3NhZ2VzIGJ1dCB0aGV5
IGRvIG5vdCBibG9jayB0aGUgbWFpbiB0aHJlYWQuCisgICAgdmlydHVhbCBTdXJmYWNlSWRlbnRp
ZmllciBjcmVhdGVQcm94eVN1cmZhY2UoY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFNpemUmIGNv
bnRleHRTaXplLCBDb2xvclNwYWNlKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlbGVhc2VQcm94
eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVuZGVy
VG9Qcm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcCkgPSAwOworCisgICAgLy8gVGhlc2UgZnVu
Y3Rpb25zIG1heSBibG9jayB0aGUgbWFpbiB0aHJlYWQgZm9yICJzb21ldGltZSIgdGlsbCB0aGV5
IHJlY2VpdmUgb3V0LW9mLXByb2Nlc3MgcmVwbGllcy4KKyAgICB2aXJ0dWFsIGJvb2wgZmx1c2hQ
cm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxS
ZW5kZXJpbmdTdXJmYWNlPiBzdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyKSA9IDA7Cit9OworCit9
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdTdXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQ3YTFl
ODZhNjE3YTA1MDk2MzY5NmFjZTlhZThmNDE0Y2I0ZDM5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ1N1cmZhY2UuaApAQCAtMCww
ICsxLDI4IEBACisvKgorKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisqIGFyZSBtZXQ6CisqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorKgorKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyovCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAi
UmVuZGVyaW5nU3VyZmFjZUNHLmgiCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1N1cmZhY2VJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljNDY0Y2Uw
ZjVmODM4ZjM0MzE3NTAwNzlhMWVhODkzNzg4NWNhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJmYWNlSWRlbnRpZmllci5oCkBAIC0wLDAg
KzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmpl
Y3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBTdXJmYWNlSWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgU3VyZmFjZUlkZW50aWZpZXIgPSBPYmplY3RJZGVudGlm
aWVyPFN1cmZhY2VJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1JlbmRlcmluZ1N1cmZhY2VDRy5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUmVuZGVyaW5nU3VyZmFjZUNHLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWEwZjg2NjA4YTgyMDE3NWU5NDMxNmQ0ZWQ2OTQxNWVjYWU2ZTQzMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1JlbmRlcmluZ1N1cmZh
Y2VDRy5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyog
YXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdo
dC5oPgorCisjaWYgVVNFKENHKSAmJiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSU9TdXJmYWNlOworCitjbGFzcyBSZW5kZXJpbmdTdXJmYWNlIDog
cHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyaW5nU3VyZmFjZT4geworcHVibGljOgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiBwbGF0Zm9ybVN1cmZhY2UoKSB7IHJldHVybiBtX3BsYXRm
cm9tU3VyZmFjZTsgfQorCisgICAgYm9vbCBjcmVhdGVQbGF0Zm9ybVN1cmZhY2UoTWFjaFNlbmRS
aWdodCBzZW5kUmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fcGxhdGZyb21TdXJmYWNl
KTsKKyAgICAgICAgbV9wbGF0ZnJvbVN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5k
UmlnaHQoV1RGTW92ZShzZW5kUmlnaHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNl
KSk7CisgICAgICAgIHJldHVybiBtX3BsYXRmcm9tU3VyZmFjZS5nZXQoKTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICBSZW5kZXJpbmdTdXJmYWNlKENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAg
ICAgICAgOiBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fcGxhdGZyb21TdXJmYWNlOworICAg
IENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKSAmJiBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLmY0
OGUxNGNhNjdiYWM3Zjg0YzRkODExYThjMmU5MGVjNzdhNmUwZmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oCkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlM
aXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAog
fSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJL
aXQvQ01ha2VMaXN0cy50eHQKaW5kZXggMTY3MWFkYWE4NTUxNmRlMzJjMzM5NmNlODljMGJlYTcw
MjQ5NmUwYy4uMTZkOTczZWI5MGM1YjViZDk2MTIwZTBmNGNmNzUyMmY1NzFkZWVmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NN
YWtlTGlzdHMudHh0CkBAIC05Miw2ICs5Miw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvT3JpZ2luRGF0YSIKICAgICAiJHtX
RUJLSVRfRElSfS9XZWJQcm9jZXNzL1BsdWdpbnMiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJv
Y2Vzcy9QbHVnaW5zL05ldHNjYXBlIgorICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZCIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL1Jlc291cmNlQ2Fj
aGUiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9TdG9yYWdlIgogICAgICIke1dFQktJ
VF9ESVJ9L1dlYlByb2Nlc3MvVXNlckNvbnRlbnQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggMDdkMzMwNWI4MjM5NzJlNzg3ZmZlZTdkYjgw
ZTExNGQyMjUxMTI2Ni4uNDE1MmY5Y2M4MjMzYTZlOGY0MjRlYWUwMWMxNzczYzBmYmZlMjk0MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAt
MTUsNiArMTUsNyBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vZGVs
cy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwKICQoUFJP
SkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmluCiskKFBS
T0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20u
YXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMvV2ViQ29va2llTWFuYWdlci5tZXNzYWdlcy5p
bgpAQCAtMTEyLDYgKzExMyw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvTm90aWZpY2F0
aW9ucy9XZWJOb3RpZmljYXRpb25NYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5Qcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NsaWVudENvbm5lY3Rpb24ubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVj
dGlvbi5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9Vc2VyQ29udGVudC9X
ZWJVc2VyQ29udGVudENvbnRyb2xsZXIubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDk4NjljZjE3MTYxZmVkOTQ0OTJi
MmViNjc2YTMwOTYxMTdjZTY1MmYuLjZjMGM1ZTFhYWE3NGYyOTk4NjJmNjIzZDBlMmQ1NDA4NjZj
MGM4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdApAQCAtMTIzLDYgKzEyMywxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZwogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0
cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2Fn
ZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kTWVz
c2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXNSZXBsaWVzLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCAxN2JkY2I1ZjJkYWFhOWJiMWI2YWY0ZDc0
YWI1OGU1MDRhODEyMTgzLi40YjBjMjQ5MzAxYjk2OTQ5Mjc3ZTZiMTY5MjBhZDc3NTM4NWM0ZjQ4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yNSw2ICsyNSw3IEBAIFZQQVRIID0g
XAogICAgICQoV2ViS2l0MikvR1BVUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNz
L21hYyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21lZGlhIFwKKyAgICAkKFdlYktpdDIp
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJv
Y2VzcyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIFwKICAgICAkKFdl
YktpdDIpL05ldHdvcmtQcm9jZXNzL2NhY2hlIFwKQEAgLTU5LDYgKzYwLDcgQEAgVlBBVEggPSBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL05vdGlmaWNhdGlvbnMgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9PcmlnaW5EYXRhIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvUGx1
Z2lucyBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAg
ICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9SZXNvdXJjZUNhY2hlIFwKICAgICAkKFdlYktpdDIpL1dl
YlByb2Nlc3MvU3RvcmFnZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL1VzZXJDb250ZW50
IFwKQEAgLTE0MCw2ICsxNDIsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwK
ICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCBc
CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdl
Ykluc3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBjMzQ4ZTMwZGU4YTI5ZTk3M2VhZWFhNmE5
YjhhOGUwOTMzYWE4ODI1Li4xZmY3ODgyZTUyMzgxYTAyMDQwYjFkYTU4ODY5MzA0Njc4ODcyZDZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCkBAIC0zMywxMSArMzMsOSBAQAogI2luY2x1ZGUgIkdQVVByb2Nlc3Mu
aCIKICNpbmNsdWRlICJHUFVQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJHUFVQcm9jZXNz
UHJveHlNZXNzYWdlcy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5TWVzc2FnZXMuaCIKLSNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvclRy
YW5zYWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCiAj
aW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCiAjaW5jbHVkZSAiV2ViRXJyb3JzLmgi
CiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCkBAIC03MCw2ICs2OCwxNiBAQCB2b2lk
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7
CiB9CiAKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAg
IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hT
eW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVj
b2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAg
ICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCiB2b2lkIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKQogewogICAgIFdURkxvZ0Fsd2F5cygiUmVjZWl2ZWQg
YW4gaW52YWxpZCBtZXNzYWdlIFwiJXMuJXNcIiBmcm9tIHRoZSB3ZWIgcHJvY2Vzcy5cbiIsIG1l
c3NhZ2VSZWNlaXZlck5hbWUudG9TdHJpbmcoKS5kYXRhKCksIG1lc3NhZ2VOYW1lLnRvU3RyaW5n
KCkuZGF0YSgpKTsKQEAgLTg0LDIyICs5MiwxOCBAQCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZwog
ICAgIHJldHVybiAqbV9yZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKIH0KIAotdm9pZCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3ZvaWQgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIHsKLSAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcmVzdWx0ID0g
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAuZW5zdXJlKHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLCBbJl0oKSB7CisgICAgICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIH0p
OworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7CiB9CiAKLXZv
aWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIHsKLSAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5TWFwLmNvbnRhaW5zKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7CisgICAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAucmVtb3ZlKHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBiYmZj
MTY4MGJiYjMwZTE5N2RhZjgwMzYwNWNmYzRhMjE3OWFlZjQ5Li43NjQ0N2JkOWJjYWVhZTJjOGYx
YWYxYjZkYWNiODlhMGVhZjU0NzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDMyICsyOCwzNSBAQAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRl
ICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5j
bHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1By
b2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKIGNsYXNzIEdQVVByb2Nlc3M7CiBjbGFzcyBSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eTsKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIAogY2xhc3Mg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQ
VVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAK
ICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24u
Z2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFw
KCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQ
cm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJv
Y2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dl
YlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1
bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0
dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KLQogcHJpdmF0ZToKICAgICBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwg
SVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKIApAQCAtNjEsMTQgKzY0LDI0IEBAIHByaXZh
dGU6CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2Uo
SVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2Vp
dmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICB1c2luZyBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHlNYXAgPSBIYXNoTWFwPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCBSZWY8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Pj47CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eT4gbV9yZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eTsKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXAg
bV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQx
NGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5
YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAK
IAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRz
RGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0
OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
KyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDkwNDY2Y2ZjZjVlZjhiOGVmYjI3N2RhYTRkYjQ4NWRi
Zjg1NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDEy
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlZjxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworfQorCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkK
K3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9u
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3Rp
bmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpj
cmVhdGVTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQoreworICAgIGlmIChtX3N1cmZhY2VNYXAuY29udGFpbnMoc3VyZmFjZUlkZW50aWZp
ZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGF1dG8gcmVuZGVyaW5nU3VyZmFjZSA9IFJlbW90ZVJlbmRlcmluZ1N1
cmZhY2VQcm94eTo6Y3JlYXRlKHNpemUsIGNvbnRleHRTaXplLCBjb2xvclNwYWNlKTsKKyAgICBp
ZiAoIXJlbmRlcmluZ1N1cmZhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gc2VuZFJp
Z2h0ID0gcmVuZGVyaW5nU3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7CisgICAgbV9zdXJmYWNl
TWFwLmFkZChzdXJmYWNlSWRlbnRpZmllciwgV1RGTW92ZShyZW5kZXJpbmdTdXJmYWNlKSk7CisK
KyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpEaWRDcmVhdGVTdXJm
YWNlKHN1cmZhY2VJZGVudGlmaWVyLCBXVEZNb3ZlKHNlbmRSaWdodCkpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OnJlbGVhc2VTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyKQorewor
ICAgIC8vIENyZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJl
Zm9yZSB0aGlzIG9uZS4KKyAgICBpZiAoIW1fc3VyZmFjZU1hcC5jb250YWlucyhzdXJmYWNlSWRl
bnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgbV9zdXJmYWNlTWFwLnJlbW92ZShzdXJmYWNlSWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJUb1N1cmZhY2UoU3Vy
ZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIsIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmll
ciByZW5kZXJpbmdGbHVzaElkZW50aWZpZXIsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgY2xpcCkKK3sKKyAgICBhdXRvIGl0ZXIg
PSBtX3N1cmZhY2VNYXAuZmluZChzdXJmYWNlSWRlbnRpZmllcik7CisgICAgCisgICAgLy8gQ3Jl
YXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMg
b25lLgorICAgIC8vIEFuZCB3ZSBkbyBub3QgaGF2ZSB0aGUgc3VyZmFjZSBpbmZvIHRvIGNyZWF0
ZSBpdC4KKyAgICBpZiAoaXRlciA9PSBtX3N1cmZhY2VNYXAuZW5kKCkpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBHZXQg
dGhlIHN1cmZhY2UgR3JhcGhpY3NDb250ZXh0LgorICAgIGF1dG8mIHJlbmRlcmluZ1N1cmZhY2Ug
PSBpdGVyLT52YWx1ZTsKKyAgICBHcmFwaGljc0NvbnRleHQmIHN1cmZhY2VDb250ZXh0ID0gcmVu
ZGVyaW5nU3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAvLyBSZW5kZXIg
dGhlIGRpc3BsYXkgbGlzdCBpbnRvIHRoZSBHcmFwaGljc0NvbnRleHQuCisgICAgRGlzcGxheUxp
c3Q6OlJlcGxheWVyIHJlcGxheWVyKHN1cmZhY2VDb250ZXh0LCBkaXNwbGF5TGlzdCk7CisgICAg
cmVwbGF5ZXIucmVwbGF5KGNsaXApOworCisgICAgLy8gTWFrZSBzdXJlIHRoZSByZW5kZXJpbmcg
b3BlcmF0aW9ucyBhcmUgZmx1c2hlZCB0byB0aGUgR3JhcGhpY3NDb250ZXh0LgorICAgIHJlbmRl
cmluZ1N1cmZhY2UtPmZsdXNoR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICAvLyBOb3RpZnkgdGhl
IFdlYlByb2Nlc3MuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
RGlkUmVuZGVyVG9TdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCByZW5kZXJpbmdGbHVzaElkZW50
aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ1ZmUzNTRkNzQ1NTAz
ZTkyZGU1MWFiMzE1NWQ2ODVhMGU0MzIxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAi
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHlNZXNzYWdlc1JlcGxpZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdT
dXJmYWNlUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1N1
cmZhY2VJZGVudGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERpc3BsYXlMaXN0
OworfQorY2xhc3MgRmxvYXRSZWN0OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5CisgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSgpOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNz
YWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCBjcmVhdGVTdXJmYWNlKFdlYkNv
cmU6OlN1cmZhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIHZv
aWQgcmVsZWFzZVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIpOworICAgIHZvaWQg
cmVuZGVyVG9TdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVyLCBSZW5kZXJpbmdGbHVz
aElkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIGNv
bnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOworICAgICAgICAKKyAgICB1c2luZyBTdXJmYWNlTWFw
ID0gSGFzaE1hcDxXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eT4+OworCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKKyAgICBTdXJm
YWNlTWFwIG1fc3VyZmFjZU1hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZDcyYWI2NWVi
NDE2MDcyMzRlYzU5ZjdkY2VmZmMwYjBkYmQwNjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAt
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgeworICAgIHZvaWQgQ3JlYXRlU3VyZmFjZShX
ZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgV2ViQ29yZTo6SW50
U2l6ZSBzaXplLCBXZWJDb3JlOjpJbnRTaXplIGNvbnRleHRTaXplLCBlbnVtOnVpbnQ4X3QgV2Vi
Q29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIHZvaWQgUmVsZWFzZVN1cmZhY2UoV2Vi
Q29yZTo6U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCisgICAgdm9pZCBSZW5k
ZXJUb1N1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIs
IFdlYktpdDo6UmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIHJlbmRlcmluZ0ZsdXNoSWRlbnRpZmll
ciwgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJDb3Jl
OjpGbG9hdFJlY3QgY2xpcCkKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWRh
OGU0YzlmMmMzYWViMjRjYzlhOWQxYTY3ZmE3NzE2YjQ4NzAzMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z1N1cmZhY2VQcm94eS5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgVVNFKENH
KQorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmgiCisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1Jl
bW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hMmVhZjRlMTJkZGEwZGQ1ZTlmNmE3ZmYzMDcxZGIyZGJkYWVkOGM0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
Y2cvUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwCkBAIC0wLDAgKzEsODEgQEAKKy8q
CisqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisq
CisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisq
CisqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmgiCisKKyNp
ZiBVU0UoQ0cpICYmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk+IFJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eTo6Y3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IElu
dFNpemUmIGNvbnRleHRTaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAgYXV0byBz
dXJmYWNlID0gIElPU3VyZmFjZTo6Y3JlYXRlKHNpemUsIGNvbnRleHRTaXplLCBjYWNoZWRDR0Nv
bG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICAvLyBJbml0YWxpemUgdGhlIGNvb3JkaW5hdGUgc3lzdGVtLgorICAg
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4
dCgpOworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dC50
cmFuc2xhdGUoMCwgLWNvbnRleHRTaXplLmhlaWdodCgpKTsKKworICAgIFJldGFpblB0cjxDR0Nv
bnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29u
dGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGNv
bnRleHRTaXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5k
ZXJpbmdTdXJmYWNlUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkoV1RGTW92
ZShzdXJmYWNlKSkpOworfQorCitSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OlJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eShzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2Up
CisgICAgOiBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKK30KKworTWFjaFNlbmRSaWdo
dCBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHk6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dCYgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5OjplbnN1cmVHcmFwaGljc0NvbnRl
eHQoKQoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwor
fQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eTo6Zmx1c2hHcmFwaGljc0NvbnRl
eHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGVuc3VyZUdyYXBoaWNzQ29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoQ0cpICYmIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL2NnL1JlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94
eUNHLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9jZy9SZW1v
dGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkMzcyMTA1MTEwZGUxYzI5
ZjIxZWYwN2I5MGIyZjg2NTdlOWQxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9jZy9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJv
eHlDRy5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDRykgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xv
clNwYWNlLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIElP
U3VyZmFjZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmlu
Z1N1cmZhY2VQcm94eSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVSZW5kZXJpbmdTdXJmYWNlUHJveHk+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgY29udGV4dFNpemUsIFdlYkNvcmU6OkNvbG9yU3BhY2Up
OworCisgICAgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQmIGVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworICAgIHZvaWQg
Zmx1c2hHcmFwaGljc0NvbnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdT
dXJmYWNlUHJveHkoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4mJik7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDRykgJiYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHAKaW5kZXggNjc1OGY0YzkzMTJl
NDQzYjcyYTY4MzdhZDljYTJjNjBjNWZkNjMyMy4uYzZkYmFiODE3NzI3MzNiMGNjYTE0NmUwN2Ri
Zjg3YmUwOWFiNmIyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCkBAIC01Niwx
MCArNTYsMTIgQEAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlAKICAgICAsIG1fbG9nSWRlbnRpZmll
cihXVEY6OkxvZ2dlckhlbHBlcjo6dW5pcXVlTG9nSWRlbnRpZmllcigpKQogI2VuZGlmCiB7Cisg
ICAgbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgMCwgKnRoaXMpOwogfQogCiBSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eTo6flJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkKIHsKKyAgICBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCAwKTsKIH0KIAogdm9pZCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eTo6Y3JlYXRlTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmll
ciBpZCwgTWVkaWFQbGF5ZXJFbnVtczo6TWVkaWFFbmdpbmVJZGVudGlmaWVyIGVuZ2luZUlkZW50
aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCBzdWNjZWVkZWQpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuaAppbmRleCBkNmNkNzBjM2ZjZjkz
YWJhMTc5MGM4YjkzM2Y1MTU5YWY2NDA0YzU2Li5jY2EzNTViYWFjY2JjNDkwZWZmNWViZGI2NjQ0
MTBmMWZiZTliNzUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuaApAQCAtNTIsOSArNTIs
NiBAQCBwdWJsaWM6CiAgICAgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
czsgfQogICAgIHZvaWQgY2xlYXIoKTsKIAotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
V2ViUHJvY2VzcyhJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVj
b2RlcikgeyBkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsgfQotICAgIHZv
aWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+JiBlbmNvZGVyKSB7IGRpZFJlY2VpdmVTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyLCBlbmNvZGVyKTsgfQotCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgY29uc3Qg
TG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbDsKICAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlm
aWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBmMmU5ZWQ3YWI1NDAyZWY1MTE4OGY3
ZThkYmUzOTZiYThhY2UwZmFkLi5kYjJiNjIyMGM5MzFiMDk2YmI1ODUzM2NkZGY4ZjIwZWQyY2Y0
MTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYg
KzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19D
T05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9N
RVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZF
Ul9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9B
VFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5j
aHJvbm91cycKQEAgLTIxNiwxMCArMjE3LDEzIEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9m
b3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyT3JDbGll
bnREYXRhJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudElkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZp
ZXInLAorICAgICAgICAnV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXInLAogICAgICAgICAnV2Vi
Q29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFj
dGl2aXR5U3RhdGVDaGFuZ2VJRCcsCiAgICAgICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRl
eHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZp
ZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCisgICAg
ICAgICdXZWJLaXQ6OlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlN0b3JhZ2VBcmVhSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1w
bElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmll
cicsCkBAIC03NTUsMTMgKzc1OSwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJl
Y2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVu
ZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6CisgICAgaWYgYXN5bmNfbWVzc2Fn
ZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJ
QlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmUlc01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpXG4n
ICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0
ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JF
RkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAKICAgICAgICAg
cmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9y
IG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRy
aWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcikp
XG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAg
ICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpO1xuJyAlIChy
ZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAgLTc3MCwxMyArNzc3LDE2IEBA
IGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVzc2FnZXM6CisgICAgaWYgc3luY19tZXNz
YWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRU
UklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBp
ZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2Ug
JycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2
ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJl
Y2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21lc3NhZ2VzXQorICAgICAgICBp
ZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRF
KToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNTQyNGU1
ZGZiYjE1MjAxMGIwYjMyZDZmNWVhNmQ1MzU4OTE0ZTU2Yi4uMWI5YjA5NDI3OWNkNTMxYWYyOTQ1
MzA4YWRkOGZiMzMzMmNkZWJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0yNSw2ICsyNSw5IEBAIEdQVVBy
b2Nlc3MvR1BVUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKIAorR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAK
K0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9jZy9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJv
eHlDRy5jcHAKKwogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAK
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ09SU1ByZWZsaWdodENoZWNrZXIuY3BwCkBAIC01NDIsNiArNTQ1LDggQEAgV2Vi
UHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05ldHNjYXBlQnJvd3NlckZ1bmNzLmNwcCBAbm8tdW5p
ZnkKIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbi5jcHAgQG5vLXVu
aWZ5CiBXZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvTmV0c2NhcGVQbHVnaW5TdHJlYW0uY3Bw
IEBuby11bmlmeQogCitXZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAKKwogV2ViUHJvY2Vzcy9TdG9yYWdlL1dlYlNXQ2xpZW50Q29ubmVjdGlvbi5j
cHAKIFdlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV0NvbnRleHRNYW5hZ2VyQ29ubmVjdGlvbi5jcHAK
IFdlYlByb2Nlc3MvU3RvcmFnZS9XZWJTV09yaWdpblRhYmxlLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IDM2ZjI5NWQzZjMwMjY4Y2U5MTIyMjRjMzM1ZTA4MDY3MGE0YmYyM2EuLmI1Zjdk
N2JiZDQ4YzQ0NGYzYzdlYjAzMmQ2ZWNhZjMzMmRiODUwOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQKQEAgLTYyOCw5ICs2MjgsMTIgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2VzCiBFZGl0
YWJsZUltYWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VS
ZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nl
c3NNZXNzYWdlUmVjZWl2ZXIuY3BwCi0vL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlck1lc3NhZ2VS
ZWNlaXZlci5jcHAKLS8vUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCitSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrTWVzc2FnZVJlY2Vp
dmVyLmNwcAogVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NWM4NWZjMTU0OTRlMWIyMjMxNTZhMzU0Y2FhOWQyYjJmNmU4OWI5ZC4uNGRlZmQ5NzFlZTNkZmY0
MGViNGNmZmZmZTFjMWMzYWFiMTZjODBlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05Miw3ICs5Miw2IEBACiAJCTA3NkU4ODRFMUEx
M0NBREYwMDVFOTBGQyAvKiBBUElDb250ZXh0TWVudUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc2RTg4NEQxQTEzQ0FERjAwNUU5MEZDIC8q
IEFQSUNvbnRleHRNZW51Q2xpZW50LmggKi87IH07CiAJCTA3NzI4MTFEMjEyMzRGRjYwMEM4RUYy
RSAvKiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNDEwRjQzMTlBRjdCMjcwMDJFQkFCNSAv
KiBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIuaCAqLzsgfTsKIAkJMDc5MjMxNDgy
MzlDQkNCODAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZXNS
ZXBsaWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzkyMzE0MjIzOUNCQ0I1MDA5NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlN
ZXNzYWdlc1JlcGxpZXMuaCAqLzsgfTsKLQkJMDc5MjMxNDkyMzlDQkNCODAwOTU5OEUyIC8qIFJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzkyMzE0MzIzOUNCQ0I2MDA5NTk4RTIg
LyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCAqLzsgfTsKIAkJ
MDc5MjMxNEEyMzlDQkNCODAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlck1lc3Nh
Z2VzUmVwbGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDc5MjMxNDQyMzlDQkNCNjAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlck1l
c3NhZ2VzUmVwbGllcy5oICovOyB9OwogCQkwNzkyMzE0QjIzOUNCQ0I4MDA5NTk4RTIgLyogUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDc5MjMxNDUyMzlDQkNCNzAwOTU5
OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcCAq
LzsgfTsKIAkJMDc5MjMxNEMyMzlDQkNCODAwOTU5OEUyIC8qIFJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3OTIzMTQ2MjM5Q0JDQjcwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eU1lc3NhZ2VzLmggKi87IH07CkBAIC0xMTkzLDYgKzExOTIsNyBAQAogCQk3MTE3
MjVBOTIyOEQ1NjQzMDAwMTg1MTQgLyogV2Vic2l0ZUxlZ2FjeU92ZXJmbG93U2Nyb2xsaW5nVG91
Y2hQb2xpY3kuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcxMTcyNUE4MjI4RDU2M0EwMDAxODUxNCAvKiBXZWJzaXRlTGVnYWN5T3ZlcmZsb3dTY3JvbGxp
bmdUb3VjaFBvbGljeS5oICovOyB9OwogCQk3MUE2NzZBNjIyQzYyMzI1MDA3RDYyOTUgLyogV0tU
b3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFj
dGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi87IH07CiAJCTcxRkI4MTBCMjI2MDYyN0UwMDMyMzY3
NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGQjgxMEEyMjYwNjI3QTAw
MzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi87
IH07CisJCTcyNkM1QUUxMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NkM1QURGMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAq
LzsgfTsKIAkJNzI4RTg2RjExNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjhFODZFRjE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLzsgfTsKIAkJNzVBOEQyQzgx
ODdDQ0ZBQjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8q
IFdLV2Vic2l0ZURhdGFTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1Ymxp
YywgKTsgfTsgfTsKIAkJNzVBOEQyRDYxODdEMUMwRTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJu
YWwuaCAqLzsgfTsKQEAgLTM2NDksNiArMzY0OSw4IEBACiAJCTUzQ0ZCQkM2MjIyNEQxQjAwMDI2
NjU0NiAvKiBUZXh0Q2hlY2tlckNvbXBsZXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVGV4dENoZWNrZXJDb21wbGV0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTNDRkJCQzcyMjI0RDFCMDAwMjY2NTQ2IC8qIFRleHRDaGVja2VyQ29t
cGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0Q2hlY2tlckNv
bXBsZXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGM0NBQTUyMDZDNDQz
RTAwODY0OTBFIC8qIE5ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1RENGQUEwMjM5OUJEQTIwMDUwQ0QyMiAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NURDRkFBMTIzOTlCREEy
MDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MEFC
OEYyMjBBRTNCRDcwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNlY0tleVByb3h5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI5
MDAyMEIyNTE3NDAwQjhCRTg3IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2NvYS5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2Nv
YS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI5MDMyMEIyNTQxQzAwQjhC
RTg3IC8qIFNlY0tleVByb3h5U3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMzg5Nyw4ICszODk5LDE5IEBACiAJCTcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBX
S1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3MvV0tU
b3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1RvdWNo
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZCODEwQTIy
NjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xp
Y3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVNpbXVsYXRlZE1v
dXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIzMDg0OTUyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzMDg0OTYyM0E0NzMyODAw
OTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjMwODQ5NzIzQTQ3MzI4MDA5MkExQTYgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzMDg0OTgyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJl
bmRlcmluZ1N1cmZhY2VQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIzMDg0OUEyM0E0NzM1NTAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94
eUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ1N1cmZhY2VQcm94eUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIz
MDg0OUIyM0E0NzM1NTAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eUNHLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQ
cm94eUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNkM1QURGMjM5RjA3QUUw
MEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyNkM1QUU1MjNBMDAwNzkwMEQzNDI0OCAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjZDNUFFRTIzQTFEMEUxMDBEMzQyNDggLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNv
bG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQUQz
MDAzMjNBMzA3Q0MwMDdCRTI5QSAvKiBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQUQzMDA0MjNBMzE1ODkwMDdCRTI5QSAvKiBSZW1vdGVSZW5kZXJpbmdTdXJm
YWNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0
ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVE
YXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5
RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0
ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mjc5
LDYgKzYyOTIsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQlB
NzhDQ0REODE5M0FDOUUzMDA1RUNDMjYgLyogY29tLmFwcGxlLldlYktpdC5HUFUuc2IgKi8sCisJ
CQkJNzI2QzVBREYyMzlGMDdBRTAwRDM0MjQ4IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSAiUmVjb3ZlcmVkIFJlZmVyZW5jZXMiOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTYzMTIsNiArNjMyNiw3IEBACiAJCQkJMkQ5RkIyMDQy
Mzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYg
LyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJ
CQk3MjA1QUYyNDIzQTQ3MkMxMDAyREMzN0IgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQky
RDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAg
Ki8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaCAqLywKIAkJCQkyRDlGQjIwOTIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiAqLywKQEAgLTc2NDQsNiArNzY1OSw0MCBAQAogCQkJ
bmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMDVBRjI0
MjNBNDcyQzEwMDJEQzM3QiAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjMwODQ5OTIzQTQ3MzJEMDA5MkExQTYgLyog
Y2cgKi8sCisJCQkJNzIzMDg0OTYyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzIzMDg0OTUyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAorCQkJCTcyMzA4NDk3MjNBNDczMjgwMDkyQTFB
NiAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIz
MDg0OTgyM0E0NzMyODAwOTJBMUE2IC8qIFJlbW90ZVJlbmRlcmluZ1N1cmZhY2VQcm94eS5oICov
LAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKKwkJNzIzMDg0OTkyM0E0NzMyRDAwOTJBMUE2IC8qIGNnICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjMwODQ5QTIzQTQ3MzU1
MDA5MkExQTYgLyogUmVtb3RlUmVuZGVyaW5nU3VyZmFjZVByb3h5Q0cuY3BwICovLAorCQkJCTcy
MzA4NDlCMjNBNDczNTUwMDkyQTFBNiAvKiBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlUHJveHlDRy5o
ICovLAorCQkJKTsKKwkJCXBhdGggPSBjZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CisJCTcyQUQzMDA1MjNBMzE1RTMwMDdCRTI5QSAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk1NURDRkFBMDIzOTlC
REEyMDA1MENEMjIgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNTVEQ0ZB
QTEyMzk5QkRBMjAwNTBDRDIyIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3
MjZDNUFFRTIzQTFEMEUxMDBEMzQyNDggLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdl
cy5pbiAqLywKKwkJCQk3MkFEMzAwNDIzQTMxNTg5MDA3QkUyOUEgLyogUmVtb3RlUmVuZGVyaW5n
U3VyZmFjZS5oICovLAorCQkJCTcyNkM1QUU1MjNBMDAwNzkwMEQzNDI0OCAvKiBSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJCTcyQUQzMDAzMjNBMzA3Q0MwMDdCRTI5QSAvKiBS
ZW5kZXJpbmdGbHVzaElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5n
QmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFF
NDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTc5NDMsNiArNzk5Miw3IEBACiAJCQkJNTEwNUIwRDIxNjJGN0E1
RTAwRTI3NzA5IC8qIE5ldHdvcmsgKi8sCiAJCQkJMzEwOTk5NzQxNDZDOEFBODAwMjlERUI5IC8q
IE5vdGlmaWNhdGlvbnMgKFVzZXIpICovLAogCQkJCTFBNkZCN0FBMTFFNjRCNDkwMERCMTM3MSAv
KiBQbHVnaW5zICovLAorCQkJCTcyQUQzMDA1MjNBMzE1RTMwMDdCRTI5QSAvKiBSZW5kZXJpbmdC
YWNrZW5kICovLAogCQkJCTUxMThFOTk4MUYyOTUyNTkwMDNFRjlGNSAvKiBTdG9yYWdlICovLAog
CQkJCTFBQUYwOEFBMTkyNjkzMEIwMEI2MzkwQyAvKiBVc2VyQ29udGVudCAqLywKIAkJCQk1NzYw
ODI4QTIwMjk4NEM5MDAxMTY2NzggLyogV2ViQXV0aGVudGljYXRpb24gKi8sCkBAIC0xMDEzOSw2
ICsxMDE4OSw3IEBACiAJCQkJMUE1NzA0RkMxQkUxNzUxMTAwODc0QUYxIC8qIFJlbW90ZU9iamVj
dEludm9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQzEzMzgwMTg1OTBBRTQwMEYzRUMw
NSAvKiBSZW1vdGVPYmplY3RSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFDMTMzODYx
ODU5MEM0NjAwRjNFQzA1IC8qIFJlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyNkM1QUUxMjM5RjA3QUUwMEQzNDI0OCAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzkwMTg3QjNCM0EwMDQzNzg1
NyAvKiBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
OTQ3QTgxODdCNTE3NjAwNDM3ODU3IC8qIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTk0NzlCMTg3QjNCNjAwMDQzNzg1NyAvKiBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvclByb3h5LmggaW4gSGVhZGVycyAqLywKQEAgLTExNzk5LDcg
KzExODUwLDYgQEAKIAkJCQkyRDcyQTFGQTIxMkJGNDZFMDA1MTdBMjAgLyogUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkYyNEEyRDE4NzlFNEJDMDAz
QUJGMEMgLyogUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkyREMxOEZCNDIxOEE2RTlFMDAyNUE4OEQgLyogUmVtb3Rl
TGF5ZXJUcmVlVmlld3MubW0gaW4gU291cmNlcyAqLywKLQkJCQkwNzkyMzE0OTIzOUNCQ0I4MDA5
NTk4RTIgLyogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTA3OTIzMTRCMjM5Q0JDQjgwMDk1OThFMiAvKiBSZW1vdGVNZWRpYVBs
YXllck1hbmFnZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
QUMxMzM4NTE4NTkwQzQ2MDBGM0VDMDUgLyogUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVj
ZWl2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1OTQ3QTcxODdCNTE3NjAwNDM3ODU3IC8q
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcCBpbiBTb3VyY2Vz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmNwcAppbmRleCA1ODRhMWIzZGY2M2Q4Mzc5ZmQ2ODliY2NmODdkODY3NTZkZWQ5
MmM3Li5lNWE4MWRkNGJiZDFkNDI4ODk1ZmJkZTBiZTdiZjg5NjdiZGY1NWRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNw
cApAQCAtNTYsMTYgKzU2LDE4IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIpCiB7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRl
Y29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVy
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246
OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCiB7Ci0gICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5z
dXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggOGI3NDI5OWU0YWE2Yjc2
MzY4MDcxNTg3NmYwZDRlNTc0MmE3MzJkNC4uNDBmMWUxNWEwYTM3MWU5ZjE1ZGM0ZmQ1MDU4NTEy
NTFiYTM0NTkyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQ
cm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgfkdQVVBy
b2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
KCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2
ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFw
OyB9CiAKIHByaXZhdGU6CiAgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9u
OjpJZGVudGlmaWVyKTsKQEAgLTUzLDEwICs1NCwxNSBAQCBwcml2YXRlOgogICAgIC8vIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29k
ZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogCisgICAgYm9vbCBkaXNw
YXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBk
aXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisgICAgCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24g
ZnJvbSBhIHdlYiBwcm9jZXNzIHRvIHRoaXMgR1BVIHByb2Nlc3MuCiAgICAgUmVmPElQQzo6Q29u
bmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVz
c2FnZVJlY2VpdmVyTWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbgppbmRleCBkMzZmOGEwOTVmNmE3N2JiYjZjYWM4ODNhNjUxZTg0Y2U5ZDY0
YjMwLi41N2ZlY2RlOWRmMjdjNzM5YTZjYmYwMjY5ODA2NTkyYjVlMjE3OWE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKIAotbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24geworbWVzc2FnZXMgLT4g
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24gV2FudHNEaXNwYXRjaE1lc3NhZ2UgewogCiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjczZjlhMTYyZmY2
MmM4ODk4YzExODAzMmNmOGEzNWJlZmI2MWM2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVy
aW5nQmFja2VuZE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVmUHRyPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCisgICAgOiBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
KQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUg
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3Nh
Z2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFw
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0
KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQor
CitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7Cisg
ICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6
TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgp
OworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOwor
CisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNl
bmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdC
YWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZSogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6ZmluZFN1cmZhY2UoU3VyZmFj
ZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAgYXV0byBpdGVyID0gbV9zdXJm
YWNlTWFwLmZpbmQoc3VyZmFjZUlkZW50aWZpZXIpOworCisgICAgaWYgKGl0ZXIgID09IG1fc3Vy
ZmFjZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGl0ZXItPnZhbHVlLnB0cigpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
JldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp3YWl0Rm9yRGlkQ3JlYXRlU3VyZmFjZSgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9y
QW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
RGlkQ3JlYXRlU3VyZmFjZT4obV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zLCBJUEM6
OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9
CisKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6d2FpdEZvckRpZFJlbmRlclRvU3VyZmFj
ZSgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwor
ICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6RGlkUmVuZGVyVG9TdXJmYWNlPihtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0
V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpkaWRDcmVhdGVTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlm
aWVyLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKK3sKKyAgICAvLyBTdXJmYWNlIG1pZ2h0IGhh
dmUgYmVlbiByZWxlYXNlZCBiZWZvcmUgdGhpcyBtZXNzYWdlIGlzIHJlY2VpdmVkLgorICAgIGlm
IChhdXRvKiBzdXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpKSB7CisgICAg
ICAgIEFTU0VSVCghc3VyZmFjZS0+cGxhdGZvcm1TdXJmYWNlKCkpOworICAgICAgICBpZiAoIXN1
cmZhY2UtPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZShXVEZNb3ZlKHNlbmRSaWdodCkpKSB7CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJlbGVhc2VQcm94eVN1
cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmRpZFJlbmRlclRvU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNl
SWRlbnRpZmllciBzdXJmYWNlSWRlbnRpZmllciwgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyIHJl
bmRlcmluZ0ZsdXNoSWRlbnRpZmllcikKK3sKKyAgICAvLyBTdXJmYWNlIG1pZ2h0IGhhdmUgYmVl
biByZWxlYXNlZCBiZWZvcmUgcGFpbnRpbmcgaGFzIGZpbmlzaGVkLgorICAgIGlmIChhdXRvKiBz
dXJmYWNlID0gZmluZFN1cmZhY2Uoc3VyZmFjZUlkZW50aWZpZXIpKSB7CisgICAgICAgIC8vIERp
ZENyZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSBy
ZWNlaXZpbmcgdGhpcyBtZXNzYWdlLgorICAgICAgICBBU1NFUlQoc3VyZmFjZS0+cGxhdGZvcm1T
dXJmYWNlKCkpOworICAgICAgICBBU1NFUlQoc3VyZmFjZS0+c2VudEZsdXNoSWRlbnRpZmllcigp
KTsKKyAgICAgICAgc3VyZmFjZS0+c2V0UmVjZWl2ZWRGbHVzaElkZW50aWZpZXIocmVuZGVyaW5n
Rmx1c2hJZGVudGlmaWVyKTsKKyAgICB9Cit9CisKK1N1cmZhY2VJZGVudGlmaWVyIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZVByb3h5U3VyZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBj
b25zdCBJbnRTaXplJiBjb250ZXh0U2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAg
IFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyID0gU3VyZmFjZUlkZW50aWZpZXI6
OmdlbmVyYXRlKCk7CisgICAgQVNTRVJUKCFtX3N1cmZhY2VNYXAuY29udGFpbnMoc3VyZmFjZUlk
ZW50aWZpZXIpKTsKKworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Q3JlYXRlU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllciwgc2l6ZSwgY29udGV4dFNpemUs
IGNvbG9yU3BhY2UpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3N1cmZh
Y2VNYXAuYWRkKHN1cmZhY2VJZGVudGlmaWVyLCBSZW1vdGVSZW5kZXJpbmdTdXJmYWNlOjpjcmVh
dGUoY29sb3JTcGFjZSkpOworICAgIHJldHVybiBzdXJmYWNlSWRlbnRpZmllcjsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpyZWxlYXNlUHJveHlTdXJmYWNlKFN1cmZhY2VJZGVu
dGlmaWVyIHN1cmZhY2VJZGVudGlmaWVyKQoreworICAgIGlmICghbV9zdXJmYWNlTWFwLnJlbW92
ZShzdXJmYWNlSWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZWxlYXNlU3VyZmFjZShzdXJmYWNlSWRlbnRpZmllciksIG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OnJlbmRlclRvUHJveHlTdXJmYWNlKFN1cmZhY2VJZGVudGlmaWVyIHN1cmZhY2VJZGVudGlmaWVy
LCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBjb25zdCBGbG9h
dFJlY3QmIGNsaXApCit7CisgICAgYXV0byogc3VyZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJ
ZGVudGlmaWVyKTsKKworICAgIC8vIFRoZSBjYWxsZXIgbXVzdCBjYWxsIGNyZWF0ZVByb3h5U3Vy
ZmFjZSgpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgaWYgKCFzdXJmYWNlKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgc3VyZmFjZS0+c2V0U2VudEZsdXNoSWRlbnRpZmllcihSZW5kZXJpbmdGbHVzaElkZW50
aWZpZXI6OmdlbmVyYXRlKCkpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVuZGVyVG9TdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyLCBzdXJmYWNlLT5z
ZW50Rmx1c2hJZGVudGlmaWVyKCksIGRpc3BsYXlMaXN0LCBjbGlwKSwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcik7Cit9CisKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Zmx1c2hQ
cm94eVN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAg
YXV0byogc3VyZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKTsKKworICAgIC8v
IFRoZSBjYWxsZXIgbXVzdCBjYWxsIGNyZWF0ZVByb3h5U3VyZmFjZSgpIGJlZm9yZSBjYWxsaW5n
IHRoaXMgZnVuY3Rpb24uCisgICAgaWYgKCFzdXJmYWNlKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29uc3RleHBy
IGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOworICAgIGZvciAodW5zaWduZWQgd2Fp
dHNDb3VudCA9IE1heFdhaXRzQ291bnQ7IHdhaXRzQ291bnQtLTsgKSB7CisgICAgICAgIGlmICgh
c3VyZmFjZS0+aXNQZW5kaW5nRmx1c2goKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAv
LyBXZSBub3QgaGF2ZSByZWNlaXZlZCBEaWRSZW5kZXJUb1N1cmZhY2UsIHNvIHdhaXQgZm9yIGl0
LgorICAgICAgICBpZiAoIXdhaXRGb3JEaWRSZW5kZXJUb1N1cmZhY2UoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgc3VyZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJZGVu
dGlmaWVyKTsKKyAgICB9CisKKyAgICAvLyBtX3N1cmZhY2VNYXAgbWF5IGhhdmUgY2hhbmdlZCB3
aGlsZSB3YWl0aW5nIGZvciBEaWRSZW5kZXJUb1N1cmZhY2UuCisgICAgaWYgKCFzdXJmYWNlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc3VyZmFjZS0+aXNQZW5kaW5nRmx1
c2goKTsKK30KKworUmVmUHRyPFJlbmRlcmluZ1N1cmZhY2U+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OnN1cmZhY2UoU3VyZmFjZUlkZW50aWZpZXIgc3VyZmFjZUlkZW50aWZpZXIpCit7CisgICAg
YXV0byogc3VyZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKTsKKworICAgIC8v
IFRoZSBjYWxsZXIgZGlkIG5vdCBjcmVhdGVQcm94eVN1cmZhY2UoKSBiZWZvcmUgY2FsbGluZyB0
aGlzIGZ1bmN0aW9uLgorICAgIGlmICghc3VyZmFjZSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgLy8gRGlkQ3Jl
YXRlU3VyZmFjZSBoYXMgbm90IHJlY2VpdmVkIHlldCwgc28gd2FpdCBmb3IgaXQuCisgICAgaWYg
KCFzdXJmYWNlLT5wbGF0Zm9ybVN1cmZhY2UoKSkgeworICAgICAgICBpZiAoIXdhaXRGb3JEaWRD
cmVhdGVTdXJmYWNlKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgc3Vy
ZmFjZSA9IGZpbmRTdXJmYWNlKHN1cmZhY2VJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICAvLyBt
X3N1cmZhY2VNYXAgbWF5IGhhdmUgY2hhbmdlZCB3aGlsZSB3YWl0aW5nIGZvciBEaWRDcmVhdGVT
dXJmYWNlLgorICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAvLyBEaWRDcmVhdGVTdXJmYWNlIHdhcyByZWNlaXZlZCBidXQgaXQgcmV0dXJucyBhIHdyb25n
IHN1cmZhY2VJZGVudGlmaWVyLgorICAgIGlmICghc3VyZmFjZS0+cGxhdGZvcm1TdXJmYWNlKCkp
IHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWFrZVJlZlB0cihzdXJmYWNlKTsKK30KKworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyZTkzYmQxOWQxNWQyOTg1M2U4MTJmOGJkYTAzZDMwZmUz
Y2Q3YTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw4MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ1N1
cmZhY2UuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIlJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxh
eUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDog
cHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNz
YWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmUHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisg
ICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRl
ci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
KworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Rm9yRGlkQ3JlYXRlU3VyZmFjZSgpOwor
ICAgIGJvb2wgd2FpdEZvckRpZFJlbmRlclRvU3VyZmFjZSgpOworCisgICAgLy8gZGlkUmVjZWl2
ZU1lc3NhZ2UoKSBoYW5kbGVycworICAgIHZvaWQgZGlkQ3JlYXRlU3VyZmFjZShXZWJDb3JlOjpT
dXJmYWNlSWRlbnRpZmllciwgTWFjaFNlbmRSaWdodCk7CisgICAgdm9pZCBkaWRSZW5kZXJUb1N1
cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmll
cik7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNrZW5kCisgICAgV2ViQ29yZTo6U3VyZmFjZUlkZW50
aWZpZXIgY3JlYXRlUHJveHlTdXJmYWNlKGNvbnN0IFdlYkNvcmU6OkludFNpemUmLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBjb250ZXh0U2l6ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSkgb3ZlcnJp
ZGU7CisgICAgdm9pZCByZWxlYXNlUHJveHlTdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlm
aWVyKSBvdmVycmlkZTsKKyAgICB2b2lkIHJlbmRlclRvUHJveHlTdXJmYWNlKFdlYkNvcmU6OlN1
cmZhY2VJZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qm
LCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAgIGJvb2wgZmx1c2hQ
cm94eVN1cmZhY2UoV2ViQ29yZTo6U3VyZmFjZUlkZW50aWZpZXIpIG92ZXJyaWRlOworICAgIFJl
ZlB0cjxXZWJDb3JlOjpSZW5kZXJpbmdTdXJmYWNlPiBzdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJ
ZGVudGlmaWVyKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kKCk7CisgICAgUmVtb3RlUmVuZGVyaW5nU3VyZmFjZSogZmluZFN1cmZhY2UoV2ViQ29yZTo6
U3VyZmFjZUlkZW50aWZpZXIpOworCisgICAgdXNpbmcgU3VyZmFjZU1hcCA9IEhhc2hNYXA8V2Vi
Q29yZTo6U3VyZmFjZUlkZW50aWZpZXIsIFJlZjxSZW1vdGVSZW5kZXJpbmdTdXJmYWNlPj47Cisg
ICAgU3VyZmFjZU1hcCBtX3N1cmZhY2VNYXA7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30KKworI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNTM3ZjBhYzdlYTUzZTA5ZWY1MzMxMzc3YjU3
OTUxMDgyZjQ3ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCkBAIC0w
LDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCB7CisgICAgdm9pZCBEaWRDcmVhdGVTdXJmYWNlKFdlYkNvcmU6OlN1cmZhY2VJZGVudGlmaWVy
IHN1cmZhY2VJZGVudGlmaWVyLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICB2b2lkIERp
ZFJlbmRlclRvU3VyZmFjZShXZWJDb3JlOjpTdXJmYWNlSWRlbnRpZmllciBzdXJmYWNlSWRlbnRp
ZmllciwgV2ViS2l0OjpSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgcmVuZGVyaW5nRmx1c2hJZGVu
dGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
U3VyZmFjZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nU3VyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJmNjA1ZTU5Y2E4NjllMzRjNDEwYzUz
M2JkMmY3MDgzYTMzMzRhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdTdXJmYWNlLmgKQEAgLTAsMCAr
MSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVuZGVy
aW5nRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisK
KworI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nU3VyZmFjZS5oPgorI2luY2x1ZGUgPHd0Zi9N
YWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5k
ZXJpbmdTdXJmYWNlIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ1N1cmZhY2UgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8UmVtb3RlUmVuZGVyaW5nU3VyZmFjZT4gY3JlYXRlKFdlYkNvcmU6
OkNvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFJlbW90ZVJlbmRlcmluZ1N1cmZhY2UoY29sb3JTcGFjZSkpOworICAgIH0KKworICAgIFJl
bmRlcmluZ0ZsdXNoSWRlbnRpZmllciBzZW50Rmx1c2hJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyOyB9CisgICAgUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVy
IHJlY2VpdmVkRmx1c2hJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZWNlaXZlZEZsdXNo
SWRlbnRpZmllcjsgfQorICAgIAorICAgIHZvaWQgc2V0U2VudEZsdXNoSWRlbnRpZmllcihSZW5k
ZXJpbmdGbHVzaElkZW50aWZpZXIgc2VudEZsdXNoSWRlbnRpZmllcikKKyAgICB7CisgICAgICAg
IG1fc2VudEZsdXNoSWRlbnRpZmllciA9IHNlbnRGbHVzaElkZW50aWZpZXI7CisgICAgfQorCisg
ICAgdm9pZCBzZXRSZWNlaXZlZEZsdXNoSWRlbnRpZmllcihSZW5kZXJpbmdGbHVzaElkZW50aWZp
ZXIgcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIpCisgICAgeworICAgICAgICBtX3JlY2VpdmVkRmx1
c2hJZGVudGlmaWVyID0gcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CisgICAgfQorCisgICAgYm9v
bCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAh
PSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVu
ZGVyaW5nU3VyZmFjZShXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgICAgIDog
V2ViQ29yZTo6UmVuZGVyaW5nU3VyZmFjZShjb2xvclNwYWNlKQorICAgIHsKKyAgICB9CisKKyAg
ICBSZW5kZXJpbmdGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOworICAgIFJl
bmRlcmluZ0ZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworfTsKKwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNzY0Nzk1Yzk0YmE4YTFiM2E4ZWEw
YmFlNWI3ZDZiZjljNjdiMmRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
T2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZT47
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbmRlcmluZ0ZsdXNoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nRmx1c2hJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ODdhNDI4YjlhYjdiMmUzZWE5Y2QxNDhhYTRiNzUzYTYyZWIxODQxOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0Zs
dXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitlbnVtIFJlbmRlcmluZ0ZsdXNoSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVu
ZGVyaW5nRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdGbHVzaElk
ZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCAzYWJiMWM3ZTM3
YzQ3ZGVlMzY4MzQ3MmUyZTMzN2I0NWZhZjU1ODA1Li5hZTQxYTZlODEyYjQ3ODlkNTE0YWEzNjAz
YjhkYTdmMjBhNDdmNGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMzksNiArMzksNyBA
QAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJQYWdlQmFubmVy
LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlVzZXJE
YXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgiCkBAIC04ODEsMTQgKzg4MiwxOSBAQCBHcmFwaGljc0xheWVyRmFjdG9y
eSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAKICNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYg
KGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVy
biBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
K1JlZlB0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQoKSBjb25zdAoreworICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGUoKTsKK30KICNlbmRpZgogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aAppbmRleCA3MmViZWY1MGRmOWIxNGE4NzJmYzM1NjBhMWM4MTczNzQ1MWQ3MDI3Li45Mzc2MDY1
MDEyZWUxZWFjYmRmYjQ3NTEwNjFhZDJhNTZjODU5MWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBA
IC0yMzAsNiArMjMwLDEwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlS
ZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRm
b3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorICAgIFJlZlB0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJp
bmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisjZW5kaWYKKwogICAgIENvbXBvc2l0aW5nVHJpZ2dl
ckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386801</attachid>
            <date>2020-01-05 16:17:16 -0800</date>
            <delta_ts>2020-01-05 22:42:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200105161715.patch</filename>
            <type>text/plain</type>
            <size>355904</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTY1NGRjNDgzNGQ3OGQ1
YzgzYzY4ZDc2MGY2OTVkZWM3OTc1MWMwNy4uMDAyZjY3ZTkxODhkYmZmYWQyNTQzOGY4MjJkNDky
ODYxMTM4MmFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4NyBAQAorMjAyMC0wMS0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQg
Y29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fZGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRNZWRpYVZvbHVtZSk6CisgICAgICAgICog
cGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVz
dGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBh
dGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2Fs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5
Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
aHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZm
ZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJbWFn
ZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6ZW5zdXJlU2hhcmVkQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNr
ZW5kOjpzaGFyZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVyOjpnZXRTY3JhdGNoQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0
VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dX
aXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUlu
dGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0
dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0lu
dG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VE
YXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
cmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVu
cHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1h
Z2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JB
RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50
b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxp
Y2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6
OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAyMDIwLTAxLTA1ICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1NMTF0gR2VuZXJhdGUgcnVucyBmb3Ig
cHJlc2VydmVkIG5ldyBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwNDI5YjFhYzZhZTAzYWMzZGEzMjE5YzE2
ODY2NzM4NzNkMThmZGQ0Li4zNWMyZDA3ZGVlYTIzZWY4MjRhNmM1YmZkNGQwODFlY2I5YTQ3ZWYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDIwLTAxLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyBy
ZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJL
aXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4uCisgICAgICAg
ICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQ
cm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisg
ICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpSZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBT
b3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNz
YWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rp
b246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmguCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZl
cklkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3
YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1h
Z2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyLm1lc3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oOgorCiAyMDIwLTAxLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29t
PgogCiAgICAgICAgIER1bXBSZW5kZXJUcmVlIGRvZXNuJ3QgYWx3YXlzIGNhbGwgdXBkYXRlUmVu
ZGVyaW5nKCkgd2hlbiBhIHRlc3QgY29tcGxldGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
aW5kZXggNDRhZjI4NmU0M2MwOTFhYjg0OGMxNDA4MzY2Y2U2OWZjZmZmNTZjZS4uM2RlZWI3MWMy
NTc4OTEzYjcyMmIzOGQzMjMxZDZjODhmOTMxYTdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTA1ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUg
cmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2Vi
Q29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRl
bSk6CisKIDIwMjAtMDEtMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgRml4IGEgc291Y2Ugb2YgV2ViS2l0MSB0ZXN0IGZsYWtpbmVzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRl
bUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNs
aXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAppbmRleCA0NjQxZDU4
MDhhNTI3ZWM2ZTMwZDFjZmI2ZTgwYjIzMWRkNTZkNmIwLi43NDY1ZDBlNmE4NjY4NzM4ZjRlYmRj
NTc0ZjkyNmM3NDg4ZTdhYTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fz
eW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcApAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2xpcGJvYXJkSXRlbUJp
bmRpbmdzRGF0YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlm
TmVlCiAKICAgICAgICAgYXV0byBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsK
ICAgICAgICAgYml0bWFwSW1hZ2UtPnNldERhdGEoV1RGTW92ZShidWZmZXJUb1Nhbml0aXplKSwg
dHJ1ZSk7Ci0gICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJp
dG1hcEltYWdlLT5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewogICAgICAg
ICAgICAgbV9kYXRhID0geyBudWxsU3RyaW5nKCkgfTsKICAgICAgICAgICAgIHJldHVybjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVu
dC5oCmluZGV4IDQzYjJhMGRkY2Q1MmI1ZDFhYzU2MmFlN2ExMjhlNDFkMjMzZDk4NGIuLmNiOWI3
ZWRiZTJhZDE1Nzg5YzEzMTBjZThmYjJiNGNkMTI1OGQ0ZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaApAQCAtMzksNiAr
MzksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYXB0dXJlRGV2aWNlOworY2xh
c3MgRG9jdW1lbnQ7CiBjbGFzcyBQYWdlOwogY2xhc3MgVXNlck1lZGlhUmVxdWVzdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA5Mjk3ZDA0NGU0NDgyNzhkYmU3YzkxNjliYjMyNmM5ZGZiNzA0MjViLi4z
ODAwMTc4OThmYWMxMjUzMjRiNTk2NmRiNzA1ZTM2ZGUyNjkyYTZjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTg2OCw2ICsxODY4LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcApAQCAtMTg4Nyw2ICsxODg4LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxl
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IDIyZTBkZmYwZGU2YThkMzhiMGVmMDhjNGI4YTEwZjkxMjQxZjMxOWIuLjUzNjFk
ZDBhYzFlMmY3N2M4NDllYzllNWJkYzI2NWEyZmJjOGM4ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMjg4LDggKzI4OCw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwNzll
OTQ2OWIxMWZiYmYxNjdhMTcwMjJmNTk5OTc0MGNmNjYxYjU4Li5lMTkyNTI4OTlhZDE3MzZhNzgw
YmQ2OGIxNjUwNDE4ZTRkNmIzM2U1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5Mjcx
MjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgx
NTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMx
MUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VC
dWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRG
RTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VC
dWZmZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkx
MjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9Owog
CQkyNEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEz
Q0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0
RDkxMjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAw
RDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC0yMTMyLDEwICsyMTMw
LDIxIEBACiAJCTcyMTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIy
M0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZH
UHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjFGMUVBNzIz
QUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwNjIzQUFDQ0JBMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4
IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGlu
Z09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjMyM0FD
NDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2MzMg
LyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjM4MjZB
NjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAv
KiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5o
ICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3
RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0
ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
QTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MUMyM0FD
MjFDQzAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQ
aHlzaWNhbEltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjAyM0FDMkI3NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMTIzQUMy
Q0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzJCQkU0MjcyM0FDQjNFMDAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJENUMy
RTUyM0IxQTg2RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyRDVDMkUzMjNCMUE3NEQwMEY2
N0Q0MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJl
bmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgx
MDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFF
IC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3
RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50Lmgg
Ki87IH07CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBD
RTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC02NTQxLDkgKzY1NTAs
NiBAQAogCQkyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnRSZWdpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjQwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50
UmVnaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXZl
bnRSZWdpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1
MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjgwMTM1MzY0
RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyNEQ5MTI4RjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRH
bHlwaERlZkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1OTcsOCArOTYwMywxMCBAQAogCQk3
MUVGQ0VERTIwMkIzOUM3MDBEN0M0MTEgLyogSlNBbmltYXRpb25FZmZlY3RDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBbmltYXRpb25FZmZlY3RDdXN0
b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5
MjJDQzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8q
IEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJB
MDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkx
QTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRC
bGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYxOSw3ICs5NjI3LDIxIEBACiAJCTcy
N0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJB
MDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA3MjNBQUNENTIwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdl
QnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQw
RDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRC
NzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
UGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkUz
MjNCMUE3NEQwMEY2N0Q0MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgcGF0aCA9IHRyYW5zZm9ybXMvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNjIz
QjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU5MjNC
NDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0
MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjgzLDcgKzEyNzA1LDYgQEAKIAkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVs
ZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2ODIsNiArMTY3MDMs
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODg4LDkgKzI0OTEwLDEyIEBACiAJCQkJQjJF
RDk3NzAwQjFGNTVDRTAwMjU3RDBGIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCAqLywKIAkJCQk5
MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQlB
ODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
Q0cuaCAqLywKLQkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5j
cHAgKi8sCi0JCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNH
LmNwcCAqLywKLQkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
Q0cuaCAqLywKKwkJCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MDcyM0FBQ0Q1
MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzJC
QkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICov
LAogCQkJCUNENTg5NDkzMjE4NzQwNjQwMDRGNDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcCAqLywKIAkJCQlDRDNFMjFEQjIxODMzRjUxMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oICovLAogCQkJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29k
ZXJDRy5jcHAgKi8sCkBAIC0yNDk2Nyw2ICsyNDk5Miw3IEBACiAJCQkJRkJDMjIwREQxMjM3RkJF
QjAwQkNGNzg4IC8qIG9wZW5nbCAqLywKIAkJCQkzNzIxNDkzMzE4RjBCNkQ2MDAxNTZFREMgLyog
b3BlbnR5cGUgKi8sCiAJCQkJNDlFOTExQjIwRUY4NkQyNzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMg
Ki8sCisJCQkJNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCAqLywKIAkJCQk0OTA3MDdFNDEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlk
Z2UuY3BwICovLAogCQkJCTQ5MDcwN0U1MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJy
aWRnZS5oICovLAogCQkJCUJFRjI5RUU5MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJp
dmF0ZS5oICovLApAQCAtMjQ5ODYsNiArMjUwMTIsNyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1NkYw
MEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAw
MzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAv
KiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2
NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUw
MDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5MkVD
QzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1
MDgxLDcgKzI1MTA4LDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VC
YWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VC
dWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZl
ci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEu
aCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNr
ZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5j
cHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICov
LAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAg
LTI1MTM4LDYgKzI1MTY2LDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0
aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJu
LmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAor
CQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8s
CisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAq
LywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAog
CQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2Fk
ZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJh
Y2suaCAqLywKQEAgLTI1MTQ3LDYgKzI1MTc3LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBE
OEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJl
bW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyog
UmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyog
UmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8q
IFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyog
UmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3Vu
ZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRS
ZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3Bw
ICovLApAQCAtMjg5ODQsNiArMjkwMTcsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFF
NyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjEx
MTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MkQ1QzJFNTIzQjFBODZEMDBGNjdENDMgLyogQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhE
IC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIx
NTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2NzgsNiArMjk3MTIsOCBAQAogCQkJCTEx
MkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3Qu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5MjND
MDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI4Niw4ICszMDMyMiwxMCBAQAog
CQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJB
MTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjMy
M0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUg
LyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMx
OENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jv
b3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzU2LDYgKzMxNzk0LDcgQEAKIAkJCQlB
NTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFDMjNBQzIx
Q0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
REJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGlj
dHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2
OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzc1LDYg
KzMxODE0LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVu
dEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRC
RSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUx
RDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQ
bGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMz
QTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTEsNiArMzE5OTEs
OCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVz
b3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBS
ZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMy
RUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2No
ZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyog
UmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUx
Q0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMTgxNzUx
NWUxY2M3MDkwYzdlNTlhMGNiZDI1M2ZmNzI2MTc0NGM3My4uZjUwMWNhMjNhNzM5NWYxZTViMjFj
ODFiMDRkZGIwMTkzYjdhMmYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNp
emUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAs
IGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIElu
dFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8g
aW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAg
Y29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQp
LCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAg
ICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXko
KmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6
ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0
aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJ
bnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNh
bFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRt
YXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxi
b29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFi
NDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZh
ZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Zp
bHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFn
ZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1h
Z2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAK
ICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAo
MTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVu
YWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAg
ICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1
c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2
ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBA
QCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1f
Y29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQs
IDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwog
ICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0x
MDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNv
bnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsK
ICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29w
aWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0
Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJ
bWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5
YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3
NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50Lmgi
CiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAj
aW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3Ry
aW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpj
cmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3RE
cmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSht
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVl
ZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNy
ZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3Np
dGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hv
dWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNw
bGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3RE
cmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1
ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlz
cGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3du
Y2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNU
ZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5
TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcg
SFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpB
c1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChm
bGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkg
JiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAg
ICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3Qo
KS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSAr
ODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29u
c3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkg
PyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAo
ZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVu
dCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8v
IEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52
YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0Vu
YWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1v
dGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNl
OworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3Rl
RHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgp
KSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVt
b3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRl
cmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNw
bGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxz
ZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwor
CiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmlu
Z01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZm
ZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1f
Y29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJl
cXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0
NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcg
QEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBi
b29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9v
bD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1
ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZl
MzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNw
cApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5k
ZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5k
ZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5h
Y2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4g
SW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNj
cmVlbkNhbnZhcy5jcHAKaW5kZXggOWY3OGU4YjJiZWNiMThiOTg5ZjYyOGRlMTNjMTNlZGE5MGI2
YjI5MS4uM2QxNWM5MDJjZWRhMzZkNGE3ZjQyNmJkOTVlNjgxZTBhZmJiYzEzYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0lt
YWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBu
dWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAg
ICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJu
IHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVm
ZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcg
KzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0
CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
c2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQp
KTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsy
NTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFr
ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKaW5kZXggYmRiNmNlYTNiNGNlYTllYjNiNmFjZGJjYjQ2NTkzMDFlMTc3NDdmNS4uMGNh
NTg1NzE2NWM5YTI0Y2MzODRjOTYwM2I1Nzk1MjM2NGJiYTk0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAg
ICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVy
YXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0K
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1h
Z2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3Bl
cmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFz
UGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAog
ICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3Jl
YXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCBy
ZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgp
ID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50
KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0
cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlz
KTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0
QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAo
IW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9y
ZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlz
cGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlM
aXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxh
eUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1Rl
eHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkK
IHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZs
b2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdl
QnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJl
dHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywg
c2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNo
KSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAg
IGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMg
aGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIx
ODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0g
ICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJh
eSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRl
QXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAg
Y29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZy
b20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0
YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBm
bG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlI
ZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlI
ZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2Fs
LCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAK
LXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0
YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwg
ZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGly
dHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRp
cnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VC
dWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikK
QEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6
ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7
CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAg
IGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFs
U2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVy
LT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0
UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3Qo
ZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28K
ICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0
YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAg
YnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwg
c291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAg
ICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0
KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7
CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdu
b3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXgg
M2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4
ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkg
KzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29u
c3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlz
cGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVz
aW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6
IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3Rl
ZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3
SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9w
ZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURh
dGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxv
YXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEm
LCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9h
dCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWln
aHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29v
cmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNv
bnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRp
cnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgp
IGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFm
YjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1
Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01v
ZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01v
ZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vs
c2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJh
dGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUo
Q2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYm
IHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZl
clJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmlu
Z01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBp
bWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggNzlhNTVlMmNiNzc3NzcwN2JmYzM4OWIx
ZDgzYzMwYmFlMmJkNzMxZS4uN2RjNzZhYjNmMTFmMDljYTczOWVhZmFjNzE3NTEwZmNkOGU3OWVj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNECiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAo
aW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQz
RDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFn
ZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWws
IGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdl
KHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9u
dENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAg
ICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewogICAg
ICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5h
bEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0
dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2Nv
bnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdo
dCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAg
ICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAg
ICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUlt
YWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAg
ICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkltYWdlLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4g
eyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAg
ICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVy
ZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewog
ICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwot
ICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1
cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxm
b3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRh
cmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0
aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0
aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVv
LmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlC
YWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsg
fTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6
OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0
Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
cmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3Jj
UmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0
KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdl
LCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0NCw3ICs2
MzQ0LDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdl
QnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAo
MTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNj
ZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEz
Y2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0
NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8
SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQ
b2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1
ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFp
bnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmlj
ZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhh
YTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3
ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAK
ICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFp
bi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xs
aW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2
ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25p
dG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXll
ciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290
R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFh
MDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVm
NGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25h
cHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5n
LmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25h
cHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYg
KG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQog
ICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJl
Y3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5z
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0
KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCA3NWI1ZmQwMWE1YmQ2NjMwZjdmZWM2YjdlN2UyM2JmYTEwMDNkODAyLi5jMDdi
MTQ3YTliOTRiY2IyYWVmZDdhYjVlZDNmYmNlNDk4MGY3YjU1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
QEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKKyNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiUmVzaXplT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJSZXNv
dXJjZVVzYWdlT3ZlcmxheS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIK
QEAgLTMyOSw2ICszMzAsOCBAQCBQYWdlOjpQYWdlKFBhZ2VDb25maWd1cmF0aW9uJiYgcGFnZUNv
bmZpZ3VyYXRpb24pCiAgICAgbV9saWJXZWJSVENQcm92aWRlci0+c3VwcG9ydHNWUDgoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJSVENWUDhDb2RlY0VuYWJsZWQo
KSk7CiAjZW5kaWYKIAorICAgIFJlbmRlcmluZ0JhY2tlbmQ6OmVuc3VyZVNoYXJlZEJhY2tlbmQo
dGhpcyk7CisKICAgICBtX2NvcnNEaXNhYmxpbmdQYXR0ZXJucy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHBhZ2VDb25maWd1cmF0aW9uLmNvcnNEaXNhYmxpbmdQYXR0ZXJucy5zaXplKCkpOwogICAg
IGZvciAoYXV0byYmIHBhdHRlcm4gOiBXVEZNb3ZlKHBhZ2VDb25maWd1cmF0aW9uLmNvcnNEaXNh
YmxpbmdQYXR0ZXJucykpIHsKICAgICAgICAgVXNlckNvbnRlbnRVUkxQYXR0ZXJuIHBhcnNlZFBh
dHRlcm4oV1RGTW92ZShwYXR0ZXJuKSk7CkBAIC0xMDE2LDYgKzEwMTksNyBAQCB2b2lkIFBhZ2U6
OnNldE1lZGlhVm9sdW1lKGZsb2F0IHZvbHVtZSkKICAgICAgICAgZWxlbWVudC5tZWRpYVZvbHVt
ZURpZENoYW5nZSgpOwogICAgIH0pOwogI2VuZGlmCisgICAgUmVuZGVyaW5nQmFja2VuZDo6ZW5z
dXJlU2hhcmVkQmFja2VuZCh0aGlzKTsKIH0KIAogdm9pZCBQYWdlOjpzZXRab29tZWRPdXRQYWdl
U2NhbGVGYWN0b3IoZmxvYXQgc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMu
LjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQ
YWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2Fs
R2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFn
ZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCks
IHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFy
cmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNl
UmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRh
VVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZkNWJhMjAwNjkwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xh
c3MgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlzaWNhbEltYWdlQnVmZmVyPEJh
Y2tlbmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVz
aW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5k
VHlwZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7
CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRl
PERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJhY2tlbmQsIGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRh
dGFCYWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkK
KyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisg
ICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0Nv
bnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hE
cmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpj
b250ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXgg
YWYxZGIxZTRjMDhkNDEyZTM1ZDhhZjJmNGY3OTJhNDIzMDEwMmRkNi4uZmVmMmIxMGJlYzNkZDVj
MzY0MGQ1ZWRmNDE2YzUzNWFjOWYzOWJlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJs
aWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29s
KTsKICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVk
Q29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQo
KSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRi
ZDQ5Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3NGRkMzc0ZWVhMWQ0Mjg0Njgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgor
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggY2VlYTFkYTQwZWIz
MmZmNzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNiZTRhYzZiODg0MzY0YzU1NDM5
N2Y3ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lu
Y2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUg
PHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyMiwxNyAr
MTIzLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1lbnVt
IFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2NlbGVyYXRlZE5v
blBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24gcmF0aGVyIHRo
YW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAgQWNjZWxlcmF0
ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0gICAgUHJlbXVs
dGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21wb3NpdGVPcGVy
YXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7
CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9vbCBwYXJzZUJs
ZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAgLTE0Myw3ICsx
MzMsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIFdFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5l
Q2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDBlOGRhZjFlYTk1NTg5YzUzNDBlMDI2ZTQ0Njg1
NWE1MTEyYmMwNTYuLjZmNDgwZjUzMTA3ZDk5NmIyNWE3MzM0Yzk3MjM4ODYwOGQ5ZTc2ZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAK
QEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7Ci1zdGF0aWMgY29uc3Qg
ZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0
aDsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZEJhY2tlbmQo
KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXIpOworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKK30KIAotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93
LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVk
U2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKworICAgIC8vIFNldCB1
cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0Lgor
ICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAg
IHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0
YXJnZXRDb250ZXh0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZl
cihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RX
aW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisgICAgcmV0dXJuIGNyZWF0
ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKTsKIH0KLSNlbmRpZgorCitzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9
IDQwOTY7CitzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVu
Z3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewpAQCAtMTA1LDk3ICsxMTEsMTIgQEAgRmxv
YXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAg
ICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIGNsYW1wZWRTaXplKHJlY3Quc2l6
ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKENBSVJPKQotVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgotICAgIHJldHVybiB7IH07Ci19Ci0jZW5kaWYK
LQotI2lmICEoVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpKQotCi1GbG9hdFNpemUgSW1hZ2VCdWZm
ZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplIHNpemUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2Uo
Q29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0g
ICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9t
ZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBz
cmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNw
YWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBD
b2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7
Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xv
cik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5
OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5l
YXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpT
UkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2
aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAg
Y29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0g
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0K
LX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVy
aWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3Qo
SW50UG9pbnQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdl
dFVubXVsdGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVs
QXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVu
Z3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgewotICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0
ICsgMyk7Ci0gICAgICAgIGlmICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1
aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWlu
dDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1
aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7Ci0gICAgICAg
IAotICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAw
LjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0
KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7Ci0gICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4
ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFu
Y2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9y
bSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sg
aGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotfQotCi0j
aWYgIVVTRShDQUlSTykKLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RP
YmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0
aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFyZ2UgdGhlIGJ1
ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2Ug
bmVlZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQu
CisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3Rvcigp
KTsKIH0KLSNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
Ojpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0yMDQsNjMgKzEy
NSwyNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVj
dFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogCiAgICAgSW50U2l6ZSBzY2FsZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHJlY3Quc2l6ZSgpLCBjb250ZXh0
KTsKIAotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuZHJhd0lt
YWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYnVmZmVyOwot
fQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLQotICAg
IGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVk
U2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCisgICAgYXV0
byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxl
ZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBz
Y2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0
KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotI2lm
IFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5n
TW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbHNlCi0g
ICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgotfQotCi1JbnRTaXplIEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKLXsKLSAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0
aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIK
LSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgotICAgIHJldHVybiBl
eHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CisgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkp
OworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotYm9vbCBJbWFnZUJ1ZmZlcjo6aXNDb21w
YXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAor
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKIHsKLSAgICByZXR1cm4gYXJlRXNzZW50
aWFsbHlFcXVhbChjb250ZXh0LnNjYWxlRmFjdG9yKCksIHRoaXMtPmNvbnRleHQoKS5zY2FsZUZh
Y3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
IH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IElt
YWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6
OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAgICAvLyBtZW1vcnlD
b3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3
ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBo
b3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0
IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICByZXR1cm4gNCAqIGludGVybmFs
U2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXItPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotc2l6ZV90
IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
LCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaW1hZ2VCdWZmZXItPmRyYXdDb25zdW1pbmcoY29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQotI2VuZGlmCiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDExODgw
Y2ExODU2ODJlMzQwYTA1ODVkZjFlMDFlNTE1OTlkMDIxNTQuLmRlZDY0ZDUxOWJjMGM3ODVmZGU2
OGRiYTBjMTc5NWE4Y2I3NTU2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTcwICsyNyw4MSBAQAogCiAj
cHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNv
bG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlczNELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSAiRmxv
YXRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW1h
Z2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1MYXllci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVk
ZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFz
cyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xh
c3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBC
YWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vi
c2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5n
U3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKK25hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAotZW51bSBjbGFz
cyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CitjbGFzcyBIb3N0
V2luZG93OwogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVfRVhQT1JUKTsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1Ymxp
YzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1
cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2lu
ZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5k
b3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKIAotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIg
Y29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZl
ciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNv
cHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7Ci0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUg
d2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGlu
dG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgYm9vbCBpc0NvbXBh
dGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAgIFdF
QkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwotCi0gICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0
aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNp
emUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0KLSAgICBGbG9hdFNpemUgc2l6
ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUpIGNvbnN0OwotCi0gICAgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KLQotICAgIFdF
QkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0gICAgLy8gR2l2ZSBoaW50cyBvbiB0aGUgZmFz
dGVyIGNvcHlJbWFnZSBNb2RlLCByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmUgaWYgaXQgc3Vw
cG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yCi0gICAgLy8gb3IgcmV0dXJu
IENvcHlCYWNraW5nU3RvcmUgaWYgaXQgZG9lc24ndC4gIAotICAgIHN0YXRpYyBCYWNraW5nU3Rv
cmVDb3B5IGZhc3RDb3B5SW1hZ2VNb2RlKCk7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1
c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZp
bHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmco
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNs
YW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRp
YyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBlbnVtIENv
b3JkaW5hdGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29v
cmRpbmF0ZVN5c3RlbSB9OworICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5
c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3Jt
YXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSk7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKICAgICAKLSAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKLQotI2lmIFVTRShDQUlSTykKLSAgICBOYXRp
dmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlmCisgICAgdmlydHVhbCBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAKLSNpZiAh
VVNFKENHKQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29s
b3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwotICAgIHZv
aWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiYpOwotI2Vsc2UKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0jZW5kaWYKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9y
bSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKIAotICAgIHNpemVfdCBt
ZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9Cisg
ICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsg
fQogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9k
IGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3aXRoIHRl
eHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlw
ZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCYsIEdD
M0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmly
dHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CiAKLSAgICAvLyBUaGVz
ZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2gg
aXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9v
bCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBz
aXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAg
ICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0
YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBz
Y2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLXBy
aXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBs
YXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0g
ICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBj
b25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0g
ICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0Owot
I2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKKyAgICBzdGF0aWMgTmF0aXZlSW1h
Z2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOwogICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSAgICBpbmxpbmUgdm9p
ZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1l
ZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0g
ICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VC
dWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9n
aWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNv
bnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlh
YmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4g
ZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VS
ZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAg
ICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxp
ZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2lu
ZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKLX07
CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CiAKLSNpZiBV
U0UoQ0cpCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEo
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKLSNlbmRpZgorICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQs
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRT
aXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCA9IEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKSBjb25z
dCA9IDA7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5r
SW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50
b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgPSAwOworfTsKIAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTc4NWM4ZTc4YzQxYzMyNjU1ZjEyYzI3MjAyMDFhZWUwOGYyYWYxMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNr
ZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorewor
ICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1
dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwor
fQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7
CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxT
aXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29yZGluYXRlU3lz
dGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIHJldHVybjsK
KworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0
ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVt
KHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0
ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIg
KiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjAp
OworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAg
ICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJl
Y3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjYWU0MzUzZTk3ZDg3YmIwNTI5
YTZlYzQyN2E3YTc1Yzk5ZTNlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDExMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xv
clNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSAiTmF0aXZl
SW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7Cisg
ICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3Qg
YWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQg
ZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNv
bHV0aW9uIHsKKyAgICBObywKKyAgICBZZXMsCit9OworCitlbnVtIGNsYXNzIENvbG9yRm9ybWF0
IDogdWludDhfdCB7CisgICAgUkdCQSwKKyAgICBCR1JBCit9OworCitlbnVtIGNsYXNzIENvb3Jk
aW5hdGVTeXN0ZW0gOiB1aW50OF90IHsKKyAgICBMb2dpY2FsLAorICAgIEJhY2tpbmdTdG9yZQor
fTsKKworY2xhc3MgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5J
bWFnZUJ1ZmZlckJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0
KCkgeyB9CisKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dp
Y2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVy
biBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0g
YmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAg
dmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFs
U2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1l
bW9yeUNvc3QoKSB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworCisgICAgdmlydHVhbCBTdHJpbmcgdG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBj
b25zdCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYs
IENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2lu
dCYsIENvb3JkaW5hdGVTeXN0ZW0pIHsgfQorICAgIAorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBH
QzNEZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVk
OgorICAgIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQorICAgICAgICA6IG1fbG9naWNhbFNpemUobG9naWNhbFNpemUpCisg
ICAgICAgICwgbV9pbnRlcm5hbFNpemUoaW50ZXJuYWxTaXplKQorICAgICAgICAsIG1fcmVzb2x1
dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JT
cGFjZSkKKyAgICB7CisgICAgfQorCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIElu
dFNpemUgbV9pbnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAg
Q29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRh
dGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZiZDEyYWJlNTQzYzNm
MjAzNGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVy
RGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFD
YWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxNjdhNTdlMDg1M2Q1ZTNm
YzM4MDI3ZGQ4NjQ2ODAwN2EyYWU3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDIwNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVm
ZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPElt
YWdlQnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2Vu
ZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBl
PihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNh
bEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAg
ICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQ
aHlzaWNhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlw
ZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0
KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAg
IGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4
dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zv
cm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNr
ZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6
ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/
IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNp
emUgaW50ZXJuYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgp
ID8gZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZs
b2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tl
bmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBz
aXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQo
KSA/IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRl
cm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkg
PyBlbnN1cmVCYWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0
aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0
PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJ
bWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tp
bmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlz
aWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tl
bmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAg
ICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhh
c2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1h
Z2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZl
SW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAg
Zmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJ
bnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7Cisg
ICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5k
cmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tl
bmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0
cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5m
bHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0RhdGFVUkwobWlt
ZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxs
b3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1
ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5k
LT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5m
bHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0JHUkFEYXRhKCk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1h
dCwgcmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJ
bnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0
ZVN5c3RlbTo6TG9naWNhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIGRhdGFT
aXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
QzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlw
bHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDQzMjM2ZDVlOTdmZmU2NWU2ODExMjBm
ZDg1YTE1MWMyY2I0ZjNmZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgor
I2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOwor
I2VsaWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ7CisjZW5kaWYK
KworI2lmIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0UpCit1c2luZyBBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworI2Vs
c2UKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9y
bUltYWdlQnVmZmVyOworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlz
aWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIEFjY2Vs
ZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0
ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kPjsKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVy
ID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODA1MDQ4YzhkYWE3MTg3Y2RhMzY0
ODRmNzM5NzkwNTVmODlhOTBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQ2hyb21l
LmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW5k
ZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW5kZXJpbmdCYWNrZW5kJiBSZW5kZXJpbmdCYWNrZW5k
OjplbnN1cmVTaGFyZWRCYWNrZW5kKFBhZ2UqIHBhZ2UpCit7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGluaXRpYWxpemVLZXk7CisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJl
ZEJhY2tlbmRQdHIgPSBudWxscHRyOworICAgIHN0ZDo6Y2FsbF9vbmNlKGluaXRpYWxpemVLZXks
IFsmXSB7CisgICAgICAgIEFTU0VSVChwYWdlKTsKKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPj4gc2hhcmVkQmFja2VuZCB7IHBh
Z2UtPmNocm9tZSgpLmNsaWVudCgpLmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSB9OworICAgICAg
ICBzaGFyZWRCYWNrZW5kUHRyID0gc2hhcmVkQmFja2VuZC5nZXQoKS5nZXQoKTsKKyAgICB9KTsK
KyAgICByZXR1cm4gKnNoYXJlZEJhY2tlbmRQdHI7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQmIFJl
bmRlcmluZ0JhY2tlbmQ6OnNoYXJlZEJhY2tlbmQoKQoreworICAgIHJldHVybiBSZW5kZXJpbmdC
YWNrZW5kOjplbnN1cmVTaGFyZWRCYWNrZW5kKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
OworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVk
OgorICAgICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICgh
aW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0
V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFJlbmRlcmlu
Z01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNj
ZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJl
dHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRhOGMyMTBkY2QyZWJjNDBmNzI0ZTE1ZmViZWZkYjE0Y2JhYTFhNzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNr
ZW5kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbnRTaXplOworY2xhc3MgUGFnZTsKKworY2xhc3Mg
V0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIHN0YXRpYyBS
ZW5kZXJpbmdCYWNrZW5kJiBlbnN1cmVTaGFyZWRCYWNrZW5kKFBhZ2UqID0gbnVsbHB0cik7Cisg
ICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIHNoYXJlZEJhY2tlbmQoKTsKKyAgICAKKyAgICB2
aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJp
bmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2Rh
NzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgewor
ICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBS
ZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA5NDk5NThlYzViMzRkZTIy
NTdlZmQ0NjgzMmQ2NGJmZmQ0ZTE4MDVkLi4wNGE3Y2EyNmNhYjJhMWQwMmM0MTExOWYzYWU0N2E1
OGVkMTU4NGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRj
aEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2Nl
bGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAg
fQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3co
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllcklt
YWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxs
YmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBV
bmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAK
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBs
YXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBh
dXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03
MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5n
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAg
YXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAg
IGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0g
bGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2
b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2Us
IGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJs
dXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBs
YXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBs
YXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0
ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRh
dGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50
U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxh
eWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdl
UHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5k
ZXggNDk2ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5YS4uNzIyZWVmZmU2Yzll
NWZkMjg2NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTAw
LDcgKzUwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0
aW9uU2l6ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRlc3RSZWN0LnNpemUoKSk7
CisgICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsK
ICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
NTZmMTk2NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGlj
cy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cv
Q29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRl
IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0j
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNl
bmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgot
I2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFS
R0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9S
TShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9S
X1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lU
SF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMgRmxvYXRTaXplIHNjYWxl
U2l6ZVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKLXsKLSAg
ICBmbG9hdCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVT
aXplLndpZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgeU1hZ25pZmlj
YXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBp
bnRlcm5hbFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53
aWR0aCgpICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdodCgpICogeU1hZ25pZmlj
YXRpb24pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNw
YWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBj
b250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShj
Z0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29s
b3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAg
ICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlP
U3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9y
U3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFj
ZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNv
bG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0g
c1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBi
b29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVu
ZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2Nh
bGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgp
LnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0g
ICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0
aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBt
ZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2Nh
bGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29s
dXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBh
dXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUo
c2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRI
ZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9v
bCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAg
ICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0g
ICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7
Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEu
Ynl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRP
dmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAg
IGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0g
SU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1h
eFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQot
ICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChy
ZW5kZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29s
b3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0Nv
bnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IHNp
emVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQu
dW5zYWZlR2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0
ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFj
ZSk7Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0
ID0gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAg
ICAgICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJS
ZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVs
bHB0cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cp
OwotI2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0
ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8g
bm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVy
aW5nKSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9l
ZE1hbGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1Bl
clJvdy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1f
ZGF0YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1h
cEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEu
Ynl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFw
SW5mbykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCos
IGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxs
b2M6OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAv
LyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgp
KTsKLSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVh
c2VJbWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0
b3IobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAg
ICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNl
KGltYWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17
Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6
ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRp
b25TaXplKSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5h
dGlvblNpemUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVm
ZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGlu
dm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNh
cmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQn
cyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55
IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJm
YWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0
cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3Mg
bV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0
IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJu
IG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNp
emUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFn
ZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1l
bW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwg
YW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUg
YW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1
c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBv
ZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1
cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBv
aW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5z
dXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhp
Y3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAg
ICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
Ym91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGlt
YWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICBy
ZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RN
YWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJu
IGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGlu
dGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBs
b2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7
Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNl
clNwYWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUpOwotICAg
ICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAg
IGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgp
KSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlC
ZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNj
YWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVs
c2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RG
TW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0K
LVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRl
cm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2lj
YWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdl
QnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1
ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNv
bHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkg
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlC
YWNraW5nU3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
KQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFp
bWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1
cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RG
TW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0
cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFn
ZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAg
IHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3Rv
cmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwg
OCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2Us
IG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBr
Q0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFn
ZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4g
aW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJm
YWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNT
RVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0
IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJ
bnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNp
bmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVj
dDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlm
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZm
ZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVk
U3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25z
KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAg
IGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29w
eUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIs
IG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBp
ZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3Rv
cmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBw
aXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBj
b25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAg
ICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBz
cmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGlt
ZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7
Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVm
ZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNp
emUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0g
ICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAg
ICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNp
emUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXko
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
b3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VS
ZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VT
aXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9
Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNl
U2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRp
bmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2gg
Q0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhp
cyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0K
LQotc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4g
a1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlG
cm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8v
IEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3Jl
YXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQg
aXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBX
aW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBj
b252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZv
ciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBD
RlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBl
R0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVy
biBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1l
VHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAg
ICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFn
ZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8
fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9
IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAw
KSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVx
dWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVh
bGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkg
dG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25R
dWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZO
dW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0g
a0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25z
dCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQ
cm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAx
LCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVl
Q2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9u
QmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRp
ZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMs
IGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFk
ZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsK
LSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkp
OwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0
RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFz
ZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiAr
IGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRh
dGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBw
ZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwot
ICAgIHJldHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9
IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAg
ICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRh
OiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBp
ZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVy
TUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlw
bGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAg
ICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRv
IG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxp
ZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxv
Z2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dp
Y2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFT
aXplKTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNp
emUsIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICog
bG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRl
T3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdl
dCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBp
ZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29w
eUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNl
c3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAg
IGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxT
aXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBr
Q0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUo
KS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBz
aXplRm9yRGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAgICAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJT
cGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgp
KTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJ
bWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0K
LXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsK
LSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVy
TUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhh
SW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hh
ciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJl
bXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkp
IHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBo
YXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVf
dCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBp
ZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6
ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRh
dGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAo
YWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSAr
IDBdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFb
aSArIDFdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRh
dGFbaSArIDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZm
ZXJbaSArIDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9
IGRhdGFbaSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFs
cGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEg
Y2hhbm5lbC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9
Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lk
dGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgp
ICogc291cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0
aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0
YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11
dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1h
Z2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcg
ZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEo
c291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEu
Z2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVp
bnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZE
YXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3Rv
cihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1f
ZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZTkwZTEyMWU2YmM0
MTUxMzE4YTA2OGFiYWVjN2I3ODUzN2Y3M2Q4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0w
LDAgKzEsMzk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5o
IgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNs
dWRlICJVVElVdGlsaXRpZXMuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW50U2l6ZSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6
ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBj
ZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRT
aXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEludFNpemUo
c2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0
ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFs
U2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBu
dW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5hbFNpemUu
aGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOwor
fQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQoR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Cisg
ICAgY29udGV4dC50cmFuc2xhdGUoMCwgLW1faW50ZXJuYWxTaXplLmhlaWdodCgpKTsKKyAgICBj
b250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOworfQorCitz
dGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKK3sKKyAgICBp
ZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihpbnRlcm5hbFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSkKKyAgICAgICAgcmV0dXJu
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgw
LCAwLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSkpOworICAg
IHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29u
c3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24g
PT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxzZSB7
CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAs
IGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNh
bFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgp
LCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0
LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOworICAg
ICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAgICAg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50
Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkp
OworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Cit7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIGlmIChtX3Jlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsK
KyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRl
ZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1
dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5n
SWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFs
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0
ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RD
b250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCks
IG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNv
bnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAg
ICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwor
ICAgIAorICAgIGF1dG8gdXRpID0gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0
cmluZygpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7CisK
KyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGtVVFR5cGVKUEVHKSkgeworICAgICAgICAvLyBK
UEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkg
Y29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVj
dChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7
CisgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0
aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7
CisgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53
aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8
IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2Us
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUp
OworICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdl
dCgpLCBpbnRlcm5hbFNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCks
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFr
ZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsK
KyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2Uu
Z2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVu
Y29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsK
K30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAg
IGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAg
IHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBk
YXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCisg
ICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4g
ImRhdGE6LCJfczsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
SW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVk
ID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgIHNyY1JlY3RTY2Fs
ZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVjdFNjYWxlZC53aWR0aCgp
OworICAgIGFyZWEgKj0gc3JjUmVjdFNjYWxlZC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5oYXNP
dmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJheSA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0
KCkpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBt
X2ludGVybmFsU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1ZmZl
clJlY3QsIHNyY1JlY3RTY2FsZWQpOworICAgIGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygp
LCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlm
IChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RT
Y2FsZWQueSgpKTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdFNjYWxlZC5z
aXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgpOworICAgIAorICAgIHJldHVybiBhcnJh
eTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRh
UmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3Qm
IGRlc3RSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7Cisg
ICAgSW50U2l6ZSBzcmNTaXplU2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RT
Y2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVT
eXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNT
aXplU2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxl
ZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgfQorCisgICAgc3JjUmVjdENsaXBwZWQg
PSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBzcmNTaXplU2NhbGVkIH0sIHNyY1Jl
Y3RTY2FsZWQpOworICAgIAorICAgIGRlc3RSZWN0ID0gc3JjUmVjdENsaXBwZWQ7CisgICAgZGVz
dFJlY3QubW92ZUJ5KGRlc3RQb2ludCk7CisgICAgCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgp
IDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVk
LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRZKGRlc3RSZWN0LnkoKSAtIHNyY1JlY3RTY2FsZWQueSgpKTsKKworICAgIEludFJlY3Qg
YnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAgICBk
ZXN0UmVjdC5pbnRlcnNlY3QoYnVmZmVyUmVjdCk7CisKKyAgICBzcmNSZWN0Q2xpcHBlZC5zZXRT
aXplKGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3Qg
dWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCog
ZGVzdFBpeGVsKQoreworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQp
IHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JB
LgorICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9IHNy
Y1BpeGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQaXhl
bFszXSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRp
cGxpZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3Qg
dWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCog
ZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAo
IWFscGhhKSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0Nv
bG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZv
cm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxw
aGE7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsK
KyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAg
ICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVs
WzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9IChz
cmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxb
MF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQg
ZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBo
YSA9IHNyY1BpeGVsWzNdOworICAgIGlmIChhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0
UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRl
c3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAg
ZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBd
ID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxw
aGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNTbG93KAorICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDb2xvckZvcm1h
dCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+IGNvcHlGdW5jdG9yOwor
ICAgIAorICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAg
ICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9Q
cmVtdWx0aXBsaWVkOworICAgIH0gZWxzZSBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgY29weUZ1bmN0b3IgPSBj
b3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkOworICAgIGVsc2UKKyAgICAgICAgY29w
eUZ1bmN0b3IgPSBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkOworICAgICAgICAK
KyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHgg
PSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNy
Y0NvbG9yRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0p
OworICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyAr
PSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgfQorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCitzdGF0
aWMgaW5saW5lIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcih1bnNpZ25lZCBieXRlc1Bl
clJvdywgdWludDhfdCogcm93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB2SW1hZ2Vf
QnVmZmVyIHZJbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVm
ZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsK
KyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZm
ZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1h
Z2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sK
KyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFT
U0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQo
ZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAg
ICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdl
UGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBp
ZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1h
Z2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJ
bWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4
ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29s
b3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0
LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xv
ckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzU2xv
dyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dz
LCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0
Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVy
IHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOwor
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93
LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNB
bHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29s
b3JGb3JtYXQsIGRlc3QpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNv
cHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0
LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBjb3B5SW1h
Z2VQaXhlbHNTbG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJS
b3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQ
ZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
ZmQ4MGFmODNhNjA4ZTUyMGYwNjVhNzM0OThjZTgyYzU2YmNmNTUyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIFJlZlB0cjxJbWFn
ZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2xvZ2lj
YWxTaXplLmhlaWdodCgpKTsgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitw
cm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ7CisKKyAgICB2b2lkIHNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQmKTsKKworICAgIHZp
cnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Owor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0
SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQs
IEludFJlY3QmIGRlc3RSZWN0LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKworICAgIHN0YXRp
YyB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
cmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJik7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTYwZGE3ZWUyMmU4NWYyN2Yz
ZWVkMTk5ZjA2ZWI2OGY2NzBiNDAxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVz
YW1wbGluZyBpcyBvcHRpbWl6ZWQuCisjZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKKworI2lmIFVTRV9BUkdCMzIKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVm
YXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0
bWFwQnl0ZU9yZGVyMzJIb3N0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9ybWF0IEJhY2tlbmRD
b2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpCR1JBOworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBD
R0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3Q7Citjb25zdGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9ybWF0ID0g
Q29sb3JGb3JtYXQ6OlJHQkE7CisjZW5kaWYKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0g
Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGlu
dGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9p
ZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBpbnRlcm5hbFNpemUud2lk
dGgoKTsKKworICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCksIGJ5
dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAg
IHNpemVfdCBudW1CeXRlcyA9IGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93Owor
ICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAg
YXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbnRl
cm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywg
Y2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbykpOworICAg
IGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29u
dGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOworCisg
ICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBk
YXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkp
OworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlk
ZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUltYWdlRGF0YSkpOwor
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4o
bmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1v
dmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCkKK3sK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4m
JiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4
dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRhKQorICAgICwg
bV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9jb250ZXh0KFdU
Rk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJUKG1fZGF0
YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENvbnRleHQodGhp
cy0+Y29udGV4dCgpKTsKK30KKworTWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Y3JlYXRlU2VuZFJpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWFjaFNlbmRSaWdo
dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBpZiAoY29weUJlaGF2aW9yID09
IENvcHlCYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIAorICAgIEFT
U0VSVChjb3B5QmVoYXZpb3IgPT0gRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBh
ZG9wdENGKENHSW1hZ2VDcmVhdGUobV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXpl
LmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29s
b3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsK
KyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsK
KyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhf
dCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSk7CisKKyAgICBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6
QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7Cisg
ICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRh
QXJyYXkoc3JjUmVjdCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0LCBjb29yZGluYXRlU3lzdGVt
KTsKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0LndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgp
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkg
KiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1h
Z2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IEJhY2tlbmRDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91
dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3Ms
IGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNp
emUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRSZWN0
IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0
SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBl
ZCwgZGVzdFJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgIAorICAgIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNyY1NpemUud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0
YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBl
ZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBCYWNrZW5kQ29sb3JGb3JtYXQsIGRl
c3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1MzEyZmQ1YTQ2NmMyNjkzNGRhZjg4Y2Y4OWIwMDQ0MmQ1
MDg2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1
ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQg
eworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
cGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5k
UmlnaHQpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIE1hY2hTZW5kUmlnaHQgY3JlYXRlU2Vu
ZFJpZ2h0KCkgY29uc3Q7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBv
dmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6
ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29v
cmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
cGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRh
dGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0
dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2b2lkKiBtX2RhdGE7Cisg
ICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlODExOTRmMWZhYzVlYjM3NjU5NGU0ZjI5MmYxZGIx
YjA1YWYxMTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNDk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNj
ZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNo
Lmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0v
LyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1w
bGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0Vf
QVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZv
aWQgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25z
dCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNT
RVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJH
UkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgot
ICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVy
bXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7
Ci19Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVm
ZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5k
YXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAh
PSB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0Zs
YWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0
byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhw
ZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0g
ICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMy
IHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5l
IHZvaWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBo
ZWlnaHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0
YSA9IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3
aWR0aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lk
dGggKiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlw
bHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdS
QURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNv
bnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwot
Ci0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShy
ZXN1bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53
aWR0aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJm
YWNlKTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAg
ICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAq
PSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVh
Lmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJl
c3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5z
YWZlR2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRh
dGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3Qu
eSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZl
R2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAg
Ci0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENo
ZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsK
LSAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAg
ICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0
dy51bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5z
YWZlR2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9y
aWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRl
c3RoICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdp
bnkgPSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0
KCksIHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+
IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNr
ZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5z
YWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53
aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVz
dEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVu
ZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lu
eSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkK
LSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAg
ICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAg
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVu
cHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdklt
YWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5k
aWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxw
aGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAg
ICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBv
ZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAg
ICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICBy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3Vy
ZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4
X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJv
dyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9C
dWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVz
ID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVH
ZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAg
ZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVz
dFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0
YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwg
Y2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1h
cFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxz
X0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQot
I2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
ICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNy
Y1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBz
cmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3Jj
Um93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8v
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9y
bWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcpCi17Ci0jaWYgQVNTRVJUX0RJU0FCTEVECi0gICAgVU5VU0VEX1BB
UkFNKHNpemUpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2Vk
PGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNT
RVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQo
KSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwot
ICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgp
KSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBz
aXplLndpZHRoKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qu
d2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBD
aGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0g
ICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNh
ZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgp
ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4
WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBv
aW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0
KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNl
UmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0g
ICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRo
KCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lu
eSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBp
ZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2Fm
ZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRh
dGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1h
Z2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgp
OwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAg
ICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEg
PSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1
ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEg
PSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVm
ZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGlu
dCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dz
W2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3Jk
ZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBz
cmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihz
cmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJm
YWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAg
ZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJv
d3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAo
ZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMu
d2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51
bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
ICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAg
dkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0
KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRl
c3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RS
b3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNy
YywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFu
bmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRd
ID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4Kysp
IHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1
aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhh
ID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGM1NWE1NGFkOTExNzk1M2NhNWU2OTZkYTA3ZTZlMGRmNjgxNDNkNTguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0x
LDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRp
Yy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2Ug
KkNHQ29sb3JTcGFjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQ
cm92aWRlclJlZjsKLXR5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJbmZvOwotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIElPU3VyZmFjZTsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7
Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZTsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICB2b2lkKiBk
YXRhIHsgbnVsbHB0ciB9OwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVBy
b3ZpZGVyOwotICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIC8vIE9ubHkgZm9yIGFjY2VsZXJhdGVkIEltYWdlQnVmZmVycy4K
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0KLSAgICBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3
aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBn
ZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRT
aXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEo
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
b3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTIwZWMzNzQ4MWMz
NjY0YzVkMDM0YmQxNjhlNTMwYjViZWVhMTIxYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5j
cHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4K
KyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJ
bnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
Cit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVy
bmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIG1h
eFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7CisgICAgaWYgKGludGVybmFsU2l6ZS53
aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGludGVybmFsU2l6ZS5oZWlnaHQoKSA+IG1heFNp
emUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gaW50ZXJuYWxT
aXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0
V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3Vs
YXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFs
U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJm
YWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hl
ZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9
IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNn
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJl
Y3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5h
bFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKK3sKKyAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSkpOworfQorCitJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dp
Y2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAg
LCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsK
KyAgICBzZXR1cENvbnRleHQoY29udGV4dCgpKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCisgICAg
OiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmln
aHQoV1RGTW92ZShzZW5kUmlnaHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSkp
Cit7Cit9CisKK01hY2hTZW5kUmlnaHQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVh
dGVTZW5kUmlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZVNlbmRS
aWdodCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhp
Y3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVz
aENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNv
c3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKwor
dW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgp
OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2Uo
V1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAg
IGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUs
IGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVH
ZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgo
KSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29s
b3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2Fs
U2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0
Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVH
ZXRJbWFnZURhdGFBcnJheShzcmNSZWN0LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QsIGNvb3Jk
aW5hdGVTeXN0ZW0pOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNy
Y1JlY3Qud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkgKyBk
ZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6
TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgc3JjUmVjdENs
aXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisg
ICAgY29weUltYWdlUGl4ZWxzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgb3V0cHV0Rm9ybWF0
LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Qu
c2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1Np
emUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RD
bGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRh
UmVjdHMoc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0g
Ynl0ZXNQZXJSb3coKTsKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElP
U3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIHVpbnQ4X3QqIGRl
c3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJl
c3MoKSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0
OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZS53aWR0aCgpOwor
ICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkg
KiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1h
Z2VQaXhlbHMoaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywg
c3JjUm93cywgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3Jt
YXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisK
KyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZv
ciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJl
Y3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjA0YTFkMzA2NTI2MDYzZjUxNjU3NjI0YTE3YmE1
OGUwNTRjMGYwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKK3B1YmxpYzoK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAg
ICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQp
OworCisgICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBj
b25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29z
dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVy
cmlkZSB7IHJldHVybiBtZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRl
OworICAgIAorICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYm
KTsKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJS
b3coKSBjb25zdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgSEFW
RShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4IDg5ZDA0MzljMjEw
ZGI1MDFhYzkzOWViMTE0MTQ4ODFlZWVjNjViMjQuLjVjN2IzMzZmMTAzMjQwMDgyNjIwZWM4ZmI3
MTk2NDU4NjJkMzU4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCkBAIC0yNiw3ICsy
NiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaCIKIAorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKKyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs0Niwx
MDYgQEAgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1
ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7
CiB9CiAKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRp
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAg
ICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdp
dGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJv
cGVydGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGtVVFR5cGVKUEVHKSAmJiBxdWFsaXR5ICYm
ICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkg
dGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCisg
ICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAg
ICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Np
b25RdWFsaXR5OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0
eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgfQorCisgICAgLy8gU2V0
dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVH
IGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBp
biB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKyAg
ICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGlt
YWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFs
aXplKGRlc3RpbmF0aW9uLmdldCgpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+
IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAg
YXV0byB1dGkgPSBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Cisg
ICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBr
Q0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEo
KS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAg
IGlmIChDRkVxdWFsKHV0aS5nZXQoKSwga1VUVHlwZUpQRUcpKSB7CisgICAgICAgIC8vIEpQRUdz
IGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21w
b3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uu
d2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0
YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICB1bnNpZ25l
ZCBjaGFyKiBidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBh
bHBoYSA9IGRhdGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1Owor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1
OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8g
MjU1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBd
ID0gZGF0YVtpICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSAr
IDFdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGRh
dGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0
KCkpOworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0
ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwg
MCkpOworICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNv
dXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92
aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAg
IGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCks
IHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRh
dGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERh
dGE7CisgICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExl
bmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFn
ZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwg
cXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsK
KyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3Io
Q0ZEYXRhUmVmIGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBkYXRh
LmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEp
KTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1h
Z2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUs
IHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlh
YmQxZmI4M2FiMzFhMTE1YzY4OTUwNDkxZDQxOTU1Mi4uZWM1Y2U0M2Y0ZDFiNTcyNTQ3N2EyM2Fh
NGZjOGI2ZWJmNzBkNDJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjcsNiArMjcs
MTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNP
UkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lk
KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIAorYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdl
UmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxl
RGF0YVJlZik7CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSk7CitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0
YVZlY3RvcihDRkRhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAppbmRleCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMy
NTg4MjNjLi4yODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIy
NGJhYzUzNjRjOWEwNGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRh
YjIxNGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLmgKQEAgLTEwMCwxMCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYs
IENHQ29sb3JTcGFjZVJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAgICAKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggZGFlMTg3ZGE2NWQyMGIyODA2ZjJiZDM5ZThj
M2IwNjkzOTdjNGJhYi4uYTE4YjE0YTY2OTZjYzUwMzMzMTgyNzUwNTg1NTZjNWIzYjA5NDU2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJm
YWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3Vy
ZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9y
dCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIklt
YWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9y
bVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTEx
MCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5h
ZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6
Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNl
KTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJT
dXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBs
YW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAg
ICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4
ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0
MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcs
NyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsK
ICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVh
cigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVf
dCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiAr
MjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVz
aW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVhNTY5MWJiMTgw
ODM0MDU0NTU2NGE0MDFjYWJkNThlZTM3NTEyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29y
ZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxp
c3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRl
eHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZd
KEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFm
ZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29u
dGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNw
bGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNw
bGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3Bs
YXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJv
b2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5
RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBsYXlEaXNwbGF5
TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAg
aWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3Bs
YXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBt
X2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29u
dGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBt
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxp
c3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3
N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3
ZGQxZDg1OGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2
b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3Vs
dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBp
bWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIElu
dFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGlt
ZW5zaW9ucyk7CisgICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAg
ICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+
IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50U2l6ZSBwaXhl
bEFycmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVs
QXJyYXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CisK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
cmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBv
aW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1h
Z2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAy
MzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3
OGE3ZmI5NDdkNDA1ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMg
KzEwMCwxMyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAog
ICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZv
aWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51
bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBh
dXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06
OkJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47
CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEo
KSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAot
ICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVh
LCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7
CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0Fy
ZWEsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAKICAgICBy
ZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291
cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5
ZThjNWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJj
NzAxNTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRl
VHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVy
YXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3
MmI1OTBmYS4uNWM4YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcApAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVB
cnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwg
SW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAg
ZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsK
KyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRl
c3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAg
ICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAg
ICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAg
ICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwor
ICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAg
ICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhkNWVmMmE1MmU4NzMyMmI1OTE4ZmU1Mjg2MmRiYThiYTc2YmUx
MDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IDogdWludDhfdCB7CisgICAgUHJlbXVsdGlwbGllZCwKKyAgICBVbnByZW11bHRpcGxpZWQKK307
CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmNwcAppbmRleCAxYzY2YWQ3OWNlNDBjMTQ1NThmNjY1MjUyYjI1ZTNiYjdk
ZWQxNmJkLi44OTdjZTQwZDA0YzdlMGFkMWVhMTkyY2I5MTA2MTlmOGY5MjIyNGNjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVv
U291cmNlLmNwcApAQCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAg
IG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCmluZGV4IDkxM2FkNmY5NTMyY2VkN2MzZDBiOTQ1NDliYWQxYjVlMWMxMjNhMjkuLmJkOTU2
YTNlZTRiZDg0NGIwMzIyNWMzYTg0YzY0ZDMwZDZmZGI2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBSZW5kZXJM
YXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAogICAgIGVu
c3VyZUxheWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIo
KSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2Nl
bGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOwor
ICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxl
RmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVk
KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5YTJkNDQ2
NGRmNWNiN2IzYTQ0MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5ODRiNWQyYjUy
MWE2OTkxYzYxNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cApAQCAtMTgxLDE0ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3Jl
YXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICBJbnRS
ZWN0IG1hcmdpblJlY3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBhdXRvIGludGVy
dmFscyA9IG1ha2VVbmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJlY3QuaGVpZ2h0
KCksIC1tYXJnaW5SZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRoaXMgYnVmZmVy
IHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
aW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoaW1hZ2VCdWZm
ZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1
ZmZlci0+Y29udGV4dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Qu
c2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5
ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50
KCksIGltYWdlUmVjdC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNp
emUoKSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAgICAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1
bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVz
OiBSR0JBLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNkMjk3NzViODQ2
ZjA1OWQ1YTJjYTcxM2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFjZTcxN2VjNWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNWR1Jl
c291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVtZW50JiByZW5k
ZXJlciwgYwogCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2UgJiYgIXJlcGFp
bnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFn
ZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFr
aW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4K
LSAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JH
QiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0g
U1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29s
dXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2M2MzZTQ5NjBi
ZDRlM2JkYmQ4NzQ5MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFiYTkzOGQwZDll
MjYzNGQ4ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRo
KCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmls
dGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNF
bmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNF
bmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZl
VHJhbnNmb3JtLCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQp
OwogICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJG
aWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZv
aWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmls
dGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAgZmlsdGVyRGF0
YS5zb3VyY2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRIX1NUUkVBTShG
aWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAi
IHBvc3RBcHBseVJlc291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCAxNzg3
ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5Nzg3MjIwNDY1
YmM2YWVjMGI1ODA0YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEsNyArNzEsNyBA
QCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYg
c3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JT
cGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlv
bjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQjsK
ICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3Qg
YmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29u
dGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJEYXRhLT5t
YXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50
UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRl
eHQpOworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgICAgICBp
ZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggN2U4NjA3OThmNzFm
NzZiNTc2ZmM2ZTE5MzZmZjFiYTcyOGQ3MTE3MC4uNWRmODY1Mjc1OTQ1OGE1YWZiZjQ5OWQ2ZjU2
YjdhYzU5ZmUzM2ZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CkBAIC0yMTgsNyArMjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdl
Rm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCiAgICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVyYXRlZCBkcmF3
aW5nIGZsYWcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVy
YXRlZCBidWZmZXIuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxl
ZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDc5OTRlM2NhNzc3
NjMyOWQ2Zjc1ZDdhYWYwYzkzZmQ5YWEwNTllMTAuLmM5NjhkMzQ3OGE2M2Q1YWZhZDc0N2U5YzJi
MzE5OWQzZmI3MDc0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QKQEAgLTE1LDYgKzE1LDggQEAgJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hF
QURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJ
UikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5t
ZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJv
Y2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMTAwLDYgKzEw
Miw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvQ2FjaGUvV2ViQ2FjaGVTdG9yYWdlQ29u
bmVjdGlvbi5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9EYXRhYmFzZXMv
SW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1NlcnZlci5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29k
ZWNzLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdAppbmRleCAwY2QyM2UwMWJiYWNkMmVjNGEwYmRjM2JkZmYyYmUwZDdiNjBiMDFi
Li43MWRhNjUzYjdlYjczYjYyZjEwMDQzZTRhZDQyZTM3MWI5NWM5NjE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTEyMCw2ICsxMjAs
MTIgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2lu
UHJvY2Vzc1Byb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdl
cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Q
cm94eU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVz
c2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlSW1hZ2VCdWZmZXJNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzUmVwbGllcy5oCkBAIC0x
MzUsNiArMTQxLDkgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXJNZXNzYWdlc1IKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJl
Y2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzUmVwbGllcy5o
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNz
YWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZXNSZXBsaWVzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA1MmE5NWNlMGRlZDcwM2Q2MWQz
NGE5ZDE3ZjBjOGI0MmU2NjRmZGRhLi43OGIyMWI4OWRjOTRiN2EzY2MwMzU0YmExZDNlNjg1YzNj
NmIzYTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0xMjEsNiArMTIxLDE2IEBAIFJlbW90ZU1lZGlhUmVz
b3VyY2VNYW5hZ2VyJiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdGVNZWRpYVJlc291
cmNlTWFuYWdlCiAgICAgcmV0dXJuICptX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogfQog
Citib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1
cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOworfQorCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIs
IHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0
dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5KCkKIHsKICAgICBpZiAoIW1fcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpCkBAIC0x
NDksNDQgKzE1OSwxNyBAQCBMaWJXZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6bGliV2ViUlRDQ29kZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFn
ZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIHVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgUExBVEZPUk0o
Q09DT0EpICYmIFVTRShMSUJXRUJSVEMpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7Ci0gICAgICAgIGxpYldlYlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSNlbmRpZgorICAgIEFTU0VSVCghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
OworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjcmVhdGUoKnRoaXMsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0K
IAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit2b2lkIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVNZWRpYVBs
YXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNv
bm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJv
eHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpOworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IGFjNzEyNWQ3MzhkODY4ODhlZWE4YjRhOTI1
MTVmOWRlNGQxZjZiMDQuLjQ1ZTBiNTFlM2M1NjYyNzQ0MTRhMTU0ZDBjZTg2N2ZlNjY2NmFmMDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaApAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQog
CiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRl
bXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vz
c2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00NiwxOCArNDgsMjAgQEAgY2xhc3MgUmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MKICAgICA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+Cisg
ICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAg
ICAsIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IGNyZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJv
Y2Vzc0lkZW50aWZpZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9u
SUQpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsg
fQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJl
dHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3Mo
KSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRl
bnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vz
c0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248
dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93
ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiBy
ZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpOwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAg
LTc1LDE0ICs3OSwyMSBAQCBwcml2YXRlOgogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGll
bnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwotICAgIHZvaWQg
ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VO
YW1lKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29k
ZXI+JikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpT
dHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgYm9vbCBkaXNwYXRjaE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRj
aFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+Jik7CisKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0Jh
Y2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCiAgICAgUmVmUHRyPExvZ2dlcj4g
bV9sb2dnZXI7CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAg
UmVmPEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1h
cCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyUHJveHk7CkBAIC05Myw2ICsxMDQsNyBAQCBwcml2YXRlOgogI2lmIFBM
QVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaWJX
ZWJSVENDb2RlY3NQcm94eT4gbV9saWJXZWJSVENDb2RlY3NQcm94eTsKICNlbmRpZgorICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluCmluZGV4IDNkNDBhNTcxMmUwMmQxNDlkMTRmOTJmNTZlNDQ1MzQ2YzAx
MjIxZDguLjkzMmMwMTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJjNTI1OWJhNGQ3MDQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5IEBACiAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgeworbWVz
c2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7
CisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNl
UmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWYy
N2M4ZmEzZTdiODUwZTEzN2JhZTMyZWRkYjhhNzE1ZTg0NmY4Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyUHJv
eHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVy
SWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0
cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyKGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAg
ICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsK
K30KKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQor
eworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZl
cklkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlm
IChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mt
PmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lk
IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJp
Z2h0IHNlbmRSaWdodCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKSwgbV9pbWFnZUJ1ZmZl
cklkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoQ29u
dGV4dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaENv
bnRleHQoZGlzcGxheUxpc3QpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVy
OjpTZXRGbHVzaElkZW50aWZpZXIoZmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YTE2YTE0M2U3N2IyMjJjMzU1MThkM2Q1NjZmZjNhOWU1YTIxYmNiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2Vu
ZFJpZ2h0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OworICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJ
UEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29s
b3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChjb25zdCBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
Zmllcik7CisgICAgdmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdl
QnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ODljNWQ1NGJjNDI2YTZmYTBkOGZjYWZhODEyNjUyNTI0NDkzYmY1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykg
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3Nh
Z2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBG
bHVzaENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0
LCBXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30K
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgxMDM3MWRlM2FlOTA2NDE3
MTVlZDFjODkxNmMyNDQ1ZDdjZThhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5IDogcHVibGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+
LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsK
KyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAg
ICAgICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgbnVsbHB0ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKTsKKyAgICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkoc3Rk
Ojp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIo
V1RGTW92ZShiYWNrZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAg
ICAgIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXpl
KCksIG1fYmFja2VuZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxl
KCksIG1fYmFja2VuZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNyZWF0ZVNlbmRSaWdodCgp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5
ZXIoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOworICAg
ICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6
OmZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzAwNzRjNTI5N2NkM2U0OGQ1OTQx
NzFmMmNmOTRhNzE4MTdkZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgK
QEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5PFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
PEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ZjliYjVkNmJi
ZWZjZWIxMzg4YmY3ODQ2ZmI0N2I5NWQ4YmU0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1
bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9
CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29u
bmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mg
PSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRy
OworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmll
cikKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50
aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxv
Z2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBGQUxMVEhST1VHSDsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5OjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAg
IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9p
bWFnZUJ1ZmZlck1hcC5hZGQoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVm
ZmVyKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sK
KyAgICAvLyBDcmVhdGVTdXJmYWNlIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBi
ZWZvcmUgdGhpcyBvbmUuCisgICAgaWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdl
QnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM5OTM4YmVlNTExZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4
MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5o
IgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5KCk7CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24q
IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3Qg
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9y
U3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0g
SGFzaE1hcDxJbWFnZUJ1ZmZlcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcj4+OworICAgIEltYWdlQnVmZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAg
V2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2OTZkZTAzNDE3ZmJjZGJkNDM1
MWJkMmY2MmRhM2IyMGU5NmRjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFn
ZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVm
ZmVySWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdl
QnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcAppbmRleCAw
NTE1NzJlMTc5YjM0NzdjOWU0NTdjODRjMGU0YTZlN2M0M2YzMzRlLi5iZGMxMTg5ZGM0OTI2OWE2
NmNhODVjZTYxMDY3YmI2YjdkNjZiNzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5j
cHAKQEAgLTUyLDEwICs1MiwxMiBAQCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUAogICAgICwgbV9s
b2dJZGVudGlmaWVyKFdURjo6TG9nZ2VySGVscGVyOjp1bmlxdWVMb2dJZGVudGlmaWVyKCkpCiAj
ZW5kaWYKIHsKKyAgICBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZVJlY2VpdmVy
TWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAwLCAqdGhpcyk7CiB9CiAKIFJlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKQog
eworICAgIG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIDApOwogfQogCiB2b2lkIFJlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlclByb3h5OjpjcmVhdGVNZWRpYVBsYXllcihNZWRpYVBsYXllclByaXZhdGVSZW1v
dGVJZGVudGlmaWVyIGlkLCBNZWRpYVBsYXllckVudW1zOjpNZWRpYUVuZ2luZUlkZW50aWZpZXIg
ZW5naW5lSWRlbnRpZmllciwgUmVtb3RlTWVkaWFQbGF5ZXJQcm94eUNvbmZpZ3VyYXRpb24mJiBw
cm94eUNvbmZpZ3VyYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVtb3RlTWVkaWFQbGF5
ZXJDb25maWd1cmF0aW9uJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA2OTA2MzEwNmNhYjU0MDIxYzQyODk2Y2RjYjc2
M2E3NTZmNzhhZjg2Li5iYTI4MjY1YzI2MWVmZjFkNTcyNGIxMDI3ZGRmNzkxZDkyYWJmMDg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBi
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYgKzI3LDcg
QEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNU
SU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdF
X0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRS
SUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJV
VEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91
cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9k
ZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNlbmRSaWdo
dCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNv
cmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMSw2ICsyMTQs
NyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAg
ICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklE
JywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNv
cmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0yMTgsMTAg
KzIyMiwxMyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6OkltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAg
ICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6UlRDRGVjb2RlcklkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpTdG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcicsCkBAIC03NTcsMTMgKzc2NCwxNiBA
QCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToK
ICAgICAgICAgICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5
bmNfbWVzc2FnZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJp
YnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2Vp
dmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklC
VVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYg
bm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklC
VVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmKCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdl
X3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2Fn
ZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVT
U0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNw
YXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJj
bGFzcyk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAg
ICAgICAgZWxzZToKQEAgLTc3MiwxMyArNzgyLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hh
bmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlm
IHN5bmNfbWVzc2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0
cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnXG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZl
U3luYyVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYg
ZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2Rlcilcbicg
JSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRl
KExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVG
Q09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVz
dWx0ICs9IFtzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVz
c2FnZSBpbiBzeW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRl
KFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCBy
ZXBseUVuY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0
dXJuO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0
aW9uKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rl
cik7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5j
b2Rlcik7XG4nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aAppbmRleCAxZGUzMDQyYzA3OTE2NWExZDI1YTZmNGI1OGQ2NjA5YTY1NjYwMmY4Li5hYTg5ZjY1
YWJiNDY0Njg2OWM4MzBiOTVmZGY3NTY0Y2MwZTI0M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlh
Z25vc3RpY0xvZ2dpbmdDbGllbnQuaD4KQEAgLTc4OSw2ICs3OTAsMjYgQEAgdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsK
IAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2lu
ZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNw
bGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlM
aXN0LAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAogICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRl
eCA2MDJmYjc5NWE3MmFkZGM1Nzg1ODc2YmUwOTViM2VlYjg5ZDVlNTM4Li43NjZhYjE4N2ZlNzg2
OWQ4YTlhMDU1NDZhNDNiYTMxODA3ZDAxOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI5LDYgKzI5LDgg
QEAgR1BVUHJvY2Vzcy9HUFVQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAogLy9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiAvL0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlTWVkaWFSZXNvdXJjZUxvYWRlci5jcHAKIC8vR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRp
YVJlc291cmNlTWFuYWdlci5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0
aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3Bw
CkBAIC01MTEsNiArNTEzLDggQEAgV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
Y3BwCiAvL1dlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAK
IC8vV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogLy9X
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCitXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcAorV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKIAogV2ViUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA2
MGIzOWYzN2M1Nzg1NTYyMWYyOWY2NmI5NjE3ZDlhN2IzZGE3MDNkLi41MDQ3NDBkODFmYzg1MDYz
MzJlYTA2OTc5Nzg3N2ExNzNiMDk5NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC02MzEs
OSArNjMxLDEzIEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3IubW0KIC8vIERlcml2ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNv
bnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZVJlY2VpdmVyLmNwcAorR1BVUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJl
Y2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJX
ZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VS
ZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29y
a2VyRmV0Y2hUYXNrTWVzc2FnZVJlY2VpdmVyLmNwcAogVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTVjNmU3ZDY1YWY3MjI3ZWY3M2FmZDgyNjhmZjcxZGIw
ZDhhMjE1MC4uYjIyYWU3NTNmMzdkYmMzMDAxYzNmNDFjNjViMzI3MTI2MjdlMDI3NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTUy
LDggKzM5NTIsMjYgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rp
b25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
S1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9u
R2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFBNjc2
QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0
dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMy
MzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNE
aXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5ODIz
QUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QjIzQUQzNkQwMDBC
REFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFG
RjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIz
NUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhD
MDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1
ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEwMjNBQjA0OEIw
MEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFn
ZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMTIzQUIwNzYz
MDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU4
MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVD
MkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUUyM0I1
NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBX
S1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM3OSw2ICs2Mzk3LDcgQEAK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0Iw
QzAwOTU5OEUyIC8qIG1lZGlhICovLAorCQkJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBS
ZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJy
dGMgKi8sCiAJCQkJMkQ3RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0
aW9uLmNwcCAqLywKIAkJCQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uaCAqLywKQEAgLTYzOTUsNiArNjQxNCw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5
RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFj
ICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjFG
MUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4
RTIzQjYzM0NBMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5
RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIz
NzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzc1
NSw2ICs3Nzc1LDM4IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRTlB
MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLywKKwkJCQk3
MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovLAor
CQkJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcg
LyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzJENUMyRUMyM0I0
QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJ
NzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
ICovLAorCQkJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MkJCRTQwRTIzQUIwNDU4
MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8q
IEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIz
QyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8sCisJCQkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYx
MjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTQyM0FCMEFGMTAwQTYx
MjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTYwMjND
MTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJC
QkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywK
KwkJCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8sCisJCQkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLywKKwkJCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERF
RjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHAKaW5kZXggMThlOTM2ZGUzMjMwNzcwZjI0MzYxYjZhYmFhOGUxN2U0ZDJl
NWFjMC4uZWExNzU0YmVkYjM4YzZiNTcyYjY3ZTRjYWY3ZGE3MGY2MjY1ZWQyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5j
cHAKQEAgLTYwLDI5ICs2MCwxOCBAQCB2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9z
ZShJUEM6OkNvbm5lY3Rpb24mKQogewogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyKQogeworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICBy
ZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9u
OjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQogewotICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
c3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVNZXNzYWdl
RnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4o
KSkKLSAgICAgICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQ
cm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2Vu
ZGlmCi0jaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5s
aWJXZWJSVENDb2RlY3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaAppbmRleCAzMWM2MTA0NjY5ZjJmMDJmZmE0NDBmZWI4ODA5MjZjNzRhZTI2YWNmLi42
ZDFiODNkZTU4MzZhZmFlMjFhZmMzNGY1OGEyMmU1ZDZkMzIzYzcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlv
bi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3
LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsg
fQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJl
dHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiBwcml2YXRlOgogICAgIEdQVVByb2Nlc3ND
b25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CkBAIC01MywxMCArNTUsMTUg
QEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlk
Q2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVy
cmlkZTsKIAorICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCiAgICAg
Ly8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNz
LgogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2
Y2FjODgzYTY1MWU4NGNlOWQ2NGIzMC4uNTdmZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1
ZTIxNzlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0
aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNz
YWdlIHsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
Zmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjljZDM0YWEyNzIwNGQwZWE0NDM2MGUwYzA1MDg3YTViY2YyYjYw
ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRp
Zmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmpl
Y3RJZGVudGlmaWVyPEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTc4NzA0OGU1
N2M1NzQ3YzFmMjQ5MmQ5MDlkYzQ0MWMyYTg1NDlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRp
Zmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitl
bnVtIEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0
Y2U4MGY3YjFhNmVjYmM4MmJlNDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUlt
YWdlQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29u
bmVjdGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sK
KyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVBy
b2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVj
ZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZl
cklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3Rl
SW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIg
aXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFw
JiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQ
cm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNl
aXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0
aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rp
b24qIFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29u
bmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZl
cjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVj
dGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0
Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBD
OjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOwor
fQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sK
KyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpS
ZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNz
YWdlQXJyaXZlcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRC
YWNrZW5kKCkKK3sKKyAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9
IDM7CisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFj
a2VuZENyZWF0ZWQoKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZCgpOworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2Fp
dHNDb3VudDsgaXNQZW5kaW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2Fp
dFNldEZsdXNoSWRlbnRpZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRG
bHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
KQoreworICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9
CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2Vu
dEZsdXNoSWRlbnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4
dChkaXNwbGF5TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXIpOworICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjU2ZTMxZDBjYWYyMDZlZTUwNmM5Nzk2OTA1
Yjc4NDBhNDliOGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgflJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2Us
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRl
ci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAg
ICB2b2lkIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJ
ZGVudGlmaWVyOyB9CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNp
Y2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNo
U2VuZFJpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25z
dCA9IDA7CisKKyAgICB2b2lkIHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllcik7ICAgICAgICAKKyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRp
ZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKSB9OworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRl
bnRpZmllcjsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJ
ZGVudGlmaWVyOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg3NzU1N2MwYWE4YzhhOTA1MDRhMTM1ODBk
YTU5MWFhNWJmYzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0w
LDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90
UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6
RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hT
ZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjcxZTVkZDVlNzk4ZTk0MzA2YjQ3MTcyMTk3MjNh
MjcyODBkZGRiOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCAr
MSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1
YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBC
YXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNh
bGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAg
ICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJlbW90
ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tlbmQgPSBCYWNr
ZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdl
dCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFja2VuZCgp
OworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAgIHZvaWQgZmx1
c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0g
RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAgICAgICBSZW1v
dGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAg
ZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaERyYXdpbmdD
b250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgIH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRiOTU3N2E5Yzg5MGU0MDhmOGU5MDU0
ZjcyOTdhNTc3N2ZjMGU0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAg
LTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VC
dWZmZXJCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZl
ciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM3ZTA2NTc4ZDg5N2I4NGI5MjFhZjYwMWIzM2ViOTA2ZGQ0Njk5OWQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsK
K30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7
CisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2Vu
ZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFj
a2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNl
IHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
cjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxl
cmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6Cisg
ICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjUzZGEzOTE1ODhiZGFkMDkxZDY0NDIyMjI1MDFmOGE0NDk5Mzdi
MWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDog
cHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNz
YWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOwor
CisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNl
bmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBj
b25zdCBvdmVycmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVy
YXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zODY2YmYzYjViYTJlNDFlYjQ3OTdiNjQ4YWEzOWZmMTMyMzQ1
MjRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50
aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyID0gT2Jq
ZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGU+OworCit9CisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAKaW5kZXggOGU0YzkzNzVkN2I4Y2MxMGZmYTAwODAzZDQ4MjE3M2Jl
NWEzNTU4YS4uNDgxZmFhYWFjYWQyMGQyNjM5ZTg1ZDE2NTYzYmViMjg3MmUwMGRkNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3ND
b25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJVc2VyRGF0YS5oIgogI2luY2x1ZGUgIldlYkNv
bG9yQ2hvb3Nlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtODgx
LDE1ICs4ODIsMjIgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4g
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1f
cGFnZS5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURp
c3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQor
I2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKyAgICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxz
ZQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2
b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFw
aGljc0xheWVyKiBsYXllcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1
NWUxYzFkNjA4NTBlNDcxZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUx
YjRmNTNiMmQxZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZp
bmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFj
a2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9z
aXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5h
bAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZs
YWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNk
MTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFi
MWVjYmJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBA
QCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVu
dFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8g
VGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFu
IHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1
cm4gbmlsOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggOGYzNmM4MzBlZDIyY2RjOTY1ZjliMThlYTgzMTFiYzM0ZDBmYjk3
YS4uZDZmOWE4OGFmMjE5MDhjYjQwZjcwZWUzYmJhZTA4NTVlOTAwNjBlMiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyIEBACisyMDIwLTAxLTA1ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXls
aXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0wNSAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtTTExdIEdlbmVyYXRlIHJ1
bnMgZm9yIHByZXNlcnZlZCBuZXcgbGluZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5
MWI3MmFjY2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0
MWM2YmZiMzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
Y2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAK
ICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZs
YWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkx
MikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAg
KHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQg
KDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386813</attachid>
            <date>2020-01-05 22:42:12 -0800</date>
            <delta_ts>2020-01-05 23:13:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200105224211.patch</filename>
            <type>text/plain</type>
            <size>357263</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTY1NGRjNDgzNGQ3OGQ1
YzgzYzY4ZDc2MGY2OTVkZWM3OTc1MWMwNy4uMDAyZjY3ZTkxODhkYmZmYWQyNTQzOGY4MjJkNDky
ODYxMTM4MmFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4NyBAQAorMjAyMC0wMS0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQg
Y29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fZGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRNZWRpYVZvbHVtZSk6CisgICAgICAgICog
cGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVz
dGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBh
dGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2Fs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5
Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
aHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZm
ZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJbWFn
ZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6ZW5zdXJlU2hhcmVkQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNr
ZW5kOjpzaGFyZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVyOjpnZXRTY3JhdGNoQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0
VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dX
aXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUlu
dGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0
dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0lu
dG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VE
YXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
cmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVu
cHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1h
Z2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JB
RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50
b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxp
Y2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6
OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAyMDIwLTAxLTA1ICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1NMTF0gR2VuZXJhdGUgcnVucyBmb3Ig
cHJlc2VydmVkIG5ldyBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwNDI5YjFhYzZhZTAzYWMzZGEzMjE5YzE2
ODY2NzM4NzNkMThmZGQ0Li43ODE2OTQxY2VkMGI4ZjJjMjMxNmNjMGIzNzRhMThmZGFlNmRiNjQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDIwLTAxLTA1ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyBy
ZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMu
bWFrZToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNw
YXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNl
aXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90
ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1v
dGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaC4KKyAgICAgICAgKiBH
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdl
cy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIEdQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBH
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1l
c3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6On5SZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAg
ICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAg
ICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oOgorICAg
ICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVzc2FnZVJlY2VpdmVyTWFwKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6flJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRl
bnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRh
dGVkQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVz
aElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3Rl
Rmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW46IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBSZW5hbWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVD
bGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMjAtMDEtMDUgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgRHVtcFJlbmRlclRy
ZWUgZG9lc24ndCBhbHdheXMgY2FsbCB1cGRhdGVSZW5kZXJpbmcoKSB3aGVuIGEgdGVzdCBjb21w
bGV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA0NGFmMjg2ZTQzYzA5MWFiODQ4
YzE0MDgzNjZjZTY5ZmNmZmY1NmNlLi4zZGVlYjcxYzI1Nzg5MTNiNzIyYjM4ZDMyMzFkNmM4OGY5
MzFhN2E0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIw
MjAtMDEtMDUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKwor
ICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ29u
dGV4dE1lbnVDbGllbnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VG
b3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtKToKKwogMjAyMC0wMS0wNSAgU2ltb24g
RnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSBzb3VjZSBv
ZiBXZWJLaXQxIHRlc3QgZmxha2luZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5k
aW5nc0RhdGFTb3VyY2UuY3BwCmluZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBkMWNmYjZlODBiMjMx
ZGQ1NmQ2YjAuLjc0NjVkMGU2YTg2Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhlN2FhNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0
ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5
bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCkBAIC0yODQs
NyArMjg0LDcgQEAgdm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9h
cmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRpemVEYXRhSWZOZWUKIAogICAgICAgICBhdXRvIGJpdG1h
cEltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBiaXRtYXBJbWFnZS0+c2V0
RGF0YShXVEZNb3ZlKGJ1ZmZlclRvU2FuaXRpemUpLCB0cnVlKTsKLSAgICAgICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgVW5hY2Nl
bGVyYXRlZCk7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGJpdG1hcEltYWdlLT5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
ICAgICBpZiAoIWltYWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBtX2RhdGEgPSB7IG51bGxTdHJp
bmcoKSB9OwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vVXNlck1lZGlhQ2xpZW50LmgKaW5kZXggNDNiMmEwZGRjZDUyYjVk
MWFjNTYyYWU3YTEyOGU0MWQyMzNkOTg0Yi4uY2I5YjdlZGJlMmFkMTU3ODljMTMxMGNlOGZiMmI0
Y2QxMjU4ZDRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9Vc2VyTWVkaWFDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1VzZXJNZWRpYUNsaWVudC5oCkBAIC0zOSw2ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIENhcHR1cmVEZXZpY2U7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFBhZ2U7
CiBjbGFzcyBVc2VyTWVkaWFSZXF1ZXN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDkyOTdkMDQ0ZTQ0
ODI3OGRiZTdjOTE2OWJiMzI2YzlkZmI3MDQyNWIuLjM4MDAxNzg5OGZhYzEyNTMyNGI1OTY2ZGI3
MDVlMzZkZTI2OTJhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY4LDYgKzE4NjgsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZy
YW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg3LDYgKzE4
ODgsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMjJlMGRmZjBkZTZhOGQz
OGIwZWYwOGM0YjhhMTBmOTEyNDFmMzE5Yi4uNTM2MWRkMGFjMWUyZjc3Yzg0OWVjOWU1YmRjMjY1
YTJmYmM4YzhkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkgQEAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDA3OWU5NDY5YjExZmJiZjE2N2ExNzAyMmY1OTk5
NzQwY2Y2NjFiNTguLmUxOTI1Mjg5OWFkMTczNmE3ODBiZDY4YjE2NTA0MThlNGQ2YjMzZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJl
Z2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1
QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQw
RDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJs
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIy
QkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIy
QkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUw
MEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpT
U1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0Fs
dEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8q
IEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVs
ZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzIsMTAgKzIxMzAsMjEgQEAKIAkJNzIxNDQzMzIyMjNFQzg1
RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIy
M0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9w
ZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBG
QkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNG
MjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2
MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJC
QkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgy
M0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5k
ZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThC
MjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBE
N0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlT
dGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRG
MURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5
MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8q
IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIz
QUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNC
M0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjND
IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFNTIzQjFBODZEMDBGNjdENDMgLyogQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAw
RjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxp
bmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5
LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQw
Q0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcy
RDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdl
RXZlbnQuaCAqLzsgfTsKQEAgLTY1NDEsOSArNjU1MCw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkw
MDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVB
MTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVG
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0
YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0
OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkx
MjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtOTU5Nyw4ICs5NjAzLDEwIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAv
KiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5q
cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9y
dC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVE
NTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZh
bHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAv
KiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8q
IFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxl
bmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3
RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NjE5LDcgKzk2MjcsMjEgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8q
IEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JH
Qi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0
NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNS
R0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0
MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIw
MEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FB
QzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYy
M0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgy
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGlu
Z09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oOyBwYXRoID0gdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJp
bmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBK
U0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRz
UkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAw
NEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEOUYxQTM5MDRD
MzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBFWFRGcmFnRGVwdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTI2ODMsNyArMTI3MDUsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3Jh
cGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3Jh
cGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1MEFG
NkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyog
U1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYy
QTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNjY4Miw2ICsxNjcwMyw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJ
CQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJCTBG
RTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJCTcyQkJFNDI2
MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJ
MEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJ
CTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJ
MEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLApA
QCAtMjQ4ODgsOSArMjQ5MTAsMTIgQEAKIAkJCQlCMkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyog
R3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAv
KiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAv
KiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIyQTEwQjkzMEIz
ODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjkyQjI3QjEzNTY2
Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIyQkQ5RjgwMTM1
MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcyQkJFNDA4MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0
MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8sCisJCQkJNzJC
QkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAq
LywKKwkJCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMyMTg3NDA2NDAw
NEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNEM0UyMURCMjE4
MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJCQkJNTU1Qjg3
RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAgLTI0OTY3LDYg
KzI0OTkyLDcgQEAKIAkJCQlGQkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICovLAog
CQkJCTM3MjE0OTMzMThGMEI2RDYwMDE1NkVEQyAvKiBvcGVudHlwZSAqLywKIAkJCQk0OUU5MTFC
MjBFRjg2RDI3MDA5RDBDQUYgLyogdHJhbnNmb3JtcyAqLywKKwkJCQk3MkQ1QzJFMzIzQjFBNzRE
MDBGNjdENDMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovLAogCQkJCTQ5MDcwN0U0MTIx
OUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5jcHAgKi8sCiAJCQkJNDkwNzA3RTUx
MjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmggKi8sCiAJCQkJQkVGMjlFRTkx
NzE1REQwOTAwQzRCNEM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlLmggKi8sCkBAIC0yNDk4Niw2ICsy
NTAxMiw3IEBACiAJCQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1h
Z2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8s
CiAJCQkJNTU1MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAor
CQkJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgg
Ki8sCiAJCQkJNDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAgKi8sCiAJCQkJNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNo
TW9uaXRvci5oICovLAogCQkJCTJEMjlFQ0MxMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3JDbGllbnQuY3BwICovLApAQCAtMjUwODEsNyArMjUxMDgsOCBAQAogCQkJCTU1
QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQz
RDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBC
OTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUz
NjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcyMDI4MEQxMjNCQTkz
N0IwMDZGNDc2NyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDAwMjNB
QUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFG
NTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTcz
OTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAw
Q0NDMDRDIC8qIEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUxMzgsNiArMjUxNjYsOCBAQAogCQkJ
CTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThG
QTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0
Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQkUzRkUyM0FBQkZBMjAwQTYx
MjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQyMzIzQUM0OTNFMDBB
NjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4OEYw
MDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAwMzg3
NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0UyMTZF
QkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjUxNDcsNiArMjUx
NzcsOSBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJ
CQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICovLAog
CQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICovLAor
CQkJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywK
KwkJCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAor
CQkJCTcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJ
QTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNG
OTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCkBAIC0yODk4NCw2ICsyOTAxNyw3
IEBACiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVU
cmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQkI1Qzg4MUQ1RDZGNDUwMDVBNzFGNCAv
KiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVDMkU1
MjNCMUE4NkQwMEY2N0Q0MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJB
RDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTY3OCw2ICsyOTcxMiw4IEBACiAJCQkJMTEyRkIzNTIyMzlDMjNDNDAwODcwNTRBIC8q
IERpc3BsYXlJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0N0U2MzIyNzc0MjVB
MDBDN0JDQjAgLyogRGlzcGxheUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQz
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJC
QkU0MjcyM0FDQjNFMDAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQjA5OTAxMjNDMDkyM0MwMDczQjlDQiAvKiBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTMwMjg2LDggKzMwMzIyLDEwIEBACiAJCQkJN0M3OTAzQjMxRjg2Rjk1QzAwNDYz
QTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNl
dHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyog
SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjgxMTM1MzY0
RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJC
QkU0MjEyM0FDMkNENzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCQkU0MjAyM0FDMkI3NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2MzMgLyogSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMUYxRUE3MjNBRDUw
QTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNEM0UyMUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VD
b250cm9sc0J1dHRvbkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThC
NkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzE3NTYsNiArMzE3OTQsNyBAQAogCQkJCUE1NTRCNUYzMUUzODM5M0EwMDFENEUwMyAv
KiBQZXJmb3JtYW5jZVVzZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTgxRkI1MTUy
MEY5M0IwMDNBN0E3NSAvKiBQZXJpb2RpY1dhdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RDVE
QzJFMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjNDIC8qIFBoeXNpY2FsSW1h
Z2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAv
KiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkM4MkI3
MjM2QTNGNkEwMDU1RDZDNSAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUQyRjhFMDYyMzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5k
b3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3NzUsNiArMzE4MTQsNyBAQAogCQkJCUJDQUE0ODcw
MTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9z
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZv
cm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMg
LyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFD
NEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDU2MkY5NjExNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUY1NDRGNzg5MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMTk1MSw2ICszMTk5MSw4IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMw
MjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEy
MTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUlt
YWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVu
ZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzODI2QTgyM0MxRjU4QjAwNDlG
N0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5
OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUI1OTVGRjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAxODE3NTE1ZTFjYzcwOTBjN2U1OWEwY2JkMjUzZmY3
MjYxNzQ0YzczLi5mNTAxY2EyM2E3Mzk1ZjFlNWIyMWM4MWIwNGRkYjAxOTNiN2EyZjM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKQEAgLTkyMSw4ICs5MjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXIt
PmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9n
aWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGJ1ZmZl
ci0+bG9naWNhbFNpemUoKTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KDAs
IDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAg
IGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVy
bkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3ODUsMTMg
KzI3ODUsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRT
aXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFVuYWNjZWxlcmF0ZWQsIHJlc29sdXRp
b25TY2FsZSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9h
dFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAg
ICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0K
IAotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhl
aWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9p
bnQoKSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIEludFNpemUobG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJ
bnRQb2ludCgpKTsKIAogICAgICAgICBhdXRvIGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUo
eyBXVEZNb3ZlKGJ1ZmZlciksIHN0YXRpY19jYXN0PGJvb2w+KG9yaWdpbkNsZWFuKSB9KTsKICAg
ICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCBlNWI4YWI0NjljZWM0YmMwNThjNDM3ZDE5OTUwNDBi
NTAyMWM3NDMxLi4yZmE1M2FhMzhjMWZjYzExNzM1NmFmOWYxNTVkMDE1ZDQ0MzdmMGNlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMTYsNyArMTE2
LDcgQEAgUmVmUHRyPEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBp
bnRvIEltYWdlQnVmZmVyLgogICAgIC8vIEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91
bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVy
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgYXV0byB0
ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJ
bWFnZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCmluZGV4
IGY0Yjc3MDdlOTdhOGZlNTFmOGUyNTc3NThhZGU0YjZkZGZmNTAyZTUuLjY1ZDQ2NGZkZDdkNTg4
ZWM3MzE2MTZiNzQwMzdhODQyOGVlZjMxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9t
UGFpbnRDYW52YXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZh
czo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgbV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVs
bHB0cik7CisgICAgbV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFtX2NvcGllZEJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEwMiw3ICsxMDIsNyBAQCBJbWFnZSogQ3Vz
dG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICAgICAgbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGlj
c0NvbnRleHQgPSBudWxscHRyOwogCi0gICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVy
LT5jb3B5SW1hZ2UobV9jb3BpZWRCdWZmZXItPmZhc3RDb3B5SW1hZ2VNb2RlKCksIFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKTsKKyAgICBtX2NvcGllZEltYWdlID0gbV9jb3BpZWRCdWZmZXItPmNv
cHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwog
ICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDIzZDliMzRlODQ4ZjZkMDFkMzRhOWRhZmZiYTMw
NTBmYzdhNzEzMTYuLjkwOTMzZTIzYWMwODE4MDMzYzc2ZmMzZTI4MjExOTE4MDE0ODZjNzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJu
LmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlz
cGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNjAsNiArNjEs
MTAgQEAKICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAorI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAiQ2Fu
dmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgpA
QCAtMzQ1LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0Vs
ZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBtX2NvbnRl
eHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQoKS5p
blF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxh
eWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KICAg
ICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04MTgsMzkgKzgyMCwy
NyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNp
emUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5
TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewotICAgIGlmICh1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAgICAgICAg
cmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNwbGF5
TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAodHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAgICAgICAg
cmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250
ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkp
CisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3RyaW5nIEhUTUxDYW52
YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxh
Z3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250
ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gYnVm
ZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKICAg
ICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5
RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAog
ewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2Nv
bnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIo
KSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg1LDExICs4NzUsMjcgQEAgdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAh
aGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVy
YXRlZDsKLQogICAgIGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1
bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RX
aW5kb3coKSA6IG51bGxwdHI7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5n
IGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KKyAgICBib29sIHVzZXNEaXNwbGF5
TGlzdERyYXdpbmcgPSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgp
LnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgpKTsKKyAgICAKKyAgICAvLyBG
SVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIHJlbW90ZSBkcmF3aW5nIG9uIGNhbnZhcy4KKyAg
ICBib29sIHVzZXNSZW1vdGVEcmF3aW5nID0gZmFsc2U7CisKKyAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGU7CisgICAgaWYgKHVzZXNSZW1vdGVEcmF3aW5nKQorICAgICAgICByZW5kZXJp
bmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6UmVtb3Rl
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpSZW1vdGU7CisgICAgZWxzZSBpZiAodXNlc0Rp
c3BsYXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJh
dGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDsKKyAgICBlbHNlCisgICAgICAgIHJlbmRlcmluZ01vZGUg
PSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6U1JH
QiwgaG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisKICNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAg
ICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlv
biBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmlu
ZGV4IGI1Mjg2NDVjNjU4NzRjZDBjYTA5MzQ0NDYxYjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEyMjk0
MTQ5NmJmMzFiY2RkNzljNmJjNWMzOTFhNzhhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmgKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBt
X2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKIAotICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3REcmF3
aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdp
bmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCmluZGV4IDVmNDlmNzM5YTFmNWMzYmUwZWUxNzFmMzRm
OTYzZTAyNjZiYzQ0OTIuLjJiODE5ODllOGZkNjJlZmUzNDUzODdhOTAyZmU2OTJiMzA5OTU0ZmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC02MSw5ICs2MSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1hcCk7
CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJp
bmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAjZW5kaWYKIAogUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEludFNp
emUgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFz
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAppbmRleCA5Zjc4
ZThiMmJlY2IxOGI5ODlmNjI4ZGUxM2MxM2VkYTkwYjZiMjkxLi4zZDE1YzkwMmNlZGEzNmQ0YTdm
NDI2YmQ5NWU2ODFlMGFmYmJjMTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52
YXMuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFw
Pj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICAgICAg
cmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51bGxwdHIgfSB9OwogCiAgICAgICAgIGlm
ICghbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4geyBJbWFnZUJp
dG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQp
LCB0cnVlIH0pIH07CisgICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsg
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
LCB0cnVlIH0pIH07CiAKICAgICAgICAgYXV0byBidWZmZXIgPSB0YWtlSW1hZ2VCdWZmZXIoKTsK
ICAgICAgICAgaWYgKCFidWZmZXIpCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBPZmZzY3JlZW5D
YW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhl
aWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCkpOworICAgIHNldEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7
CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtl
SW1hZ2VCdWZmZXIoKSBjb25zdApAQCAtMjU3LDcgKzI1Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAg
IGlmIChzaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVy
YXRlZCkpOworICAgIHJldHVybiBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiB2b2lkIE9mZnNjcmVl
bkNhbnZhczo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCBiZGI2Y2VhM2I0Y2Vh
OWViM2I2YWNkYmNiNDY1OTMwMWUxNzc0N2Y1Li4wY2E1ODU3MTY1YzlhMjRjYzM4NGM5NjAzYjU3
OTUyMzY0YmJhOTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMTgwNiw3ICsxODA2LDcg
QEAgdGVtcGxhdGU8Y2xhc3MgVD4gSW50UmVjdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpjYWxjdWxhdGVDb21wb3NpdGluZ0J1ZmYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZlcihj
b25zdCBJbnRSZWN0JiBidWZmZXJSZWN0KQogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBpc0FjY2VsZXJhdGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVu
YWNjZWxlcmF0ZWQpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Qu
c2l6ZSgpLCBpc0FjY2VsZXJhdGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmNvbXBvc2l0ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBJ
bnRSZWN0JiBidWZmZXJSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTE5OTAsNyArMTk5
MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2Fu
dmFzUGF0dGVybj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoQml0bWFwSW1hZ2U6OmNyZWF0ZShX
VEZNb3ZlKG5hdGl2ZUltYWdlKSksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSB9Owog
I2VuZGlmCiAKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5yZW5k
ZXJpbmdNb2RlKCkgOiBBY2NlbGVyYXRlZCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJh
d2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBA
IC0yMDc1LDIxICsyMDc1LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpz
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXkKICAgICAgICAgY29u
dGV4dERpc3BsYXlMaXN0TWFwKCkucmVtb3ZlKHRoaXMpOwogfQogCi1TdHJpbmcgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4
dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGlmICghbV9yZWNvcmRpbmdDb250ZXh0KQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3JlY29yZGluZ0NvbnRleHQtPmRpc3BsYXlM
aXN0LmFzVGV4dChmbGFncyk7Ci19Ci0KLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxh
Z3MpIGNvbnN0Ci17Ci0gICAgYXV0byogZGlzcGxheUxpc3QgPSBjb250ZXh0RGlzcGxheUxpc3RN
YXAoKS5nZXQodGhpcyk7Ci0gICAgaWYgKCFkaXNwbGF5TGlzdCkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmFzVGV4dChmbGFncyk7Ci19Ci0KIGNvbnN0IFZl
Y3RvcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZSwgMT4mIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnN0YXRlU3RhY2soKQogewogICAgIHJlYWxpemVTYXZlcygpOwpA
QCAtMjE1OSwxMCArMjE0NCwxMCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRhKGZsbwogCiBFeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAog
ewotICAgIHJldHVybiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRl
U3lzdGVtLCBzeCwgc3ksIHN3LCBzaCk7CisgICAgcmV0dXJuIGdldEltYWdlRGF0YShDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsLCBzeCwgc3ksIHN3LCBzaCk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURh
dGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQg
c3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CitFeGNlcHRpb25PcjxSZWZQ
dHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRh
KENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW52YXNCYXNlKCkub3JpZ2lu
Q2xlYW4oKSkgewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xl
TWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRh
IGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3Nz
LW9yaWdpbiBkYXRhLiIpKTsKQEAgLTIxOTYsNyArMjE4MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0
cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEo
SW1hZ2VCCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdl
RGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZl
ci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNvb3Jk
aW5hdGVTeXN0ZW0pOworICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0LCBj
b29yZGluYXRlU3lzdGVtKTsKICAgICBpZiAoIWJ5dGVBcnJheSkgewogICAgICAgICBTdHJpbmdC
dWlsZGVyIGNvbnNvbGVNZXNzYWdlOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRMaXRl
cmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXpl
IHdhcyAiKTsKQEAgLTIyMTgsMTAgKzIyMDMsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQK
IAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VE
YXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZ
LCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKIHsKLSAgICBwdXRJbWFnZURh
dGEoZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRp
cnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CisgICAgcHV0SW1hZ2VEYXRh
KGRhdGEsIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIGR4LCBkeSwgZGlydHlYLCBkaXJ0eVks
IGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0
IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdo
dCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYgZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwg
ZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBm
bG9hdCBkaXJ0eUhlaWdodCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzQmFz
ZSgpLmJ1ZmZlcigpOwogICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjMwLDggQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBk
YXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8
aW50PihkeCksIHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0
KTsKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRl
U3lzdGVtID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZlci0+
bG9naWNhbFNpemUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICAKKyAgICBkZXN0
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXIt
PmludGVybmFsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0yMjUzLDcgKzIy
MzksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJ
bWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0
KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAo
IXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0
YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6
ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0
T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmRhdGEuZGF0YSgpLCBJ
bnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50
KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKIAogICAgIGRpZERyYXcoZGVzdFJlY3Qs
IENhbnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5k
IGNsaXAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCAzZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5OGFl
NjcyMjE4N2YxYmVlOTFkLi45NjQwMGQxYWY1MDBkNThlMWRkOWJkMTExNzQ4MjE0MWE3MmJiNWIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0yMjIsOSArMjIyLDYgQEAgcHVibGljOgogICAgIGJv
b2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5OyB9CiAgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29s
KTsKIAotICAgIFN0cmluZyBkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0Rmxh
Z3MpIGNvbnN0OwotICAgIFN0cmluZyByZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlz
dDo6QXNUZXh0RmxhZ3MpIGNvbnN0OwotCiAgICAgdXNpbmcgRGlyZWN0aW9uID0gQ2FudmFzRGly
ZWN0aW9uOwogCiAgICAgY2xhc3MgRm9udFByb3h5IDogcHVibGljIEZvbnRTZWxlY3RvckNsaWVu
dCB7CkBAIC0zNzEsOCArMzY4LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xhc3Mg
VD4gdm9pZCBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0
ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0Owot
ICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGluYXRl
U3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBm
bG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7CisgICAgRXhjZXB0aW9uT3I8UmVm
UHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7CisgICAgdm9pZCBwdXRJbWFnZURh
dGEoSW1hZ2VEYXRhJiwgQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9h
dCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWln
aHQpOwogCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDE0ZWEzN2Q4ZDdlYWZiMDFiNWM0Y2UxOWViZTc2YzUxOGNmY2Q0
YTguLmI1MWI0ZGJmMTNlZTUwNmViOTQ5OGM0M2VmNDVjOTQ0ZGQ3M2UwYTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0LmNwcApAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KTsKIAogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
QWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUg
YnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9k
ZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNl
bmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFn
ZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCkBAIC02OSw3ICs2OSw3
IEBAIEhUTUxDYW52YXNFbGVtZW50KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNhbnZh
cygpIGNvbnN0CiAKIGJvb2wgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJh
dGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVy
YXRlZDsKKyAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZDsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91
dHB1dEJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNw
cAppbmRleCA3OWE1NWUyY2I3Nzc3NzA3YmZjMzg5YjFkODNjMzBiYWUyYmQ3MzFlLi43ZGM3NmFi
M2YxMWYwOWNhNzM5ZWFmYWM3MTc1MTBmY2Q4ZTc5ZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAt
MzkzOSw3ICszOTM5LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKICAgICAgICAgaWYgKCFi
dWZmZXIpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUo
KSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRleFN1
YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkltYWdlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9
OwpAQCAtNDA2MSw3ICs0MDYxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKICAgICAgICAg
aWYgKCF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgU291cmNl
SFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHZpZGVvLT52
aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZz
ZXQsIHlvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVy
OjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZp
ZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAg
ICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0ZXhTdWJJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUs
IGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ1MDAsNyArNDUwMCw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJbnRl
cm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwog
ICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwgIXRl
eHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYnVm
ZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0
dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLT5jb3B5VG9QbGF0
Zm9ybVRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBiaXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCksIHR5cGUpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1MDgsNyArNDUwOCw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3Jt
YWwgcHVyZSBTVyBwYXRoLgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5j
b3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC00NTc3LDcgKzQ1NzcsNyBA
QCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJu
YWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAg
ICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0
dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgSW1hZ2VCdWZm
ZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJn
ZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYg
YnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwg
aW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkp
IHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5
cGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIH0K
QEAgLTQ2MjIsNyArNDYyMiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIH0K
IAogICAgICAgICAvLyBOb3JtYWwgcHVyZSBTVyBwYXRoLgotICAgICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0
Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJh
bWVUb0ltYWdlKHZpZGVvLmdldCgpLCBEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlm
ICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0ZXhJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NjQ3LDcgKzQ2NDcsNyBAQCBSZWZQdHI8SW1h
Z2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2Um
IGltYWdlLCBpbnQgdwogICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uu
c2l6ZSgpKTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsKICAg
ICBidWYtPmNvbnRleHQoKS5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAg
ICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkp
OworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiB9CiAK
ICNpZiBFTkFCTEUoVklERU8pCkBAIC02MzQ0LDcgKzYzNDQsNyBAQCBJbWFnZUJ1ZmZlciogV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIo
Y29uc3QgSQogICAgIH0KIAogICAgIC8vIEZJWE1FICgxNDk0MjMpOiBTaG91bGQgdGhpcyBJbWFn
ZUJ1ZmZlciBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZD8KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNj
ZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBBU1NFUlQobV9idWZmZXJz
LnNpemUoKSA+IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFD
b250cm9sRWxlbWVudHMuY3BwCmluZGV4IDBjYmQwYTNjY2UwMzkyOTViNDkyNWNlMzFhMDU0ZTFm
NjkxMGQ5MzAuLjZlYTc5MjE0ZjhhNmUwMDViMGJlMjQ0OWEyZGQ2NzI4OGZjM2FjMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5j
cHAKQEAgLTE0NDYsNyArMTQ0Niw3IEBAIFJlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRy
YWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpCiAgICAgSW50
UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkpOwog
CiAgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25k
aXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCmluZGV4IDYyNjE3Zjc4ZjNlMmYwNDc0OGFhNThhZGFlYjhmYTMwYmQ3MTJhZDQuLmM5
OWQzNmFmZmFhODY1YTllNmE5NWRjNTM1YjQ4NzQ4YzdlZTNlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVu
dC5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1i
ZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1
ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgpAQCAtMzAzLDYgKzMwNCw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2Vu
ZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAgLy8g
UGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5
ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3Jh
cGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFw
aGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVT
bmFwc2hvdHRpbmcuY3BwCmluZGV4IDBhNDRjMmZhMWEwOTQ5N2NmZGY1NTg4ODMyZmZkZmYxMDIz
MzMwZTEuLmUyNGQ5MmU2ZjNlNjFkMzhhOWIyNDQ4NWY0ZDEzZGU1MGU1MzNhMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZy
YW1lJiBmcmFtZSwgY29uc3QgSW50UmUKICAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9u
c1BhaW50V2l0aEludGVncmFsU2NhbGVGYWN0b3IpCiAgICAgICAgIHNjYWxlRmFjdG9yID0gY2Vp
bGYoc2NhbGVGYWN0b3IpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQs
IHNjYWxlRmFjdG9yKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICBidWZmZXItPmNvbnRleHQoKS50cmFuc2xhdGUoLWltYWdlUmVjdC54
KCksIC1pbWFnZVJlY3QueSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDc1YjVmZDAxYTViZDY2
MzBmN2ZlYzZiN2U3ZTIzYmZhMTAwM2Q4MDIuLmMwN2IxNDdhOWI5NGJjYjJhZWZkN2FiNWVkM2Zi
Y2U0OTgwZjdiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJl
bmRlcldpZGdldC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJS
ZXNpemVPYnNlcnZlci5oIgogI2luY2x1ZGUgIlJlc291cmNlVXNhZ2VPdmVybGF5LmgiCiAjaW5j
bHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMzI5LDYgKzMzMCw4IEBAIFBhZ2U6
OlBhZ2UoUGFnZUNvbmZpZ3VyYXRpb24mJiBwYWdlQ29uZmlndXJhdGlvbikKICAgICBtX2xpYldl
YlJUQ1Byb3ZpZGVyLT5zdXBwb3J0c1ZQOChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYlJUQ1ZQOENvZGVjRW5hYmxlZCgpKTsKICNlbmRpZgogCisgICAgUmVuZGVy
aW5nQmFja2VuZDo6ZW5zdXJlU2hhcmVkQmFja2VuZCh0aGlzKTsKKwogICAgIG1fY29yc0Rpc2Fi
bGluZ1BhdHRlcm5zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGFnZUNvbmZpZ3VyYXRpb24uY29y
c0Rpc2FibGluZ1BhdHRlcm5zLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiYgcGF0dGVybiA6IFdU
Rk1vdmUocGFnZUNvbmZpZ3VyYXRpb24uY29yc0Rpc2FibGluZ1BhdHRlcm5zKSkgewogICAgICAg
ICBVc2VyQ29udGVudFVSTFBhdHRlcm4gcGFyc2VkUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsK
QEAgLTEwMTYsNiArMTAxOSw3IEBAIHZvaWQgUGFnZTo6c2V0TWVkaWFWb2x1bWUoZmxvYXQgdm9s
dW1lKQogICAgICAgICBlbGVtZW50Lm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiAgICAgfSk7CiAj
ZW5kaWYKKyAgICBSZW5kZXJpbmdCYWNrZW5kOjplbnN1cmVTaGFyZWRCYWNrZW5kKHRoaXMpOwog
fQogCiB2b2lkIFBhZ2U6OnNldFpvb21lZE91dFBhZ2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkx
NjE5ZGM2NDNmODcyOTA5Y2I3MWY3ODI4ZWY4NWJiYy4uMjEwN2E5ZTFlOTljZjM1MWQ5ZTYxNjY4
MDVjNGE1NjMzYWU0N2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29u
c29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVu
dC5jcHAKQEAgLTM3Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5z
aG90KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAg
ICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAg
ICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VT
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAg
ICBJbnRSZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJj
ZVJlY3QsIEludFBvaW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdl
RGF0YS0+ZGF0YSgpLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYWI0Njg2NzY4ZjFhMjgy
ZDU4ODFjOTM5Nzk0NmQ1YmEyMDA2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBEaXNwbGF5TGlzdEltYWdlQnVmZmVy
IDogcHVibGljIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGljIERpc3Bs
YXlMaXN0OjpEcmF3aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGljOgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlz
aWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4o
c2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAg
ICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5k
VHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEJh
c2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoZGF0YUJhY2tlbmQpKQorICAgICAgICAsIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNw
bGF5TGlzdEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJu
IHRoaXM7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250
ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxh
eUxpc3QoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBhZjFkYjFlNGMwOGQ0MTJlMzVkOGFmMmY0
Zjc5MmE0MjMwMTAyZGQ2Li5mZWYyYjEwYmVjM2RkNWMzNjQwZDVlZGY0MTZjNTM1YWM5ZjM5YmUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaApAQCAtMzUwLDcgKzM1MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpOwogI2VuZGlmCiAgICAgYm9vbCBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6
IFVuYWNjZWxlcmF0ZWQ7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25z
dCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAK
aW5kZXggNDU4YWU3MmYyYWUwMjU2MjQ3NjhlODc5ZGJkNDk2OTY0YjQ5MWIxOC4uMDBiZTBmZWEw
NjA1NWNhMzFiMmM4ODc0ZGQzNzRlZWExZDQyODQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKQEAgLTI4LDYgKzI4LDggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKKyNpbmNs
dWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuaAppbmRleCBjZWVhMWRhNDBlYjMyZmY3OGExZTc1ZTE3YmZlMDA5MjAxYjc2
ZjEyLi4yNmExMmRlM2JlNGFjNmI4ODQzNjRjNTU0Mzk3ZjdmNzFjNzhhYTJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2
ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgog
I2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTIyLDE3ICsxMjMsNiBAQCBlbnVtIFRleHRBbGlnbiB7
CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLWVudW0gUmVuZGVyaW5nTW9kZSB7Ci0gICAgVW5h
Y2NlbGVyYXRlZCwKLSAgICBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIsIC8vIFVzZSBw
bGFpbiBtZW1vcnkgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBwbGF0Zm9ybSBBUEkgdG8gYWxsb2Nh
dGUgYmFja2luZyBzdG9yZS4KLSAgICBBY2NlbGVyYXRlZAotfTsKLQotZW51bSBjbGFzcyBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHsKLSAgICBQcmVtdWx0aXBsaWVkLAotICAgIFVucHJlbXVsdGlw
bGllZAotfTsKLQogU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3JlOjpDb21wb3Np
dGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKIFN0cmluZyBibGVuZE1vZGVOYW1lKFdl
YkNvcmU6OkJsZW5kTW9kZSk7CiBib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIFdl
YkNvcmU6OkJsZW5kTW9kZSYpOwpAQCAtMTQzLDcgKzEzMyw2IEBAIFdFQkNPUkVfRVhQT1JUIFdU
Rjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21w
b3NpdGVPCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpU
ZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOwogV0VCQ09SRV9FWFBPUlQgV1RG
OjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKLVdF
QkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5k
ZXggMGU4ZGFmMWVhOTU1ODljNTM0MGUwMjZlNDQ2ODU1YTUxMTJiYzA1Ni4uNmY0ODBmNTMxMDdk
OTk2YjI1YTczMzRjOTcyMzg4NjA4ZDllNzZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5
cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDM4ICsy
OCw0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAK
LSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFt
cGVkTGVuZ3RoID0gNDA5NjsKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1h
eENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4g
UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkQmFja2VuZCgpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7
Cit9CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7CitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
eworICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNS
R0IsIGNvbnRleHQpOworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQog
ewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVy
U2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250
ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gYnVmZmVyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBm
YWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQog
Ci0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3Vj
Y2VzcykpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5n
TW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCisKK3N0YXRp
YyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBmbG9h
dCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwog
CiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNp
emUpCiB7CkBAIC0xMDUsOTcgKzExMSwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3Qu
bG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cp
ICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEo
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2Vu
ZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShE
SVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6
ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBk
c3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxp
bmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewot
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxV
VCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9
IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQot
Ci1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2so
KQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1
bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5n
dGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBw
aXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0g
KHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1
LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsK
LSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VS
ZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRo
IHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWND
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1M
YXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0QmLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJv
b2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQn
cyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVz
b2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRT
aXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiByZWN0CiAKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJs
ZUJ1ZmZlclNpemUocmVjdC5zaXplKCksIGNvbnRleHQpOwogCi0gICAgYXV0byBidWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNw
YWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0Lmxv
Y2F0aW9uKCkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250
ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29u
dGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhp
Y3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVy
biBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vu
ZGlmCi19Ci0KLUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAg
IC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlz
IHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBv
bmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29u
dGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVy
OwogfQogCi1ib29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZl
cjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyKQogewotICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVG
YWN0b3IoKSwgdGhpcy0+Y29udGV4dCgpLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFn
ZUJ1ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBj
b25zdAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25j
dXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91
dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8g
YWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBj
aGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFs
U2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShw
cmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAg
ICBpbWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CiB9Ci0jZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggMTE4ODBjYTE4NTY4MmUzNDBhMDU4NWRmMWUwMWU1
MTU5OWQwMjE1NC4uZGVkNjRkNTE5YmMwYzc4NWZkZTY4ZGJhMGMxNzk1YThjYjc1NTYwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0x
LDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0yNywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAi
QWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckRhdGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0j
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVj
dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xh
c3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJl
Y3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENv
cHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVj
dCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdz
IG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNz
IERyYXdpbmdDb250ZXh0OworfQogCi1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0g
ICAgTm8sCi0gICAgWWVzLAotfTsKK2NsYXNzIEhvc3RXaW5kb3c7CiAKIGNsYXNzIEltYWdlQnVm
ZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VC
Q09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAg
ICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJuIGEg
bnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0g
Q29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgog
Ci0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRl
eHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9h
dFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIC8vIENy
ZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1
aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGlu
dG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0aWMg
SW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVmZmVy
KCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUK
LSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7
IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0
U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVy
biBtX3Jlc29sdXRpb25TY2FsZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+
IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KTsKLSAgICAvLyBHaXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVy
biBEb250Q29weUJhY2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5n
U3RvcmUgYmVoYXZpb3IKLSAgICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBk
b2Vzbid0LiAgCi0gICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUo
KTsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1h
Z2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4K
KyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNp
emUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChj
b25zdCBGbG9hdFJlY3QmKTsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgc3Rh
dGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OwogCi0gICAgdm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKKyAgICB2aXJ0
dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZmx1c2hDb250ZXh0KCkgPSAwOwogICAgIAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNl
TWFzaygpOwotCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0OwotCi0jaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkg
Y29uc3Q7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCog
ZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZs
dXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KIAotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJhbnNm
b3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQot
ICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENv
bG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KLSNl
bmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUg
aW50ZXJuYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKCkgY29uc3QgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBz
aXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgbWVt
b3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5h
bE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICAvLyBGSVhNRTogY3VycmVu
dCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhh
dCB0aGV5IG9ubHkgd29yawotICAgIC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJH
QkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3Qs
IEdDM0RlbnVtLCBib29sLCBib29sKTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0ID0gMDsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVu
IGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1h
c2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0
IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZs
b2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBl
ZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRS
ZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAg
Ly8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNp
emUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVz
dWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJE
KQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0
bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwot
ICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pID0gMDsKIAorICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CiAgICAgc3Rh
dGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKIAotICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCk7Ci0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVu
ZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAg
ICBmcmllbmQgY2xhc3MgR3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFp
bnRJbWFnZTsKLQotcHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIElu
dFNpemUgbV9zaXplOwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jl
c29sdXRpb25TY2FsZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMg
c3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0
ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQ
T1JUIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nl
c3MpOwotI2lmIFVTRShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3Qg
SG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRv
Q0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQqLCBib29sJiBzdWNjZXNzKTsKLSNlbmRpZgotfTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVy
dFRvTHVtaW5hbmNlTWFzaygpID0gMDsKIAotI2lmIFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotI2VuZGlmCisgICAg
dmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJl
c2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisgICAg
dmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0
ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29v
cmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKKyAgICAKKyAg
ICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQzNEZW51bSwgUGxhdGZvcm0zRE9i
amVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICAKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7Cisg
ICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Cit9
OwogCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Nzg1YzhlNzhjNDFjMzI2NTVmMTJjMjcy
MDIwMWFlZTA4ZjJhZjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7Cisg
ICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisKK1Jl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBJbnRSZWN0IGx1bWluYW5jZVJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUpOworICAgIGF1dG8gc3JjUGl4ZWxB
cnJheSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIGx1bWluYW5jZVJlY3QsIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgIGlmICgh
c3JjUGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJh
eUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4
ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0
ICs9IDQpIHsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9m
ZnNldCArIDMpOworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7CisgICAgICAg
IHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAg
ICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAg
ICAgICAKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBi
ICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXkt
PnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBs
dW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSwgQ29vcmRpbmF0
ZVN5c3RlbTo6TG9naWNhbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2NhZTQzNTNlOTdkODdiYjA1MjlhNmVjNDI3YTdhNzVjOTllM2U0NwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJHcmFw
aGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFn
ZTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBH
dWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCisgICAgRG9u
dENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5
LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24geworICAgIE5vLAorICAgIFll
cywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAor
ICAgIEJHUkEKK307CisKK2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3Qgewor
ICAgIExvZ2ljYWwsCisgICAgQmFja2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJh
Y2tlbmQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVm
YXVsdDsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9n
aWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBp
bnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsU2l6ZTsgfQorICAgIGZsb2F0
IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9Cisg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9
CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyBy
ZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0
KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsg
fQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIHsgcmV0dXJuIDA7IH0K
KworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgPSAwOworCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUlt
YWdlKCk7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisg
ICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXpl
JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQ29vcmRpbmF0ZVN5c3RlbSkgeyB9
CisgICAgCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgICAg
IDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAgICAgLCBtX2ludGVybmFsU2l6ZShp
bnRlcm5hbFNpemUpCisgICAgICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgIHsKKyAgICB9CisKKyAg
ICBJbnRTaXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2ludGVybmFsU2l6ZTsKKyAg
ICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGY4OWVjMGQzNmZlZmJkMTJhYmU1NDNjM2YyMDM0ZjYxNThiM2QyY2YuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
ZiBVU0UoQ0cpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENB
SVJPKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42ZDE2N2E1N2UwODUzZDVlM2ZjMzgwMjdkZDg2NDY4MDA3YTJhZTdkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNr
ZW5kVHlwZT4KK2NsYXNzIFBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1hZ2VCdWZmZXIg
eworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IFBoeXNp
Y2FsSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
c3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZmZXIsIEltYWdlQnVmZmVyVHlw
ZT46OnZhbHVlKTsKKyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBp
ZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RG
TW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwor
ICAgIH0KKworcHJvdGVjdGVkOgorICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVf
cHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUo
YmFja2VuZCkpCisgICAgeworICAgIH0KKworICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFja2VuZCk7Cisg
ICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZs
dXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwor
ICAgICAgICAgICAgYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+YmFzZVRyYW5zZm9ybSgpIDog
QWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5sb2dpY2Fs
U2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmludGVy
bmFsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5y
ZXNvbHV0aW9uU2NhbGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5tZW1v
cnlDb3N0KCkgOiAwOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+ZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgp
KSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcyku
Zmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlJ
bWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9
CisgICAgfQorCisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdl
KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9J
bWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNv
bHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRp
b24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZv
aWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFz
aygpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2Fz
dDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAg
ICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4
dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2Fz
dDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tl
bmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJ
bWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBi
YWNrZW5kLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0LCBjb29yZGluYXRlU3lzdGVt
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgZGF0YVNpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwg
Y29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQt
PnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAor
ICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBib29s
IHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCBkZXN0aW5hdGlvblRl
eHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+
IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNDMyMzZkNWU5N2ZmZTY1ZTY4MTEyMGZkODVhMTUxYzJjYjRmM2ZlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNF
KENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2lu
ZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
OworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiBIQVZFKElP
U1VSRkFDRSkKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI7CisjZW5kaWYKKwor
dXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVy
ID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0
ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVy
PEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM4MDUwNDhjOGRhYTcxODdjZGEzNjQ4NGY3Mzk3OTA1NWY4OWE5MGUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGll
bnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNr
ZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1Jl
bmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OmVuc3VyZVNoYXJlZEJhY2tlbmQoUGFn
ZSogcGFnZSkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAg
ICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkQmFja2VuZFB0ciA9IG51bGxwdHI7Cisg
ICAgc3RkOjpjYWxsX29uY2UoaW5pdGlhbGl6ZUtleSwgWyZdIHsKKyAgICAgICAgQVNTRVJUKHBh
Z2UpOworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+PiBzaGFyZWRCYWNrZW5kIHsgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuY3Jl
YXRlUmVuZGVyaW5nQmFja2VuZCgpIH07CisgICAgICAgIHNoYXJlZEJhY2tlbmRQdHIgPSBzaGFy
ZWRCYWNrZW5kLmdldCgpLmdldCgpOworICAgIH0pOworICAgIHJldHVybiAqc2hhcmVkQmFja2Vu
ZFB0cjsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkQmFj
a2VuZCgpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmVuc3VyZVNoYXJlZEJhY2tl
bmQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmlu
Z01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0g
QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdI
OworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAg
IGltYWdlQnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVy
YXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0
ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE4YzIxMGRjZDJlYmM0MGY3
MjRlMTVmZWJlZmRiMTRjYmFhMWE3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEludFNpemU7CitjbGFzcyBQYWdlOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBSZW5kZXJpbmdC
YWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0Jh
Y2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIGVuc3VyZVNo
YXJlZEJhY2tlbmQoUGFnZSogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2Vu
ZCYgc2hhcmVkQmFja2VuZCgpOworICAgIAorICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQo
KSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyop
OworICAgIAorcHJvdGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cit9
OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdN
b2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYmNjMzk4OGZkNjQzZGE3MDQ0MWU1MzM4YjE2YTExYjA1NDYzMTM4
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
bmRlcmluZ01vZGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2VudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSB7CisgICAgQWNjZWxlcmF0ZWQsCisgICAgVW5h
Y2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0
LAorICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCmluZGV4IDk0OTk1OGVjNWIzNGRlMjI1N2VmZDQ2ODMyZDY0YmZmZDRlMTgwNWQu
LjA0YTdjYTI2Y2FiMmExZDAyYzQxMTE5ZjNhZTQ3YTU4ZWQxNTg0ZDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNoQnVmZmVyKCk7CiAKICAgICAgICAgLy8g
U2hhZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2VsZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3Mg
T0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAg
ICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFj
Y2VsZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUocm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93
V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRS
ZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdl
UHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAg
IGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxh
eWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1
dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVy
SW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIx
LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5z
ZXRTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0
UmVjdCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBM
YXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZm
ZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNp
emUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJh
d1JlY3RTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdl
dFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxh
eWVySW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBs
YXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllcklt
YWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRv
d0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0sIGNvbgogI2lmIFVTRShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRj
aEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vs
c2UKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBs
YXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwog
I2VuZGlmCiAKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRv
d0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAg
ICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxh
dGVTaXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJl
Y3QpOwogICAgIGlmICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5
ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0
aCgpICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJS
ZWN0LCB7IH0pOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3Quc2l6ZSgpLCBibHVy
UmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKElt
YWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCkBAIC05
MTIsNyArOTEyLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogICAgIGFkanVzdEJsdXJS
YWRpdXModHJhbnNmb3JtKTsKIAotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBV
bmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCA0OTZlY2EzMjRkM2U0ZGEyMmZjYTU5
OTk4ZWI1ZWY1ZWU3M2QyMDlhLi43MjJlZWZmZTZjOWU1ZmQyODY2YmUyNzI4N2E0NzAyMTAwY2Jm
YzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZs
b2F0UmVjdCYgZGUKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gYnVmZmVyLnNpemVGb3JE
ZXN0aW5hdGlvblNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKyAgICBGbG9hdFNpemUgYnVmZmVyRGVz
dGluYXRpb25TaXplID0gZGVzdFJlY3Quc2l6ZSgpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwog
CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NmYxOTY0ZDA5NTUyYmQxYTI3ZmMwZDIy
ODA5ZDhhM2RhNmI3NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9J
bWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
PgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09B
KQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUg
PHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdC
MzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1p
emVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1h
Z2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1
ZmZlcik7Ci0KLXN0YXRpYyBGbG9hdFNpemUgc2NhbGVTaXplVG9Vc2VyU3BhY2UoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29u
c3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQotewotICAgIGZsb2F0IHhNYWduaWZpY2F0aW9uID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSkgLyBpbnRlcm5hbFNp
emUud2lkdGgoKTsKLSAgICBmbG9hdCB5TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0
PihiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAvIGludGVybmFsU2l6ZS5oZWlnaHQoKTsKLSAg
ICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxTaXplLndpZHRoKCkgKiB4TWFnbmlmaWNhdGlvbiwg
bG9naWNhbFNpemUuaGVpZ2h0KCkgKiB5TWFnbmlmaWNhdGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtD
R0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0
R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VS
RkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNw
YWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAg
ICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9w
dENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQot
ICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNl
UmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vu
ZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdN
b2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2Fs
ZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNj
ZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNz
IGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUp
OwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVm
IGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkK
LSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNz
ID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBz
Y2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAg
ZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQo
KSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIg
cmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0
KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6
ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBy
ZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAw
IHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVy
Zmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3Zl
cmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVu
dCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgo
KSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7
Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51
bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2VsZXJhdGVSZW5kZXJp
bmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVy
YXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQot
ICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0
ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9h
dFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSkpOwotICAgICAgICBt
X2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5z
dXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJl
UGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkK
LSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQot
ICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFj
Z0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElm
IGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAg
ICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRh
dGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAg
ICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYg
VVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAg
ICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNl
bmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSht
X2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwg
bV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1
dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90
KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQq
PihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhh
dCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaCht
X2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5k
YXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAg
IGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5j
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0g
ICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRl
eHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAg
ICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0K
LSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdl
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVy
aW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFn
ZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVz
dGluYXRpb25TaXplKEZsb2F0U2l6ZSBkZXN0aW5hdGlvblNpemUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGRlc3RpbmF0aW9uU2l6ZSwgbV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUsIGludGVybmFsU2l6ZSgpKTsKLX0KLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAot
ewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBh
IEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2Ug
YWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFs
U2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8v
IEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBj
YW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZm
ZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRl
cygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYg
KG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0
ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNp
emUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNv
c3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2Vk
IGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVs
IGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2Fm
ZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBi
ZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAg
Ly8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1
c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5z
dXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpj
b250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNl
LT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNv
bnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3Rh
dGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShD
R0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdl
ICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRz
LndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVf
dD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVh
dGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCks
IGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQ
dHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRy
PENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2lj
YWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1
dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGlt
YWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRl
eHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgp
LCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7
Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdl
U2l6ZUluVXNlclNwYWNlID0gc2NhbGVTaXplVG9Vc2VyU3BhY2UobG9naWNhbFNpemUsIGJhY2tp
bmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVz
ZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWlt
YWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXpl
KCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25T
Y2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUg
aW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUg
bG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJh
Y2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0g
ICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxl
OwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lu
a0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9n
aWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKLX0KLQotQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKLX0KLQotUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFj
ZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1
cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vs
c2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVy
Ojpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17
Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsK
LSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93
LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0
YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0g
ICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29u
dGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0
ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgaW1hZ2VCdWZm
ZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZGVzdENvbnRleHQuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VC
dWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9
IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLQotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNy
ZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotICAgIAotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShp
bWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwg
b3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0
UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAo
JmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0g
ICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBh
ZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0
LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRT
cmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29u
dGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
ICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkp
IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAg
ICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAg
ICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+
IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAg
IEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxB
cnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGlu
dGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwot
Ci0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9
PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpw
aXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0
YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3Qs
IGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlm
IChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0
KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIElu
dFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVT
eXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNl
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNv
dXJjZSwgc291cmNlRm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBk
ZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSk7Ci0gICAgCi0gICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBp
bWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJ
bWFnZSgpLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxs
UmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIENGU3RyaW5n
UmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJ
TikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVi
bGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJldHVybiBrVVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0
YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1
c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9uPwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1
cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRo
cmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRo
ZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBV
VEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywg
SlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMg
Y29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0gICAg
c3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2Vy
dmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5
cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQotICAg
ICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJ
Q2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsK
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrVVRUeXBlUE5HOwotI2Vu
ZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3Ry
aW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRh
dGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRp
b25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9u
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1
YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAv
LyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5h
dGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVy
Q3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0
eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lD
b21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Np
b25RdWFsaXR5LmdldCgpOwotICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGlj
dGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNh
bGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9Ci0KLSAg
ICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sg
Zm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAot
ICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3
b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCks
IGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwotICAgIHJldHVybiBDR0ltYWdlRGVzdGlu
YXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0
YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0
b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihk
YXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAi
ZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotc3RhdGlj
IFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRh
dGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVN0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxp
dHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0
KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YSht
aW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVy
biBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0
cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9y
dGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAg
QVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVx
dWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZl
IGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRv
cCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBp
ZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2lj
YWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
cHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQ
cm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBw
cmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBp
ZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAg
IGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9n
aWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFs
cGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAx
IHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAg
aW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJu
YWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZs
b2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUobG9n
aWNhbFNpemUoKSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUlu
VXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQot
ICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0
KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRhdGFS
ZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0g
ICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAg
QVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJ
bWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+
ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlm
IChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24n
dCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRl
IG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRo
KCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5
UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hh
ciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAg
ICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRh
dGFbaSArIDBdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsK
LSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5v
bmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgotICAgICAgICBkYXRhID0g
cHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgIH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVy
SXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsK
LSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsK
LSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2Uu
aGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRv
IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFs
aXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5
KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJl
dHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURh
dGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVh
bGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVy
biB7IH07Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNv
bnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLSAgICByZXR1cm4gbV9kYXRhLnRvQkdSQURhdGEoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkp
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRlOTBlMTIxZTZiYzQxNTEzMThhMDY4YWJhZWM3Yjc4NTM3Zjcz
ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorCisj
aWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJl
c29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNp
emUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRT
aXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVu
c2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLndpZHRoKCkpOworICAgIGlmIChi
eXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBD
aGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsK
KyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9Owor
ICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgY29u
dGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAt
bV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplKQoreworICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSB8
fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFs
U2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0
aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZS53aWR0aCgp
LCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0
aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJl
dGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25T
Y2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5n
ZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250ZXh0ID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9n
aWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dD
b250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAg
ICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJ
blVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29u
dGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2Vy
U3BhY2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKCFpbWFn
ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNy
ZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2Vy
dmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2lj
YWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1
dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRv
SW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1
cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUlt
YWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAg
IGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0
byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENv
cHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250
ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0
ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdl
ID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9y
ZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAgYXV0byB1dGkgPSBVVElG
cm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgQVNTRVJUKHV0aSk7
CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQo
KSwga1VUVHlwZUpQRUcpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEg
Y2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNr
LgorICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXpl
KCkpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBs
aWVkRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBk
YXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdo
dCgpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWRE
YXRhLT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERh
dGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlk
ZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFz
dCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJl
c29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwg
OCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCks
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAg
fQorCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0
aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRh
KG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0
dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5n
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwg
cXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0
YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURh
dGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwg
SW50UmVjdCYgZGVzdFJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29u
c3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29y
ZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9u
U2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Cisg
ICAgYXJlYSAqPSBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgYXJlYSAqPSBzcmNSZWN0U2Nh
bGVkLmhlaWdodCgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFhcnJheSB8fCAh
YXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IGJ1
ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgc3Jj
UmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oYnVmZmVyUmVjdCwgc3JjUmVjdFNjYWxlZCk7Cisg
ICAgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9
OworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0
WCgtc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkK
KyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAgaWYgKGRl
c3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAgICAgYXJyYXktPnpl
cm9GaWxsKCk7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNT
aXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJ
bnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQg
PSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29s
dXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICB9CisKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IEludFBvaW50
Ojp6ZXJvKCksIHNyY1NpemVTY2FsZWQgfSwgc3JjUmVjdFNjYWxlZCk7CisgICAgCisgICAgZGVz
dFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsK
KyAgICAKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5z
ZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0
U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3Jj
UmVjdFNjYWxlZC55KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6
emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVyc2VjdChidWZmZXJS
ZWN0KTsKKworICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENv
bG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JG
b3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgaWYgKHNy
Y0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBT
d2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3Jj
UGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVs
WzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENv
bG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JG
b3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhf
dCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgY29weVBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhl
bFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhh
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUp
IC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhh
OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBk
ZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11
bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0
IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3Qq
IGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYg
KGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0g
ZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxb
Ml0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMg
QkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgc3RkOjpmdW5jdGlvbjx2b2lkKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JG
b3JtYXQsIHVpbnQ4X3QqKT4gY29weUZ1bmN0b3I7CisgICAgCisgICAgaWYgKHNyY0FscGhhRm9y
bWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxwaGFGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGNv
cHlGdW5jdG9yID0gY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgfSBlbHNl
IGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11
bHRpcGxpZWQ7CisgICAgZWxzZQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlVbnByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgICAgIAorICAgIHNpemVfdCBieXRlc1BlclJvdyA9
IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgp
OyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCAr
PSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hd
LCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9
Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBt
YWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25z
dCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAg
IAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50
PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2
SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRl
cyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1
cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxz
QWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9y
Rm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRl
c3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhl
bCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgo
JnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xv
ckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENv
bG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3Jt
YXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
ICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1h
Z2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0Zs
YWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBp
eGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZv
cm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNy
Y1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90
KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3Jt
YXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1h
dCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNTbG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xv
ckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihz
cmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0g
bWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKworICAg
IGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1h
dCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZWxz
ZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9y
bWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25z
dCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFGb3Jt
YXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9y
bWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOwor
fQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmZDgwYWY4M2E2MDhlNTIwZjA2NWE3MzQ5
OGNlODJjNTZiY2Y1NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJ
bnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9J
bWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgQWZmaW5l
VHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOyB9CisKKyAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250
ZXh0KEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIElu
dFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCwgQ29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QsIENvb3Jk
aW5hdGVTeXN0ZW0pIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jv
d3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhf
dCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NjBkYTdlZTIyZTg1ZjI3ZjNlZWQxOTlmMDZlYjY4ZjY3MGI0MDEzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENBIHVzZXMgQVJHQjMyIGZvciB0
ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KKyNk
ZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaWYgVVNFX0FSR0IzMgor
Y29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Citjb25z
dGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQ6
OkJHUkE7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFw
SW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKK2NvbnN0ZXhwciBjb25zdCBD
b2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdDo6UkdCQTsKKyNlbmRp
ZgorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyop
Cit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVkIGJ5
dGVzUGVyUm93ID0gNCAqIGludGVybmFsU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0
Q2FsbG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZhbHVlKGRhdGEp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KGRhdGEpICYgMykpOworCisgICAgc2l6ZV90IG51bUJ5dGVzID0gaW50ZXJu
YWxTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5h
bFNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JT
cGFjZSksIERlZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFn
ZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgeworICAgICAgICBm
YXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgfTsKKworICAgIGF1dG8gZGF0
YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEs
IG51bUJ5dGVzLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRh
dGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0
LCBDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KQoreworICAgIHJldHVybiBudWxscHRyOworfQor
CitJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0
YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3ZlKGRh
dGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAgICBB
U1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VSVCht
X2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCh0aGlzLT5jb250ZXh0KCkpOworfQorCitNYWNo
U2VuZFJpZ2h0IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQoKSBj
b25zdAoreworICAgIHJldHVybiBNYWNoU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4
dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBj
b25zdAoreworICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKKyAgICAg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpKSk7CisgICAgCisgICAgQVNTRVJUKGNvcHlCZWhhdmlvciA9PSBEb250
Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2xv
Z2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1Bl
clJvdygpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcElu
Zm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9s
b2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJS
b3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEs
IHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJl
c3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7
CisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAg
IGF1dG8gYXJyYXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0LCBzcmNSZWN0Q2xp
cHBlZCwgZGVzdFJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGlmICghYXJyYXkgfHwgIWFy
cmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3Qud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93
cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0
UmVjdC54KCkgKiA0OworICAgIAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obV9kYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVj
dENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBzcmNC
eXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6
UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAg
IHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKQoreworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50
UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplLCBz
cmNSZWN0LCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCwgY29vcmRpbmF0ZVN5
c3RlbSk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3co
KTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1f
ZGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0
OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZS53aWR0aCgpOwor
ICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkg
KiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1h
Z2VQaXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0
ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
ZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjUz
MTJmZDVhNDY2YzI2OTM0ZGFmODhjZjg5YjAwNDQyZDUwODZiNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisgICAgCisgICAgV0VCQ09S
RV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKworICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIE5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3Zp
ZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworICAgIHVu
c2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLndp
ZHRoKCk7IH0KKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlk
ZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRl
eHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZmU4MTE5NGYxZmFjNWViMzc2NTk0ZTRmMjkyZjFkYjFiMDVhZjExMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQot
I2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklu
dFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFt
cGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNl
LmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2Nv
Y29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0
dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZp
bmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0
YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17
Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlm
IChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2Fw
IGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJl
IEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0g
PSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRl
c3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVs
dGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1
ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRh
dGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9S
R0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElP
U3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNf
QVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCog
b3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRC
eXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwot
ICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndp
ZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMg
PSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0g
aGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0g
b3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVO
VVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFD
Q0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5k
ZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhf
dD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5k
ZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRo
LCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShy
ZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBz
dXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVh
ICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCog
cmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAo
IXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+
IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgp
OwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0
KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3Qu
eCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53
aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54
OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9
Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRo
KCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkK
LSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBl
bmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGlu
dCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAg
ICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAg
ZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3Ro
ID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdp
bnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
ZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBv
cmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51
bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVz
dFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7
Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93
czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFk
YXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmln
aW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAg
ICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsK
LSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAg
c3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0g
ICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBk
ZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRl
cyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwot
Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3Jj
LCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAg
ICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBD
UkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
LSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlm
ZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAg
ICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAo
c3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4
ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJf
dCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsg
Kyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFz
ZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93
c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
c3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgp
OyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3Mg
KyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNl
KTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAg
ICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRy
ZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53
aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVu
c2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAg
ICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdo
dCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVz
UGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAg
ICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdC
QS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0g
ICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1h
cCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRo
ICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBp
ZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7
ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZl
R2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAg
ICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFz
ZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgp
OyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2Fm
ZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93Owot
ICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSNp
ZiBBU1NFUlRfRElTQUJMRUQKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0jZW5kaWYKLQotICAg
IEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5o
ZWlnaHQoKSA+IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVj
dC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQu
eCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0g
MCk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBB
U1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNh
ZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVu
ZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwot
ICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAg
Q2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50
PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291
cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0
UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0
KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdp
bnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8
aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4
WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQot
ICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNr
ZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8
fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmln
aW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAg
IHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykg
ewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVz
dEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQ
ZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAg
ICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0
ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNy
Y1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBk
ZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9
IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FS
R0IzMgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxz
ZQotICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVH
ZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJH
QjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNl
IGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jh
c2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFz
ZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUp
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5k
aWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
ICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpB
Y2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNl
LT5ieXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
Pihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAg
dkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgp
OwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMu
cm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0
PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAg
ICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQg
PSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1Bl
clJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAg
ICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgot
ICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAg
ICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBr
dkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBi
YXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhd
OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0g
ICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1ti
YXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4
ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dz
W2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAg
ICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1
ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+
Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRl
ZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50
MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJm
YWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9y
ZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93
OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29m
dHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0
YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZv
IGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4
dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25s
eSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsK
LSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5k
ZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMjBlYzM3NDgxYzM2NjRjNWQwMzRiZDE2OGU1MzBiNWJlZWEx
MjFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBV
U0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGludGVybmFs
U2l6ZSA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11
bVNpemUoKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBtYXhTaXplLndpZHRoKCkg
fHwgaW50ZXJuYWxTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7Cisg
ICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShp
bnRlcm5hbFNpemUsIGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2Up
KTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1D
b250ZXh0KGhvc3RXaW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0
UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOworICAgIAorICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1h
Y2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
KGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
V1RGTW92ZShzZW5kUmlnaHQpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkK
KyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZh
Y2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dChjb250ZXh0
KCkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBp
bnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICA6IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCksIGNh
Y2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpKSkKK3sKK30KKworTWFjaFNlbmRSaWdodCBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29u
dGV4dCYgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250
ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3VyZmFjZS0+dG90YWxCeXRlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNl
LT5ieXRlc1BlclJvdygpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAg
IHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAg
cmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQor
Cit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUlt
YWdlKGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQo
NCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5
dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0
ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygq
bV9zdXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9y
bWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVz
UGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVz
dFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3Qs
IHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgaWYgKCFh
cnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdC53aWR0aCgpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsK
KyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5z
dXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJv
dyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLCBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0
Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFy
cmF5OworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtKQoreworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0
UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplLCBzcmNSZWN0LCBk
ZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisK
KyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3Vy
ZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01v
ZGU6OlJlYWRXcml0ZSk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIGRlc3RSZWN0LnkoKSAqIGRl
c3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdyA9IDQgKiBzcmNTaXplLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFy
cmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVj
dENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhpbnB1dEZvcm1hdCwgQ29s
b3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93
LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcg
dGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMg
bmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIEhB
VkUoSU9TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42MDRhMWQzMDY1MjYwNjNmNTE2NTc2MjRhMTdiYTU4ZTA1NGMwZjA2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgSEFW
RShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1
ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SU9TdXJmYWNlOworCitjbGFzcyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBN
YWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0OworCisgICAgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBv
dmVycmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1lbW9yeUNvc3Qo
KTsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0
ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7ICAg
IAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworICAgIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRS
aWdodCk7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0OworCisgICAgc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTBkYjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2
NWIyNC4uNWM3YjMzNmYxMDMyNDAwODI2MjBlYzhmYjcxOTY0NTg2MmQzNTg1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgogCisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVUSVV0
aWxpdGllcy5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDQgKzQ2LDEwNiBAQCB1aW50OF90IHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkK
ICAgICByZXR1cm4gKih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorYm9vbCBlbmNvZGVJbWFnZShD
R0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAh
ZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFk
b3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7
CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChDRkVxdWFs
KHV0aSwga1VUVHlwZUpQRUcpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFs
aXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0
byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1
YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51
bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBr
Q0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0
IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVBy
b3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25C
YWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGll
cyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywg
YnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZElt
YWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAg
ICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwor
fQorCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IFVUSUZyb21NSU1FVHlw
ZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIENH
SW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OworICAgIHVu
c2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBr
VVRUeXBlSlBFRykpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFu
bmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisg
ICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgp
OworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXpl
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWRE
YXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRp
cGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBp
ICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAg
ICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAw
XSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAg
ICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9y
ZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRh
dGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQg
KiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNv
dXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlk
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAq
IHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJE
ZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NH
UmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5j
b2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwor
fQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZE
YXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsK
KyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Cit9CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJu
IGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOwor
fQorCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIo
Y2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQor
CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRv
IGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVy
biBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFk
NDE5NTUyLi5lYzVjZTQzZjRkMWI1NzI1NDc3YTIzYWE0ZmM4YjZlYmY3MGQ0MmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oCkBAIC0yNyw2ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKKwogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJ
bWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNp
emUpOwogCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKKworU3RyaW5nIGRhdGFV
UkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7CitWZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDgw
ZjZiMTg3MjUyMjk2OGVhN2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2MuLjI4MjFlZjgxZDc1ZGZiMGZm
MDVhODViZTVjOWZiYzI1OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NH
Q29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CisjaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UuaAppbmRleCAyNDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2NGM5YTA0ZmY5NjljZGIzLi40
Y2MwZmEzZjc5NzI3ZWI5ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMTAwLDEw
ICsxMDAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
IGNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJv
bUltYWdlKENHSW1hZ2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZy
b21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAg
ICAgV0VCQ09SRV9FWFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgbW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpp
bmRleCBkYWUxODdkYTY1ZDIwYjI4MDZmMmJkMzllOGMzYjA2OTM5N2M0YmFiLi5hMThiMTRhNjY5
NmNjNTAzMzMxODI3NTA1ODU1NmM1YjNiMDk0NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBA
CiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1w
b3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBv
cnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3Vy
ZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAg
ICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNl
KSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RG
TW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNp
Z25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qg
c2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNh
MTE0OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVt
c0Zyb21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5
TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYpOwogCiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNWE1NjkxYmIxODA4MzQwNTQ1NTY0YTQwMWNhYmQ1OGVlMzc1
MTIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5
TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihk
aXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCks
IEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAg
ICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsg
IH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0
OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZv
aWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNw
bGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENv
bnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSkKKyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXko
eyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNw
bGF5TGlzdCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4g
bV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkg
eyBmYWxzZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1
Li5hZjNhYWRlMmEzMzJjYzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4YjU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKQEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1
bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9u
czsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICBhdXRvIHBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7CiAKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcmVzdWx0
SW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgcGl4ZWxBcnJheURpbWVuc2lvbnMuc2NhbGUocmVz
dWx0SW1hZ2UtPnJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0z
MTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5
KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlt
YWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2Ut
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpw
aXhlbEFycmF5LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBl
JiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1
NjE4ZThmZGRkODRlY2IuLjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0N2Q0MDU4MDA0ZWE3MTcyZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVs
IGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEu
CiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5h
bFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKICAgICBpZiAo
IXNyY1BpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAq
IHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVB
cnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFy
cmF5LCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgQ29vcmRpbmF0
ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1Mjdh
NTYyNzM1M2RmNDQ5Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBtX3NvdXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5n
TW9kZSBtX3JlbmRlcmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAg
ZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2
ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi41YzhiM2I0ZGUwYWZhNzE0
NThjZGNmNmM2YmMwZmZkMmNjYmQxNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNzksOSAr
Mjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQog
CiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0
LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgp
LCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVz
dGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0K
IApAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpA
QCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJz
aW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1
bHQpIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ1ZWYy
YTUyZTg3MzIyYjU5MThmZTUyODYyZGJhOGJhNzZiZTEwNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitl
bnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0
aXBsaWVkLAorICAgIFVucHJlbXVsdGlwbGllZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDFj
NjZhZDc5Y2U0MGMxNDU1OGY2NjUyNTJiMjVlM2JiN2RlZDE2YmQuLjg5N2NlNDBkMDRjN2UwYWQx
ZWExOTJjYjkxMDYxOWY4ZjkyMjI0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgsNyArNDU4
LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlcigp
IGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2Fw
dHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOTEzYWQ2Zjk1MzJjZWQ3
YzNkMGI5NDU0OWJhZDFiNWUxYzEyM2EyOS4uYmQ5NTZhM2VlNGJkODQ0YjAzMjI1YzNhODRjNjRk
MzBkNmZkYjZjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBA
IC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGlu
Z1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0gICAg
bV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/
IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5idWlsZEZpbHRl
cihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0
aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4NjNjMWVk
MmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFjNjE1MjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0xODEsMTQgKzE4MSwxNCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1h
Z2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBwZWRJ
bnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0ZXJT
aGFwZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsKICAg
ICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlv
bmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAgICAg
IGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdl
LCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwor
ICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZl
ci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
SW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQg
PSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAK
aW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3N2I2M2M2
ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAt
MTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBw
aW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxk
Q3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVu
Y29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQg
YnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdl
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4
dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6
OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAgICAgICAg
aWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0MzE2MWIu
LjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhlODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBlZmZl
Y3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAg
IGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0
ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJl
ci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDog
VW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJl
ci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIHNv
dXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6Okxp
bmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGlj
KSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJl
bmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAg
ICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBo
aWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBu
dWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxu
Iik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0Y2ZjMDIy
YjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
CiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5
bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJbnRl
cnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xvclNwYWNl
OjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcw
KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5n
LCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAppbmRleCA3ZTg2MDc5OGY3MWY3NmI1NzZmYzZlMTkzNmZmMWJhNzI4ZDcx
MTcwLi41ZGY4NjUyNzU5NDU4YTVhZmJmNDk5ZDZmNTZiN2FjNTlmZTMzZmY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBAQCBOYXRp
dmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBDYWlybyBk
b2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywgc28gaXQncyBPSyB0byBt
YWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlu
cHV0LnhjZmlsZWxpc3QKaW5kZXggNzk5NGUzY2E3Nzc2MzI5ZDZmNzVkN2FhZjBjOTNmZDlhYTA1
OWUxMC4uYzk2OGQzNDc4YTYzZDVhZmFkNzQ3ZTljMmIzMTk5ZDNmYjcwNzQ3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUs
OCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChK
QVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIp
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElS
KS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNz
YWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJv
Y2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElS
KS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VN
YW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDAsNiArMTAyLDcgQEAgJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlv
blRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3Jl
ZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElS
KS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3Nh
Z2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dl
YnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDBjZDIzZTAx
YmJhY2QyZWM0YTBiZGMzYmRmZjJiZTBkN2I2MGIwMWIuLjcxZGE2NTNiN2ViNzNiNjJmMTAwNDNl
NGFkNDJlMzcxYjk1Yzk2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxp
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2lu
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVw
bGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2Vz
LmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTEzNSw2ICsxNDEsOSBAQCAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3Nh
Z2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1l
c3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nv
b3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDlkM2UyYTkwYzdiNGQ5MGE0MjZjNzZhNGUwNWU2
YjJmODFjYzBlOWUuLjY0MWZhNjZkNzUxZGFhMTU0NmMxZjYxZTQzMDM5ZjQ3OTdlMDk0MzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAg
ICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFj
IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2Vi
cnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05l
dHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJv
Y2Vzcy9HUFUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQo
V2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQy
KS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29u
RGF0YWJhc2UgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0
MCwxMSArMTQyLDE0IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWFuYWdlciBcCiAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5IFwKICAgICBQbHVnaW5Q
cm94eSBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXIgXAorCVJlbW90ZUltYWdlQnVmZmVyUHJveHkg
XAogICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgXAogICAgIFJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkgXAogICAg
IFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBc
CisJUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYklu
c3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA1MmE5NWNlMGRlZDcwM2Q2MWQzNGE5ZDE3ZjBj
OGI0MmU2NjRmZGRhLi43OGIyMWI4OWRjOTRiN2EzY2MwMzU0YmExZDNlNjg1YzNjNmIzYTQzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCkBAIC0xMjEsNiArMTIxLDE2IEBAIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyJiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
CiAgICAgcmV0dXJuICptX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogfQogCitib29sIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2Fn
ZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQor
Citib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3Nh
Z2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlciwg
cmVwbHlFbmNvZGVyKTsKK30KKwogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkmIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkKIHsK
ICAgICBpZiAoIW1fcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpCkBAIC0xNDksNDQgKzE1
OSwxNyBAQCBMaWJXZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
bGliV2ViUlRDQ29kZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpCiB7Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5
KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRS
ZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJv
eHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpICYm
IFVTRShMSUJXRUJSVEMpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
Ci0gICAgICAgIGxpYldlYlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2Vi
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNl
bmRpZgorICAgIEFTU0VSVCghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpjcmVhdGUoKnRoaXMsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0
cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpKSB7Ci0gICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRS
ZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBs
eUVuY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
OworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCmluZGV4IGFjNzEyNWQ3MzhkODY4ODhlZWE4YjRhOTI1MTVmOWRlNGQx
ZjZiMDQuLjQ1ZTBiNTFlM2M1NjYyNzQ0MTRhMTU0ZDBjZTg2N2ZlNjY2NmFmMDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aApAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJN
ZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkBAIC00NiwxOCArNDgsMjAgQEAgY2xhc3MgUmVtb3RlTWVkaWFS
ZXNvdXJjZU1hbmFnZXI7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6
IHB1YmxpYyBSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IGNyZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAg
IHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21l
c3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVy
biBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3
ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZp
ZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYm
KTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVu
dGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNz
SWRlbnRpZmllcjsgfQogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRp
YVJlc291cmNlTWFuYWdlcigpOwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTc1LDE0ICs3
OSwyMSBAQCBwcml2YXRlOgogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2
b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwotICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5h
bDsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JikgZmlu
YWw7CisgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6
OkVuY29kZXI+Jik7CisKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCiAgICAgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7
CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVBy
b2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3Nh
Z2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dl
YlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVJlc291
cmNlTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyUHJveHk7CkBAIC05Myw2ICsxMDQsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaWJXZWJSVENDb2Rl
Y3NQcm94eT4gbV9saWJXZWJSVENDb2RlY3NQcm94eTsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluCmluZGV4IDNkNDBhNTcxMmUwMmQxNDlkMTRmOTJmNTZlNDQ1MzQ2YzAxMjIxZDguLjkz
MmMwMTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJjNTI1OWJhNGQ3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CiAKLW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgeworbWVzc2FnZXMgLT4g
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CisgICAgdm9p
ZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5n
QmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWYyN2M4ZmEzZTdi
ODUwZTEzN2JhZTMyZWRkYjhhNzE1ZTg0NmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5j
cHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90
ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmll
cikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKGltYWdl
QnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQoreworICAgIGlm
IChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdl
UmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdl
QnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdl
dCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rp
b24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVy
biBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRS
aWdodCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dChjb25z
dCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaENvbnRleHQoZGlz
cGxheUxpc3QpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVz
aElkZW50aWZpZXIoZmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTE2YTE0
M2U3N2IyMjJjMzU1MThkM2Q1NjZmZjNhOWU1YTIxYmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVz
c2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH5S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBp
bnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
TWFjaFNlbmRSaWdodCk7CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7Cisg
ICAgdmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdlQnVmZmVySWRl
bnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODljNWQ1NGJj
NDI2YTZmYTBkOGZjYWZhODEyNjUyNTI0NDkzYmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJl
bW90ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRl
eHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6
OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgxMDM3MWRlM2FlOTA2NDE3MTVlZDFjODkx
NmMyNDQ1ZDdjZThhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNp
Y2FsSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDog
cHVibGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIgPSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2lu
ZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1
cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVs
bHB0ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
KyAgICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVf
cHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShi
YWNrZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJlbW90
ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFj
a2VuZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFj
a2VuZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNyZWF0ZVNlbmRSaWdodCgpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOworICAgICAgICByZXBs
YXllci5yZXBsYXkoKTsKKyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmZsdXNoQ29u
dGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NzAwNzRjNTI5N2NkM2U0OGQ1OTQxNzFmMmNmOTRh
NzE4MTdkZjBjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCAr
MSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1J
bWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEFjY2VsZXJh
dGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ZjliYjVkNmJiZWZjZWIxMzg4
YmY3ODQ2ZmI0N2I5NWQ4YmU0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
CkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisj
aW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcykp
CisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7
CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mt
Pm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNv
bnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1
aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAg
ICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisg
ICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1v
dGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5OjpjcmVh
dGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisg
ICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZl
ck1hcC5hZGQoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Cit9
CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICAvLyBD
cmVhdGVTdXJmYWNlIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhp
cyBvbmUuCisgICAgaWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRl
bnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM5OTM4YmVlNTExZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1
ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xv
clNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6
IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5KCk7CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKwor
ICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIElt
YWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXJJZGVudGlmaWVyKTsKKworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4+OworICAgIEltYWdlQnVmZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7Cisg
ICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2OTZkZTAzNDE3ZmJjZGJkNDM1MWJkMmY2MmRh
M2IyMGU5NmRjY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4K
QEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihX
ZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRp
ZmllcikKKyAgICB2b2lkIFJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRl
bnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcAppbmRleCAwNTE1NzJlMTc5
YjM0NzdjOWU0NTdjODRjMGU0YTZlN2M0M2YzMzRlLi5iZGMxMTg5ZGM0OTI2OWE2NmNhODVjZTYx
MDY3YmI2YjdkNjZiNzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHAKQEAgLTUy
LDEwICs1MiwxMiBAQCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUAogICAgICwgbV9sb2dJZGVudGlm
aWVyKFdURjo6TG9nZ2VySGVscGVyOjp1bmlxdWVMb2dJZGVudGlmaWVyKCkpCiAjZW5kaWYKIHsK
KyAgICBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCAwLCAqdGhpcyk7CiB9CiAKIFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKQogeworICAgIG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIDApOwogfQogCiB2b2lkIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5OjpjcmVhdGVNZWRpYVBsYXllcihNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlm
aWVyIGlkLCBNZWRpYVBsYXllckVudW1zOjpNZWRpYUVuZ2luZUlkZW50aWZpZXIgZW5naW5lSWRl
bnRpZmllciwgUmVtb3RlTWVkaWFQbGF5ZXJQcm94eUNvbmZpZ3VyYXRpb24mJiBwcm94eUNvbmZp
Z3VyYXRpb24sIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVtb3RlTWVkaWFQbGF5ZXJDb25maWd1
cmF0aW9uJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weQppbmRleCA2OTA2MzEwNmNhYjU0MDIxYzQyODk2Y2RjYjc2M2E3NTZmNzhh
Zjg2Li5iYTI4MjY1YzI2MWVmZjFkNTcyNGIxMDI3ZGRmNzkxZDkyYWJmMDg4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0
IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJ
QlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVU
RSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAn
TGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90
UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIw
NCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgp
OgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNlbmRSaWdodCcsCiAgICAg
ICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbics
CisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3Vt
ZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLAogICAg
ICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMSw2ICsyMTQsNyBAQCBkZWYg
dHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29y
ZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAgICAg
ICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRl
cmluZ01vZGUnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAn
V2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0yMTgsMTAgKzIyMiwxMyBA
QCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAn
V2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAogICAgICAgICAn
V2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktp
dDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRGVj
b2RlcklkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSW1wbElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpT
dG9yYWdlTmFtZXNwYWNlSWRlbnRpZmllcicsCkBAIC03NTcsMTMgKzc2NCwxNiBAQCBkZWYgZ2Vu
ZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAg
ICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2Fn
ZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5U
U19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3Zv
aWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUg
aWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNl
ICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVu
dChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAg
ICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRS
SUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxz
ZToKQEAgLTc3MiwxMyArNzgyLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVj
ZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVz
c2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdB
TlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2
ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9S
RUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4n
KQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9S
RUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtz
eW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBz
eW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJ
U1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicp
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4n
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCAx
ZGUzMDQyYzA3OTE2NWExZDI1YTZmNGI1OGQ2NjA5YTY1NjYwMmY4Li5hYTg5ZjY1YWJiNDY0Njg2
OWM4MzBiOTVmZGY3NTY0Y2MwZTI0M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQuaD4KQEAgLTc4OSw2ICs3OTAsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsKIAogbmFtZXNw
YWNlIFdURiB7CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAg
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFj
Y2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0LAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6
OlJlbmRlcmluZ01vZGU6OlJlbW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAogICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA2MDJmYjc5
NWE3MmFkZGM1Nzg1ODc2YmUwOTViM2VlYjg5ZDVlNTM4Li43NjZhYjE4N2ZlNzg2OWQ4YTlhMDU1
NDZhNDNiYTMxODA3ZDAxOGQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI5LDYgKzI5LDggQEAgR1BVUHJv
Y2Vzcy9HUFVQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAogLy9HUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiAvL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFS
ZXNvdXJjZUxvYWRlci5jcHAKIC8vR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNl
TWFuYWdlci5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdl
ci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MTEs
NiArNTEzLDggQEAgV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCiAvL1dl
YlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKIC8vV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogLy9XZWJQcm9jZXNz
L0dQVS9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCitXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9HUFUv
d2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKIAogV2ViUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA2MGIzOWYzN2M1
Nzg1NTYyMWYyOWY2NmI5NjE3ZDlhN2IzZGE3MDNkLi41MDQ3NDBkODFmYzg1MDYzMzJlYTA2OTc5
Nzg3N2ExNzNiMDk5NTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC02MzEsOSArNjMxLDEz
IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IubW0KIC8vIERlcml2ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2Vp
dmVyLmNwcAorR1BVUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9j
ZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNw
cAogTGliV2ViUlRDQ29kZWNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2Rl
Y3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5j
cHAKK1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2VyRmV0Y2hU
YXNrTWVzc2FnZVJlY2VpdmVyLmNwcAogVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKaW5kZXggYTVjNmU3ZDY1YWY3MjI3ZWY3M2FmZDgyNjhmZjcxZGIwZDhhMjE1MC4u
YjIyYWU3NTNmMzdkYmMzMDAxYzNmNDFjNjViMzI3MTI2MjdlMDI3NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTUyLDggKzM5NTIs
MjYgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJl
UmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1RvdWNoQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFBNjc2QTUyMkM2MjMx
ODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2du
aXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBX
ZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBv
bGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5ODIzQUQyRkQ2MDBC
REFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlB
MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyog
SW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1h
Z2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjAyM0Mx
ODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUg
LyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2
RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0Mg
LyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDE0
MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU4MjNCMzg0MjEw
MEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMy
RUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVDMjNCNEM4
MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUUyM0I1NkM4NDAwRjY3
RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1
QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVE
YXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dl
YnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0
MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM3OSw2ICs2Mzk3LDcgQEAKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0IwQzAwOTU5OEUy
IC8qIG1lZGlhICovLAorCQkJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdC
YWNrZW5kICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJ
CQkJMkQ3RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCAq
LywKIAkJCQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
aCAqLywKQEAgLTYzOTUsNiArNjQxNCw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2
IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJ
CTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjFGMUU5NzIzQUQy
RjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4RTIzQjYzM0NB
MDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0
OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzc1NSw2ICs3Nzc1
LDM4IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
KwkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRTlBMjNBRDJGRDYw
MEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLywKKwkJCQk3MjFGMUU5ODIz
QUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYx
RTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmlu
ICovLAorCQkJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzJENUMyRUMyM0I0QzgyMzAwRjY3
RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzJENUMyRUQy
M0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAorCQkJ
CTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0Mg
LyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyLmggKi8sCisJCQkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVm
ZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1v
dGVJbWFnZUJ1ZmZlci5jcHAgKi8sCisJCQkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJl
bW90ZUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJl
bW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTYwMjNDMTgyODcwMDI2
MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTEyM0FC
MDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkQ1
QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJ
CQkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAq
LywKKwkJCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBD
bGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5jcHAKaW5kZXggMThlOTM2ZGUzMjMwNzcwZjI0MzYxYjZhYmFhOGUxN2U0ZDJlNWFjMC4uZWEx
NzU0YmVkYjM4YzZiNTcyYjY3ZTRjYWY3ZGE3MGY2MjY1ZWQyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTYw
LDI5ICs2MCwxOCBAQCB2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNv
bm5lY3Rpb24mKQogewogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVy
KQogeworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVz
c2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2Us
IElQQzo6U3RyaW5nUmVmZXJlbmNlKQogewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVu
dDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKLSAgICAg
ICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYg
VVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCi0gICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5saWJXZWJSVEND
b2RlY3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApp
bmRleCAzMWM2MTA0NjY5ZjJmMDJmZmE0NDBmZWI4ODA5MjZjNzRhZTI2YWNmLi42ZDFiODNkZTU4
MzZhZmFlMjFhZmMzNGY1OGEyMmU1ZDZkMzIzYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBA
CiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVi
bGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21l
c3NhZ2VSZWNlaXZlck1hcDsgfQogCiBwcml2YXRlOgogICAgIEdQVVByb2Nlc3NDb25uZWN0aW9u
KElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CkBAIC01MywxMCArNTUsMTUgQEAgcHJpdmF0
ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVT
eW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9w
dHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAor
ICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
OworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNv
bm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJl
ZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1
MWU4NGNlOWQ2NGIzMC4uNTdmZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21l
c3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjljZDM0YWEyNzIwNGQwZWE0NDM2MGUwYzA1MDg3YTViY2YyYjYwZGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5
cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlm
aWVyPEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklk
ZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMTc4NzA0OGU1N2M1NzQ3YzFm
MjQ5MmQ5MDlkYzQ0MWMyYTg1NDlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBA
IC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdl
QnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0g
T2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0Y2U4MGY3YjFh
NmVjYmM4MmJlNDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAK
QEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVy
LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBS
ZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25u
ZWN0aW9uLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1l
c3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENy
ZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmlu
Z01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZm
ZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFz
IGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdl
UmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29u
bmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90
ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29u
bmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlz
cGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9y
T3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29s
IFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8
SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5z
dXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5l
Y3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9z
LCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZl
cyk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkK
K3sKKyAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAg
Zm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0
ZWQoKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFj
a2VuZCgpOworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsg
aXNQZW5kaW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNo
SWRlbnRpZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50
aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAg
IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQg
UmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRl
bnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5
TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi42YjU2ZTMxZDBjYWYyMDZlZTUwNmM5Nzk2OTA1Yjc4NDBhNDli
OGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUg
IlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5
TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6
TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJs
aWM6CisgICAgflJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJ
bWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJ
UEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKCk7CisgICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVu
c3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVy
OyB9CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisK
KyAgICB2b2lkIHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7
ICAgICAgICAKKyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2lt
YWdlQnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9
OworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsK
KyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVy
OworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNz
YWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg3NzU1N2MwYWE4YzhhOTA1MDRhMTM1ODBkYTU5MWFhNWJm
YzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291bnRl
ZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6RmxvYXRTaXpl
IGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQg
c2VuZFJpZ2h0KQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjcxZTVkZDVlNzk4ZTk0MzA2YjQ3MTcyMTk3MjNhMjcyODBkZGRi
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIg
OiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1v
dGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUlu
dGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICAgICAgOiBC
YXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVm
ZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6
Y3JlYXRlKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0JhY2tl
bmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisK
KyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgICAg
ICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0
KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAgICAgICBSZW1vdGVJbWFnZUJ1
ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxp
c3QuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzRiOTU3N2E5Yzg5MGU0MDhmOGU5MDU0ZjcyOTdhNTc3
N2ZjMGU0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZm
ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM3ZTA2NTc4ZDg5N2I4NGI5MjFhZjYwMWIzM2ViOTA2ZGQ0Njk5OWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgi
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8g
Q3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdl
czo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAg
IHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3Rl
QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0
Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAg
RkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBicmVh
azsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdl
QnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjUzZGEzOTE1ODhiZGFkMDkxZDY0NDIyMjI1MDFmOGE0NDk5MzdiMWEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDogcHVibGljIFdl
YkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVy
CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAg
ICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zODY2YmYzYjViYTJlNDFlYjQ3OTdiNjQ4YWEzOWZmMTMyMzQ1MjRjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJU
eXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRp
ZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGU+OworCit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKaW5kZXggOGU0YzkzNzVkN2I4Y2MxMGZmYTAwODAzZDQ4MjE3M2JlNWEzNTU4YS4u
NDgxZmFhYWFjYWQyMGQyNjM5ZTg1ZDE2NTYzYmViMjg3MmUwMGRkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9u
LmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCIKICNpbmNsdWRlICJVc2VyRGF0YS5oIgogI2luY2x1ZGUgIldlYkNvbG9yQ2hvb3Nl
ci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtODgxLDE1ICs4ODIs
MjIgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhpY3NMYXll
ckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJ
U1BMQVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gV2ViQ2hyb21l
Q2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1fcGFnZS5kcmF3
aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQorI2VuZGlmCiAK
K3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAg
ICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxzZQorICAgIHJl
dHVybiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVy
KiBsYXllcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1NWUxYzFkNjA4
NTBlNDcxZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUxYjRmNTNiMmQx
ZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAg
ICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVm
cmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2Vu
ZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3Jl
YXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmln
Z2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRl
eHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNkMTlmMzU0ZDli
Y2MwMjkxZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFiMWVjYmJmOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29u
dGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBAQCBSZXRhaW5Q
dHI8TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdT
ZXJ2aWNlUGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gVGhpcyBpcyBl
ZmZlY3RpdmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFuIHVuYWNjZWxl
cmF0ZWQgZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Qu
c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbmlsOwog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggOGYzNmM4MzBlZDIyY2RjOTY1ZjliMThlYTgzMTFiYzM0ZDBmYjk3YS4uZDZmOWE4
OGFmMjE5MDhjYjQwZjcwZWUzYmJhZTA4NTVlOTAwNjBlMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBA
CisyMDIwLTAxLTA1ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+
CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52
YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0wNSAgWmFsYW4gQnVqdGFz
ICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtTTExdIEdlbmVyYXRlIHJ1bnMgZm9yIHBy
ZXNlcnZlZCBuZXcgbGluZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9j
YW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3MmFjY2E4
Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2YmZiMzk3
MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAKKyhzYXZl
CisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikK
LSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikKKyAgKHN0
cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNoYWRvd3Mt
aWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBz
aXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386816</attachid>
            <date>2020-01-05 23:13:59 -0800</date>
            <delta_ts>2020-01-06 20:53:49 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200105231358.patch</filename>
            <type>text/plain</type>
            <size>357265</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzVmZThhZjQ3ZmYzYTQ0
NTI1YmFkNjA1OGFhYzk5NjM3NjIxMDVmYi4uNzE0YzkwYTE5NTZjMjc0NmI2M2M4YWI0YjVlZmM4
MGVlODIyN2U1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4NyBAQAorMjAyMC0wMS0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQg
Y29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1fZGV2aWNlT3JpZW50YXRpb25VcGRhdGVQcm92aWRl
cik6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpzZXRNZWRpYVZvbHVtZSk6CisgICAgICAgICog
cGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVz
dGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBh
dGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5h
bE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAg
KCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2Fs
U2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5
Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Q
aHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZm
ZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJbWFn
ZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6ZW5zdXJlU2hhcmVkQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNr
ZW5kOjpzaGFyZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVyOjpnZXRTY3JhdGNoQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0
VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dX
aXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZm
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUlu
dGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0
dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0lu
dG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VE
YXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNv
cHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQ
cmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weVVu
cHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5SW1h
Z2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JB
RGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdo
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50
b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdlYkNv
cmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxp
Y2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6
OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNW
R1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dCk6CisgICAgICAgICogcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFn
ZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAyMDIwLTAxLTA1ICBFcmljIENhcmxz
b24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFtNZWRpYSBpbiBHUFUgcHJv
Y2Vzc10gQWRkIHJlbW90ZSBNSU1FIHR5cGUgY2FjaGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDQ3ZWQzMDI4NjU5
Zjc5YmRlYTc3YjZlZjg0YWZlOGFlNzRhYTZjYi4uNGYwMThjZjFkNzcwOGY4M2U1M2RmM2M2Yzkx
NjQyYjE0MmViNzE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NiBAQAorMjAyMC0wMS0wNSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Ogor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERl
cml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2Vi
S2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6
CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVN
ZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3Qp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgu
CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4uCisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpjcmVh
dGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJ
bWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBjb25zdCk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpSZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VS
ZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Ondh
aXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2Vz
LmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
RGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIw
LTAxLTA1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAg
IFtNZWRpYSBpbiBHUFUgcHJvY2Vzc10gQWRkIHJlbW90ZSBNSU1FIHR5cGUgY2FjaGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCA0NGFmMjg2ZTQzYzA5MWFiODQ4YzE0MDgzNjZjZTY5
ZmNmZmY1NmNlLi4zZGVlYjcxYzI1Nzg5MTNiNzIyYjM4ZDMyMzFkNmM4OGY5MzFhN2E0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDEtMDUgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBs
ZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGll
bnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hh
cmluZ1NlcnZpY2VQaWNrZXJJdGVtKToKKwogMjAyMC0wMS0wNSAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSBzb3VjZSBvZiBXZWJLaXQxIHRl
c3QgZmxha2luZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNs
aXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3Vy
Y2UuY3BwCmluZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBkMWNmYjZlODBiMjMxZGQ1NmQ2YjAuLjc0
NjVkMGU2YTg2Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhlN2FhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJk
L0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCkBAIC0yODQsNyArMjg0LDcgQEAg
dm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxv
YWRlcjo6c2FuaXRpemVEYXRhSWZOZWUKIAogICAgICAgICBhdXRvIGJpdG1hcEltYWdlID0gQml0
bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBiaXRtYXBJbWFnZS0+c2V0RGF0YShXVEZNb3Zl
KGJ1ZmZlclRvU2FuaXRpemUpLCB0cnVlKTsKLSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7Cisg
ICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdl
LT5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICBpZiAoIWlt
YWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBtX2RhdGEgPSB7IG51bGxTdHJpbmcoKSB9OwogICAg
ICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9Vc2VyTWVkaWFDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vVXNlck1lZGlhQ2xpZW50LmgKaW5kZXggNDNiMmEwZGRjZDUyYjVkMWFjNTYyYWU3YTEy
OGU0MWQyMzNkOTg0Yi4uY2I5YjdlZGJlMmFkMTU3ODljMTMxMGNlOGZiMmI0Y2QxMjU4ZDRmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Vc2VyTWVkaWFD
bGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRp
YUNsaWVudC5oCkBAIC0zOSw2ICszOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IENhcHR1cmVEZXZpY2U7CitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBVc2Vy
TWVkaWFSZXF1ZXN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDkyOTdkMDQ0ZTQ0ODI3OGRiZTdjOTE2
OWJiMzI2YzlkZmI3MDQyNWIuLjM4MDAxNzg5OGZhYzEyNTMyNGI1OTY2ZGI3MDVlMzZkZTI2OTJh
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY4LDYgKzE4NjgsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg3LDYgKzE4ODgsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1l
UmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNr
ZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMjJlMGRmZjBkZTZhOGQzOGIwZWYwOGM0Yjhh
MTBmOTEyNDFmMzE5Yi4uNTM2MWRkMGFjMWUyZjc3Yzg0OWVjOWU1YmRjMjY1YTJmYmM4YzhkYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dDNEQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IDA3OWU5NDY5YjExZmJiZjE2N2ExNzAyMmY1OTk5NzQwY2Y2NjFiNTgu
LmUxOTI1Mjg5OWFkMTczNmE3ODBiZDY4YjE2NTA0MThlNGQ2YjMzZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2
NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
MEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87
IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFF
OTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlw
dFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYy
NUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1
ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0
RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBK
U1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhE
ZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0Fs
dEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVs
ZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhS
ZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsg
fTsKQEAgLTIxMzIsMTAgKzIxMzAsMjEgQEAKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8q
IChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJG
RjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIz
RUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZH
UHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4
M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4
NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVD
OTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIx
RTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlG
N0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQz
MzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAv
KiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAv
KiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURD
ODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0Ig
LyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUy
M0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNB
QUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0Mg
LyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3MkQ1QzJFNTIzQjFBODZEMDBGNjdENDMgLyogQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIz
QjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJl
bmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUz
Q0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJ
CTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBB
QyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8q
IEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsg
fTsKQEAgLTY1NDEsOSArNjU1MCw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBX
ZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVu
dFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5
MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
QnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0Qx
MzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNo
Q2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5n
ZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUw
MEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0Fs
dEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NW
R0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5
Nyw4ICs5NjAzLDEwIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlv
bkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZp
Z2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9y
TWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAyODBE
MTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVBy
b3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0Mg
LyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhU
QmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNB
N0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjE5
LDcgKzk2MjcsMjEgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRz
UkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNS
R0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQ
aHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYx
MjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwOTIzQUFD
RTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDIzMjNBQzQ5M0Uw
MEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjYyM0FD
QjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBwYXRoID0g
dHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpT
RVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEOUYxQTM5MDRDMzAwMDE0RTE4IC8q
IEVYVEZyYWdEZXB0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
WFRGcmFnRGVwdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2ODMsNyAr
MTI3MDUsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0Uw
RSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBH
cmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTEwQjkxMEIz
ODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJB
MTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvbnRFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTIwQ0VGMEFCRjAw
NDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEx
RjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xNjY4Miw2ICsxNjcwMyw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkU1RkJDQTFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJCTBGRTVGQkNCMUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJCTcyQkJFNDI2MjNBQ0IwOUIwMEE2
MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNE
RDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMz
REQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJMEZFNUZCQ0UxQzNE
RDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLApAQCAtMjQ4ODgsOSAr
MjQ5MTAsMTIgQEAKIAkJCQlCMkVEOTc3MDBCMUY1NUNFMDAyNTdEMEYgLyogR3JhcGhpY3NDb250
ZXh0Q0cuY3BwICovLAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0Nv
bnRleHRDRy5oICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDkyM0FBQ0U4MjAw
QTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MEQyM0FBRUNB
MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJC
RTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywK
KwkJCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMyMTg3NDA2NDAwNEY0MjRBIC8qIElt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1
NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAw
MzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAgLTI0OTY3LDYgKzI0OTkyLDcgQEAK
IAkJCQlGQkMyMjBERDEyMzdGQkVCMDBCQ0Y3ODggLyogb3BlbmdsICovLAogCQkJCTM3MjE0OTMz
MThGMEI2RDYwMDE1NkVEQyAvKiBvcGVudHlwZSAqLywKIAkJCQk0OUU5MTFCMjBFRjg2RDI3MDA5
RDBDQUYgLyogdHJhbnNmb3JtcyAqLywKKwkJCQk3MkQ1QzJFMzIzQjFBNzREMDBGNjdENDMgLyog
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovLAogCQkJCTQ5MDcwN0U0MTIxOUMwNDMwMEQ5MEU1
MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5jcHAgKi8sCiAJCQkJNDkwNzA3RTUxMjE5QzA0MzAwRDkw
RTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmggKi8sCiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRC
NEM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlLmggKi8sCkBAIC0yNDk4Niw2ICsyNTAxMiw3IEBACiAJ
CQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywKIAkJ
CQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1MTMw
MDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAorCQkJCTcyQTA3QzQ1
MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCiAJCQkJNDlG
QzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8sCiAJ
CQkJNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICov
LAogCQkJCTJEMjlFQ0MxMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQuY3BwICovLApAQCAtMjUwODEsNyArMjUxMDgsOCBAQAogCQkJCTU1QTMzNkY4MUQ4MjFF
M0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQzRDI1OTc2MTNDODE2
RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThCRDAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcyMDI4MEQxMjNCQTkzN0IwMDZGNDc2NyAv
KiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDAwMjNBQUM0QzEwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFGNTczOTcyMDAwQzQy
RkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTczOTcyMDAwQzQyRkIg
LyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0NDMDRDIC8qIElt
YWdlRnJhbWUuY3BwICovLApAQCAtMjUxMzgsNiArMjUxNjYsOCBAQAogCQkJCTJENTAwMkZBMUI1
NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZFNUMwRTRDRkRF
RDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0
OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNp
Y2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQ
bGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAwMzg3NkQ3IC8qIFBsYXRm
b3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0UyMTZFQkM1QjAwMDQzQ0ZB
NCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjUxNDcsNiArMjUxNzcsOSBAQAogCQkJ
CUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIx
NzdBMzk4MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUz
MjE3N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTcyRDVDMkU5
MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJF
NjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyMzgyNkE2
MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5
N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZF
MDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkx
OTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCkBAIC0yODk4NCw2ICsyOTAxNyw3IEBACiAJCQkJQkNG
N0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBp
biBIZWFkZXJzICovLAogCQkJCTgzQkI1Qzg4MUQ1RDZGNDUwMDVBNzFGNCAvKiBBbGxEZXNjZW5k
YW50c0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVDMkU1MjNCMUE4NkQwMEY2
N0Q0MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRURB
MTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8q
IEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTY3OCw2
ICsyOTcxMiw4IEBACiAJCQkJMTEyRkIzNTIyMzlDMjNDNDAwODcwNTRBIC8qIERpc3BsYXlJbmxp
bmVSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0N0U2MzIyNzc0MjVBMDBDN0JDQjAgLyog
RGlzcGxheUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQzMUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MjcyM0FDQjNF
MDAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQjA5OTAxMjNDMDkyM0MwMDczQjlDQiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMw
Mjg2LDggKzMwMzIyLDEwIEBACiAJCQkJN0M3OTAzQjMxRjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5
MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1
ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAv
KiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MjEyM0FDMkNE
NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJC
QkU0MjAyM0FDMkI3NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2MzMgLyogSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAv
KiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0Uy
MUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRv
bkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdB
MSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3NTYs
NiArMzE3OTQsNyBAQAogCQkJCUE1NTRCNUYzMUUzODM5M0EwMDFENEUwMyAvKiBQZXJmb3JtYW5j
ZVVzZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3
NSAvKiBQZXJpb2RpY1dhdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RDVEQzJFMEY0MjNBNzMw
MDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5Q
aWN0dXJlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkM4MkI3MjM2QTNGNkEwMDU1
RDZDNSAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUQy
RjhFMDYyMzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5kb3cuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzE3NzUsNiArMzE4MTQsNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4
RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcy
M0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMgLyogUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFDNEQ0MzAwQTZBQUI0
IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDU2MkY5NjEx
NTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1
NDRGNzg5MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMTk1MSw2ICszMTk5MSw4IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VD
NDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFENDgx
MjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2Vu
ZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRl
cmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAv
KiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1
OTVGRjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAppbmRleCAxODE3NTE1ZTFjYzcwOTBjN2U1OWEwY2JkMjUzZmY3MjYxNzQ0YzczLi5m
NTAxY2EyM2E3Mzk1ZjFlNWIyMWM4MWIwNGRkYjAxOTNiN2EyZjM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTky
MSw4ICs5MjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXpl
KCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVp
Z2h0KCkpKTsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNp
emUoKTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxT
aXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIGlmICghaW1hZ2VE
YXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlk
YXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3ODUsMTMgKzI3ODUsMTMgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxX
aWR0aCwgbG9naWNhbEhlaWdodCksIFVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNh
bFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVz
b2x1dGlvblNjYWxlKTsKICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgIGZhaWwo
KTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBi
dWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJl
Y3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CisgICAg
ICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwg
SW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRQb2ludCgpKTsK
IAogICAgICAgICBhdXRvIGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1
ZmZlciksIHN0YXRpY19jYXN0PGJvb2w+KG9yaWdpbkNsZWFuKSB9KTsKICAgICAgICAgcmV0dXJu
IGdldEpTVmFsdWUoYml0bWFwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcAppbmRleCBlNWI4YWI0NjljZWM0YmMwNThjNDM3ZDE5OTUwNDBiNTAyMWM3NDMxLi4y
ZmE1M2FhMzhjMWZjYzExNzM1NmFmOWYxNTVkMDE1ZDQ0MzdmMGNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAgUmVmUHRy
PEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBpbnRvIEltYWdlQnVm
ZmVyLgogICAgIC8vIEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVu
Y29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgYXV0byB0ZXh0dXJlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAg
ICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCmluZGV4IGY0Yjc3MDdlOTdh
OGZlNTFmOGUyNTc3NThhZGU0YjZkZGZmNTAyZTUuLjY1ZDQ2NGZkZDdkNTg4ZWM3MzE2MTZiNzQw
MzdhODQyOGVlZjMxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMu
Y3BwCkBAIC05Myw3ICs5Myw3IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1h
Z2UoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgbV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUoKSwgVW5hY2NlbGVyYXRlZCwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7CisgICAg
bV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFtX2NvcGllZEJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKQEAgLTEwMiw3ICsxMDIsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52
YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBu
dWxscHRyOwogCi0gICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2Uo
bV9jb3BpZWRCdWZmZXItPmZhc3RDb3B5SW1hZ2VNb2RlKCksIFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKTsKKyAgICBtX2NvcGllZEltYWdlID0gbV9jb3BpZWRCdWZmZXItPmNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgIHJldHVybiBt
X2NvcGllZEltYWdlLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCmluZGV4IDIzZDliMzRlODQ4ZjZkMDFkMzRhOWRhZmZiYTMwNTBmYzdhNzEzMTYu
LjkwOTMzZTIzYWMwODE4MDMzYzc2ZmMzZTI4MjExOTE4MDE0ODZjNzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVk
ZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNjAsNiArNjEsMTAgQEAKICNpbmNs
dWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAorI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjZW5k
aWYKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAiQ2FudmFzQ2FwdHVyZU1l
ZGlhU3RyZWFtVHJhY2suaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgpAQCAtMzQ1LDkgKzM1
MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBtX2NvbnRleHQgPSBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUo
KSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQp
LnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKLSAg
ICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwotCiAjaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21w
b3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRl
U3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04MTgsMzkgKzgyMCwyNyBAQCBib29sIEhU
TUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNpemUmIHNpemUpIGNv
bnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmco
Ym9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewotICAgIGlmICh1c2VzRGlzcGxheUxpc3RE
cmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAgICAgICAgcmV0dXJuOwotICAg
IAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7
Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkp
KQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQp
LnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIH0K
IAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9v
bCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAodHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAgICAgICAgcmV0dXJuOwotCiAg
ICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5Owot
Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkK
LSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5z
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAg
ICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1
ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3Ry
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojpk
aXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7
Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkK
LSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29u
dGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1
ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdp
bmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RB
c1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChp
czxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnJlcGxh
eURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5
RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgp
LT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIApAQCAtODg1LDExICs4NzUsMjcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3Vs
ZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKLQogICAg
IGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXco
KS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51
bGxwdHI7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciBEaXNwbGF5
TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KKyAgICBib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcg
PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCku
ZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgpKTsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIGEg
bmV3IHNldHRpbmcgZm9yIHJlbW90ZSBkcmF3aW5nIG9uIGNhbnZhcy4KKyAgICBib29sIHVzZXNS
ZW1vdGVEcmF3aW5nID0gZmFsc2U7CisKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGU7
CisgICAgaWYgKHVzZXNSZW1vdGVEcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hv
dWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQg
OiBSZW5kZXJpbmdNb2RlOjpSZW1vdGU7CisgICAgZWxzZSBpZiAodXNlc0Rpc3BsYXlMaXN0RHJh
d2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpE
aXNwbGF5TGlzdDsKKyAgICBlbHNlCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2Nl
bGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgaG9zdFdpbmRv
dykpOwogCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQor
ICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisKICNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAg
IGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAgICAgLy8gUmVjYWxj
dWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFu
Z2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGI1Mjg2NDVj
NjU4NzRjZDBjYTA5MzQ0NDYxYjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEyMjk0MTQ5NmJmMzFiY2Rk
NzljNmJjNWMzOTFhNzhhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lnbm9yZVJlc2V0
IHsgZmFsc2UgfTsKIAotICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nIHsgZmFsc2Ug
fTsKKyAgICBPcHRpb25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiAgICAgYm9v
bCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VCaXRtYXAuY3BwCmluZGV4IDVmNDlmNzM5YTFmNWMzYmUwZWUxNzFmMzRmOTYzZTAyNjZiYzQ0
OTIuLjJiODE5ODllOGZkNjJlZmUzNDUzODdhOTAyZmU2OTJiMzA5OTU0ZmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC02MSw5ICs2MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1hcCk7CiAKICNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2Vs
ZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZl
clJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVm
ZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYK
IAogUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEludFNpemUgc2l6ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAppbmRleCA5Zjc4ZThiMmJlY2IxOGI5
ODlmNjI4ZGUxM2MxM2VkYTkwYjZiMjkxLi4zZDE1YzkwMmNlZGEzNmQ0YTdmNDI2YmQ5NWU2ODFl
MGFmYmJjMTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZh
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCkBAIC0x
MjYsNyArMTI2LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVu
Q2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVm
UHRyPEltYWdlQml0bWFwPiB7IG51bGxwdHIgfSB9OwogCiAgICAgICAgIGlmICghbV9oYXNDcmVh
dGVkSW1hZ2VCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRl
KHsgSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpLCB0cnVlIH0pIH07
CisgICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpLCB0cnVlIH0pIH07
CiAKICAgICAgICAgYXV0byBidWZmZXIgPSB0YWtlSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgaWYg
KCFidWZmZXIpCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0
ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUoKSwgVW5hY2NlbGVyYXRlZCkpOworICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIo
KSBjb25zdApAQCAtMjU3LDcgKzI1Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChzaXplKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBzZXRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCkpOworICAg
IHJldHVybiBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cmVz
ZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCBiZGI2Y2VhM2I0Y2VhOWViM2I2YWNkYmNi
NDY1OTMwMWUxNzc0N2Y1Li4wY2E1ODU3MTY1YzlhMjRjYzM4NGM5NjAzYjU3OTUyMzY0YmJhOTRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMTgwNiw3ICsxODA2LDcgQEAgdGVtcGxhdGU8
Y2xhc3MgVD4gSW50UmVjdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYWxjdWxhdGVD
b21wb3NpdGluZ0J1ZmYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZlcihjb25zdCBJbnRSZWN0
JiBidWZmZXJSZWN0KQogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJl
Y3Quc2l6ZSgpLCBpc0FjY2VsZXJhdGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQp
OworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBpc0Fj
Y2VsZXJhdGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNvbXBvc2l0ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBJbnRSZWN0JiBidWZm
ZXJSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTE5OTAsNyArMTk5MCw3IEBAIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFzUGF0dGVybj4g
eyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKG5hdGl2
ZUltYWdlKSksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSB9OwogI2VuZGlmCiAKLSAg
ICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVu
dCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkg
OiBBY2NlbGVyYXRlZCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQo
KS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpOwogICAgIGlm
ICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yMDc1LDIxICsy
MDc1LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXkKICAgICAgICAgY29udGV4dERpc3BsYXlM
aXN0TWFwKCkucmVtb3ZlKHRoaXMpOwogfQogCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdz
KSBjb25zdAotewotICAgIGlmICghbV9yZWNvcmRpbmdDb250ZXh0KQotICAgICAgICByZXR1cm4g
eyB9OwotICAgIHJldHVybiBtX3JlY29yZGluZ0NvbnRleHQtPmRpc3BsYXlMaXN0LmFzVGV4dChm
bGFncyk7Ci19Ci0KLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlE
aXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17
Ci0gICAgYXV0byogZGlzcGxheUxpc3QgPSBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5nZXQodGhp
cyk7Ci0gICAgaWYgKCFkaXNwbGF5TGlzdCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1
cm4gZGlzcGxheUxpc3QtPmFzVGV4dChmbGFncyk7Ci19Ci0KIGNvbnN0IFZlY3RvcjxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZSwgMT4mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnN0YXRlU3RhY2soKQogewogICAgIHJlYWxpemVTYXZlcygpOwpAQCAtMjE1OSwxMCAr
MjE0NCwxMCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRhKGZsbwogCiBFeGNlcHRpb25PcjxSZWZQdHI8
SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKGZs
b2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewotICAgIHJldHVy
biBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBzeCwg
c3ksIHN3LCBzaCk7CisgICAgcmV0dXJuIGdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtOjpM
b2dpY2FsLCBzeCwgc3ksIHN3LCBzaCk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5
LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CitFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRh
Pj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxv
YXQgc2gpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW52YXNCYXNlKCkub3JpZ2luQ2xlYW4oKSkgewog
ICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtF
X1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFz
IGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBkYXRh
LiIpKTsKQEAgLTIxOTYsNyArMjE4MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURh
dGFSZWN0LnNpemUoKSk7CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNvb3JkaW5hdGVTeXN0ZW0p
OworICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0LCBjb29yZGluYXRlU3lz
dGVtKTsKICAgICBpZiAoIWJ5dGVBcnJheSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnNv
bGVNZXNzYWdlOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRMaXRlcmFsKCJVbmFibGUg
dG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiKTsKQEAg
LTIyMTgsMTAgKzIyMDMsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpw
dXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBm
bG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0
eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKIHsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1h
Z2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZ
LCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CisgICAgcHV0SW1hZ2VEYXRhKGRhdGEsIENvb3Jk
aW5hdGVTeXN0ZW06OkxvZ2ljYWwsIGR4LCBkeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgs
IGRpcnR5SGVpZ2h0KTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpw
dXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxv
YXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKK3ZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZs
b2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhl
aWdodCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzQmFzZSgpLmJ1ZmZlcigp
OwogICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjMwLDggQEAgdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1
ZmZlcjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCksIHN0
YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBkZXN0
UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09IElt
YWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZlci0+bG9naWNhbFNpemUo
KSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICAKKyAgICBkZXN0UmVjdC5pbnRlcnNl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0
ZW06OkxvZ2ljYWwgPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6
ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAg
IEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0yMjUzLDcgKzIyMzksNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRh
dGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwg
MCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAoIXNvdXJjZVJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0YS5kYXRhKCksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6ZShkYXRhLndpZHRo
KCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29v
cmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmRhdGEuZGF0YSgpLCBJbnRTaXplKGRhdGEu
d2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQp
LCBjb29yZGluYXRlU3lzdGVtKTsKIAogICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERy
YXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuaAppbmRleCAzZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5OGFlNjcyMjE4N2YxYmVl
OTFkLi45NjQwMGQxYWY1MDBkNThlMWRkOWJkMTExNzQ4MjE0MWE3MmJiNWIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5oCkBAIC0yMjIsOSArMjIyLDYgQEAgcHVibGljOgogICAgIGJvb2wgdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
OyB9CiAgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sKTsKIAotICAgIFN0
cmluZyBkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MpIGNvbnN0Owot
ICAgIFN0cmluZyByZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0Rmxh
Z3MpIGNvbnN0OwotCiAgICAgdXNpbmcgRGlyZWN0aW9uID0gQ2FudmFzRGlyZWN0aW9uOwogCiAg
ICAgY2xhc3MgRm9udFByb3h5IDogcHVibGljIEZvbnRTZWxlY3RvckNsaWVudCB7CkBAIC0zNzEs
OCArMzY4LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBmdWxs
Q2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxv
YXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OwotICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9h
dCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdp
ZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7CisgICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IGdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZs
b2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiwgQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOwogCiAgICAg
Ym9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3Bw
CmluZGV4IDE0ZWEzN2Q4ZDdlYWZiMDFiNWM0Y2UxOWViZTc2YzUxOGNmY2Q0YTguLmI1MWI0ZGJm
MTNlZTUwNmViOTQ5OGM0M2VmNDVjOTQ0ZGQ3M2UwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEX0lNUEwoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KTsKIAogI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7
CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNlbmRpZgogCiBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCkBAIC02OSw3ICs2OSw3IEBAIEhUTUxDYW52
YXNFbGVtZW50KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcygpIGNvbnN0CiAK
IGJvb2wgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKKyAgICBy
ZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsK
IH0KIAogdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcChS
ZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA3OWE1
NWUyY2I3Nzc3NzA3YmZjMzg5YjFkODNjMzBiYWUyYmQ3MzFlLi43ZGM3NmFiM2YxMWYwOWNhNzM5
ZWFmYWM3MTc1MTBmY2Q4ZTc5ZWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtMzkzOSw3ICszOTM5
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZm
ZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRleFN1YkltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dDNEOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDA2MSw3
ICs0MDYxLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0QKICAgICAgICAgaWYgKCF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgU291cmNlSFRNTFZpZGVvRWxl
bWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCks
IHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQp
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUlt
YWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0lt
YWdlKHZpZGVvLmdldCgpLCBEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghaW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgp
LCBHcmFwaGljc0NvbnRleHQzRDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ1MDAsNyArNDUwMCw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50CiAgICAgICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKSB7CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9
IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAg
aWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFs
aWQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLT5jb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3Qo
KSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlw
WSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUo
dGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBiaXRtYXAtPndp
ZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCksIHR5cGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1MDgsNyArNDUwOCw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgcHVyZSBTVyBw
YXRoLgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1h
Z2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBp
ZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC00NTc3LDcgKzQ1NzcsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludAogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0
ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlm
IChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlk
KHRhcmdldCwgbGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9
IGNhbnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXIt
PmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJnZXQsIHRleHR1cmUt
Pm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3Vu
cGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5
VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3Jt
YXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ2MjIsNyAr
NDYyMiw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgIH0KIAogICAgICAgICAv
LyBOb3JtYWwgcHVyZSBTVyBwYXRoLgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlk
ZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZp
ZGVvLmdldCgpLCBEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghaW1hZ2UpCiAg
ICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSk7CkBAIC00NjQ3LDcgKzQ2NDcsNyBAQCBSZWZQdHI8SW1hZ2U+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UmIGltYWdlLCBpbnQg
dwogICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKTsKICAg
ICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsKICAgICBidWYtPmNvbnRl
eHQoKS5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVm
LT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgIHJldHVy
biBidWYtPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiB9CiAKICNpZiBFTkFCTEUo
VklERU8pCkBAIC02MzQ0LDcgKzYzNDQsNyBAQCBJbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29uc3QgSQogICAg
IH0KIAogICAgIC8vIEZJWE1FICgxNDk0MjMpOiBTaG91bGQgdGhpcyBJbWFnZUJ1ZmZlciBiZSB1
bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZD8KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZW1wKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBBU1NFUlQobV9idWZmZXJzLnNpemUoKSA+IDAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCmluZGV4IDBjYmQwYTNjY2UwMzkyOTViNDkyNWNlMzFhMDU0ZTFmNjkxMGQ5MzAuLjZl
YTc5MjE0ZjhhNmUwMDViMGJlMjQ0OWEyZGQ2NzI4OGZjM2FjMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTE0NDYs
NyArMTQ0Niw3IEBAIFJlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVy
RWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpCiAgICAgSW50UmVjdCBwYWludGlu
Z1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkpOwogCiAgICAgLy8gRklY
TUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBkZXZp
Y2VTY2FsZUZhY3RvcikpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4
IDYyNjE3Zjc4ZjNlMmYwNDc0OGFhNThhZGFlYjhmYTMwYmQ3MTJhZDQuLmM5OWQzNmFmZmFhODY1
YTllNmE5NWRjNTM1YjQ4NzQ4YzdlZTNlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1
ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMu
aCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlYXJjaFBv
cHVwTWVudS5oIgpAQCAtMzAzLDYgKzMwNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0
cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0
Zm9ybURpc3BsYXlJRCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAgICB2
aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAgLy8gUGFzcyBudWxscHRy
IGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdy
YXBoaWNzTGF5ZXIqKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
U25hcHNob3R0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcu
Y3BwCmluZGV4IDBhNDRjMmZhMWEwOTQ5N2NmZGY1NTg4ODMyZmZkZmYxMDIzMzMwZTEuLmUyNGQ5
MmU2ZjNlNjFkMzhhOWIyNDQ4NWY0ZDEzZGU1MGU1MzNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZyYW1lJiBmcmFtZSwg
Y29uc3QgSW50UmUKICAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc1BhaW50V2l0aElu
dGVncmFsU2NhbGVGYWN0b3IpCiAgICAgICAgIHNjYWxlRmFjdG9yID0gY2VpbGYoc2NhbGVGYWN0
b3IpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9y
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwg
c2NhbGVGYWN0b3IpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICBidWZmZXItPmNvbnRleHQoKS50cmFuc2xhdGUoLWltYWdlUmVjdC54KCksIC1pbWFnZVJl
Y3QueSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCmluZGV4IDc1YjVmZDAxYTViZDY2MzBmN2ZlYzZiN2U3
ZTIzYmZhMTAwM2Q4MDIuLmMwN2IxNDdhOWI5NGJjYjJhZWZkN2FiNWVkM2ZiY2U0OTgwZjdiNTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcApAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRo
ZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5o
IgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJSZXNpemVPYnNlcnZl
ci5oIgogI2luY2x1ZGUgIlJlc291cmNlVXNhZ2VPdmVybGF5LmgiCiAjaW5jbHVkZSAiUnVudGlt
ZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtMzI5LDYgKzMzMCw4IEBAIFBhZ2U6OlBhZ2UoUGFnZUNv
bmZpZ3VyYXRpb24mJiBwYWdlQ29uZmlndXJhdGlvbikKICAgICBtX2xpYldlYlJUQ1Byb3ZpZGVy
LT5zdXBwb3J0c1ZQOChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YlJUQ1ZQOENvZGVjRW5hYmxlZCgpKTsKICNlbmRpZgogCisgICAgUmVuZGVyaW5nQmFja2VuZDo6
ZW5zdXJlU2hhcmVkQmFja2VuZCh0aGlzKTsKKwogICAgIG1fY29yc0Rpc2FibGluZ1BhdHRlcm5z
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocGFnZUNvbmZpZ3VyYXRpb24uY29yc0Rpc2FibGluZ1Bh
dHRlcm5zLnNpemUoKSk7CiAgICAgZm9yIChhdXRvJiYgcGF0dGVybiA6IFdURk1vdmUocGFnZUNv
bmZpZ3VyYXRpb24uY29yc0Rpc2FibGluZ1BhdHRlcm5zKSkgewogICAgICAgICBVc2VyQ29udGVu
dFVSTFBhdHRlcm4gcGFyc2VkUGF0dGVybihXVEZNb3ZlKHBhdHRlcm4pKTsKQEAgLTEwMTYsNiAr
MTAxOSw3IEBAIHZvaWQgUGFnZTo6c2V0TWVkaWFWb2x1bWUoZmxvYXQgdm9sdW1lKQogICAgICAg
ICBlbGVtZW50Lm1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiAgICAgfSk7CiAjZW5kaWYKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kOjplbnN1cmVTaGFyZWRCYWNrZW5kKHRoaXMpOwogfQogCiB2b2lkIFBh
Z2U6OnNldFpvb21lZE91dFBhZ2VTY2FsZUZhY3RvcihmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkxNjE5ZGM2NDNmODcy
OTA5Y2I3MWY3ODI4ZWY4NWJiYy4uMjEwN2E5ZTFlOTljZjM1MWQ5ZTYxNjY4MDVjNGE1NjMzYWU0
N2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKQEAgLTM3
Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAgICAgICAgICAgIGF1
dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIGlmIChh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VTaXplLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHNv
dXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlt
YWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIEludFBv
aW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YS0+ZGF0YSgp
LCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9
IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVz
ZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYWI0Njg2NzY4ZjFhMjgyZDU4ODFjOTM5Nzk0
NmQ1YmEyMDA2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQaHlzaWNh
bEltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFja2VuZFR5cGU+CitjbGFzcyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIDogcHVibGljIFBo
eXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVm
ZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRh
QmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEJhc2VQaHlzaWNhbElt
YWdlQnVmZmVyKFdURk1vdmUoZGF0YUJhY2tlbmQpKQorICAgICAgICAsIERpc3BsYXlMaXN0OjpE
cmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCBhZjFkYjFlNGMwOGQ0MTJlMzVkOGFmMmY0Zjc5MmE0MjMwMTAy
ZGQ2Li5mZWYyYjEwYmVjM2RkNWMzNjQwZDVlZGY0MTZjNTM1YWM5ZjM5YmUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAt
MzUwLDcgKzM1MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpOwogI2VuZGlmCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQ7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBp
c0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNh
dmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggNDU4YWU3
MmYyYWUwMjU2MjQ3NjhlODc5ZGJkNDk2OTY0YjQ5MWIxOC4uMDBiZTBmZWEwNjA1NWNhMzFiMmM4
ODc0ZGQzNzRlZWExZDQyODQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKKyNpbmNsdWRlICJBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
aAppbmRleCBjZWVhMWRhNDBlYjMyZmY3OGExZTc1ZTE3YmZlMDA5MjAxYjc2ZjEyLi4yNmExMmRl
M2JlNGFjNmI4ODQzNjRjNTU0Mzk3ZjdmNzFjNzhhYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIldp
bmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgpAQCAtMTIyLDE3ICsxMjMsNiBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRU
ZXh0QWxpZ24KIH07CiAKLWVudW0gUmVuZGVyaW5nTW9kZSB7Ci0gICAgVW5hY2NlbGVyYXRlZCwK
LSAgICBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIsIC8vIFVzZSBwbGFpbiBtZW1vcnkg
YWxsb2NhdGlvbiByYXRoZXIgdGhhbiBwbGF0Zm9ybSBBUEkgdG8gYWxsb2NhdGUgYmFja2luZyBz
dG9yZS4KLSAgICBBY2NlbGVyYXRlZAotfTsKLQotZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHsKLSAgICBQcmVtdWx0aXBsaWVkLAotICAgIFVucHJlbXVsdGlwbGllZAotfTsKLQog
U3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwg
V2ViQ29yZTo6QmxlbmRNb2RlKTsKIFN0cmluZyBibGVuZE1vZGVOYW1lKFdlYkNvcmU6OkJsZW5k
TW9kZSk7CiBib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkJsZW5k
TW9kZSYpOwpAQCAtMTQzLDcgKzEzMyw2IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPCiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
V2luZFJ1bGUpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKLVdFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMGU4ZGFmMWVh
OTU1ODljNTM0MGUwMjZlNDQ2ODU1YTUxMTJiYzA1Ni4uNmY0ODBmNTMxMDdkOTk2YjI1YTczMzRj
OTcyMzg4NjA4ZDllNzZkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDM4ICsyOCw0NCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJD
b2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0g
NDA5NjsKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5n
dGggKiBNYXhDbGFtcGVkTGVuZ3RoOworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkQmFja2VuZCgpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01v
ZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVy
biBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQp
OworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
aWYgKHNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBj
b250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBp
ZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVm
ZmVyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhl
IGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2Fs
ZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJ
UkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
cmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAg
IGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9h
dCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVk
QXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdl
QnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0x
MDUsOTcgKzExMSwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwg
Y2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJ
Uk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewot
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0
dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0K
LUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUg
c2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2Ug
ZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUg
c3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAg
ICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENv
bG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBzdGF0
aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAg
ICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0
IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVh
ckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRp
Y19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFu
c2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNw
YWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJy
YXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4w
ZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNv
bG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJv
dW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJy
YXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRl
dmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9p
ZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIElu
dFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0
byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3Qp
OwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVu
c2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAg
ICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAg
cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2lu
dCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17
Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29u
dmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VC
dWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29s
IEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QmLCBH
QzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXpl
IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0g
aXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFu
IG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBj
b250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAg
ICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUo
cmVjdC5zaXplKCksIGNvbnRleHQpOwogCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZm
ZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwot
ICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsK
LSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNp
emUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBp
ZiAoIWJ1ZmZlcikKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQg
dXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4K
LSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0
dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6
ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVy
aW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUlu
dFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2Ug
dGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQg
c28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVy
IHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZh
Y3RvcigpKTsKKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhp
cywgLXJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29s
IEltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9O
YXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewot
ICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhp
cy0+Y29udGV4dCgpLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lu
a0ludG9OYXRpdmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJv
bSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEg
d2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVy
bmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAg
IHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdo
dCgpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29s
dXRpb24pOwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZl
ci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9
Ci0jZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggMTE4ODBjYTE4NTY4MmUzNDBhMDU4NWRmMWUwMWU1MTU5OWQwMjE1NC4u
ZGVkNjRkNTE5YmMwYzc4NWZkZTY4ZGJhMGMxNzk1YThjYjc1NTYwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
NywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgSW1hZ2U7Ci1j
bGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBI
b3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3Rv
cmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4K
LSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3Qg
dGhlIGNvcHkuCi19OworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERyYXdpbmdDb250
ZXh0OworfQogCi1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAg
WWVzLAotfTsKK2NsYXNzIEhvc3RXaW5kb3c7CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQp
OwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xh
c3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVy
IG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6
OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6
U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgogCi0gICAgLy8gQ3Jl
YXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkg
cmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLQotICAgIC8vIENyZWF0ZSBhbiBpbWFn
ZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29s
dXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250
ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21w
YXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7Ci0KLSAgICAv
LyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0K
LQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSkgY29uc3Q7
Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRp
b25TY2FsZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBH
aXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZp
b3IKLSAgICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0g
ICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICAvLyBU
aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hp
Y2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMg
Ym9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9v
bCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsK
KyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAg
IHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXpl
JiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJl
Y3QmKTsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgc3RhdGljIEludFNpemUg
Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBu
dWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0
OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRy
LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAg
dm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0
ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250
ZXh0KCkgPSAwOwogICAgIAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0g
ICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0
KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OwotCi0jaWYg
VVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5k
aWYKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRl
eHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKSB7IH0KIAotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJh
bnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0
Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBi
YXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0x
LCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBs
b2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgaW50ZXJuYWxTaXpl
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qg
PSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3Qo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRh
dGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkg
d29yawotICAgIC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBh
bmQgVU5TSUdORURfQllURSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBi
b29sLCBib29sKTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0
ID0gMDsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRo
ZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlw
cGVyLgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYp
OwotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZs
b2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3Qg
RmxvYXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKIAotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJldHVy
bmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91
IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2
b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5rSW50
b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1
c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwg
LTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAor
ICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1h
Z2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CiAgICAgc3RhdGljIHZvaWQgZHJh
d0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBG
bG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9
KTsKIAotICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0K
LSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHZW5l
cmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7Ci0g
ICAgZnJpZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xh
c3MgR3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKLQot
cHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXpl
OwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2Fs
ZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRv
IHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdo
ZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
UmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVT
RShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyos
IGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBz
dWNjZXNzKTsKLSNlbmRpZgotfTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNl
TWFzaygpID0gMDsKIAotI2lmIFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1W
ZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotI2VuZGlmCisgICAgdmlydHVhbCBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3QgPSAwOwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisgICAgdmlydHVhbCBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3Rl
bSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVu
dW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Cit9OwogCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45Nzg1YzhlNzhjNDFjMzI2NTVmMTJjMjcyMDIwMWFlZTA4ZjJh
ZjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4g
SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgbV9pbnRlcm5hbFNpemUpOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5j
ZVJlY3QsIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgIGlmICghc3JjUGl4ZWxBcnJh
eSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNy
Y1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAw
OyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAg
ICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwor
ICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdWludDhfdCBy
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBi
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICAKKyAgICAg
ICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAq
ICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9m
ZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBsdW1pbmFuY2VSZWN0
LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Y2NhZTQzNTNlOTdkODdiYjA1MjlhNmVjNDI3YTdhNzVjOTllM2U0NwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
CkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0Qu
aCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZTsKKworZW51bSBC
YWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vi
c2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5n
U3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51
bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24geworICAgIE5vLAorICAgIFllcywKK307CisKK2Vu
dW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307
CisKK2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWws
CisgICAgQmFja2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKworICAg
IHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsU2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0
dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5l
VHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyBy
ZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1
YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1
YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwor
CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAg
dmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uLCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQ29vcmRpbmF0ZVN5c3RlbSkgeyB9CisgICAgCisgICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVs
bHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0MzRGVudW0s
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9sb2dpY2Fs
U2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAgICAgLCBtX2ludGVybmFsU2l6ZShpbnRlcm5hbFNpemUp
CisgICAgICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICAgICAs
IG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnRTaXplIG1f
bG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2ludGVybmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jl
c29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVj
MGQzNmZlZmJkMTJhYmU1NDNjM2YyMDM0ZjYxNThiM2QyY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoQ0cpCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1
ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42ZDE2N2E1N2UwODUzZDVlM2ZjMzgwMjdkZDg2NDY4MDA3YTJhZTdkCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2Ns
YXNzIFBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IFBoeXNpY2FsSW1hZ2VCdWZm
ZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZmZXIsIEltYWdlQnVmZmVyVHlwZT46OnZhbHVlKTsK
KyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBpZiAoIWJhY2tlbmQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5k
KSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisg
ICAgeworICAgIH0KKworICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVy
biBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
YmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJh
Y2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNm
b3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50
U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmludGVybmFsU2l6ZSgpIDog
SW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5yZXNvbHV0aW9uU2Nh
bGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5tZW1vcnlDb3N0KCkgOiAw
OyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+ZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weU5hdGl2ZUlt
YWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVo
YXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAg
Zmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAg
ICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7Cisg
ICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFj
a2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRv
THVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAg
ICB9CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbElt
YWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3Rf
Y2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAg
ICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbElt
YWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAg
IH0KKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+
KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5nZXRJ
bWFnZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAg
IGZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0
Rm9ybWF0LCBhcnJheSwgZGF0YVNpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5
c3RlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5
ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29w
eVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBkZXN0
aW5hdGlvblRleHR1cmUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5k
LT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVy
bmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDMy
MzZkNWU5N2ZmZTY1ZTY4MTEyMGZkODVhMTUxYzJjYjRmM2ZlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUlt
YWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNF
KENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDsKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKK3Vz
aW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI7CisjZW5kaWYKKwordXNpbmcgUGxhdGZv
cm1JbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJ
bWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5n
IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4
MDUwNDhjOGRhYTcxODdjZGEzNjQ4NGY3Mzk3OTA1NWY4OWE5MGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApA
QCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgi
CisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tl
bmQmIFJlbmRlcmluZ0JhY2tlbmQ6OmVuc3VyZVNoYXJlZEJhY2tlbmQoUGFnZSogcGFnZSkKK3sK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZUtleTsKKyAgICBzdGF0aWMgUmVu
ZGVyaW5nQmFja2VuZCogc2hhcmVkQmFja2VuZFB0ciA9IG51bGxwdHI7CisgICAgc3RkOjpjYWxs
X29uY2UoaW5pdGlhbGl6ZUtleSwgWyZdIHsKKyAgICAgICAgQVNTRVJUKHBhZ2UpOworICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+
PiBzaGFyZWRCYWNrZW5kIHsgcGFnZS0+Y2hyb21lKCkuY2xpZW50KCkuY3JlYXRlUmVuZGVyaW5n
QmFja2VuZCgpIH07CisgICAgICAgIHNoYXJlZEJhY2tlbmRQdHIgPSBzaGFyZWRCYWNrZW5kLmdl
dCgpLmdldCgpOworICAgIH0pOworICAgIHJldHVybiAqc2hhcmVkQmFja2VuZFB0cjsKK30KKwor
UmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkQmFja2VuZCgpCit7Cisg
ICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmVuc3VyZVNoYXJlZEJhY2tlbmQoKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAg
ICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRQ
bGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJl
bW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVy
ID0gUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRp
c3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VC
dWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShsb2dpY2FsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE4YzIxMGRjZDJlYmM0MGY3MjRlMTVmZWJlZmRi
MTRjYmFhMWE3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEludFNpemU7Citj
bGFzcyBQYWdlOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0
ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIGVuc3VyZVNoYXJlZEJhY2tlbmQo
UGFnZSogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkQmFj
a2VuZCgpOworICAgIAorICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7
CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIAorcHJv
dGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cit9OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmNjMzk4OGZkNjQzZGE3MDQ0MWU1MzM4YjE2YTExYjA1NDYzMTM4NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUu
aApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgUmVuZGVyaW5nTW9kZSB7CisgICAgQWNjZWxlcmF0ZWQsCisgICAgVW5hY2NlbGVyYXRlZCwK
KyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAorICAgIFJlbW90
ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmlu
ZGV4IDk0OTk1OGVjNWIzNGRlMjI1N2VmZDQ2ODMyZDY0YmZmZDRlMTgwNWQuLjA0YTdjYTI2Y2Fi
MmExZDAyYzQxMTE5ZjNhZTQ3YTU4ZWQxNTg0ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2xlYXJTY3JhdGNoQnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hhZG93Qmx1ciBp
cyBub3QgdXNlZCB3aXRoIGFjY2VsZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sgdG8gbWFrZSBh
biB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2VsZXJhdGVkLCAx
KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNp
emUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdJbnNldFNoYWRvdyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgSW50UmVjdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGlu
Zyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dl
ZFJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywg
Y29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJ
bWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9w
ZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFn
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0
aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICgh
bGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRo
b3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgZnVsbFJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXllckltYWdlUHJv
cGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYg
ZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2Vs
ZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4
cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zCiAgICAgYXV0
byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZm
ZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVySW1hZ2VQcm9w
ZXJ0aWVzKTsKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdl
dCgpOwogI2VuZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJ
bnNldFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bgogI2lmIFVTRShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2lu
Z2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRv
IGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5h
Y2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAg
LTg4NCwxMiArODg0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFn
ZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAg
ICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJs
dXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlm
ICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXll
ckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7Ci0g
ICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCB7IH0pOwor
ICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCk7CiB9CiAK
IHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBs
YXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCkBAIC05MTIsNyArOTEyLDcg
QEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogICAgIGFkanVzdEJsdXJSYWRpdXModHJhbnNm
b3JtKTsKIAotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5k
ZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVk
LCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVk
SW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAppbmRleCA0OTZlY2EzMjRkM2U0ZGEyMmZjYTU5OTk4ZWI1ZWY1ZWU3
M2QyMDlhLi43MjJlZWZmZTZjOWU1ZmQyODY2YmUyNzI4N2E0NzAyMTAwY2JmYzU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9h
dFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gYnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNp
emUoZGVzdFJlY3Quc2l6ZSgpKTsKKyAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXpl
ID0gZGVzdFJlY3Quc2l6ZSgpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGJ1
ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogCiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM1NmYxOTY0ZDA5NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3
NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0j
aW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUg
PHd0Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUg
IlVUSVV0aWxpdGllcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1
cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmlu
ZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwot
REVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0
YXRpYyBGbG9hdFNpemUgc2NhbGVTaXplVG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplKQotewotICAgIGZsb2F0IHhNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSkgLyBpbnRlcm5hbFNpemUud2lkdGgoKTsK
LSAgICBmbG9hdCB5TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpKSAvIGludGVybmFsU2l6ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxv
YXRTaXplKGxvZ2ljYWxTaXplLndpZHRoKCkgKiB4TWFnbmlmaWNhdGlvbiwgbG9naWNhbFNpemUu
aGVpZ2h0KCkgKiB5TWFnbmlmaWNhdGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNo
IChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBl
Qml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFj
ZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBj
YXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1
cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNl
bmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4
dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29s
b3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxz
ZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNp
emUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBj
b2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVw
IGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0g
ICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVy
biBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVz
b2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8v
IE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9
IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVk
SGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8K
LSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3Np
YmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUo
c2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUg
PSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2Rl
ID09IEFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5o
ZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGgg
PSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdo
dCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92
ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hl
Y2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2Rh
dGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdp
ZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+
IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsK
LSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCk7Ci0jZW5k
aWYKLQotICAgIG1fZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykg
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0
U2l6ZSB1c2VyQm91bmRzID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUod2lkdGgu
dW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSkpOwotICAgICAgICBtX2RhdGEuc3VyZmFj
ZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVz
ZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0g
ICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250
ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAg
ICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVT
RURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0g
ICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24g
ZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBp
ZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1
ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2Rh
dGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgot
ICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmly
c3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0
bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAg
ICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUu
aGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9y
U3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUlt
YWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAg
ICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUg
ZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwg
bnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRl
cy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICghY2dDb250
ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAg
Y29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xh
dGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCku
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNz
ID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9z
dFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0g
ZGVmYXVsdDsKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXpl
KEZsb2F0U2l6ZSBkZXN0aW5hdGlvblNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjYWxlU2l6
ZVRvVXNlclNwYWNlKGRlc3RpbmF0aW9uU2l6ZSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGlu
dGVybmFsU2l6ZSgpKTsKLX0KLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1l
bW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwg
YW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUg
YW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1
c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0
byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBh
c3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8g
SXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2Ug
dG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJm
YWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICBy
ZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQo
KTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAot
ewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRs
eSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQg
ZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3Mg
bV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBk
dXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRl
cygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsK
LX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29u
c3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICht
X2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFw
aGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0
Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGlt
YWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8
IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhl
aWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJ
blJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNy
ZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+
JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAg
ICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBp
bnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6
ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRT
ZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNw
YWNlID0gc2NhbGVTaXplVG9Vc2VyU3BhY2UobG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUs
IGludGVybmFsU2l6ZSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgp
LCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGlt
YWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1v
dmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNv
cHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRl
clNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxT
aXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXpl
ID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUg
PSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVz
b2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJ
bWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJh
Y2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0K
LQotQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewot
ICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotCi0gICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0
ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1
cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0j
ZW5kaWYKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2Fz
ZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0lt
YWdlQ3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgp
LCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlk
ZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0Nv
bnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFn
ZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSk7Ci0gICAgCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVz
b2x1dGlvblNjYWxlOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVy
LT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZSA9IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0
aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0j
ZWxzZQotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdp
bmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShpbWFnZS5nZXQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQ
dHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcg
aW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAg
Y29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0g
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZv
clJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3Jj
UmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgp
LCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVj
dCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6
ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVk
U291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNl
Rm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGlu
dGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0g
ICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBp
cyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZv
ciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJl
Y3QoMSwgMSwgMCwgMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEko
KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsK
LSNlbmRpZgotICAgIHJldHVybiBrVVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVT
ZXJ2aWNlcyB2ZXJzaW9uPwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1J
TUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0K
LSAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQg
VVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkg
aXMgZm91bmQuCi0gICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJ
Ri4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0K
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9w
bmciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQotICAgICAgICByZXR1cm4g
anBlZ1VUSSgpOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgImltYWdlL2dpZiIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrVVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0
YXRpYyBib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAg
aWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRo
RGF0YShkYXRhLCB1dGksIDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3Bl
cnRpZXM7Ci0gICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1
YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUg
Y29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAg
ICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAg
ICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1
YWxpdHk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5Lmdl
dCgpOwotICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5n
IGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1h
Z2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRo
ZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAg
Q0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFn
ZVByb3BlcnRpZXMuZ2V0KCkpOwotICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFS
ZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFz
ZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRh
R2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50
OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFH
ZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZl
UmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBl
KTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9y
KGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+
IEltYWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkg
PSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7
Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQo
KSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNo
YW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4K
LSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKElu
dFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRp
cGxpZWREYXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90
IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGll
ZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVk
RGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92
aWRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZl
UmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgp
LCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRN
b2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53
aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFn
ZVNpemVJblVzZXJTcGFjZSA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUobG9naWNhbFNpemUoKSk7
Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhl
aWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAp
KTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHks
IGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdU
Rk1vdmUoY2ZEYXRhKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShj
b25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkg
PSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7
Ci0KLSAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFz
dDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAg
IFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0
aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBi
bGFjay4KLSAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2Uu
aGVpZ2h0KCk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFj
aXR5KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVs
dGlwbGllZERhdGEuZ3JvdyhzaXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0g
cHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAz
XTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZm
ZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBi
dWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwot
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAg
ICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsg
Ly8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGll
ZERhdGEuZGF0YSgpOwotICAgIH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
ZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRh
LCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRh
dGFQcm92aWRlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgs
IDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAg
aWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNm
RGF0YSk7Ci19Ci0KLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYg
KGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAg
cmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTos
Il9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAg
IGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAg
ICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAg
aWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLSAgICByZXR1cm4gbV9kYXRhLnRvQkdSQURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRlOTBlMTIxZTZiYzQxNTEzMThhMDY4YWJhZWM3Yjc4NTM3ZjczZDgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxh
dGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2Fs
ZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkp
IH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVz
c2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgaW50
ZXJuYWxTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5o
YXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVf
dCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVt
Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJl
dHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVw
Q29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgY29udGV4dC5zY2FsZShG
bG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNp
emUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29s
dXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50
ZXJuYWxTaXplKQoreworICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0
SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQo
KSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0
KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNp
emUuaGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPElt
YWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0lt
YWdlUmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8
IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAg
aW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJu
YWxTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVp
Z2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0Qmxl
bmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCks
IGxvZ2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9
IGxvZ2ljYWxTaXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFn
ZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJ
bWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3Zl
KGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9u
ID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2lu
dGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisK
K1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9n
aWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3Rv
cmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRp
dmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdl
KCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5
QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAgYXV0byB1dGkgPSBVVElGcm9tTUlNRVR5cGUo
bWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBw
cmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwga1VUVHlwZUpQ
RUcpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28g
d2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBw
cmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpLCBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQg
KiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOworICAgICAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCks
IGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwg
ZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMy
LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0g
ZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0g
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cisg
ICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2lj
YWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0Lmdl
dCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNh
bFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXpl
KCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0
byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVh
bGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0
b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJl
c2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWlt
ZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVz
dFJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJ
bnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVt
ID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkK
KyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7CisgICAgYXJlYSAqPSBz
cmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgYXJlYSAqPSBzcmNSZWN0U2NhbGVkLmhlaWdodCgp
OworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7
IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgc3JjUmVjdENsaXBwZWQg
PSBpbnRlcnNlY3Rpb24oYnVmZmVyUmVjdCwgc3JjUmVjdFNjYWxlZCk7CisgICAgZGVzdFJlY3Qg
PSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9OworCisgICAgaWYg
KHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WCgtc3JjUmVjdFNj
YWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkKKyAgICAgICAgZGVz
dFJlY3Quc2V0WSgtc3JjUmVjdFNjYWxlZC55KCkpOworCisgICAgaWYgKGRlc3RSZWN0LnNpemUo
KSAhPSBzcmNSZWN0U2NhbGVkLnNpemUoKSkKKyAgICAgICAgYXJyYXktPnplcm9GaWxsKCk7Cisg
ICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
YWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNS
ZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBzcmNTaXplOwor
ICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVT
eXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAh
PSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
ICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICB9CisK
KyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IEludFBvaW50Ojp6ZXJvKCksIHNy
Y1NpemVTY2FsZWQgfSwgc3JjUmVjdFNjYWxlZCk7CisgICAgCisgICAgZGVzdFJlY3QgPSBzcmNS
ZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsKKyAgICAKKyAgICBp
ZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0
LngoKSAtIHNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLnkoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdFNjYWxlZC55
KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBtX2lu
dGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVyc2VjdChidWZmZXJSZWN0KTsKKworICAg
IHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0
ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQ
aXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNo
YW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Cisg
ICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4
ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQs
IGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JG
b3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQ
aXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVs
WzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0g
KiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4g
UkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7Cisg
ICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQ
aXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10g
PSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKGFscGhhID09IDI1
NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZv
cm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9y
bWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdC
QS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1Owor
ICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAg
ICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFn
ZVBpeGVsc1Nsb3coCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50
OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0
LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywg
dWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc3RkOjpmdW5j
dGlvbjx2b2lkKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4
X3QqKT4gY29weUZ1bmN0b3I7CisgICAgCisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RB
bHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGNvcHlGdW5jdG9yID0g
Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgfSBlbHNlIGlmIChkZXN0QWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAg
ICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQ7Cisg
ICAgZWxzZQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQ7CisgICAgICAgIAorICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgo
KSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAg
ICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JG
b3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKKyNpZiBV
U0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVm
ZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIAorICAgIHZJbWFn
ZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLmhlaWdo
dCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENv
dW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9IGJ5dGVzUGVy
Um93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1cm4gdkltYWdlQnVm
ZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQo
CisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQg
c3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB2SW1h
Z2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFG
b3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1h
dCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBC
R1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwg
MyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3Qs
IG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdC
QSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZk
ZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVu
cHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpS
R0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZk
ZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAg
IH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAg
ICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1
aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hh
bm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RD
b2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFs
cGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNTbG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBk
ZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJv
dywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1
ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBp
eGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0
QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZWxzZQordm9pZCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNp
Z25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9y
Rm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29s
b3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZmZDgwYWY4M2E2MDhlNTIwZjA2NWE3MzQ5OGNlODJjNTZiY2Y1
NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
Q0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJh
Y2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
OworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGJh
c2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwg
MCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOyB9CisKKyAgICBTdHJpbmcgdG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250ZXh0KEdyYXBoaWNz
Q29udGV4dCYpOworCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Q7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0
ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1Jl
Y3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Cisg
ICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRS
ZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QsIENvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZv
cm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NjBkYTdlZTIyZTg1ZjI3ZjNlZWQxOTlmMDZlYjY4ZjY3MGI0MDEzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQg
QVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KKyNkZWZpbmUgVVNFX0FS
R0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaWYgVVNFX0FSR0IzMgorY29uc3RleHByIGNv
bnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Citjb25zdGV4cHIgY29uc3Qg
Q29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQ6OkJHUkE7CisjZWxz
ZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKK2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBC
YWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdDo6UkdCQTsKKyNlbmRpZgorCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50
U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0g
NCAqIGludGVybmFsU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGludGVy
bmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZhbHVlKGRhdGEpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KGRhdGEpICYgMykpOworCisgICAgc2l6ZV90IG51bUJ5dGVzID0gaW50ZXJuYWxTaXplLmhlaWdo
dCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRh
LCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0
KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIERlZmF1
bHRCaXRtYXBJbmZvKSk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNn
Q29udGV4dC5nZXQoKSk7CisKKyAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAo
dm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgeworICAgICAgICBmYXN0RnJlZShjb25z
dF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgfTsKKworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIG51bUJ5dGVzLCBy
ZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoc2l6ZSwg
aW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1vdmUo
ZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW50U2l6ZSYsIGZsb2F0LCBDb2xvclNwYWNl
LCBNYWNoU2VuZFJpZ2h0KQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRy
PENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNh
bFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwg
bV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikp
CisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRh
KTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQpOwor
ICAgIHNldHVwQ29udGV4dCh0aGlzLT5jb250ZXh0KCkpOworfQorCitNYWNoU2VuZFJpZ2h0IElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQoKSBjb25zdAoreworICAg
IHJldHVybiBNYWNoU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250
ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAg
IGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4
dCgpKSk7CisgICAgCisgICAgQVNTRVJUKGNvcHlCZWhhdmlvciA9PSBEb250Q29weUJhY2tpbmdT
dG9yZSk7CisgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2xvZ2ljYWxTaXplLndp
ZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLCBjYWNo
ZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8sIG1fZGF0YVBy
b3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5h
cmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2lj
YWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVy
Um93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVy
Um93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCks
IG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVj
dCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkg
PSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
ID0gNCAqIHNyY1JlY3Qud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5k
YXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0
OworICAgIAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAg
ICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhKSAr
IHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgp
ICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywg
c3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJh
eTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKQoreworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVj
dDsKKyAgICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAg
CisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50
OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBkZXN0
UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZS53aWR0aCgpOworICAgIHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1Bl
clJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisg
ICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJh
Y2tlbmRDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6
ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjUzMTJmZDVhNDY2YzI2
OTM0ZGFmODhjZjg5YjAwNDQyZDUwODZiNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckNHQmFja2VuZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgTWFj
aFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRp
bmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmLCBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworICAgIHVuc2lnbmVkIGJ5dGVz
UGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLndpZHRoKCk7IH0KKwor
ICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0
YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
RGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4MTE5NGYxZmFj
NWViMzc2NTk0ZTRmMjkyZjFkYjFiMDVhZjExMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTcgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5j
bHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVk
ZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFj
ZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJH
QjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0Iz
MiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0Uo
QUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1h
Z2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJU
KHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9F
cnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEg
YW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdl
RGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAs
IDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBt
YXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJE
YXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkK
LXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAg
aWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3Jj
LCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2Fw
IGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJl
IEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0g
PSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRl
c3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lk
KiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykK
LXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChv
dXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7
Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVz
UGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAg
IGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0g
ICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTSho
ZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3
aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQg
KiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAg
ICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQg
KiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFj
ZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgp
LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRl
c1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVm
ZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBh
cmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVp
Z2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVu
aW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9
IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0
Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAgIGlmIChy
ZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndp
ZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3Vs
dC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGlu
dCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAg
IGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAgICBk
ZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcg
PSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54
KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5k
eCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lu
eDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lu
eSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3Jp
Z2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48
aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlm
IChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUu
aGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAg
IAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8
PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRl
c1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1
bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgCi0gICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAgICAKLSAg
ICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVy
Um93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQot
I2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2Vf
QnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBz
cmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBk
ZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9
IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FS
R0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNl
bHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKCh3
aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgr
KykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAg
ICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJH
QjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdl
IHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgICAgICBpZiAoYWxw
aGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNl
eF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCAr
IDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jv
d3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgICAg
ICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3Mg
KyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
c3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBk
ZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0jaWYg
VVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNl
eCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCi0g
ICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyAr
IHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKLSNl
bmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICAgICAg
c3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBzcmNSb3dz
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgb3Jp
Z2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFU
RSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRo
LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwot
ICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEg
PSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53
aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVu
c2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHVu
cHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAgICAgICAg
ICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2
SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5v
RmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAob3V0cHV0Rm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykg
ewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAg
ICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIHVp
bnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNy
Y1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogMjU1
KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4Kysp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAg
ICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSNpZiBBU1NFUlRfRElT
QUJMRUQKLSAgICBVTlVTRURfUEFSQU0oc2l6ZSk7Ci0jZW5kaWYKLQotICAgIEFTU0VSVChzb3Vy
Y2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDAp
OwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAg
Q2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJj
ZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNT
RVJUKGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lu
eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBz
b3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChl
bmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+
IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVu
ZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSAr
IHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0g
ICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJU
KG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0
KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBB
U1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8
aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0
aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0g
NCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291
cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5z
YWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRl
c3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBp
ZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93
ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0
eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7
Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRo
ID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0g
ICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0g
ZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2Fm
ZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAg
ICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAg
ICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0K
LSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWlu
dDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAg
ICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZl
cnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFj
ZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpS
ZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJv
dygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCku
dW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBz
cmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihz
cmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lk
dGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVt
dWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFn
ZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUw
ZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYg
c3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dE
YXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1h
cEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1
Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAg
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29s
b3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VC
dWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0
YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxl
cmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZh
Y2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0
OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Y29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xMjBlYzM3NDgxYzM2NjRjNWQwMzRiZDE2OGU1MzBiNWJlZWExMjFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIEhB
VkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRl
ICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAg
ICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaW50ZXJuYWxT
aXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBp
bnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUs
IGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAo
IXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29u
dGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RX
aW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOworICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQg
c2VuZFJpZ2h0KQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5k
UmlnaHQpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdl
QnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAg
IEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dChjb250ZXh0KCkpOworfQorCitJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJp
Z2h0IHNlbmRSaWdodCkKKyAgICA6IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIElPU3VyZmFj
ZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JT
cGFjZShtX2NvbG9yU3BhY2UpKSkKK3sKK30KKworTWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9z
dXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1c2goY29u
dGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+
dG90YWxCeXRlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJv
dygpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVybiBtX3N1
cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElPU3Vy
ZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lkIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0
UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdl
dCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdS
QURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNh
bFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0g
bV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBi
eXRlc1BlclJvdygpOworCisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsK
KyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5z
dXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBz
cmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1
bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1Jl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sK
KyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAg
YXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3QsIHNyY1JlY3RDbGlw
cGVkLCBkZXN0UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJy
YXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0
Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dz
ID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93
KCk7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90
KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RD
bGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVyUm93LCBz
cmNSb3dzLCBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3cs
IGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2
b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwg
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQorewor
ICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBj
YWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIHNy
Y1JlY3RDbGlwcGVkLCBkZXN0UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisKKyAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9ja2Vy
IGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0
ZSk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJv
dyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQg
KiBzcmNTaXplLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSAr
IHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgp
ICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJH
QkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
ZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFj
ZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5Lgor
ICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDRhMWQzMDY1
MjYwNjNmNTE2NTc2MjRhMTdiYTU4ZTA1NGMwZjA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0Up
CisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWNo
U2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSU9TdXJmYWNlOwor
CitjbGFzcyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBNYWNoU2VuZFJpZ2h0
IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0OworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKwor
ICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVy
bmFsTWVtb3J5Q29zdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1lbW9yeUNvc3QoKTsgfQorCisgICAg
TmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05h
dGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7ICAgIAorICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29y
ZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
cGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5p
cXVlX3B0cjxJT1N1cmZhY2U+JiYpOworICAgIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAg
ICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKaW5kZXggODlkMDQzOWMyMTBkYjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uNWM3YjMz
NmYxMDMyNDAwODI2MjBlYzhmYjcxOTY0NTg2MmQzNTg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgogCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgor
I2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQxLDQgKzQ2LDEwNiBAQCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAgICByZXR1cm4g
Kih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGlt
YWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxl
RGF0YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFn
ZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7CisgICAgaWYgKCFk
ZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENGRGlj
dGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChDRkVxdWFsKHV0aSwga1VUVHlw
ZUpQRUcpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkg
eworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBp
bWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5
cGUsICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3Rp
bmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVl
ID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29s
b3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZl
IHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNu
J3Qgc2VlbSB0byB3b3JrLgorICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1cm4gQ0dJ
bWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOworfQorCitzdGF0aWMg
UmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSku
Y3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUlu
Zm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIq
IGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11
bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBrVVRUeXBlSlBFRykp
IHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBo
YXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVf
dCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAgICAgICBp
ZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6
ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRh
dGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAgICBpZiAo
YWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSAr
IDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFb
aSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRh
dGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9
IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZGF0YUFs
cGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEg
Y2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9
CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lk
dGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgp
ICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0
aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0
YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11
dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1h
Z2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitTdHJpbmcg
ZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBW
ZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0
cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICByZXR1cm4g
ImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1N0cmlu
ZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0
YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0
YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitWZWN0b3I8
dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCitWZWN0b3I8dWlu
dDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRh
dGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9y
KGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuaAppbmRleCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFkNDE5NTUyLi5lYzVj
ZTQzZjRkMWI1NzI1NDc3YTIzYWE0ZmM4YjZlYmY3MGQ0MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oCkBAIC0yNyw2ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEltYWdlRGF0YTsKKwogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklz
QmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCitib29s
IGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVm
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisK
K1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7CitWZWN0b3I8dWludDhfdD4g
ZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpOworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDgwZjZiMTg3MjUyMjk2
OGVhN2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2MuLjI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZi
YzI1OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAppbmRl
eCAyNDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2NGM5YTA0ZmY5NjljZGIzLi40Y2MwZmEzZjc5NzI3
ZWI5ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMTAwLDEwICsxMDAsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21T
dXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlKENHSW1h
Z2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZUJ1ZmZl
cihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9F
WFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92
ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBkYWUxODdk
YTY1ZDIwYjI4MDZmMmJkMzllOGMzYjA2OTM5N2M0YmFiLi5hMThiMTRhNjY5NmNjNTAzMzMxODI3
NTA1ODU1NmM1YjNiMDk0NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJI
b3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1
ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcu
aCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRv
UG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNl
UG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1
ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkg
Km9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZv
cm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVC
eXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNhMTE0OWUzZjJhZTQ5
Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBt
X2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChz
aXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5z
aXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdD4gRGlzcGxh
eUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwog
CiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNWE1NjkxYmIxODA4MzQwNTQ1NTY0YTQwMWNhYmQ1OGVlMzc1MTIzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250ZXh0IHsKK3B1Ymxp
YzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplKQorICAg
ICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQp
IHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENv
bnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7
IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICB9KQorICAgIHsK
KyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBj
b25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgIH0KKyAgICBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29u
c3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlz
dDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlzdCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICB7Cisg
ICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisg
ICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlz
cGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAg
ICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIu
cmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rp
c3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNw
bGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApp
bmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1Li5hZjNhYWRlMmEz
MzJjYzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4YjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAg
LTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmlu
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9n
aWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRv
IHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdl
UmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1
bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7
CiAKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCk7CisgICAgcGl4ZWxBcnJheURpbWVuc2lvbnMuc2NhbGUocmVzdWx0SW1hZ2UtPnJl
c29sdXRpb25TY2FsZSgpKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNP
TE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcg
QEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXpl
KCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpwaXhlbEFycmF5LCBp
bWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1NjE4ZThmZGRkODRl
Y2IuLjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0N2Q0MDU4MDA0ZWE3MTcyZDggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJ
bWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCiAgICAgSW50UmVj
dCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0g
ICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3Jk
aW5hdGVTeXN0ZW0pOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJl
YSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKICAgICBpZiAoIXNyY1BpeGVsQXJy
YXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uo
c3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEu
c2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4
ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJl
YS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3Rv
cmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBzaGFkb3dB
cmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFj
a2luZ1N0b3JlKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hh
ZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1MjdhNTYyNzM1M2RmNDQ5
Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03MSw3
ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX3Nv
dXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRl
cmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmlu
Z01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAgZmxvYXQgbV9maWx0
ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3
OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi41YzhiM2I0ZGUwYWZhNzE0NThjZGNmNmM2YmMw
ZmZkMmNjYmQxNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNzksOSArMjc5LDkgQEAgSW1h
Z2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVj
dCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
OwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUo
KSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
ICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVz
dGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1
dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlv
blJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0
KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDQzLDcg
KzQ0Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4
Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRo
ZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
PSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpAQCAtNDY5LDcgKzQ2
OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENs
YW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhl
IGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAg
ICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jt
cy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ1ZWYyYTUyZTg3MzIyYjU5
MThmZTUyODYyZGJhOGJhNzZiZTEwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCkBA
IC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAg
IFVucHJlbXVsdGlwbGllZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDFjNjZhZDc5Y2U0MGMx
NDU1OGY2NjUyNTJiMjVlM2JiN2RlZDE2YmQuLjg5N2NlNDBkMDRjN2UwYWQxZWExOTJjYjkxMDYx
OWY4ZjkyMjI0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgSW1hZ2VC
dWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAg
aWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwog
Ci0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwg
VW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFt
X2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggOTEzYWQ2Zjk1MzJjZWQ3YzNkMGI5NDU0OWJh
ZDFiNWUxYzEyM2EyOS4uYmQ5NTZhM2VlNGJkODQ0YjAzMjI1YzNhODRjNjRkMzBkNmZkYjZjNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC02OTA1LDcgKzY5
MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkK
ICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJzLT5i
dWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVy
ZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigp
LCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2Vs
ZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRl
ck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3Bw
CmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4NjNjMWVkMmEuLjkzNWE2ZWU5
ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFjNjE1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0xODEsMTQgKzE4MSwxNCBAQCBzdGQ6OnVuaXF1ZV9w
dHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRo
cmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1hcmdp
blIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0ZXJTaGFwZUludGVydmFs
cz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsKICAgICAvLyBGSVhNRSAo
MTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
IAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGljc0NvbnRleHQmIGdyYXBo
aWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAgICAgIGlmIChpbWFnZSkK
ICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOworICAgICAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQ
b2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVs
QXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+
bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNo
IHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggMDhlNDky
ODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3N2I2M2M2ZmUyODMxMmFlMTFl
ZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3
IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBl
ck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1F
ICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxs
eSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3Rl
ZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNm
b3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CisgICAgICAg
IGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAgICAgICAgaWYgKCFjbGlwcGVy
TWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmlu
ZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0MzE2MWIuLjEyZTdmMTVkNjMy
ZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xOTEs
NyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBlZmZlY3RpdmVUcmFuc2Zv
cm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIGVmZmVjdGl2ZVRy
YW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7
CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygp
LmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRl
ZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygp
LmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIHNvdXJjZUdyYXBoaWMg
PSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3
aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OkxpbmVhclJHQiwgcmVu
ZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAg
IEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBA
IC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgICAgIGNv
bnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsK
ICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIucmVz
ZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwogCiAg
ICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFz
a2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0Y2ZjMDIyYjUxNjZhZDU4NDgu
LjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4MjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIu
Y3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5
UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAgIGNv
bnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAg
ICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJbnRlcnBvbGF0aW9uKCkg
PT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xvclNwYWNlOjpMaW5lYXJSR0Ig
OiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFn
ZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFr
aW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0g
ICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwg
VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwg
Y29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cAppbmRleCA3ZTg2MDc5OGY3MWY3NmI1NzZmYzZlMTkzNmZmMWJhNzI4ZDcxMTcwLi41ZGY4NjUy
NzU5NDU4YTVhZmJmNDk5ZDZmNTZiN2FjNTlmZTMzZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBAQCBOYXRpdmVJbWFnZVB0ciBT
VkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0
KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBDYWlybyBkb2VzIG5vdCB1c2Ug
dGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywgc28gaXQncyBPSyB0byBtYWtlIGFuIHVuY29u
ZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJh
dGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBp
ZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3QKaW5kZXggNzk5NGUzY2E3Nzc2MzI5ZDZmNzVkN2FhZjBjOTNmZDlhYTA1OWUxMC4uYzk2OGQz
NDc4YTYzZDVhZmFkNzQ3ZTljMmIzMTk5ZDNmYjcwNzQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFT
Q1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NSSVBUQ09S
RV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQ
Uk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29t
LmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3Nh
Z2VzLmluCkBAIC0xMDAsNiArMTAyLDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNo
ZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNj
cmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJS
VENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0
Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDBjZDIzZTAxYmJhY2QyZWM0YTBi
ZGMzYmRmZjJiZTBkN2I2MGIwMWIuLjcxZGE2NTNiN2ViNzNiNjJmMTAwNDNlNGFkNDJlMzcxYjk1
Yzk2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJl
Y2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVz
c2FnZXNSZXBsaWVzLmgKQEAgLTEzNSw2ICsxNDEsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2Vz
UgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2Jq
ZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lz
dHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGll
cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVT
Y3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVz
c2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy5tYWtlCmluZGV4IDlkM2UyYTkwYzdiNGQ5MGE0MjZjNzZhNGUwNWU2YjJmODFjYzBlOWUu
LjY0MWZhNjZkNzUxZGFhMTU0NmMxZjYxZTQzMDM5ZjQ3OTdlMDk0MzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQy
KS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdl
YktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAk
KFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNz
L0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dl
YlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0MikvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0MCwxMSArMTQyLDE0
IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFu
YWdlciBcCiAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5IFwKICAgICBQbHVnaW5Qcm94eSBcCisgICAg
UmVtb3RlSW1hZ2VCdWZmZXIgXAorCVJlbW90ZUltYWdlQnVmZmVyUHJveHkgXAogICAgIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
ciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkgXAogICAgIFJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyIFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisJUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAg
ICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAppbmRleCA1MmE5NWNlMGRlZDcwM2Q2MWQzNGE5ZDE3ZjBjOGI0MmU2NjRmZGRh
Li43OGIyMWI4OWRjOTRiN2EzY2MwMzU0YmExZDNlNjg1YzNjNmIzYTQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CkBAIC0xMjEsNiArMTIxLDE2IEBAIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlCiAgICAgcmV0dXJu
ICptX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogfQogCitib29sIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFw
KCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6
OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1h
cCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KTsKK30KKwogUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkmIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OnJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkKIHsKICAgICBpZiAoIW1f
cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpCkBAIC0xNDksNDQgKzE1OSwxNyBAQCBMaWJX
ZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bGliV2ViUlRDQ29k
ZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpCiB7Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1l
c3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpKSB7Ci0gICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKLSAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7Ci0gICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNl
aXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotI2VuZGlmCi0jaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJS
VEMpCi0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpM
aWJXZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIGxp
YldlYlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgorICAgIEFT
U0VSVCghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoKnRo
aXMsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29k
ZXI+JiByZXBseUVuY29kZXIpCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVh
c2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJl
cGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZiBFTkFCTEUoTUVESUFf
U1RSRUFNKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdl
czo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
Ci0gICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01l
c3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotI2VuZGlmCi0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIEFTU0VS
VChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCmluZGV4IGFjNzEyNWQ3MzhkODY4ODhlZWE4YjRhOTI1MTVmOWRlNGQxZjZiMDQuLjQ1ZTBi
NTFlM2M1NjYyNzQ0MTRhMTU0ZDBjZTg2N2ZlNjY2NmFmMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMjgsMTMg
KzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlv
bi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMu
aCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNs
dWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUHJv
Y2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8
d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJL
aXQgewogCkBAIC00NiwxOCArNDgsMjAgQEAgY2xhc3MgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFn
ZXI7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6IHB1YmxpYyBSZWZD
b3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6Q29ubmVjdGlvbjo6
Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M+IGNyZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIElQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAgIHZpcnR1YWwgfkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJl
Y2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZl
ck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nl
c3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRl
bnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAg
IHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lk
IGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlBy
b2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsg
fQogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlcigpOwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTc1LDE0ICs3OSwyMSBAQCBwcml2
YXRlOgogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwotICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZl
ck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKICAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFs
OwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JikgZmluYWw7CisgICAgdm9p
ZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZU5hbWUpIGZpbmFsOworCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7
CisKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOwogCiAgICAgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7CiAKICAgICBSZWY8
SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVByb2Nlc3M+IG1fZ3B1
UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1h
cDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVu
dGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcj4g
bV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk7
CkBAIC05Myw2ICsxMDQsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0Uo
TElCV0VCUlRDKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaWJXZWJSVENDb2RlY3NQcm94eT4gbV9s
aWJXZWJSVENDb2RlY3NQcm94eTsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4
IDNkNDBhNTcxMmUwMmQxNDlkMTRmOTJmNTZlNDQ1MzQ2YzAxMjIxZDguLjkzMmMwMTIyZGUwODFl
ZGU5YmI5ZWZiNTZmOWJjNTI1OWJhNGQ3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
CkBAIC0yMiw3ICsyMiw5IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2Vz
IC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgeworbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CisgICAgdm9pZCBDcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJL
aXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWYyN2M4ZmEzZTdiODUwZTEzN2JhZTMy
ZWRkYjhhNzE1ZTg0NmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVy
UHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICA6IG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKSkKKyAgICAsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVySWRlbnRp
ZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VC
dWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgp
KQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAo
KS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQo
KSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAg
ICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6OnJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKK3sKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShzZW5kUmlnaHQpKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2
b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dChjb25zdCBEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBm
bHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXIo
Zmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTE2YTE0M2U3N2IyMjJjMzU1
MThkM2Q1NjZmZjNhOWU1YTIxYmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxh
eUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkKKyAgICA6IHBy
aXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2Vp
dmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH5SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisg
ICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJy
aWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgTWFjaFNlbmRSaWdo
dCk7CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2
b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2lt
YWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODljNWQ1NGJjNDI2YTZmYTBkOGZj
YWZhODEyNjUyNTI0NDkzYmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5p
bgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjgxMDM3MWRlM2FlOTA2NDE3MTVlZDFjODkxNmMyNDQ1ZDdjZThh
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
I2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0UmVwbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNpY2FsSW1hZ2VCdWZm
ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRU
eXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNv
cmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlUGh5c2lj
YWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmll
ciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNp
Y2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
UHJveHk+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0ciwgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB9CisKKyAg
ICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
CisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkKKyAg
ICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJlbW90ZUNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2VuZC0+aW50ZXJu
YWxTaXplKCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2VuZC0+Y29sb3JT
cGFjZSgpLCBtX2JhY2tlbmQtPmNyZWF0ZVNlbmRSaWdodCgpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFk
aXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZVBoeXNpY2FsSW1hZ2VC
dWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOworICAgICAgICByZXBsYXllci5yZXBsYXko
KTsKKyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpOworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHku
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45NzAwNzRjNTI5N2NkM2U0OGQ1OTQxNzFmMmNmOTRhNzE4MTdkZjBjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRmb3JtSW1hZ2VCdWZm
ZXJCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEFjY2VsZXJhdGVkUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ZjliYjVkNmJiZWZjZWIxMzg4YmY3ODQ2ZmI0N2I5
NWQ4YmU0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAgKzEs
MTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+KG5ldyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorewor
ICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5t
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYgKGF1
dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNl
aXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAg
aWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgp
OworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VC
dWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pbWFn
ZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byog
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5n
ZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJldHVy
bjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAg
CisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVyYXRl
ZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdl
QnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUobG9naWNhbFNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZlck1hcC5hZGQoaW1h
Z2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Cit9CisKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICAvLyBDcmVhdGVTdXJmYWNl
IG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAg
aWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5
OTM4YmVlNTExZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHByaXZhdGUgSVBD
OjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7
CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7IH0KKwor
cHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6
TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRl
bnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKKworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4+OworICAgIElt
YWdlQnVmZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA2OTZkZTAzNDE3ZmJjZGJkNDM1MWJkMmY2MmRhM2IyMGU5NmRjY2UK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwz
MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkg
Tm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9h
dFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdl
YktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB2
b2lkIFJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcAppbmRleCAyY2ZlMzMwYWY2ODc5MTE0MjdjOTU4
OTUyMGUyOTEzYmNkYjY0Mjg2Li5iOGU4ZjZkNjY5NWJiMzVhYzhiY2NiMTBjMjM4NzA5ZWZlZjE4
NzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9t
ZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHAKQEAgLTU2LDEwICs1NiwxMiBA
QCBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUAogICAgICwgbV9sb2dJZGVudGlmaWVyKFdURjo6TG9n
Z2VySGVscGVyOjp1bmlxdWVMb2dJZGVudGlmaWVyKCkpCiAjZW5kaWYKIHsKKyAgICBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCAwLCAqdGhpcyk7CiB9CiAKIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5
Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKQogeworICAgIG1fZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIDApOwogfQogCiB2b2lkIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpjcmVh
dGVNZWRpYVBsYXllcihNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyIGlkLCBNZWRp
YVBsYXllckVudW1zOjpNZWRpYUVuZ2luZUlkZW50aWZpZXIgZW5naW5lSWRlbnRpZmllciwgUmVt
b3RlTWVkaWFQbGF5ZXJQcm94eUNvbmZpZ3VyYXRpb24mJiBwcm94eUNvbmZpZ3VyYXRpb24sIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoUmVtb3RlTWVkaWFQbGF5ZXJDb25maWd1cmF0aW9uJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eQppbmRleCA2OTA2MzEwNmNhYjU0MDIxYzQyODk2Y2RjYjc2M2E3NTZmNzhhZjg2Li5iYTI4MjY1
YzI2MWVmZjFkNTcyNGIxMDI3ZGRmNzkxZDkyYWJmMDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3
ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50
c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rp
c3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2
ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcK
IFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBA
QCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVy
biBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNlbmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcn
LAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbicsCisgICAgICAgICdX
ZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmll
cicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMSw2ICsyMTQsNyBAQCBkZWYgdHlwZXNfdGhhdF9j
YW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6
OlByb2Nlc3NJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAog
ICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2Vi
Q29yZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2Vy
dmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0yMTgsMTAgKzIyMiwxMyBAQCBkZWYgdHlwZXNf
dGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2Vy
dmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dT
ZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3Rh
dGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
JywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5
ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlh
UmVzb3VyY2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRGVjb2RlcklkZW50aWZp
ZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0
b3JhZ2VBcmVhSW1wbElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdlTmFtZXNw
YWNlSWRlbnRpZmllcicsCkBAIC03NTcsMTMgKzc2NCwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2Fn
ZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzeW5jX21l
c3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6CisgICAgaWYg
YXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9N
RVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJl
Y2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIu
aGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRy
aWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicp
CiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwg
bWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1
cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAgLTc3Miwx
MyArNzgyLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVzc2FnZXM6CisgICAg
aWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENI
X01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgICAg
ICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVj
ZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRS
SUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBp
ZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRS
SUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhp
cyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21lc3NhZ2Vf
c3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21lc3NhZ2Vz
XQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NB
R0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0
Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxuJykKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCAxZGUzMDQyYzA3OTE2
NWExZDI1YTZmNGI1OGQ2NjA5YTY1NjYwMmY4Li5hYTg5ZjY1YWJiNDY0Njg2OWM4MzBiOTVmZGY3
NTY0Y2MwZTI0M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcmd1
bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
Q29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQu
aD4KQEAgLTc4OSw2ICs3OTAsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxX
ZWJDb3JlOjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsKIAogbmFtZXNwYWNlIFdURiB7CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRz
PFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVz
PAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAor
ICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0LAorICAgIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGU6OlJlbW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdl
YkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAg
IFdlYkNvcmU6OkNvbG9yU3BhY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCBjYTUyNjAzZWQ1YjA3Y2MxYTEw
NzIxNzM2ZWQ0NmM2Nzg5NDEzMzEyLi4wYTgwMzNlNGU3MTAzNWUwMTkwOTMzZGE4ZWU0ZDVhMTdi
YWM0NTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI5LDYgKzI5LDggQEAgR1BVUHJvY2Vzcy9HUFVQcm9j
ZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmNwcAogLy9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UmVzb3VyY2UuY3BwCiAvL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZUxvYWRl
ci5jcHAKIC8vR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlci5jcHAK
K0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcAor
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAKIAogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MTIsNiArNTE0LDggQEAg
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCiAvL1dlYlByb2Nlc3MvR1BV
L21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKIC8vV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVt
b3RlTWVkaWFQbGF5ZXJNSU1FVHlwZUNhY2hlLmNwcCBAbm8tdW5pZnkKK1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCitXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL0dQ
VS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAogCiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDYwYjM5ZjM3
YzU3ODU1NjIxZjI5ZjY2Yjk2MTdkOWE3YjNkYTcwM2QuLjUwNDc0MGQ4MWZjODUwNjMzMmVhMDY5
Nzk3ODc3YTE3M2IwOTk1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTYzMSw5ICs2MzEs
MTMgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdD
b29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2VzCiBFZGl0YWJsZUltYWdlQ29udHJvbGxl
ck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVj
ZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVBy
b2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0Nv
ZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVy
LmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRj
aFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAxYjU4ODY4ZjUyZWNmNzEzMzJiOTRmOGQ0YjEyNGVhYjhmOWFlNzUz
Li5mNGI0ZjY5ZjdjOGFmNDE4MWZiZDBjMjhmNmNlMjcxYzVmZjNlOWNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5NTYsOCArMzk1
NiwyNiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hB
Y3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJl
UmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYy
MzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8q
IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNo
UG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk4MjNBRDJGRDYw
MEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFF
OUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAv
KiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2MDIz
QzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5
RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhF
ODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90
ZUltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjND
IC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIz
QyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTgyM0IzODQy
MTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1
QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUMyM0I0
QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRTIzQjU2Qzg0MDBG
NjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0
ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdL
V2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQy
RDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02Mzg1LDYgKzY0MDMsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEyRjIzOUIzQjBDMDA5NTk4
RTIgLyogbWVkaWEgKi8sCisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmlu
Z0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywK
IAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
ICovLAogCQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlv
bi5oICovLApAQCAtNjQwMSw2ICs2NDIwLDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5
MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJ
CQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMUYxRTk3MjNB
RDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOThFMjNCNjMz
Q0EwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8q
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQw
MDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCkBAIC03NzYxLDYgKzc3
ODEsMzggQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFOUEyM0FEMkZE
NjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAorCQkJCTcyMUYxRTk4
MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIx
RjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW4gKi8sCisJCQkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQzIzQjRDODIzMDBG
NjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MkQ1QzJF
RDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJ
CQkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIz
QyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIuaCAqLywKKwkJCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VC
dWZmZXJJZGVudGlmaWVyLmggKi8sCisJCQkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJl
bW90ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyog
UmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyog
UmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAw
MjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIz
QUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcy
RDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywK
KwkJCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
ICovLAorCQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8q
IENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmNwcAppbmRleCAxOGU5MzZkZTMyMzA3NzBmMjQzNjFiNmFiYWE4ZTE3ZTRkMmU1YWMwLi5l
YTE3NTRiZWRiMzhjNmI1NzJiNjdlNGNhZjdkYTcwZjYyNjVlZDJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAt
NjAsMjkgKzYwLDE4IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6
Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2Vp
dmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwg
SVBDOjpTdHJpbmdSZWZlcmVuY2UpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRj
aE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIpCiB7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCiB7Ci0gICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewotICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVt
ZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BV
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewotICAgICAgICBpZiAoYXV0byogY2FwdHVyZU1hbmFnZXIgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyPigpKQotICAg
ICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3Mo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKLSNp
ZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKLSAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7Ci0gICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJU
Q0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5o
CmluZGV4IDMxYzYxMDQ2NjlmMmYwMmZmYTQ0MGZlYjg4MDkyNmM3NGFlMjZhY2YuLjZkMWI4M2Rl
NTgzNmFmYWUyMWFmYzM0ZjU4YTIyZTVkNmQzMjNjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcg
QEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDYsNiArNDcsNyBAQCBw
dWJsaWM6CiAgICAgfkdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAg
SVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1f
bWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAKIHByaXZhdGU6CiAgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKQEAgLTUzLDEwICs1NSwxNSBAQCBwcml2
YXRlOgogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJ
UEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJl
Y2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwog
CisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICAvLyBUaGUg
Y29ubmVjdGlvbiBmcm9tIHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuCiAgICAg
UmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIElQQzo6TWVzc2FnZVJlY2Vp
dmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCBkMzZmOGEwOTVmNmE3N2JiYjZjYWM4ODNh
NjUxZTg0Y2U5ZDY0YjMwLi41N2ZlY2RlOWRmMjdjNzM5YTZjYmYwMjY5ODA2NTkyYjVlMjE3OWE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gewor
bWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gV2FudHNEaXNwYXRjaE1lc3NhZ2Ugewog
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWNkMzRhYTI3MjA0ZDBlYTQ0MzYwZTBjMDUwODdhNWJjZjJiNjBkYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
VHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciA9IE9iamVjdElkZW50
aWZpZXI8SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVy
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxNzg3MDQ4ZTU3YzU3NDdj
MWYyNDkyZDkwOWRjNDQxYzJhODU0OWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgK
QEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1h
Z2VCdWZmZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlcklkZW50aWZpZXIg
PSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVySWRlbnRpZmllclR5cGU+OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTUxYjRjZTgwZjdi
MWE2ZWNiYzgyYmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNw
cApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZm
ZXIuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9u
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJl
bW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIC8v
IFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1h
cCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCku
bWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisgICAgLy8g
Q3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitSZW1vdGVJbWFnZUJ1
ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNlbGYg
YXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3Nh
Z2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFw
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVt
b3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0
Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBj
b25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmRE
aXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRG
b3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jv
b2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQoreworICAgIFJl
ZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29u
bmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUlt
YWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAx
X3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJp
dmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQo
KQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50ID0gMzsKKyAg
ICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNCYWNrZW5kQ3Jl
YXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJC
YWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50
OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0U2V0Rmx1
c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRl
bnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7Cisg
ICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZsdXNoSWRlbnRpZmllcjsKK30KKwordm9p
ZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgbV9zZW50Rmx1c2hJ
ZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Rmx1c2hDb250ZXh0KGRpc3Bs
YXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7
CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiNTZlMzFkMGNhZjIwNmVlNTA2Yzk3OTY5MDViNzg0MGE0
OWI4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3Bs
YXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIKKyAgICA6IHByaXZhdGUgSVBD
OjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1
YmxpYzoKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXIoKTsKKworcHJvdGVjdGVkOgorICAgIFJlbW90
ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQoKTsKKyAgICBib29sIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKKworICAgIHZvaWQg
ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3Qg
eyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZp
ZXI7IH0KKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAg
IHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmln
aHQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0ID0gMDsK
KworICAgIHZvaWQgc2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
KTsgICAgICAgIAorICAgIHZvaWQgcmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworCisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyIHsgSW1hZ2VCdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
IH07CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVy
OworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZp
ZXI7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmODc3NTU3YzBhYThjOGE5MDUwNGExMzU4MGRhNTkxYWE1
YmZjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwz
MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlciBOb3RSZWZDb3Vu
dGVkIHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJDb3JlOjpGbG9hdFNp
emUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdo
dCBzZW5kUmlnaHQpCisgICAgdm9pZCBTZXRGbHVzaElkZW50aWZpZXIoV2ViS2l0OjpJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNzFlNWRkNWU3OThlOTQzMDZiNDcxNzIxOTcyM2EyNzI4MGRk
ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDgyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
ciA6IHB1YmxpYyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJl
bW90ZUltYWdlQnVmZmVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9
IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRl
SW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPihuZXcgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6
IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VC
dWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBBU1NFUlQoIW1fYmFja2VuZCk7CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tlbmRUeXBl
OjpjcmVhdGUobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdodCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQmFj
a2VuZENyZWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0K
KworICAgIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmICghbV9iYWNrZW5kKQorICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAg
ICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRl
eHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdl
QnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5
TGlzdC5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQo
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NGI5NTc3YTljODkwZTQwOGY4ZTkwNTRmNzI5N2E1
Nzc3ZmMwZTRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlUGxhdGZvcm1JbWFn
ZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQ+OwordXNpbmcgUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzdlMDY1NzhkODk3Yjg0YjkyMWFmNjAxYjMzZWI5MDZkZDQ2OTk5ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAv
LyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3Nh
Z2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAm
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisg
ICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVyYXRlZFBs
YXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAg
ICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTNkYTM5MTU4OGJkYWQwOTFkNjQ0MjIyMjUwMWY4YTQ0OTkzN2IxYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMg
V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5k
ZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+
UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgor
ICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgLy8gUmVuZGVyaW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjM4NjZiZjNiNWJhMmU0MWViNDc5N2I2NDhhYTM5ZmYxMzIzNDUyNGMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
clR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVu
dGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZT47CisKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcAppbmRleCA4ZTRjOTM3NWQ3YjhjYzEwZmZhMDA4MDNkNDgyMTczYmU1YTM1NThh
Li40ODFmYWFhYWNhZDIwZDI2MzllODVkMTY1NjNiZWIyODcyZTAwZGQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b24uaCIKICNpbmNsdWRlICJQYWdlQmFubmVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oIgogI2luY2x1ZGUgIlVzZXJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9v
c2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC04ODEsMTUgKzg4
MiwyMiBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xh
eWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVf
RElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJv
bWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBk
aXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRy
YXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJl
ZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYK
IAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3Jl
YXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
ICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAg
cmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOwogI2VuZGlmCit9CiAKIHZvaWQgV2Vi
Q2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5
ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGZkYTMzOGVjZmE2ODU1ZTFjMWQ2
MDg1MGU0NzFmNjc5NGVkMWMyY2QuLjRkZWRmZWU3ODQxMTY1ZTU3N2Q5NDAzMjM1NTFiNGY1M2Iy
ZDFkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMSw2ICsyMzEsOCBAQCBwcml2YXRlOgog
ICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlS
ZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAj
ZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisKICAgICBDb21wb3NpdGluZ1Ry
aWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAg
ewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29u
dGV4dE1lbnVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQppbmRleCBlZjAzNTAzNDJiYjgyMjQ2Y2QxOWYzNTRk
OWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEwNjliNTdmYmY2NTk0ODg3NTQxMjhjZThmYWIxZWNiYmY5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJD
b250ZXh0TWVudUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQpAQCAtMjAyLDcgKzIwMiw3IEBAIFJldGFp
blB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmlu
Z1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlz
IGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFuZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2Nl
bGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVj
dC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7
CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCA4ZjM2YzgzMGVkMjJjZGM5NjVmOWIxOGVhODMxMWJjMzRkMGZiOTdhLi5kNmY5
YTg4YWYyMTkwOGNiNDBmNzBlZTNiYmFlMDg1NWU5MDA2MGUyIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMjAtMDEtMDUgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTAxLTA1ICBaYWxhbiBCdWp0
YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1NMTF0gR2VuZXJhdGUgcnVucyBmb3Ig
cHJlc2VydmVkIG5ldyBsaW5lcwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNj
YTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIz
OTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
Y2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNh
dmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2
KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAo
c3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93
cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTAp
IHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386929</attachid>
            <date>2020-01-06 20:53:52 -0800</date>
            <delta_ts>2020-01-07 09:28:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200106205351.patch</filename>
            <type>text/plain</type>
            <size>362782</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRiNjM3NTZhN2U2MDlj
ZjBkZWE3MzgwMDE2MDg1YmRlMjcyODAzNS4uYmZjMTI3NjAxOTEyY2MyNTRhMjFkNjdhYTY1Njk1
ZWI2OGU3ZjFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wMS0wNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6aW50ZXJuYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVy
OjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxl
cmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVz
UGVyUm93IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAy
MDIwLTAxLTA2ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVp
bGQgKHVuaWZpZWQpIGZhaWx1cmUgYWZ0ZXIgYWRkaW5nIHNvdXJjZSBmaWxlcyB0byBzdXBwb3J0
IG1lZGlhIGluIEdQVSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhmYWIyN2IzOTQ1NGE3MDNmOTg4MDQ1
MjgyM2VjYTBlM2VhY2ZlMDUuLmYzNjUwNDkyNzQ4MjNiYzgxNWM5OGM2NDBlNGJkNDY4YjNkZjIz
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAKKzIwMjAtMDEtMDYgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFz
IHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNo
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRp
c3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJl
Y2VpdmVTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
UHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJl
bW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oLgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3Nh
Z2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL21l
ZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6On5S
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oOgor
ICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVzc2FnZVJlY2VpdmVyTWFw
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNo
SWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVV
cGRhdGVkQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpzZXRG
bHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVt
b3RlRmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW46IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3Nh
Z2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJv
bWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMjAtMDEtMDYgIFBl
bmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCAodW5pZmllZCkg
ZmFpbHVyZSBhZnRlciBhZGRpbmcgc291cmNlIGZpbGVzIHRvIHN1cHBvcnQgbWVkaWEgaW4gR1BV
IHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBlZGViZDU5ZGY5NTE3Zjhm
MDBlMTBjYjNkNGMxN2E4YjJlMGFkYzQ3Li4wZTkwNjU2NDEzZGFiNjYxMDRkYmFlNTA1MTQ3NzBm
ODcwNWIyNzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMjAtMDEtMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
Q29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6aW1h
Z2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtKToKKwogMjAyMC0wMS0wNiAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBBU1NFUlRfRElT
QUJMRUQgdG8gQVNTRVJUX0VOQUJMRUQsIGFuZCBmaXggc29tZSB0ZXN0cyBvZiBOREVCVUcgdGhh
dCBzaG91bGQgYWN0dWFsbHkgdGVzdCBmb3IgQVNTRVJUX0VOQUJMRUQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCA0NjYxOWM2NWQ2YjNjM2Q4MWZmNGMyZTUwMDUyMTZhYTQ5NjJlYzE0Li4wNTUxYzA1
NDkwOWNkODdjYmUwMzkxZDVjMGQyZTBjZTQ5YjRiZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTEwMjIsNiArMTAyMiw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdP
cHRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oCkBAIC0xMDcxLDcgKzEwNzIs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3Jl
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
T3JpZW50YXRpb24uaApAQCAtMTEwMywxMyArMTEwNCwxNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxh
eWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNrLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Jl
Z2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJ
dGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAppbmRleCA0NjQxZDU4MDhhNTI3ZWM2ZTMwZDFjZmI2
ZTgwYjIzMWRkNTZkNmIwLi43NDY1ZDBlNmE4NjY4NzM4ZjRlYmRjNTc0ZjkyNmM3NDg4ZTdhYTRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlw
Ym9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcApA
QCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6
Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlCiAKICAgICAgICAgYXV0
byBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgYml0bWFwSW1h
Z2UtPnNldERhdGEoV1RGTW92ZShidWZmZXJUb1Nhbml0aXplKSwgdHJ1ZSk7Ci0gICAgICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5zaXplKCks
IFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewogICAgICAgICAgICAgbV9kYXRhID0geyBu
dWxsU3RyaW5nKCkgfTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYWNh
ZTZmZTM4ZGRlMjZjMjhjZjVkNDQ5MTFmYzVhYzMwYjI1ODY3NC4uMWI1YjRmYTBhZTFiYTU3M2Yy
N2M2ZjM0NWRlYmY5MThjMmZmZjliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4NjcsNiArMTg2Nyw3
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JY29uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRnJhbWUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTE4
ODYsNiArMTg4Nyw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVj
dC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9TdHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBlNDUzZDg5
MDk3ZTY4NmIyYzMzNTJiYWQ2NmVlNzEyMzQ3YzE2NmI1Li40ZjAzZWMyM2Q4YzQwZmI5NmEyZTU3
NzAxZTM2NmFiMDE0Y2VjZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29j
b2EudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI4OCw4ICsy
ODgsOSBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5j
cHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZDRmYjBkMzY4MmJlY2I1ZDQyODBh
N2ZmZjI2YmNiNWRkYTA5NjI4NS4uNDQ1ZTdhMDA5NjBiODg2YzI5MzM1YjYyYjI5NGY5MDIwMjRi
ZTUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNjQ1LDggKzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdl
YkV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgy
NTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0
V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1
QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFn
ZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIx
M0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5
MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2
MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBE
MjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0ds
eXBoUmVmRWxlbWVudC5oICovOyB9OwpAQCAtMjEzMywxMCArMjEzMSwyMSBAQAogCQk3MjE0NDMz
MjIyM0VDODVGMDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
MTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8q
IFNWR1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIz
QjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIxRjFFQTcyM0FENTBBMTAwQkRBRkY3IC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5n
T3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzNUM5NjEyM0Mx
OTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQ
bGF0Zm9ybUltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MjM4MjZBODIzQzFGNThCMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5
IC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1h
eC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQz
MzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKIAkJNzI0RUU1
NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VP
YnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQjA5
OTAxMjNDMDkyM0MwMDczQjlDQiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkEwN0M0NTIzQkVFRDlGMDBB
RkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQ
aHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcy
QkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDkyM0FBQ0U4MjAw
QTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjEyM0FDMkNENzAwQTYxMjNDIC8qIElt
YWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJF
NDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyNjIzQUNCMDlC
MDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyRDVDMkU1MjNCMUE4NkQwMEY2N0Q0
MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkQ1QzJFMzIzQjFBNzREMDBGNjdENDMgLyogQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyRDVDMkVBMjNCNEMwRjgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkQ1QzJFNjIz
QjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAv
KiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29y
ZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VF
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3
OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oICovOyB9OwogCQk3NTc5M0VD
OTBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRUM3MEQwQ0U3MkQwMDdGQzBBQyAvKiBK
U01lc3NhZ2VFdmVudC5oICovOyB9OwpAQCAtNjU0MSw5ICs2NTUwLDYgQEAKIAkJMjI1QTE2QjMw
RDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2Ny
aXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdy
YXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0
MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0
QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC05NTk5LDggKzk2MDUsMTAgQEAKIAkJNzFFRkNFREUyMDJCMzlDNzAw
RDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1z
dXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gInRyYWNr
cy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEz
RjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMDI4MEQxMjNCQTkzN0IwMDZGNDc2NyAvKiBJbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0Fu
aW1hdGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJv
cGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAw
RjEyRkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9w
ZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZBNjIzQzFGMTQzMDA0
OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVE
MzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTk2MjEsNyArOTYyOSwyMSBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAw
NDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJF
QTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVB
NkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JH
Qi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYwMEFG
QTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUzRkUy
M0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA4
MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFn
ZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFMzIzQjFBNzREMDBGNjdENDMg
LyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmg7IHBhdGggPSB0cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8q
IFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyog
UmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1
NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFB
MkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkYxQUQ5
RjFBMzkwNEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xMjY4NSw3ICsxMjcwNyw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0Uw
RSAvKiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJD
Ry5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0
MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg0LDYgKzE2NzA1LDcgQEAKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8s
CiAJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJ
NzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAq
LywKIAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAg
Ki8sCiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAq
LywKIAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5j
cHAgKi8sCkBAIC0yNDg5MCw5ICsyNDkxMiwxMiBAQAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdG
MjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3
QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLywKIAkJCQlBODBENjcwNzBFOUU5REVC
MDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywKLQkJCQlC
MkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCi0JCQkJMjI5
MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKLQkJCQky
MkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKKwkJCQk3
MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovLAor
CQkJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICov
LAorCQkJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDYyM0FBQ0NCQTAw
QTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovLAogCQkJCUNENTg5NDkz
MjE4NzQwNjQwMDRGNDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlD
RDNFMjFEQjIxODMzRjUxMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oICovLAog
CQkJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCkBA
IC0yNDk2OSw2ICsyNDk5NCw3IEBACiAJCQkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9w
ZW5nbCAqLywKIAkJCQkzNzIxNDkzMzE4RjBCNkQ2MDAxNTZFREMgLyogb3BlbnR5cGUgKi8sCiAJ
CQkJNDlFOTExQjIwRUY4NkQyNzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMgKi8sCisJCQkJNzJENUMy
RTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQk0
OTA3MDdFNDEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2UuY3BwICovLAogCQkJ
CTQ5MDcwN0U1MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oICovLAogCQkJ
CUJFRjI5RUU5MTcxNUREMDkwMEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZS5oICovLApAQCAt
MjQ5ODgsNiArMjUwMTQsNyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0
b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hB
cnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlv
bnMuaCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVm
cmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNw
bGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyog
RGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1MDc5LDcgKzI1MTA2LDgg
QEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAq
LywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAog
CQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIy
QkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MjAy
ODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJ
Q0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0Qx
OUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYy
MUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MTM2LDYgKzI1MTY0
LDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkJFM0ZFMjNB
QUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MjMy
M0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2
MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlE
QjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkw
NzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1
MTQ1LDYgKzI1MTc1LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9u
LmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxl
LmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1w
bGUuaCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tl
bmQuaCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5o
ICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8s
CiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJ
MEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5ODYs
NiArMjkwMTksNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3
U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQg
LyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1
MDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkQ1QzJFNTIzQjFBODZEMDBGNjdENDMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZl
VGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMy
IC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0Iy
REIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjk2ODAsNiArMjk3MTQsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQw
MDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdF
NjMyMjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICov
LAorCQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVG
QkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMDI4OCw4ICszMDMyNCwxMCBAQAogCQkJCTdDNzkwM0IzMUY4
NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2
MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJE
OUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICov
LAorCQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBp
biBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMz
IC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFG
MUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4g
SGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIy
IC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKQEAgLTMxNzU4LDYgKzMxNzk2LDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNB
MDAxRDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVy
YXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQ
aHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0Qy
MDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxRDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5Q
aWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzc3LDYgKzMxODE2LDcgQEAKIAkJ
CQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4
cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4
IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVB
ODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
NUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1M
b2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTQsNiArMzE5OTQsOCBAQAogCQkJCUJDRUE0
ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291
cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3
RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjND
MUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZD
N0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRl
cmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMTgxNzUxNWUxY2M3MDkwYzdlNTlh
MGNiZDI1M2ZmNzI2MTc0NGM3My4uZjUwMWNhMjNhNzM5NWYxZTViMjFjODFiMDRkZGIwMTkzYjdh
MmYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
ID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZl
ci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndp
ZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNp
emUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVm
ZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
SW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkp
OwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6
YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVk
LCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVy
KSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxX
aWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2Fs
SGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1h
cDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVh
bikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQz
N2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3
ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAt
MTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2Uo
UmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zv
cm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBh
dXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJklt
YWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0
b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFz
LmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0
NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9t
UGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhl
aWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6
OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3Bp
ZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAg
SW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0
aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2Nv
cGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgp
LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVk
QnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0
YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAx
NDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAg
LTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2lu
Y2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFT
dHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAg
ICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRv
Y3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUg
YSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBD
YW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4
LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShj
b25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRV
c2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAg
ICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcp
Ci0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1
c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAg
aWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
Ci0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFj
a3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NE
aXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4
dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQor
ICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChm
bGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1l
bnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFn
cykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRl
eHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBp
ZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdz
KTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQg
SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdp
ZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6
IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3
KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9v
dCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBu
ZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1
c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3Io
ZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAg
CisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBj
YW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAg
ICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01v
ZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2Ug
aWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91
bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9y
U3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkt
PnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwor
CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgp
KSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBh
Y2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40
MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxh
eUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNl
IH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250
ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2Jl
MGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjky
YjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1h
Z2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZl
clJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZl
clJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0
aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0
YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNy
ZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNj
cmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAK
aW5kZXggMDkxYTM2OTkyYTljMzVmMTMwZjg1ZGNjODE4Zjk1OTdlMjcyZGVjZi4uNGVhYTU4ZGIx
YjA1MzFjM2I3N2M4ZjhhYjk5NGM5OGU4MTFkMDFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJ
bWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAg
ICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAog
ICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJu
IHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6
OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdl
QnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQg
T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0
aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNh
bnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkg
Y29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCks
IFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9p
ZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlk
OGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4
ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYs
NyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRp
bmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxl
cmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShi
dWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZl
ciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0x
OTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4g
UmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdl
OjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5D
bGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRl
eHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRl
eHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAg
ICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5n
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlM
aXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29u
dGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0
LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4
dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERp
c3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQot
CiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXpl
U2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdl
RGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8K
IAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBz
aCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURh
dGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBm
bG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFz
ZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQg
aW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRl
ZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRl
RW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJy
YXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxs
cHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VE
YXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAg
ICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2Uu
YXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1
ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQg
ZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAg
cHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwg
ZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1
dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5
WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VC
dWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdl
RGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwg
ZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGly
dHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9
IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIz
MCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0
YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBk
ZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUo
ZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
Y29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0g
PyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAg
CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5
c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgp
IDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAt
MjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJ
bWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0
LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwog
CiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRl
QXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50
UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRh
LmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0
LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3
KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwg
c2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4
ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIx
NDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1Ymxp
YzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90
cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6
OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQo
RGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9
IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2Vs
ZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0
IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAg
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6
OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNo
KSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6
Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwg
ZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQg
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9h
dCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0
IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3
NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5k
ZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJl
bmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2Fu
dmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAt
NjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6
aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUg
PT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHAKaW5kZXggMGMyZmM4NGJmYzA2YmRmNGQ4ZGMzNmM3NWQ5Yjk5YjZkYmZkMjNl
NS4uNjlkMzQxMTFlYmE1N2Y0MTQ4ZWFjOGU2YmI1MDcwZDcxNGMzNDQ4OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAg
ICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5
SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAg
ICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBm
b3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJ
bWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAg
cmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
CiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0
LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0
eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJ
bWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4g
aW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3Rv
cmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9y
bWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6Vmlk
ZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcg
KzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICAgICAgJiYgdHlwZSA9
PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0
ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQs
IGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3Jt
YXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRh
cmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+
Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4
LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICB9CiAKICAgICAg
ICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAg
ICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0
KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBt
X3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3
ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgICAgIGF1dG8gdGV4
dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBs
ZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0
KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAg
IEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAg
IGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5n
ZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+
b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5w
YWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhl
aWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAog
ICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1
ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwog
ICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAg
UmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVm
ZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50
KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwg
c2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3Jj
UmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUlt
YWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0NCw3ICs2MzQ0LDcgQEAgSW1hZ2VC
dWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6Omlt
YWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxk
IHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRl
bXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJU
KG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVj
ZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNh
YzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29u
dHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0
aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+
c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90
IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUo
KSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5z
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7
CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4u
NjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVu
VW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50
LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwog
fQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBj
b25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmlu
Z0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJu
IG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21l
OjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2
OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
aApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMo
Ym9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdC
YWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlv
bigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29u
c3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3Vw
cHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJm
MDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0
ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQz
LDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJs
ZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAg
LTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJl
c2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQp
IGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0
IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhp
Y3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRh
Y2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0
YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTli
MjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNo
b3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAg
ICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFj
dG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShp
bWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdl
UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsK
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5j
b250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRj
NjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRh
NTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3Bw
CkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChK
U0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAg
ICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAg
ICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50
UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAg
ICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0
LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEt
PmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRh
dGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9w
dCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4
MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIx
N2NhZWNlMGNlMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2lu
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQg
KzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAot
I2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5n
QmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVy
aW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVB
bmltYXRpb24oKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJ
RCgpIGNvbnN0ID0gMDsKQEAgLTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGFhYjQ2ODY3NjhmMWEyODJkNTg4MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4K
K2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgOiBwdWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAg
ICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+OworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisg
ICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNy
ZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBjb25zdCBG
bG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92
ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNp
emUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplKQorICAgICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXpl
KQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdp
bmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZs
dXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmlu
ZGV4IGY1ODZkZDRiMmFmOTFmNDU2NTUzNWE3MDI5MzkyM2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEy
ZmY4NGMwZTY2NDJmODE4MjcwOTljZTgzN2UyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQo
Ym9vbCk7CiAjZW5kaWYKICAgICBib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0g
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVy
YXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsgfQorICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4
NzlkYmQ0OTY5NjRiNDkxYjE4Li4wMGJlMGZlYTA2MDU1Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4
NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24u
aCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0
MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFiNzZmMTIuLjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1
NTQzOTdmN2Y3MWM3OGFhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKICNpbmNs
dWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIs
MTcgKzEyMyw2IEBAIGVudW0gVGV4dEFsaWduIHsKICAgICBSaWdodFRleHRBbGlnbgogfTsKIAot
ZW51bSBSZW5kZXJpbmdNb2RlIHsKLSAgICBVbmFjY2VsZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0
ZWROb25QbGF0Zm9ybUJ1ZmZlciwgLy8gVXNlIHBsYWluIG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhl
ciB0aGFuIHBsYXRmb3JtIEFQSSB0byBhbGxvY2F0ZSBiYWNraW5nIHN0b3JlLgotICAgIEFjY2Vs
ZXJhdGVkCi19OwotCi1lbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gewotICAgIFBy
ZW11bHRpcGxpZWQsCi0gICAgVW5wcmVtdWx0aXBsaWVkCi19OwotCiBTdHJpbmcgY29tcG9zaXRl
T3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1v
ZGUpOwogU3RyaW5nIGJsZW5kTW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFy
c2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMs
NyArMTMzLDYgQEAgV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
TGluZUNhcCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCAxYTBmODE2ZmRhODAzMDI3OTZhYTNhM2U1
OWI2ZGY5MTk5NWQwM2M3Li40ZTJiZTcxYzc0MWM1NWY1NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
Ni0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzggKzI4LDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owotc3RhdGljIGNv
bnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRM
ZW5ndGg7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5k
ZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmlu
Z01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJl
dHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRl
eHQpOworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisg
ICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9y
U3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24g
dGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShz
Y2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi0jaWYgVVNF
KERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0g
ICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwot
ICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1
ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBm
bG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFt
cGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCiBib29sIElt
YWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBA
IC0xMDUsOTcgKzExMSwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24o
KSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0Uo
Q0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAg
cmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkp
Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNp
emUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3Bh
Y2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNw
YWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBh
cmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikK
LSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRz
dENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBz
dGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsK
LSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZs
b2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xp
bmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xv
clNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1
NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50
KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
YXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUg
dm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAg
IEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAg
YXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJl
Y3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAg
ICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5
TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4
ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVs
T2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4
ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIx
MjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAg
ICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0g
ICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQ
b2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygp
Ci17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3Jt
Q29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1i
b29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wp
CitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0
cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1
dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXpl
KHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0CiAKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUocmVjdC5zaXplKCksIGNvbnRleHQpOwogCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0
aW9uKCkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZm
ZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0
KTsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4
dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAg
ICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3Mg
Y29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBj
cmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRl
eHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlm
Ci19Ci0KLUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8v
IEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNj
YWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUg
cGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4
dC5zY2FsZUZhY3RvcigpKTsKKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwog
fQogCi1ib29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6
c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyKQogewotICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0
b3IoKSwgdGhpcy0+Y29udGV4dCgpLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1
ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25z
dAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJy
ZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3
aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNj
ZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFz
aW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6
ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShwcmVz
ZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5
Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBp
bWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CiB9Ci0jZW5kaWYKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggNTMzM2NmNGVj
MjI4ZjlkYjM3M2YyNThlNmI5YzdiOWVlNGZjOGFjMC4uMDM4MmI3NDA0MjQwZjViZjQ4MTZlZDhh
ZTVmNjY2ZmM1M2UyNmMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNywxNzAgKzI3LDgxIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5
cGVzM0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbWFnZVBh
aW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
LSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNz
IEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0
OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5
QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3Qg
dGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBt
YXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24g
ewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3Mg
RHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJm
YWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9j
YXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNv
bnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29u
c3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGlt
YWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9t
IHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIg
Y29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24gZm9y
IGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVm
ZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLSAgICBi
b29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0
dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBp
bnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXpl
JiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLQotICAgIEZs
b2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBm
bG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsg
fQotCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7
CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdl
QnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisg
ICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAg
c3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXpl
JiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNp
emUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYs
IEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAg
ICAvLyBHaXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250
Q29weUJhY2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUg
YmVoYXZpb3IKLSAgICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0
LiAgCi0gICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAg
ICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExv
Z2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07Cisg
ICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0OworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICB2b2lk
IHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lz
dGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pOworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIHsgfQogICAgIAotICAgIHZvaWQg
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJh
c2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXpl
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CiAKLSAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQp
IGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmly
dHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFs
IHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSNpZiBV
U0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRp
ZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0j
aWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNl
KENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAg
ICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29w
eVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90
IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50
YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5
IHdvcmsKLSAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwg
YW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNE
ZW51bSwgYm9vbCwgYm9vbCk7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0
aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsK
KyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2Vk
IHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRl
ciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmco
Y29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29u
c3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBj
bGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1w
ZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBG
bG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lk
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQot
ICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJu
YWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhl
IHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJE
MUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi0gICAg
c3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6
ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6
TG9naWNhbCkgPSAwOwogCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5k
IGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0
ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAg
IGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWlu
dEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50
U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVz
b2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBz
dWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRl
KCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBP
UlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vz
cyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBI
b3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9D
RkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCi19OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwg
Ym9vbCkgY29uc3QgPSAwOwogCi0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1h
Z2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7Cisg
ICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Cit9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3
ODVjOGU3OGM0MWMzMjY1NWYxMmMyNzIwMjAxYWVlMDhmMmFmMTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2Vu
ZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5r
SW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNp
bmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAg
ICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQorewor
ICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6
ZSk7CisgICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdCwgQ29vcmRpbmF0ZVN5c3Rl
bTo6TG9naWNhbCk7CisgICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgICAgICByZXR1cm47CisK
KyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7
CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxB
cnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICB1aW50OF90IGEgPSBzcmNQ
aXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVt
KHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShw
aXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVt
KHBpeGVsT2Zmc2V0ICsgMik7CisgICAgICAgIAorICAgICAgICBkb3VibGUgbHVtYSA9IChyICog
MC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsK
KyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAg
fQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKnNyY1BpeGVsQXJyYXksIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0
LCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jY2FlNDM1M2U5N2Q4N2JiMDUyOWE2
ZWM0MjdhN2E3NWM5OWUzZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JT
cGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgIk5hdGl2ZUlt
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAg
IENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFm
ZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRy
YXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1
dGlvbiB7CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6
IHVpbnQ4X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGlu
YXRlU3lzdGVtIDogdWludDhfdCB7CisgICAgTG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307
CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW1h
Z2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgp
IHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNh
bFNpemU7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50
ZXJuYWxTaXplOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJh
c2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZp
cnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNp
emUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1v
cnlDb3N0KCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5
TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUlt
YWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4g
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBD
b29yZGluYXRlU3lzdGVtKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYsIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQm
LCBDb29yZGluYXRlU3lzdGVtKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBi
b29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0Mz
RGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSkKKyAgICAgICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAg
ICAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFsU2l6ZSkKKyAgICAgICAgLCBtX3Jlc29sdXRp
b25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpCisgICAgeworICAgIH0KKworICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRT
aXplIG1faW50ZXJuYWxTaXplOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENv
bG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjg5ZWMwZDM2ZmVmYmQxMmFiZTU0M2MzZjIw
MzRmNjE1OGIzZDJjZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAor
KysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm8uaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkMTY3YTU3ZTA4NTNkNWUzZmMz
ODAyN2RkODY0NjgwMDdhMmFlN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwyMDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUGh5c2ljYWxJbWFnZUJ1ZmZl
ciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SW1hZ2VCdWZmZXJUeXBlID0gUGh5c2ljYWxJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1
bWVudHMpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxJbWFn
ZUJ1ZmZlciwgSW1hZ2VCdWZmZXJUeXBlPjo6dmFsdWUpOworICAgICAgICBhdXRvIGJhY2tlbmQg
PSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdyk7CisgICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4o
bmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1l
bnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUGh5c2ljYWxJ
bWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAg
ICAgOiBtX2JhY2tlbmQoV1RGTW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgUGh5
c2ljYWxJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUq
IGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAg
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgp
OworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3Jt
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2Vu
ZCgpLT5iYXNlVHJhbnNmb3JtKCkgOiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUg
bG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBl
bnN1cmVCYWNrZW5kKCktPmxvZ2ljYWxTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXpl
IGludGVybmFsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/
IGVuc3VyZUJhY2tlbmQoKS0+aW50ZXJuYWxTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9h
dCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5k
KCkgPyBlbnN1cmVCYWNrZW5kKCktPnJlc29sdXRpb25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6
ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkg
PyBlbnN1cmVCYWNrZW5kKCktPm1lbW9yeUNvc3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8g
ZW5zdXJlQmFja2VuZCgpLT5leHRlcm5hbE1lbW9yeUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQ
aHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1h
Z2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5n
U3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2lj
YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0
aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7
CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVy
bihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5hdGl2ZUltYWdl
UHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1
dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUlt
YWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
UmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50
b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJh
d0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7
CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5k
LT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7
CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1
c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVU
eXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9w
dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7
CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1
c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgp
OworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQs
IHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50
U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVT
eXN0ZW06OkxvZ2ljYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAg
ICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6
ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0Mz
RGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZSh0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5
QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9iYWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0MzIzNmQ1ZTk3ZmZlNjVlNjgxMTIwZmQ4
NWExNTFjMmNiNGYzZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaHlzaWNhbElt
YWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKyNl
bGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5o
IgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgi
CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNpbmcgUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNl
bGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pCit1c2luZyBQbGF0Zm9y
bUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOworI2VuZGlmCisK
KyNpZiBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNFKQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9y
bUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbHNl
Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1J
bWFnZUJ1ZmZlcjsKKyNlbmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2lj
YWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBBY2NlbGVy
YXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlzdElt
YWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9
IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZD47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRmMDA4NjE4NWNmMjI4NWJiZjI1NTgy
Zjk5NzIzOWY2ZTlkN2VlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5o
IgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1
bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVy
aW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6
c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2Vu
ZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9
OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVk
UmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRj
aCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1h
Z2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAg
ICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRl
ZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9z
dFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6
RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZDM5MjA0MDRjY2E1Y2I0YmMyMjMyNzc1YzY0OTAyOWI1
Y2M1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7Citj
bGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEludFNpemU7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JU
IFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2Vu
ZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwor
ICAgIAorICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIAorcHJvdGVjdGVkOgorICAgIFJlbmRlcmlu
Z0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNjMzk4OGZkNjQzZGE3
MDQ0MWU1MzM4YjE2YTExYjA1NDYzMTM4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaApAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSB7Cisg
ICAgQWNjZWxlcmF0ZWQsCisgICAgVW5hY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2Vs
ZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAorICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJl
bW90ZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3Njc4YzU2
YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjYxMmY5ZTlkMjJkNjcxZjY4ZDU2NWYxMjQ0OTRlYzMz
MmQ1Zjk0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNo
QnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hhZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2Vs
ZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAgICB9
CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lkIFNo
YWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVySW1h
Z2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxi
YWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVu
YWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNo
YWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXQKIAog
dm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0Um91bmRl
ZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVBy
b3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBh
dXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXll
ckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRv
IGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllcklt
YWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg1LDcgKzY4NSw3
IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0
Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVySW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBhdXRvIGxh
eWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2Nl
bGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1
dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTcz
OSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmco
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbgogI2lmIFVTRShDRykKICAgICBh
dXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1
ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAg
YXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBs
YXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZv
aWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwg
Y29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgYmx1
clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9IGxh
eWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJsdXJSZWN0KTsKKyAgICBhdXRvIGxh
eWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICghbGF5ZXJEYXRhKQogICAgICAg
ICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1clJl
Y3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRCeXRl
QXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCB7IH0pOworICAgIGxheWVySW1hZ2UucHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0
YSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1
ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRT
aXplJiB0ZW1wbGF0ZVNpemUpCkBAIC05MTIsNyArOTEyLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpk
cmF3U2hhZG93TGF5ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IElu
dFJlY3QKIAogICAgIGFkanVzdEJsdXJSYWRpdXModHJhbnNmb3JtKTsKIAotICAgIGF1dG8gbGF5
ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLT5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVy
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJv
cGVydGllcy0+bGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRl
eCA0OTZlY2EzMjRkM2U0ZGEyMmZjYTU5OTk4ZWI1ZWY1ZWU3M2QyMDlhLi43MjJlZWZmZTZjOWU1
ZmQyODY2YmUyNzI4N2E0NzAyMTAwY2JmYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01MDAs
NyArNTAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdl
QnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRp
b25TaXplID0gYnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNpemUoZGVzdFJlY3Quc2l6ZSgpKTsK
KyAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gZGVzdFJlY3Quc2l6ZSgpOwog
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0
Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1
NmYxOTY0ZDA5NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3NWIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURh
dGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNz
Lmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
PHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KLSNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgotI2Vu
ZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUg
IklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0j
ZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJH
QjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExPQ0FUT1Jf
V0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRPUl9XSVRI
X0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0YXRpYyBGbG9hdFNpemUgc2NhbGVT
aXplVG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQotewotICAg
IGZsb2F0IHhNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdTdG9yZVNp
emUud2lkdGgoKSkgLyBpbnRlcm5hbFNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB5TWFnbmlmaWNh
dGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAvIGlu
dGVybmFsU2l6ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxTaXplLndp
ZHRoKCkgKiB4TWFnbmlmaWNhdGlvbiwgbG9naWNhbFNpemUuaGVpZ2h0KCkgKiB5TWFnbmlmaWNh
dGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3Bh
Y2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNn
Q29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xv
clNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAg
ICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9T
dXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JT
cGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNl
KGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29s
b3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBz
UkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0g
SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5k
ZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2Fs
ZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCku
c2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAg
ICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRp
b25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1l
YW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2Fs
ZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1
dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1
dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShz
Y2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhl
aWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOwotICAg
IGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAg
ICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsK
LSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5i
eXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92
ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAg
aWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJ
T1N1cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4
U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0g
ICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJl
bmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5jb2xv
clNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29u
dGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0gc2l6
ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51
bnNhZmVHZXQoKSkpOwotICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRl
KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNl
KTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQg
PSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAg
ICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJl
Y3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxs
cHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7
Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRl
UmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBu
b24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2Vk
TWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVy
Um93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9k
YXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFw
SW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5i
eXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJ
bmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwg
Y29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxv
Yzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8v
IENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5
SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkp
OwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFz
ZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0
U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAg
IDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2Uo
aW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsK
LX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotRmxvYXRTaXpl
IEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBkZXN0aW5hdGlv
blNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGRlc3RpbmF0
aW9uU2l6ZSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSgpKTsKLX0KLQot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZm
ZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52
b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2Fy
ZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdz
IHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkg
cG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZh
Y2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3Ry
dWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBt
X2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3Qg
Y2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4g
bV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6
ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdl
QnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFsTWVt
b3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBh
bmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBh
bmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVz
ZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9m
IHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3Vy
ZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9p
bnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1
cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGlj
c0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRp
ZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZs
dXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBi
b3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0
YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJl
dHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1h
a2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4g
aW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJT
Y2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUgaW50
ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0
aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNy
b3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVs
c2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxv
Z2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5n
ZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsK
LSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2NhbGVTaXplVG9Vc2Vy
U3BhY2UobG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSk7Ci0gICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkp
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2Nh
bGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxz
ZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZN
b3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQot
UmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVy
bmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNh
bFNpemUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9k
YXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VC
dWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdl
QWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVm
ZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIHJlc29s
dXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotQmFja2luZ1N0b3JlQ29weSBJ
bWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpzaW5r
SW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIp
Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWlt
YWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIElPU3Vy
ZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZN
b3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWluUHRy
PENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
c3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9y
ZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4
LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwg
bV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdl
ID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBp
bWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZh
Y2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NF
UlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgZmxvYXQg
cmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotICAgIElu
dFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6c2lu
a0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
QnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdlQnVmZmVy
LT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5kaWYK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVz
dENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZl
ciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAg
aWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwg
bmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlm
IChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1l
bnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6
ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAg
ICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAg
ICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJh
eURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6
ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJl
Y3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNvdXJjZVNp
emU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0p
IHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0g
ICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIH0K
LQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlRm9ybWF0LCBzY2FsZWRTb3VyY2VT
aXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgLy8gRm9yY2UgcmVjcmVhdGlu
ZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBD
R0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlz
IGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotfQot
Ci1zdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYg
a1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJldHVybiBr
VVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZy
b21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8g
RklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9uPwotI2lm
IFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVh
dGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBp
cyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTogQWRkIFdp
bmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNv
bnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAgLy8gRm9y
IG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxl
bS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENG
U1RSKCJwdWJsaWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVH
SUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAgcmV0dXJu
IGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVU
eXBlLCAiaW1hZ2UvanBlZyIpKQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQotICAg
ICAgICByZXR1cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBrVVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdl
KENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8
ICFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uID0g
YWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDAp
KTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYgKENGRXF1
YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFs
aXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0
byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVzc2lvblF1
YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51
bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBr
Q0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGNvbnN0
IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAgICBpbWFnZVBy
b3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25C
YWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGll
cyB3b3VsZCBzYXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywg
YnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRk
SW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwot
ICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7
Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRF
bmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNl
NjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0
YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5hcHBl
bmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7Ci0g
ICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0g
dG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAg
IHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6
LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIGlm
IChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJl
dHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVU
eXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAg
ICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJN
SU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBs
aWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAg
ICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8g
bWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGll
ZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9n
aWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2lj
YWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNp
emUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6
ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVP
cmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0
KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlm
IChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5
QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAg
YXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNp
emUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUo
KS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0
KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgp
LmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNp
emVGb3JEZXN0aW5hdGlvblNpemUobG9naWNhbFNpemUoKSk7Ci0gICAgICAgIENHQ29udGV4dERy
YXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNw
YWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkp
OwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29u
dGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFD
cmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUlt
YWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQot
c3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewot
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJN
SU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdlQWxwaGFJ
bmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90PiBwcmVt
dWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkg
ewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhh
dmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgc2l6ZV90
IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAgICAgIGlm
ICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXpl
KTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0
YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewotICAg
ICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAgIGlmIChh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsg
MF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtp
ICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0
YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAgICAgIGJ1ZmZl
cltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0g
ZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRhQWxw
aGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBj
aGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgIH0K
LQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0
aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkg
KiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRl
KHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRh
QWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFn
ZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0cmluZyBk
YXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShz
b3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5n
ZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRh
dGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9y
KGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICByZXR1cm4gbV9k
YXRhLnRvQkdSQURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMTZiNmMwNTE1Mzk3
NzUwY2IzZTQ5MTViZmJhOWNiNzNjZjc2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwzODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgi
CisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSAiVVRJVXRpbGl0aWVzLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ludFNpemUgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBGbG9hdFNp
emUgc2NhbGVkU2l6ZSA9IHsgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKSwg
Y2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBpZiAoc2NhbGVk
U2l6ZS5pc0VtcHR5KCkgfHwgIXNjYWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbnRTaXpl
KHNjYWxlZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5
dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5h
bFNpemUud2lkdGgoKSk7CisgICAgaWYgKGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4g
bnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXpl
LmhlaWdodCgpKSAqIGJ5dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2Vk
KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIGludGVybmFsU2l6ZTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwor
ICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1tX2ludGVybmFsU2l6ZS5oZWlnaHQoKSk7CisgICAg
Y29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKwor
c3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2Fy
eShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCit7CisgICAg
aWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVf
dD4oaW50ZXJuYWxTaXplLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0
YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVy
biBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2Uo
MCwgMCwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKTsKKyAg
ICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9u
ID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3Bw
ZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2Ug
eworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgw
LCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2lj
YWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQo
KSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4
dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAg
ICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkp
KTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBpZiAobV9yZXNv
bHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0
aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7
CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoV1RGTW92ZShpbWFnZSksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29s
dXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5h
bFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lk
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1Jl
Y3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250
ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3Rv
cmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1f
aW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0g
c3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0
KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBp
bWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworUmV0YWlu
UHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAK
KyAgICBhdXRvIHV0aSA9IFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmco
KTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsK
KyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworCisgICAg
aWYgKENGRXF1YWwodXRpLmdldCgpLCBrVVRUeXBlSlBFRykpIHsKKyAgICAgICAgLy8gSlBFR3Mg
ZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBv
c2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50
UG9pbnQoKSwgbG9naWNhbFNpemUoKSksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAg
ICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAq
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICBhdXRv
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxs
cHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAg
ICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJ
bWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olllcykg
eworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAg
ICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwg
aW50ZXJuYWxTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAg
Q0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwor
ICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7CisgICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgp
KTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJ
bWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAo
YXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1
cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9
IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAg
ICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRh
OiwiX3M7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJl
Y3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7CisgICAgYXJlYSAqPSBzcmNS
ZWN0LndpZHRoKCk7CisgICAgYXJlYSAqPSBzcmNSZWN0LmhlaWdodCgpOworICAgIGlmIChhcmVh
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGFy
cmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNh
ZmVHZXQoKSk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6ZXJv
KCksIG1faW50ZXJuYWxTaXplIH07CisgICAgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24o
YnVmZmVyUmVjdCwgc3JjUmVjdCk7CisgICAgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCks
IHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9OworCisgICAgaWYgKHNyY1JlY3QueCgpIDwgMCkKKyAg
ICAgICAgZGVzdFJlY3Quc2V0WCgtc3JjUmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgp
IDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdC55KCkpOworCisgICAgaWYgKGRl
c3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKKyAgICAgICAgYXJyYXktPnplcm9GaWxs
KCk7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0
JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVj
dCBkYXRhUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjU2l6ZSB9OworICAgIHNyY1JlY3RD
bGlwcGVkID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBzcmNSZWN0KTsKKyAgICAKKyAgICBkZXN0
UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnQpOwor
ICAgIAorICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVz
dFJlY3QueCgpIC0gc3JjUmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAg
ICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSk7CisKKyAgICBJ
bnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07
CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJ1ZmZlclJlY3QpOworCisgICAgc3JjUmVjdENsaXBw
ZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQs
IGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVp
bnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9y
Rm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwp
WzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8
LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxb
MV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsKKyAgICBk
ZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQ
cmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQs
IGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVp
bnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107Cisg
ICAgaWYgKCFhbHBoYSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0
Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogMjU1
KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8g
YWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRl
c3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxb
MV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzJdID0gKHNy
Y1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4
X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoYWxwaGEgPT0gMjU1KSB7CisgICAgICAg
IGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhl
bCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAg
ICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAg
ICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Cisg
ICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
KyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQ
aXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4
ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVs
WzJdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsz
XSA9IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzU2xvdygK
KyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBz
cmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3Ms
CisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0
IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0
Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ29s
b3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPiBjb3B5RnVu
Y3RvcjsKKyAgICAKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7
CisgICAgICAgIEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgY29weUZ1bmN0b3IgPSBjb3B5UHJlbXVsdGlw
bGllZFRvUHJlbXVsdGlwbGllZDsKKyAgICB9IGVsc2UgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIGNvcHlGdW5j
dG9yID0gY29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZDsKKyAgICBlbHNlCisgICAg
ICAgIGNvcHlGdW5jdG9yID0gY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZDsKKyAg
ICAgICAgCisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKHNp
emVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVu
Y3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RS
b3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30KKworI2lmIFVTRShBQ0NFTEVSQVRF
KQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQg
Ynl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
dkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisgICAgCisgICAgdkltYWdlQnVmZmVyLmhlaWdo
dCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJ
bWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lk
dGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdklt
YWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRl
c3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAg
ICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAg
QVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkKTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEu
CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAg
IHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RBbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAg
ICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAg
ICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURh
dGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAg
ICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRh
X0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorCisgICAgaWYg
KHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICAvLyBTd2FwIHBp
eGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRd
ID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4
OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQgJiYg
c3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGNvcHlJbWFnZVBp
eGVsc1Nsb3coc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywg
c3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJv
dywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdl
X0J1ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBz
aXplKTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0
ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwg
ZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBo
YUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRl
c1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
Y29weUltYWdlUGl4ZWxzU2xvdyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjhmZTBlYTZhYTBhOTcxMjcxMjFlM2IzYTk0MjFlMTU5ZWY1YmQwOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEltYWdlQnVmZmVyQ0dCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJs
aWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50ZXJuYWxT
aXplKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBSZWZQ
dHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7IH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlk
ZTsKKworcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOworCisgICAgdm9pZCBzZXR1cENvbnRleHQoR3JhcGhpY3NDb250ZXh0Jik7CisK
KyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdDsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlR2V0SW1hZ2VEYXRh
QXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIElu
dFJlY3QmIGRlc3RSZWN0KSBjb25zdDsKKyAgICB2b2lkIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJl
Y3RzKGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBk
ZXN0UmVjdCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywK
KyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBk
ZXN0Um93cywgY29uc3QgSW50U2l6ZSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjRmMWZhNmFmYjgwMzE4MmIxMzlmN2ZiNGYzNTFjODY4NzMyZjYyODgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdC
MzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCisjZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKworI2lmIFVTRV9BUkdCMzIKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcElu
Zm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwg
a0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9ybWF0IEJh
Y2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpCR1JBOworI2Vsc2UKK2NvbnN0ZXhwciBj
b25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3Q7Citjb25zdGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9y
bWF0ID0gQ29sb3JGb3JtYXQ6OlJHQkE7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJu
YWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBpbnRlcm5h
bFNpemUud2lkdGgoKTsKKworICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbnRlcm5hbFNpemUuaGVp
Z2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRhKSAmIDMp
KTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIGJ5dGVz
UGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMp
OworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShk
YXRhLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCBieXRl
c1BlclJvdywgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5m
bykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0
KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25z
dCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lk
Kj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUltYWdl
RGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRl
ciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEludFNpemUmLCBmbG9hdCwgQ29sb3JTcGFjZSwgTWFjaFNlbmRS
aWdodCkKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92
aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRh
KQorICAgICwgbV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9j
b250ZXh0KFdURk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNT
RVJUKG1fZGF0YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENv
bnRleHQodGhpcy0+Y29udGV4dCgpKTsKK30KKworTWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Y3JlYXRlU2VuZFJpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWFj
aFNlbmRSaWdodCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwor
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNv
cHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJu
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpKSk7CisgICAgCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAg
cmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAgICAgICAgIG1faW50ZXJuYWxTaXpl
LndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwK
KyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0
bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1
aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAg
ICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAg
ICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhfdCog
c3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSk7CisKKyAgICBjb3B5
SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdS
QSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1Jl
Y3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNh
bCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAg
SW50UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJy
YXkoc3JjUmVjdFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFy
cmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAg
dWludDhfdCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRl
c1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRD
b2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1h
dCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0
LnNpemUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1Np
emUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVT
Y2FsZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7Cisg
ICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBt
X3Jlc29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJl
Y3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxl
ZCwgc3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOwor
ICAgIAorICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAg
dWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsg
ZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAg
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAg
ICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICog
c3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVz
UGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBCYWNrZW5kQ29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRl
c3RSZWN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkMjky
MzVmZjM1MDU1MmEyN2E2MjRkN2YxZjc1ZWNjMTRhZDdjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5k
IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
KTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7
CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRS
aWdodCk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5k
UmlnaHQoKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIAorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29y
ZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0
YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NDb250ZXh0PiYmKTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1
cm4gNCAqIG1faW50ZXJuYWxTaXplLndpZHRoKCk7IH0KKworICAgIHZvaWQqIG1fZGF0YTsKKyAg
ICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZk
ZDJlYWJhYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2Nl
bGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2gu
aD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8v
IENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBs
aW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZ
KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9B
UkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9p
ZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0
IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NF
UlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11
bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdS
QTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0g
ICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJt
dXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsK
LX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZm
ZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRh
dGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9
IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRv
IGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBl
Y3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAg
ICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIg
fHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUg
dm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFU
RSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdl
X0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhl
aWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRh
ID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdp
ZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0
aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVT
RURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JB
RGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0K
LSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJl
c3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndp
ZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZh
Y2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRk
cmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAg
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9
IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVz
dWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNh
ZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0
YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2Vk
PGludD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55
KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVH
ZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAK
LSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewot
ICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAg
ICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3
LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNh
ZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAg
ICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3Jp
Z2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRl
c3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVz
dGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lu
eSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQo
KSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4g
c2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNh
ZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0Lndp
ZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0
Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5k
ZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAg
ICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55
ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
ICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAg
ICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdo
dCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5
dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5w
cmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1h
Z2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRp
ZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAg
ICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBo
YSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAg
ICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9m
IEFSR0IzMgotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1
NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZh
Y2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJm
YWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93
ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAg
ICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMg
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdl
dCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBk
ZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0
Um93czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBj
aGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNf
QVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0j
ZWxzZQotICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAg
ICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3Jj
Um93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dz
W2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1
NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNy
Y1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNS
b3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3Jj
Um93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8g
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3Jt
YXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2Vk
PGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNT
RVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVz
dHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJl
Y3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5z
YWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGgg
PSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRl
c3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNl
UmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NF
UlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lu
eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBz
b3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChl
bmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhl
aWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5k
eSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291
cmNlU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0
YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQo
KTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7
Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0
YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCku
dW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAg
ICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0
KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAg
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51
bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBw
cmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1h
Z2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsK
LSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAg
ICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFs
cGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAg
ICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBB
UkdCMzIKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1ti
YXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2Nr
ZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0
ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0g
ICAgICAgIGRlc3RSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VB
ZGRyZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVH
ZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsK
LSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3Mp
OwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRl
c3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgp
OwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0
LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5
QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1
aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAg
ICAgICAgfQotI2Vsc2UKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZl
R2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNh
ZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAg
ICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAo
c291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAm
JiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0g
KHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAo
YiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjNTVhNTRhZDkxMTc5NTNjYTVlNjk2ZGEwN2U2ZTBkZjY4MTQz
ZDU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3Qg
Q0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92
aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFn
ZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMu
Ci0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlk
ZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJ
bWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNl
bmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAg
dm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJ
bnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhhNDE0NjBmNDg0MzQzODI4ZjNjMmU1NGU2ZGQwNmQ0ZDljZjg5MGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDRykgJiYgSEFWRShJT1NV
UkZBQ0UpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklPU3Vy
ZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQp
OworCitJbnRTaXplIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJu
YWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQorewor
ICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0
ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBtYXhTaXpl
ID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlmIChpbnRlcm5hbFNpemUud2lkdGgo
KSA+IG1heFNpemUud2lkdGgoKSB8fCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgPiBtYXhTaXplLmhl
aWdodCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGludGVybmFsU2l6ZTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUlu
dGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9
IElPU3VyZmFjZTo6Y3JlYXRlKGludGVybmFsU2l6ZSwgaW50ZXJuYWxTaXplLCBjYWNoZWRDR0Nv
bG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJm
YWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFjZ0NvbnRl
eHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNn
Q29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW50ZXJuYWxTaXpl
KSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdodCkpKTsKK30KKworSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNp
emUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9z
dXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAg
c2V0dXBDb250ZXh0KGNvbnRleHQoKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAgIDogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdU
Rk1vdmUoc2VuZFJpZ2h0KSwgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSkpKQorewor
fQorCitNYWNoU2VuZFJpZ2h0IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlU2Vu
ZFJpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVTZW5kUmlnaHQo
KTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNv
bnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29u
dGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250
ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkp
OworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3Vuc2ln
bmVkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAorewor
ICAgIHJldHVybiBtX3N1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKK30K
KworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05h
dGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKFdURk1v
dmUobV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpk
cmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNy
Y1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIGlmIChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJbWFnZSgpKQorICAgICAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0
UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkp
OworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0
OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICBJT1N1
cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKwor
ICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9y
bWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxl
ZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3Rl
bTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2Nh
bGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBw
ZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1h
Z2VEYXRhQXJyYXkoc3JjUmVjdFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRo
KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgp
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCptX3N1cmZhY2UpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAq
IHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFn
ZVBpeGVscyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1h
dDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIG91dHB1dEZvcm1hdCwgQ29sb3JGb3Jt
YXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisK
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW50U2l6ZSBzcmNTaXplU2NhbGVkID0gc3Jj
U2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29y
ZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9u
U2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Cisg
ICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0
OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNyY1NpemVTY2FsZWQsIHNyY1JlY3RT
Y2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKworICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgSU9TdXJmYWNlOjpMb2Nr
ZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdy
aXRlKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVy
Um93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0g
NCAqIHNyY1NpemUud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0YSgp
ICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54
KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6
UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dz
LCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJm
YWNlIGNhY2hlZCBpbWFnZS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3Nhcnku
CisgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgSEFWRShJT1NVUkZB
Q0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhOWJiMTc5
ZmIxOTRkYzZiNDcxZTkxYmIzMTFjNGNjNzJjN2EzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKSAmJiBIQVZFKElPU1VSRkFD
RSkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSU9TdXJmYWNlOworCitjbGFzcyBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCBNYWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Owor
CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIG92ZXJyaWRlIHsg
cmV0dXJuIG1lbW9yeUNvc3QoKTsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsK
KyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAg
CisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkg
Y29uc3Qgb3ZlcnJpZGU7ICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworICAg
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiBIQVZFKElPU1VS
RkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTBkYjUwMWFj
OTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uNWM3YjMzNmYxMDMyNDAwODI2MjBlYzhmYjcxOTY0NTg2
MmQzNTg1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDEyIEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IgogCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5o
PgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDQgKzQ2LDEwNiBAQCB1
aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBz
aXplX3QgYnVmZmVyU2l6ZSkKICAgICByZXR1cm4gKih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAor
Ym9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQoreworICAgIGlmICgh
aW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0
byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
ZGF0YSwgdXRpLCAxLCAwKSk7CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVz
OworICAgIGlmIChDRkVxdWFsKHV0aSwga1VUVHlwZUpQRUcpICYmIHF1YWxpdHkgJiYgKnF1YWxp
dHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0aGUgY29t
cHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAg
YXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9j
YXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICBj
b25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxp
dHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgp
OworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgw
LCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5
cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtD
R0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2Vz
IGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBj
YWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9w
ZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVz
dGluYXRpb24uZ2V0KCkpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRh
KGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0
aSA9IFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBBU1NF
UlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdl
QWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRh
KCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENG
RXF1YWwodXRpLmdldCgpLCBrVVRUeXBlSlBFRykpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3Qg
aGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBv
biB0b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgp
ICogc291cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJl
c2VydmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
ICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIq
IGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0g
ZGF0YVtpICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAg
ICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAg
ICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRh
W2kgKyAwXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07Cisg
ICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAg
fQorICAgICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25l
U2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHBy
ZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklz
QmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Cisg
ICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7Cisg
ICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhl
aWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdl
dCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBj
ZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
MCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0
eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
V1RGTW92ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAg
ICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRh
dGEpLCBiYXNlNjREYXRhKTsKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5
KSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJl
dHVybiAiZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFS
ZWYgY2ZEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5k
KENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAg
IHJldHVybiBkYXRhOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0
eSkpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7
IH07Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFiZDFmYjgz
YWIzMWExMTVjNjg5NTA0OTFkNDE5NTUyLi5lYzVjZTQzZjRkMWI1NzI1NDc3YTIzYWE0ZmM4YjZl
YmY3MGQ0MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCkBAIC0yNyw2ICsyNywxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKKwogV0VCQ09SRV9FWFBP
UlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENG
U3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVm
KTsKKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsK
K1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9y
KENGRGF0YVJlZik7CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwCmluZGV4IDgwZjZiMTg3MjUyMjk2OGVhN2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2Mu
LjI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BE
RkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAppbmRleCAyNDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2
NGM5YTA0ZmY5NjljZGIzLi40Y2MwZmEzZjc5NzI3ZWI5ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UuaApAQCAtMTAwLDEwICsxMDAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xv
clNwYWNlUmVmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlKENHSW1hZ2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
T1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+KTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9FWFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9T
dXJmYWNlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2
ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1t
CkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1
cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVu
LmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsx
MDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZh
Y2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVG
cm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikK
LXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQot
I2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2Uo
SW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRl
c1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUy
NmVkYjUwZDAyNWRlYWU1NDNhMTE0OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2Yy
NDM0NzZkNDUwODQyNDM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0K
IAotICAgIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAg
ICAgdm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1D
b3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBA
QCBPcHRpb25hbDxEaXNwbGF5TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNv
ZGVyKQogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0
IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwogCiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWYxY2UyNzM1NDUwYmRhYzNi
YmRmMTFhMzA4NWQ5YTdmM2M5ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIK
KyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisK
K2NsYXNzIERyYXdpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhp
Y3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5pcXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBo
aWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJh
bnNmb3JtKCkpOworICAgICAgICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4o
KnRoaXMpLm1fY29udGV4dDsgIH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJl
dHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0
KiByZXBsYXlEaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3Qu
Z2V0KCk7IH0KKworICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5
TGlzdC5yZXNldCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxh
eUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5
ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90
cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3Qg
PSByZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxh
eUxpc3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1f
Y29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAv
LyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1
MWM1ZDAzNDI1YTQ3ZmM1OTc1Li5hZjNhYWRlMmEzMzJjYzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4
YjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVD
b2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2Ut
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1
dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVj
dChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBw
aXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25z
KTsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAo
IXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVz
ID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CiAKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgcGl4ZWxBcnJheURp
bWVuc2lvbnMuc2NhbGUocmVzdWx0SW1hZ2UtPnJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgIHN3
aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAg
ICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJ
bWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7
CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsICpwaXhlbEFycmF5LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3Qp
OwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFh
ZWY1MzUzMjE0OTNjOWVhMmQ1NjE4ZThmZGRkODRlY2IuLjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0
N2Q0MDU4MDA0ZWE3MTcyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEwMCwxMyArMTAwLDEz
IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgLy8g
VE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5
aW5nIHRoZSBJbWFnZURhdGEuCiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVz
dWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwg
SW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gc3Jj
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2lu
Z1N0b3JlKTsKICAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFk
b3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVz
dWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBv
aW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBy
ZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsICpzcmNQaXhlbEFycmF5LCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50
UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKIAogICAgIHJlc3VsdENv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7
CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNv
bHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2
ZTc3MWM0MjQ5Njc4MTk1MjdhNTYyNzM1M2RmNDQ5Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJk
YWJkMjQ5MDA0YmYyYTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBt
X2ZpbHRlclJlc29sdXRpb247CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zv
cm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07
CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkIH07CiAgICAgZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZh
Li41YzhiM2I0ZGUwYWZhNzE0NThjZGNmNmM2YmMwZmZkMmNjYmQxNDMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1h
Z2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQo
KSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2lu
dCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0
aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwg
Y29uc3QKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8g
V2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlm
IChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKElu
dFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAg
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0
KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBp
ZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9IGVsc2UgewpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNv
bnN0CiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBX
ZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYg
KG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJ
bnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAg
ICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0
KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWQwYjcyMGQ5NmI3YWE0ODYxNjZmMDVmNmRhMjYxYTAxMjkwNWY3YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9y
bXMvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50
OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAgIFVucHJlbXVsdGlwbGllZAorfTsKKworV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwCmluZGV4IDFjNjZhZDc5Y2U0MGMxNDU1OGY2NjUyNTJiMjVlM2JiN2RlZDE2YmQu
Ljg5N2NlNDBkMDRjN2UwYWQxZWExOTJjYjkxMDYxOWY4ZjkyMjI0Y2MgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2Uu
Y3BwCkBAIC00NTgsNyArNDU4LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291
cmNlOjppbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAg
IHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5k
ZXggZDViOTFiMjY4NmFlMjYxZWI1M2MwNjg5YmVlYzYyZjU1ZTNmYjQ1OC4uOGY1MGU1NzU3MWQ3
YjM4NTAwZWVkN2JjZGE2YjNhNjQyYWJmNzk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCkBAIC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1
cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5
ZXJGaWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdl
KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVk
RmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9m
aWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3
YjNhNDQxOTNiZTI4NjNjMWVkMmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFj
NjE1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0x
ODEsMTQgKzE4MSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0
ZXJTaGFwZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFy
Z2luUmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0g
bWFrZVVuaXF1ZTxSYXN0ZXJTaGFwZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1h
cmdpblJlY3QueSgpKTsKICAgICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxk
IG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJl
Y3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewog
ICAgICAgICBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5j
b250ZXh0KCk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkp
KTsKIAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFn
ZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1h
Z2VSZWN0LnNpemUoKSkpOworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVs
QXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBw
aXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVk
IHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAKaW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVh
MmNhNzEzZS4uMWQ3N2I2M2M2ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VDbGlwcGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
CiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3Qu
aXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZl
ciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQg
bWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAg
ICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFj
Y2VsZXJhdGVkLCAmY29udGV4dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFu
c2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZj
b250ZXh0KTsKICAgICAgICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRi
ZDg3NDkyYTkzMmY0MzE2MWIuLjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhl
ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29u
c3QgUmVuZGUKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2Nh
bGUuaGVpZ2h0KCkpOwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRh
LT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQo
KSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQo
KSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZDsKICAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zv
cm0sIENvbG9yU3BhY2U6OkxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAg
aWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRh
dGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIEdyYXBoaWMKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRh
LnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0
ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJj
ZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMs
IHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFw
cGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRj
ZWY1YmRmOTkyNDc0Y2ZjMDIyYjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMw
YjU4MDRjNDU1Y2Q4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wg
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHls
ZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0g
c3ZnU3R5bGUuY29sb3JJbnRlcnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5l
YXJSR0IgPyBDb2xvclNwYWNlOjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAg
ICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNv
bmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJy
ZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFn
ZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBh
YnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwgY29udGV4dCk7Cisg
ICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFz
a2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCBiODIxNDExYWRlNzc1MDg1NjE2
ODg1NmVkMjJiNjJlYTZiNWNkM2Q5Li45Nzg2N2FhZDNjMjdiNWI1MzhkM2E3OWZiNDk1ZGRkNGYw
ZjQzZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIx
OCw3ICsyMTgsNyBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICAvLyBDYWlybyBkb2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxh
Zywgc28gaXQncyBPSyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1
ZmZlci4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFs
bG9jYXRlIGltYWdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApp
bmRleCBmZjUyZDI1MzZmNTY1ZmEyOTViZWI2MjAxMjY4YTBmMzMzMTcwZmYzLi4xOTFhYzg2MWNl
NGVjNzU1MmQ2OWIwNDkyZDkyZjczZGI2MDhjNzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTE3
LDYgKzE3LDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V2ViS2l0
X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAg
IiR7V0VCS0lUX0RJUn0vR1BVUHJvY2VzcyIKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAg
ICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJL
SVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIgpAQCAtNzgsNiArNzksNyBAQCBzZXQoV2Vi
S2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dh
bWVwYWQiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiIKICAgICAi
JHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dQVSIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3Mv
SWNvbkRhdGFiYXNlIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUiCiAgICAgIiR7V0VCS0lUX0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkiCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Qg
Yi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggNzk5
NGUzY2E3Nzc2MzI5ZDZmNzVkN2FhZjBjOTNmZDlhYTA1OWUxMC4uYzk2OGQzNDc4YTYzZDVhZmFk
NzQ3ZTljMmIzMTk5ZDNmYjcwNzQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BS
SVZBVEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hF
QURFUlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQ
cm9jZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktp
dC5HUFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0x
MDAsNiArMTAyLDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0
b3JhZ2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Rh
dGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENS
ZW1vdGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDBjZDIzZTAxYmJhY2QyZWM0YTBiZGMzYmRmZjJiZTBk
N2I2MGIwMWIuLjcxZGE2NTNiN2ViNzNiNjJmMTAwNDNlNGFkNDJlMzcxYjk1Yzk2MTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysr
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIw
LDYgKzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9QbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94
eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1BsdWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VC
dWZmZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1Jl
cGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVz
LmgKQEAgLTEzNSw2ICsxNDEsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNS
ZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmlu
ZGV4IDlkM2UyYTkwYzdiNGQ5MGE0MjZjNzZhNGUwNWU2YjJmODFjYzBlOWUuLjY0MWZhNjZkNzUx
ZGFhMTU0NmMxZjYxZTQzMDM5ZjQ3OTdlMDk0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
RGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1h
a2UKQEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNz
IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVBy
b2Nlc3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05l
dHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApA
QCAtNTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2Vv
bG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMg
XAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0MCwxMSArMTQyLDE0IEBAIE1FU1NBR0Vf
UkVDRUlWRVJTID0gXAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciBcCiAgICAg
UGx1Z2luUHJvY2Vzc1Byb3h5IFwKICAgICBQbHVnaW5Qcm94eSBcCisgICAgUmVtb3RlSW1hZ2VC
dWZmZXIgXAorCVJlbW90ZUltYWdlQnVmZmVyUHJveHkgXAogICAgIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyIFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisJUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3RlV2Vi
SW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApp
bmRleCA1MmE5NWNlMGRlZDcwM2Q2MWQzNGE5ZDE3ZjBjOGI0MmU2NjRmZGRhLi5lODVjYmVkZDAy
Zjc2ZGYxYTgxNzZlY2ZmMWI1MWUzN2NlMDk5YzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0xMjEsNiAr
MTIxLDQ2IEBAIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpyZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlCiAgICAgcmV0dXJuICptX3JlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyOwogfQogCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2RlcikKK3sKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKKyAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNl
aXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
ID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CisgICAgICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2
ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJv
eHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NP
QSkgJiYgVVNFKExJQldFQlJUQykKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKKyAgICAgICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZy
b21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCit7CisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CisgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlF
bmNvZGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2Vz
OjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
KyAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVz
c2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVj
ZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2Rlcik7Cit9CisKIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5JiBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpyZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpCiB7CiAgICAg
aWYgKCFtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KQpAQCAtMTQ5LDQ0ICsxODksMTcg
QEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmxpYldl
YlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQogewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewotICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
ID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7Ci0gICAgICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2
ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0j
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewotICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCku
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0Uo
TElCV0VCUlRDKQotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNz
YWdlczo6TGliV2ViUlRDQ29kZWNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAg
ICAgICBsaWJXZWJSVENDb2RlY3NQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nl
c3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYK
KyAgICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIHsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2
ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCkpIHsKLSAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxF
KE1FRElBX1NUUkVBTSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewotICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2
ZVN5bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAg
ICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaAppbmRleCBhYzcxMjVkNzM4ZDg2ODg4ZWVhOGI0YTkyNTE1ZjlkZTRkMWY2YjA0
Li40NWUwYjUxZTNjNTY2Mjc0NDE0YTE1NGQwY2U4NjdmZTY2NjZhZjA3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAg
LTI4LDEzICsyOCwxNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNS
ZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVk
ZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgi
CisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIApAQCAtNDYsMTggKzQ4LDIwIEBAIGNsYXNzIFJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyOwogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJs
aWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENh
bk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVy
LCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0
dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1l
c3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdl
UmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9n
cHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJv
Y2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9
CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAg
ICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50
aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03NSwxNCArNzksMjEg
QEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBk
aWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOwor
ICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNl
IG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAg
ICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNz
PiBtX2dwdVByb2Nlc3M7CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVj
ZWl2ZXJNYXA7CiAgICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9j
ZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5OwpAQCAtOTMsNiArMTA0LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkg
JiYgVVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJv
eHk+IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEy
MmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1t
ZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3Jl
YXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tl
bmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdjOGZhM2U3Yjg1MGUx
MzdiYWUzMmVkZGI4YTcxNWU4NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90
ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisg
ICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcykpCisgICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mg
PSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUlt
YWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2Vp
dmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRv
VUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkK
KyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
K30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlM
aXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVu
dGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExNmExNDNlNzdi
MjIyYzM1NTE4ZDNkNTY2ZmYzYTllNWEyMWJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Cisg
ICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2Vu
ZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OworCisgICAgdm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hT
ZW5kUmlnaHQpOworCisgICAgdm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZp
cnR1YWwgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmKSA9IDA7CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBhZTc4ZTJjZTRhYjk1
MTliNjVhYjg0YjRkNzJkZGViNWVjOTU4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVz
c2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0KFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1ZWQxYzg5MTZjMjQ0
NWQ3Y2U4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbElt
YWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1Ymxp
YyBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90
ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0g
V2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFz
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJh
c2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIs
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
fQorCisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxC
YWNrZW5kVHlwZT4mJiBiYWNrZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2Vu
ZCkpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQt
PmludGVybmFsU2l6ZSgpLCBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQt
PmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmICghZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNh
bEltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIu
cmVwbGF5KCk7CisgICAgICAgIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQo
KTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmNlZTNlN2MxOWY0NTY4OWVmNWJlMjVjYTgzMTE1MDdjODNh
Njc3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxQbGF0Zm9ybUlt
YWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VC
dWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxBY2NlbGVyYXRlZFBs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWY5YmI1ZDZiYmVmY2ViMTM4OGJmNzg0
NmZiNDdiOTVkOGJlNDBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAt
MCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQor
eworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAg
ICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAg
IGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNz
YWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAor
eworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0
X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9V
SW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYg
KG1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuZ2V0KCk7CisgICAgaWYgKCFncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
OworICAgIAorICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNj
ZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxv
Z2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAu
YWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdl
QnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRl
U3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25l
LgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jOTkzOGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFj
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSgpOworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
OyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAv
LyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VC
dWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsK
KyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5
NTdiYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0w
LDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNw
YWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
CisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggYzlkMGU3
YzY5MWZmN2M5NTVmOGMzNTExMDAxYzQwYTU1NGFiOTA0ZS4uMDI4NWUxNGNhZDhhZjkxN2Y3NjFk
N2VhOTM1MzNkZDllMmZkYzFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBw
YXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJwor
V0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2Un
CiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNP
VU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19B
VFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3Ro
YXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsK
ICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JT
cGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAn
V2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRp
ZmllcicsCkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zvcndh
cmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllcicsCisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VX
b3JrZXJKb2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNs
aWVudERhdGEnLApAQCAtMjE4LDkgKzIyMiwxMiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVf
Zm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9u
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisg
ICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dl
YktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0
aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3Rl
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlm
aWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJU
Q0VuY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlm
aWVyJywKQEAgLTc2MCwxMyArNzY3LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIo
cmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBw
ZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNz
YWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRU
UklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlcilc
bicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmli
dXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQu
YXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1Rf
UkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAg
ICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBm
b3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0
dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAg
ICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUg
KHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc1LDEzICs3ODUsMTYg
QEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21l
c3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9B
VFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1l
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxz
ZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNl
aXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQo
cmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAg
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJV
VEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDFkZTMwNDJjMDc5MTY1YTFkMjVhNmY0
YjU4ZDY2MDlhNjU2NjAyZjguLmFhODlmNjVhYmI0NjQ2ODY5YzgzMGI5NWZkZjc1NjRjYzBlMjQz
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBA
IC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtNzg5
LDYgKzc5MCwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNl
cmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3Rl
CisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29s
b3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6
Q29sb3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGQwMzkzYmIwNjJkOTdhZTk2YTcyMjVhNmQ2MDdi
MDc0YjM4ZTBjOTguLmY3MjI1MjdlODZlNDczYTQwZDEzOTMwNmUzZjA5Y2ZlZDkzNjdiYTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dApAQCAtMjksNiArMjksOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UGxheWVyUHJveHkuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3Bw
CiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJv
Y2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUxMiw2ICs1MTQsOCBAQCBXZWJQcm9jZXNzL0dQVS9t
ZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVN
ZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9M
aWJXZWJSVENDb2RlY3MuY3BwCiAKIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZmU3NTc5NTM3NjFiOTlmNjli
ODI4YzExYmJjMGYzMzFhZWVmYzE5MS4uZmE4M2ZkYzkyYTFmZDU1N2QyZDljYTYwMmU2NGE2MWI5
MzJhMzE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNjMxLDkgKzYzMSwxMyBAQCBXZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
Lm1tCiAvLyBEZXJpdmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAK
K0dQVVByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldl
YlJUQ0NvZGVjc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2Fn
ZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogU2VydmljZVdvcmtlckZldGNoVGFza01lc3Nh
Z2VSZWNlaXZlci5jcHAKIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDU3NzhiYTU4NzIzMmM2ZTZhNzgyMjQ2YjljN2NiMzIwYWU4ZmNjZWEuLmQzMWIzM2Q3
YzI5MWU1MmNmODc2NzQ4ZmFlMWExNDI3NDBlMGVkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzk0Myw4ICszOTQzLDI2IEBACiAJ
CTcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5
NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07
IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNp
bXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8q
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2
MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVm
ZmVySWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYy
M0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2
MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIz
NUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNv
bG9yUGlja2VyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9y
UGlja2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZm
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3Rl
SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYx
MDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3
QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdE
NDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4
N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0
YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAx
MDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYzNzIsNiArNjM5MCw3IEBACiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRp
YSAqLywKKwkJCQk3MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAq
LywKIAkJCQk0MTcyMTk4ODIzQjYxMjYxMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0
M0MwMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJ
MkQ3RTQzQzMyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBA
IC02Mzg4LDYgKzY0MDcsNyBAQAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3Mg
Ki8sCiAJCQkJMkQ5RkIyMDYyMzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMx
NzIzOTlBM0RCMDA4OEU2NUIgLyogbWVkaWEgKi8sCisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRB
RkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2
IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8q
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywKQEAgLTc3NDksNiArNzc2OSwzOCBAQAog
CQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMUYx
RTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcg
LyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAw
QkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQy
RkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJ
CQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5LmggKi8sCisJCQkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMw
MEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJF
QjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRl
cmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ci5oICovLAorCQkJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaCAqLywKKwkJCQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VC
dWZmZXIuY3BwICovLAorCQkJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFn
ZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFn
ZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyog
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDExMjNBQjA3NjMwMEE2
MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJENUMyRTcyM0Iz
ODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVD
MkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJ
NzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgg
Ki8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OwogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmll
ciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmlu
ZGV4IDE4ZTkzNmRlMzIzMDc3MGYyNDM2MWI2YWJhYThlMTdlNGQyZTVhYzAuLjE4OGZhYzIwYTFl
OTIzZGY2MmJiMWEzODA1NTBhYWE0Zjk0ZDhlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MCwyOSArNjAs
MzUgQEAgdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9u
JikKIHsKIH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSkKLXsKLX0KLQotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6
OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAg
ICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3Vw
cGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKICAgICAgICAgICAgIGNhcHR1cmVN
YW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRp
ZgogI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGli
V2ViUlRDQ29kZWNzKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKK30KKworYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1
cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaAppbmRleCAzMWM2MTA0NjY5ZjJmMDJmZmE0NDBmZWI4ODA5MjZjNzRhZTI2YWNmLi42
ZDFiODNkZTU4MzZhZmFlMjFhZmMzNGY1OGEyMmU1ZDZkMzIzYzcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2
ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlv
bi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3
LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsg
fQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJl
dHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiBwcml2YXRlOgogICAgIEdQVVByb2Nlc3ND
b25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CkBAIC01MywxMCArNTUsMTUg
QEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlk
Q2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lkIGRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVy
cmlkZTsKIAorICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCiAgICAg
Ly8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNz
LgogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2
Y2FjODgzYTY1MWU4NGNlOWQ2NGIzMC4uNTdmZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1
ZTIxNzlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0
aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNz
YWdlIHsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
Zmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmIyYmJkZDg2MzQwNTIwNWFkYTdlZjNjYzczODQ2MDE5ZmIxOTkz
YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRp
Zmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmpl
Y3RJZGVudGlmaWVyPEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2VhZjk0NGJh
MzhmMGE5OTRhNWJlNTI0MTk1OWY0YWM4OGE1OTIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRp
Zmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitl
bnVtIEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0
Y2U4MGY3YjFhNmVjYmM4MmJlNDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUlt
YWdlQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29u
bmVjdGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sK
KyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVBy
b2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVj
ZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKwor
ICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZl
cklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3Rl
SW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIg
aXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFw
JiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQ
cm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNl
aXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0
aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rp
b24qIFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29u
bmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZl
cjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVj
dGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0
Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBD
OjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOwor
fQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sK
KyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpS
ZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNz
YWdlQXJyaXZlcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRC
YWNrZW5kKCkKK3sKKyAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9
IDM7CisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFj
a2VuZENyZWF0ZWQoKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZCgpOworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2Fp
dHNDb3VudDsgaXNQZW5kaW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2Fp
dFNldEZsdXNoSWRlbnRpZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRG
bHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
KQoreworICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9
CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2Vu
dEZsdXNoSWRlbnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
OworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4
dChkaXNwbGF5TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXIpOworICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjU2ZTMxZDBjYWYyMDZlZTUwNmM5Nzk2OTA1
Yjc4NDBhNDliOGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgflJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICBSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2Us
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRl
ci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAg
ICB2b2lkIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJ
ZGVudGlmaWVyOyB9CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNp
Y2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNo
U2VuZFJpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25z
dCA9IDA7CisKKyAgICB2b2lkIHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllcik7ICAgICAgICAKKyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRp
ZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKSB9OworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRl
bnRpZmllcjsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJ
ZGVudGlmaWVyOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg3NzU1N2MwYWE4YzhhOTA1MDRhMTM1ODBk
YTU5MWFhNWJmYzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0w
LDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90
UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6
RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hT
ZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU3MWM3YWQ4MDRjMmM0MWZlZDE2Y2IxMDZjNjZk
MDlmNzQwMzUxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCAr
MSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90
ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlw
ZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAg
dXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVy
PEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9i
YWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgewor
ICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcihzaXplKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01v
ZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmln
aHQgc2VuZFJpZ2h0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQp
OworICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmln
aHQpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5z
dXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2Vu
ZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5lbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdl
dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpk
aXNwbGF5TGlzdCgpOworICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250
ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTgzM2QzNmU0NmM4YjAwZWE5MTk4
MzkzNjgxODM0MTFmNzg1YzBjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgK
QEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRm
b3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1
ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQxNTExN2I1ZTEzZWNiNjA2ZDQ1MjJkZjQ3YjBlZDJjMmExZTkz
MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
KTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
Cit7CisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAg
c2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5n
QmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxl
YXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNj
ZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6
CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5ZDFm
NDRjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZl
ci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAg
IDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgp
OworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2Fn
ZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyop
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAg
ICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NDY1ZmI4YzZmNzdmN2ZkZTM4ZjY4Y2JiMDc1MjQ2Yzk5NGRiMWQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3Vz
aW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllclR5cGU+OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCmluZGV4IDQ2ZDEx
OTg3NzJjNTFiOGFkOTBlZjhhMTcxMzIxZmZjZTI5MGZjZjkuLmIwMjkyMWUwNjFhNjBlMzM1MDg4
N2U3YjA4OTMyNGVhYjhlYTNmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApAQCAtNDIsNiArNDIsOCBAQAog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIHN0YXRp
YyB3ZWJydGM6OldlYktpdFZpZGVvRGVjb2RlciBjcmVhdGVWaWRlb0RlY29kZXIoY29uc3Qgd2Vi
cnRjOjpTZHBWaWRlb0Zvcm1hdCYgZm9ybWF0KQogewogICAgIGlmIChmb3JtYXQubmFtZSAhPSAi
SDI2NCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgw
M2Q0ODIxNzNiZTVhMzU1OGEuLjQ4MWZhYWFhY2FkMjBkMjYzOWU4NWQxNjU2M2JlYjI4NzJlMDBk
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAi
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdv
cmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKKyNpbmNsdWRl
ICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiVXNlckRhdGEuaCIKICNpbmNs
dWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCIKQEAgLTg4MSwxNSArODgyLDIyIEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVD
bGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNU
X0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVz
aE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBs
YXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKICAgICBpZiAoYXV0byogZHJhd2lu
Z0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVh
LT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVs
bHB0cjsKIH0KKyNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gV2Vi
Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CiAjZW5k
aWYKK30KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZy
YW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZmRh
MzM4ZWNmYTY4NTVlMWMxZDYwODUwZTQ3MWY2Nzk0ZWQxYzJjZC4uNGRlZGZlZTc4NDExNjVlNTc3
ZDk0MDMyMzU1MWI0ZjUzYjJkMWRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjMxLDYgKzIz
MSw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlE
KSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJl
bmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKwog
ICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkg
Y29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGlu
Z1RyaWdnZXJGbGFncz4oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCmluZGV4IGVmMDM1MDM0
MmJiODIyNDZjZDE5ZjM1NGQ5YmNjMDI5MWYyOTA0M2QuLjI0MDdmMTA2OWI1N2ZiZjY1OTQ4ODc1
NDEyOGNlOGZhYjFlY2JiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0yMDIs
NyArMjAyLDcgQEAgUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFn
ZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0KICAgICAgICAgcmV0dXJuIG5pbDsK
IAogICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBzbmFwc2hvdCwgYW5kIHdpbGwgYmUgcGFp
bnRlZCBpbiBhbiB1bmFjY2VsZXJhdGVkIGZhc2hpb24gaW4gbGluZSB3aXRoIEZyYW1lU25hcHNo
b3R0aW5nLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6
ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDI3NGZlYzcxMzdkNzE1Mzk1ZDc5MDQ4ZTk3Njg0
OTMwMzNjZmNmMjIuLmFkNGE4NTNjMGNhNWJkY2I5M2Q0ZThjZmZlMzVlZTQzNTExOWJjZTUgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wMS0wNiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJv
dWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJl
bmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAt
MDEtMDYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFByZWNp
c2lvbiBvZiBnZXRDbGllbnRSZWN0cygpLCBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBkaWZmZXJz
IGRlcGVuZGluZyB3aGV0aGVyIHNpbXBsZSBsaW5lIGxheW91dCBvciBsaW5lIGJveCBsYXlvdXQg
aXMgdXNlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNw
bGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1k
aXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0
ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0
LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3Bs
YXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3Rv
cmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1j
b2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNr
bmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJh
bnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTAp
CiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386979</attachid>
            <date>2020-01-07 09:28:11 -0800</date>
            <delta_ts>2020-01-07 10:43:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200107092810.patch</filename>
            <type>text/plain</type>
            <size>365557</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MDkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWRiNjM3NTZhN2U2MDlj
ZjBkZWE3MzgwMDE2MDg1YmRlMjcyODAzNS4uYmZjMTI3NjAxOTEyY2MyNTRhMjFkNjdhYTY1Njk1
ZWI2OGU3ZjFmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wMS0wNiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6aW50ZXJuYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVy
OjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxl
cmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVz
UGVyUm93IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAy
MDIwLTAxLTA2ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgQnVp
bGQgKHVuaWZpZWQpIGZhaWx1cmUgYWZ0ZXIgYWRkaW5nIHNvdXJjZSBmaWxlcyB0byBzdXBwb3J0
IG1lZGlhIGluIEdQVSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDhmYWIyN2IzOTQ1NGE3MDNmOTg4MDQ1
MjgyM2VjYTBlM2VhY2ZlMDUuLmYzNjUwNDkyNzQ4MjNiYzgxNWM5OGM2NDBlNGJkNDY4YjNkZjIz
NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTYgQEAKKzIwMjAtMDEtMDYgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFz
IHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBE
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNo
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRp
c3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJl
Y2VpdmVTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
UHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJl
bW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oLgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3Nh
Z2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAg
KiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL21l
ZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6On5S
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAg
ICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0
OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oOgor
ICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVzc2FnZVJlY2VpdmVyTWFw
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNo
SWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVV
cGRhdGVkQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpzZXRG
bHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVt
b3RlRmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW46IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlv
biBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3Nh
Z2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJv
bWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMjAtMDEtMDYgIFBl
bmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBCdWlsZCAodW5pZmllZCkg
ZmFpbHVyZSBhZnRlciBhZGRpbmcgc291cmNlIGZpbGVzIHRvIHN1cHBvcnQgbWVkaWEgaW4gR1BV
IHByb2Nlc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBlZGViZDU5ZGY5NTE3Zjhm
MDBlMTBjYjNkNGMxN2E4YjJlMGFkYzQ3Li4wZTkwNjU2NDEzZGFiNjYxMDRkYmFlNTA1MTQ3NzBm
ODcwNWIyNzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMjAtMDEtMDYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2Vi
Q29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVudDo6aW1h
Z2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtKToKKwogMjAyMC0wMS0wNiAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQ29udmVydCBBU1NFUlRfRElT
QUJMRUQgdG8gQVNTRVJUX0VOQUJMRUQsIGFuZCBmaXggc29tZSB0ZXN0cyBvZiBOREVCVUcgdGhh
dCBzaG91bGQgYWN0dWFsbHkgdGVzdCBmb3IgQVNTRVJUX0VOQUJMRUQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFr
ZQppbmRleCA0NjYxOWM2NWQ2YjNjM2Q4MWZmNGMyZTUwMDUyMTZhYTQ5NjJlYzE0Li4wNTUxYzA1
NDkwOWNkODdjYmUwMzkxZDVjMGQyZTBjZTQ5YjRiZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAg
LTEwMjIsNiArMTAyMiw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdP
cHRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5oCkBAIC0xMDcxLDcgKzEwNzIs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3Jl
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
T3JpZW50YXRpb24uaApAQCAtMTEwMywxMyArMTEwNCwxNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0
dGVybi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxh
eWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNrLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Jl
Z2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJ
dGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAppbmRleCA0NjQxZDU4MDhhNTI3ZWM2ZTMwZDFjZmI2
ZTgwYjIzMWRkNTZkNmIwLi43NDY1ZDBlNmE4NjY4NzM4ZjRlYmRjNTc0ZjkyNmM3NDg4ZTdhYTRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlw
Ym9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcApA
QCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6
Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlCiAKICAgICAgICAgYXV0
byBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgYml0bWFwSW1h
Z2UtPnNldERhdGEoV1RGTW92ZShidWZmZXJUb1Nhbml0aXplKSwgdHJ1ZSk7Ci0gICAgICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5zaXplKCks
IFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewogICAgICAgICAgICAgbV9kYXRhID0geyBu
dWxsU3RyaW5nKCkgfTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFw
cGxlV2luLmNtYWtlCmluZGV4IGY3MTI5MjdjYzkxOGYzYWIwZmU3MDhhOGFjMDE3YmQwZjNjZjk0
MGQuLjVlNTQyNmMxMTRkM2FjZjUwYjQ3MThiY2NmNDZhMzdjMmNjYWY5ODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtMTMyLDggKzEzMiw5IEBAIGVsc2UgKCkKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
U291cmNlQ0dXaW4uY3BwCkBAIC0xNzYsNyArMTc3LDkgQEAgZWxzZSAoKQogCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBjMDNjZTZiNTEzMTgyMWEwMWNjN2Q2NjUzZDE2
OTE5MWRiYjc5YTgxLi4wYjJiY2NjNWI1NjY2MDM1NDUyMzdiZDVhYzAzNWFjMTFiNGQyYzdjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjg5LDggKzI4OSwxMCBAQCBsaXN0KEFQUEVO
RCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRHTENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTUyNSw3ICs1MjcsOSBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JT1N1cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYWNhZTZmZTM4ZGRlMjZjMjhjZjVk
NDQ5MTFmYzVhYzMwYjI1ODY3NC4uMWI1YjRmYTBhZTFiYTU3M2YyN2M2ZjM0NWRlYmY5MThjMmZm
ZjliNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4NjcsNiArMTg2Nyw3IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL0hFVkNVdGlsaXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRGVjb2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTE4ODYsNiArMTg4Nyw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRp
bWVSYW5nZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3Iu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBlNDUzZDg5MDk3ZTY4NmIyYzMzNTJiYWQ2
NmVlNzEyMzQ3YzE2NmI1Li40ZjAzZWMyM2Q4YzQwZmI5NmEyZTU3NzAxZTM2NmFiMDE0Y2VjZmNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI4OCw4ICsyODgsOSBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggZDRmYjBkMzY4MmJlY2I1ZDQyODBhN2ZmZjI2YmNiNWRkYTA5NjI4
NS4uNDQ1ZTdhMDA5NjBiODg2YzI5MzM1YjYyYjI5NGY5MDIwMjRiZTUwNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ1LDgg
KzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAq
LzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMx
MUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2Ny
aXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGN0YxMzUz
NjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdl
QnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAxMzUz
NjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlw
aERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZH
QWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVt
RWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlw
aFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oICov
OyB9OwpAQCAtMjEzMywxMCArMjEzMSwyMSBAQAogCQk3MjE0NDMzMjIyM0VDODVGMDBGMTJGRjcg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYx
MkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQy
MjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBT
VkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNzIxRjFFQTcyM0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
MjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAw
Njg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVy
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIz
NUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwQzIzQUFF
QjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM4MjZBODIzQzFGNThCMDA0
OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRF
RDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTND
IC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTEx
REM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAw
QTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQjA5OTAxMjNDMDkyM0MwMDczQjlD
QiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTNG
RTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIwMjNBQzJCNzcwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzJCQkU0MjEyM0FDMkNENzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDAy
M0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIz
QyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyRDVDMkU1MjNCMUE4NkQwMEY2N0Q0MyAvKiBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkQ1QzJFMzIzQjFBNzREMDBGNjdENDMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyRDVDMkVB
MjNCNEMwRjgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyog
UmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZh
Y3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1
NTNDRkU2MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsK
IAkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZD
MEFDIC8qIE1lc3NhZ2VFdmVudC5oICovOyB9OwogCQk3NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMg
LyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc1NzkzRUM3MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICov
OyB9OwpAQCAtNjU0MSw5ICs2NTUwLDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8q
IFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2
ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhh
c2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hh
bmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
U1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05
NTk5LDggKzk2MDUsMTAgQEAKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0
aW9uRWZmZWN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzFGOTM2RjcxREQ0Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5h
dmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0
b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDI4
MEQxMjNCQTkzN0IwMDZGNDc2NyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVl
UHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5n
TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
WFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
MjEsNyArOTYyOSwyMSBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhU
c1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8q
IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkz
RTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIz
QUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFMzIzQjFBNzREMDBGNjdENDMgLyogQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHBhdGgg
PSB0cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyog
SlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkwNEMzMDAwMTRFMTgg
LyogRVhURnJhZ0RlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEVYVEZyYWdEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjY4NSw3
ICsxMjcwNyw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1R5cGVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUwQUY2Q0Q1MzAwNkJD
RTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMTBCOTEw
QjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlC
MkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRm9udEVs
ZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMjBDRUYwQUJG
MDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
QTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2Njg0LDYgKzE2NzA1LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGRTVGQkNB
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJMEZFNUZCQ0IxQzNE
RDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJCQkU0MjYyM0FDQjA5QjAw
QTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJCQkwRkU1RkJDQzFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJCQkJMEZFNUZCQ0Qx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJCQkwRkU1RkJDRTFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8sCkBAIC0yNDg5MCw5
ICsyNDkxMiwxMiBAQAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0Nv
bnRleHRDRy5oICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0Nv
bnRleHRHTENHLmNwcCAqLywKIAkJCQlBODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywKLQkJCQlCMkExMEI5MzBCMzgxOEQ3MDAw
OTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCi0JCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0Yx
MUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKLQkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5
QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKKwkJCQk3MkJCRTQwODIzQUFDRTgyMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA5MjNBQUNF
ODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDBEMjNB
QUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJ
NzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgg
Ki8sCisJCQkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oICovLAogCQkJCUNENTg5NDkzMjE4NzQwNjQwMDRGNDI0QSAv
KiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlDRDNFMjFEQjIxODMzRjUxMDBF
NjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oICovLAogCQkJCTU1NUI4N0VBMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCkBAIC0yNDk2OSw2ICsyNDk5NCw3
IEBACiAJCQkJRkJDMjIwREQxMjM3RkJFQjAwQkNGNzg4IC8qIG9wZW5nbCAqLywKIAkJCQkzNzIx
NDkzMzE4RjBCNkQ2MDAxNTZFREMgLyogb3BlbnR5cGUgKi8sCiAJCQkJNDlFOTExQjIwRUY4NkQy
NzAwOUQwQ0FGIC8qIHRyYW5zZm9ybXMgKi8sCisJCQkJNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQz
IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQk0OTA3MDdFNDEyMTlDMDQzMDBE
OTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2UuY3BwICovLAogCQkJCTQ5MDcwN0U1MTIxOUMwNDMw
MEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oICovLAogCQkJCUJFRjI5RUU5MTcxNUREMDkw
MEM0QjRDOSAvKiBBdWRpb1RyYWNrUHJpdmF0ZS5oICovLApAQCAtMjQ5ODgsNiArMjUwMTQsNyBA
QAogCQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8s
CiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1
NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MkEw
N0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJ
CTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICov
LAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3Iu
aCAqLywKIAkJCQkyRDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25p
dG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1MDc5LDcgKzI1MTA2LDggQEAKIAkJCQk1NUEzMzZGODFE
ODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEz
QzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4
QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3
NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMxMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAw
MEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0
MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAv
KiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MTM2LDYgKzI1MTY0LDggQEAKIAkJCQkyRDUwMDJG
QTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0
Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQ
aHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8q
IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYg
LyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQ
bGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0
M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ1LDYgKzI1MTc1LDkgQEAK
IAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1
NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNB
MTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MkQ1
QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJE
NUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjM4
MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZD
MTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5
N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAw
MEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5ODYsNiArMjkwMTksNyBAQAogCQkJ
CUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3Jt
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxsRGVz
Y2VuZGFudHNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkQ1QzJFNTIzQjFBODZE
MDBGNjdENDMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNG
QSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2
ODAsNiArMjk3MTQsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5
SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0Iw
IC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFF
MDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3MjNB
Q0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJD
QSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMDI4OCw4ICszMDMyNCwxMCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDRE
MUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQx
MDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIxMjNB
QzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBCREFG
RjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
RDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNC
dXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3
RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMx
NzU4LDYgKzMxNzk2LDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVyZm9y
bWFuY2VVc2VyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNCMDAz
QTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBGNDIz
QTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVy
ZUluUGljdHVyZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEzRjZB
MDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4g
SGVhZGVycyAqLywKQEAgLTMxNzc3LDYgKzMxODE2LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUz
MDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBh
ZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2
QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJG
OTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzE5NTQsNiArMzE5OTQsOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlF
NCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAw
RENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQx
RDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBS
ZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2
Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VB
NDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKaW5kZXggMTgxNzUxNWUxY2M3MDkwYzdlNTlhMGNiZDI1M2ZmNzI2MTc0NGM3
My4uZjUwMWNhMjNhNzM5NWYxZTViMjFjODFiMDRkZGIwMTkzYjdhMmYzOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBA
IC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2Fs
U2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGll
ZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXpl
LmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2lj
YWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dp
Y2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWlt
YWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpW
YWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEz
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAK
LSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dp
Y2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUp
OworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxv
Z2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBm
YWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJ
bnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOwor
ICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQo
KSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92
ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJl
dHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQz
MS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJl
ZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFn
ZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBi
ZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3
ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2
Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3Rv
bVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGll
ZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOwor
ICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50
Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0
ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUlt
YWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRp
b246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1
cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcx
MzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2lu
Y2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2lu
Y2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAj
aW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgor
I2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1
cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5
ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NN
b2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250
ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7
Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQg
Y29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxp
ZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9v
bCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXpl
KSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3
aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsK
LSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3
aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0Lmdl
dCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250
ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7
CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsK
LQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4
dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7
CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAg
ICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXko
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVu
dDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25z
dAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAm
JiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJu
IFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBp
ZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5y
ZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVm
ZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJl
cGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBz
aG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0K
ICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52
aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkg
OiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlz
cGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3
aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5n
cygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFk
ZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1
c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9
IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlz
dERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUo
KSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9k
ZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxk
QWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RX
aW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQo
KSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
ICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJl
Y2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUg
Y2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4
NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMx
YmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVS
ZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZh
bHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAg
IGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2
YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBB
Y2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBi
dWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2Rl
IGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2Vu
ZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggMDkxYTM2OTkyYTlj
MzVmMTMwZjg1ZGNjODE4Zjk1OTdlMjcyZGVjZi4uNGVhYTU4ZGIxYjA1MzFjM2I3N2M4ZjhhYjk5
NGM5OGU4MTFkMDFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApA
QCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNj
cmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7
IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFz
Q3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9
KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9
KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAg
IGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpj
cmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6
ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsK
KyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6
OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJjYjMy
YWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJiMWE0
YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBs
YXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3Vs
YXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50
UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJh
dGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwg
aXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
YnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBF
eGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRl
cm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShu
YXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgog
Ci0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0Vs
ZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9k
ZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250
ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAg
ICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwy
MSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNw
bGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBm
bGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0
dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1Rl
eHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVw
bGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25z
dAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0
KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAg
cmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTks
MTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVm
UHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0
YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwg
c3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3Rl
bTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1h
Z2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdl
QnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9h
dCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdl
RGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3cs
IGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkp
IHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2Uo
TUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNh
bnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4g
ZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VE
YXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgog
ICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1h
Z2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lz
dGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0
ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBj
b25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5h
YmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7
CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0
YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEs
IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRp
cnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdp
ZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRh
dGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZm
ZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1h
Z2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgp
LCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAg
ZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9
PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxT
aXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50
ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRl
U3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5h
bFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0
KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VS
ZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgp
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53
aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCks
IGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShk
YXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zm
c2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNE
aWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdm
MWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAg
ICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25z
dDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4
dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsK
IAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAt
MzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQg
ZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0
IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0
cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lk
IHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwg
ZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGly
dHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5
LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlY
LCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAog
ICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFi
NGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5j
cHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJh
dGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVy
UmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAog
c3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1M
Q2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25z
dAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7Cisg
ICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRt
YXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXgg
MGMyZmM4NGJmYzA2YmRmNGQ4ZGMzNmM3NWQ5Yjk5YjZkYmZkMjNlNS4uNjlkMzQxMTFlYmE1N2Y0
MTQ4ZWFjOGU2YmI1MDcwZDcxNGMzNDQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyAr
MzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICghYnVmZmVyKQog
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
YnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAg
ICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQw
NjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICghdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRl
b0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0
aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zm
c2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBp
bWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENv
cHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1l
VG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAo
IWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFks
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludAogICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRH
TDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3Jt
YXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAg
ICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5p
c1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFw
LT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUg
U1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdl
KEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAg
ICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4
dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0
ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAg
ICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNW
YWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVm
ZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0
dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+
Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIy
LDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICB9CiAKICAgICAg
ICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdl
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwg
aW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7
CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5j
b250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJu
IGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICBy
ZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5B
QkxFKFZJREVPKQpAQCAtNjM0NCw3ICs2MzQ0LDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkK
ICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIg
YmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVt
cCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkg
PiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMw
Li42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0x
NDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRh
aW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFp
bnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8v
IEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxs
eSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwg
ZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4
NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzVi
ZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYg
KzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJv
b2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVu
dGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNr
ZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICgh
bV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVu
dC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2Vu
ZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25z
dAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJl
MDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2ZhYTIz
N2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hy
b21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAK
KyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQog
CiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0x
OTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJv
b2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07
CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBt
X3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4ZmEz
MGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQ
b3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1
ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5o
IgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51
bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNo
IHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZp
ZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRmNTU4
ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBlNTMz
YTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAtMTEx
LDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJl
Y3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMgJiBT
bmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2Fs
ZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBV
bmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRl
KC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgy
OGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcg
QEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNp
emUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KElu
dFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+
cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6
ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZl
ci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0
aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZi
MGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93
X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3Mg
SG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAg
IHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0
ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAg
LTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFhYjQ2
ODY3NjhmMWEyODJkNTg4MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApA
QCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgOiBwdWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBw
dWJsaWMgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlUGh5c2lj
YWxJbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1
cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdElt
YWdlQnVmZmVyPihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cs
IHNpemUpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVf
cHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisg
ICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisg
ICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0K
KworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAg
ICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisK
KyAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJp
ZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQo
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpy
ZXBsYXlEaXNwbGF5TGlzdChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAg
ICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1ODZkZDRiMmFmOTFm
NDU2NTUzNWE3MDI5MzkyM2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEyZmY4NGMwZTY2NDJmODE4Mjcw
OTljZTgzN2UyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAjZW5kaWYKICAg
ICBib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFj
Y2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVz
dG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmNwcAppbmRleCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4NzlkYmQ0OTY5NjRiNDkxYjE4
Li4wMGJlMGZlYTA2MDU1Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4NDY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMjgs
NiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKIAorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKwogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdi
ZmUwMDkyMDFiNzZmMTIuLjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3OGFhMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZW5kZXJp
bmdNb2RlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0
cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIsMTcgKzEyMyw2IEBAIGVudW0g
VGV4dEFsaWduIHsKICAgICBSaWdodFRleHRBbGlnbgogfTsKIAotZW51bSBSZW5kZXJpbmdNb2Rl
IHsKLSAgICBVbmFjY2VsZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZl
ciwgLy8gVXNlIHBsYWluIG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIHBsYXRmb3JtIEFQ
SSB0byBhbGxvY2F0ZSBiYWNraW5nIHN0b3JlLgotICAgIEFjY2VsZXJhdGVkCi19OwotCi1lbnVt
IGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gewotICAgIFByZW11bHRpcGxpZWQsCi0gICAg
VW5wcmVtdWx0aXBsaWVkCi19OwotCiBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNv
cmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogU3RyaW5nIGJsZW5k
TW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3Qg
U3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMsNyArMTMzLDYgQEAgV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdl
YkNvcmU6OkNvbXBvc2l0ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CiBXRUJDT1JF
X0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGlu
ZUpvaW4pOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcAppbmRleCAxYTBmODE2ZmRhODAzMDI3OTZhYTNhM2U1OWI2ZGY5MTk5NWQwM2M3Li40
ZTJiZTcxYzc0MWM1NWY1NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsMzggKzI4LDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKIAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJSZW5k
ZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGZs
b2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1w
ZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CitzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorewor
ICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RX
aW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9NQUtFX0lTT19BTExPQ0FU
RURfSU1QTChJbWFnZUJ1ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOworfQogCi1zdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZl
cihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RX
aW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNp
emUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwor
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8g
U2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRl
eHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7
CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdl
QnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwg
aG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1cm4g
Y3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UpOwogfQotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVu
Z3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1w
ZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0xMDUsOTcgKzExMSwxMiBA
QCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVj
dC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNl
bmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFn
ZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKLXsK
LSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JT
cGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkK
LXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRo
ZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdC
ICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENv
bG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29s
b3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNl
ID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjph
cnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1
NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50
KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+
KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4g
YXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3Bh
Y2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykg
ewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAg
ICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0o
KTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0g
ICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6
Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNl
UmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5
ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3Jj
UGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJy
YXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBp
eGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNl
dCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAg
ICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAg
ICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAg
ICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsg
YiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5
LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpz
cmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1
bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBs
YXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNl
TWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19
Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3Jt
TGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpj
b3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSwg
UGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVm
ZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5s
YXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGlu
ZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhl
bCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNj
YWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAg
LTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAgICBJbnRTaXpl
IHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUocmVjdC5zaXpl
KCksIGNvbnRleHQpOwogCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVy
biBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAo
c2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSBz
Y2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRl
eHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZl
cikKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3Jy
ZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZm
ZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4
dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Up
OwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgp
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNpemUgSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZl
ciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVl
ZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0g
ICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsK
KyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3Qu
bG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIEltYWdlQnVm
ZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFn
ZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIHJldHVy
biBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29udGV4
dCgpLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9OYXRp
dmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAg
IC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRo
cmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNz
IGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgp
IGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVybiA0
ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAg
IHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwog
fQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit2b2lk
IEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd0Nv
bnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9Ci0jZW5kaWYK
IAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggNTMzM2NmNGVjMjI4ZjlkYjM3M2YyNThlNmI5
YzdiOWVlNGZjOGFjMC4uMDM4MmI3NDA0MjQwZjViZjQ4MTZlZDhhZTVmNjY2ZmM1M2UyNmMxMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBA
IC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CkBAIC0yNywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckRhdGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgot
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+
Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7
Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1h
Z2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRv
dzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBH
dWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9u
dENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5
LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFll
cywKLX07CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9
CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9S
VChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAg
IC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
ID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0g
bnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5k
ZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBu
dWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8g
dGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RU
b0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRo
ZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUg
YnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdp
dGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9F
WFBPUlQgfkltYWdlQnVmZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2Yg
dGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVz
dGluYXRpb25TaXplKEZsb2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQotCi0gICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgLy8gVGhlc2UgZnVu
Y3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNy
ZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6
ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5l
ZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3Rh
dGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMg
RmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUp
OworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAK
LSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNv
bHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFn
ZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJl
c29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBHaXZlIGhpbnRzIG9u
IHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZSBp
ZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZpb3IKLSAgICAvLyBv
ciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0gICAgc3RhdGljIEJh
Y2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBj
b21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmKTsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgSW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBu
dWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0
OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRy
LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OworICAg
IHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJheShjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0
LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0pOworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBk
cmF3aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hEcmF3aW5nQ29udGV4dCgpIHsgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNl
TWFzaygpOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29u
c3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5
Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1l
bW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0
aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwgTmF0
aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0jaWYgIVVTRShDRykKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5z
Zm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29s
b3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJh
bnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNl
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZp
bmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25z
dCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAg
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVj
dCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkg
PSAwOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0
aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3aXRo
IHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUg
dHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9w
ZW5HTCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCk7
CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJ
bWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9
IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7
IH0pOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhl
IEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBw
ZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7
Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxv
YXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBG
bG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0
U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKSA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5l
ZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3
YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNp
bmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9p
ZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8
SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tp
bmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9O
YXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNo
Q29udGV4dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi0gICAgc3RhdGljIHZvaWQgZHJhd0Nv
bnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9h
dFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
KyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0
ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSBJbnRQb2ludCgp
LCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgPSAwOwogCi0g
ICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZy
aWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmll
bmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFk
aWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwotCi1wcml2YXRl
OgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAg
SW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0g
ICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdp
dmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBz
aG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQot
ICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYg
c3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwg
Y29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3Mp
OwotI2VuZGlmCi19OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0Rl
bnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOwog
Ci0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90
PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIE5hdGl2
ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Cit9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3ODVjOGU3OGM0MWMzMjY1NWYx
MmMyNzIwMjAxYWVlMDhmMmFmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCisjaW5jbHVkZSAi
SW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30K
KworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIElt
YWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENv
bnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIEludFJlY3QgbHVtaW5h
bmNlUmVjdChJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSk7CisgICAgYXV0byBzcmNQ
aXhlbEFycmF5ID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgbHVtaW5hbmNlUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAg
aWYgKCFzcmNQaXhlbEFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxP
ZmZzZXQgKz0gNCkgeworICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBp
eGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAg
ICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwor
ICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7
CisgICAgICAgIAorICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1
NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxB
cnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJy
YXksIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpLCBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jY2FlNDM1M2U5N2Q4N2JiMDUyOWE2ZWM0MjdhN2E3NWM5OWUzZTQ3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBo
YVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNz
IEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3RvcmUs
IC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAg
ICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhl
IGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7CisgICAgTm8sCisg
ICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAgIFJH
QkEsCisgICAgQkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGluYXRlU3lzdGVtIDogdWludDhf
dCB7CisgICAgTG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307CisKK2NsYXNzIEltYWdlQnVm
ZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkg
PSBkZWZhdWx0OworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6
ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRT
aXplIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9CisgICAg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7
IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3Bh
Y2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9y
eUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2FmZUdl
dCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1cm4g
MDsgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJl
ZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSA9IDA7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyByZXR1cm4geyB9OyB9
CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IElu
dFNpemUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29yZGluYXRlU3lzdGVt
KSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAg
ICAgICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICAgICAsIG1faW50ZXJuYWxT
aXplKGludGVybmFsU2l6ZSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9u
U2NhbGUpCisgICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAgIH0K
KworICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRTaXplIG1faW50ZXJuYWxTaXpl
OworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNw
YWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZjg5ZWMwZDM2ZmVmYmQxMmFiZTU0M2MzZjIwMzRmNjE1OGIzZDJjZi4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0x
LDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYgVVNF
KERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxpZiBV
U0UoQ0FJUk8pCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1
ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZkMTY3YTU3ZTA4NTNkNWUzZmMzODAyN2RkODY0NjgwMDdhMmFl
N2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
aHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhY2tlbmRUeXBlPgorY2xhc3MgUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1
ZmZlciB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0g
UGh5c2ljYWxJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0
V2luZG93KiBob3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxJbWFnZUJ1ZmZlciwgSW1hZ2VCdWZm
ZXJUeXBlPjo6dmFsdWUpOworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3Jl
YXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAg
ICAgIGlmICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlw
ZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcihzdGQ6OnVu
aXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RG
TW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcigp
ID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBj
b25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5k
KTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0
KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYXNlVHJhbnNmb3Jt
KCkgOiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmxv
Z2ljYWxTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+
aW50ZXJuYWxTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5k
KCktPnJlc29sdXRpb25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCkt
Pm1lbW9yeUNvc3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5l
eHRlcm5hbE1lbW9yeUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRp
dmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVy
Jj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNr
ZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgp
KSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNr
ZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZl
SW1hZ2UoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBzaW5r
SW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tl
bmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVz
b2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVz
aERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25z
dF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7Cisg
ICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hD
b250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBx
dWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25z
dF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVT
eXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlz
aWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0
dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNvb3JkaW5hdGVT
eXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5w
dXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRmb3Jt
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFj
a2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybTNET2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIGRlc3RpbmF0
aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5k
VHlwZT4gbV9iYWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA0MzIzNmQ1ZTk3ZmZlNjVlNjgxMTIwZmQ4NWExNTFjMmNiNGYzZmUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKKyNp
ZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJP
KQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkK
K3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZCA9IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOworI2VuZGlmCisKKyNpZiBVU0UoQ0cpICYmIEhB
VkUoSU9TVVJGQUNFKQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBBY2NlbGVyYXRl
ZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1JbWFnZUJ1ZmZlcjsKKyNlbmRp
ZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VC
dWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBBY2Nl
bGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjRmMDA4NjE4NWNmMjI4NWJiZjI1NTgyZjk5NzIzOWY2ZTlkN2VlNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9t
ZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30K
KworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmlu
Z0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0
V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2lu
ZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5n
ZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkg
eworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVy
YXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VC
dWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAg
IEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAg
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3Jt
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
biBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY3ZDM5MjA0MDRjY2E1Y2I0YmMyMjMyNzc1YzY0OTAyOWI1Y2M1OTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5k
LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsK
K2NsYXNzIEludFNpemU7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFJlbmRlcmluZ0JhY2tlbmQg
eworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4g
Y3JlYXRlKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVyaW5n
QmFja2VuZChjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworICAgIAorICAgIHZpcnR1YWwg
flJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyopOworICAgIAorcHJvdGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1
bHQ7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNjMzk4OGZkNjQzZGE3MDQ0MWU1MzM4YjE2YTExYjA1
NDYzMTM4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1JlbmRlcmluZ01vZGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSB7CisgICAgQWNjZWxlcmF0ZWQsCisg
ICAgVW5hY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3Bs
YXlMaXN0LAorICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3Njc4YzU2YWNkYjBjNTMzYTA5ODZmN2U2
NDU1OTYuLjYxMmY5ZTlkMjJkNjcxZjY4ZDU2NWYxMjQ0OTRlYzMzMmQ1Zjk0NTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC04Myw3
ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNoQnVmZmVyKCk7CiAKICAgICAg
ICAgLy8gU2hhZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2VsZXJhdGVkIGRyYXdpbmcsIHNv
IGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIu
Ci0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXpl
LCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUocm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKQEAgLTU5Myw3ICs1OTMs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0
U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJv
dW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXll
ckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVyKQog
ewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRT
aXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOwor
ICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXpl
KGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MjEs
NyArNjIxLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmco
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXQKIAogdm9pZCBTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IEZsb2F0UmVjdCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBj
b25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERy
YXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5s
YXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXll
clNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1h
Z2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1
cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtLCBjb25zCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRv
bigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGxheWVySW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAg
YXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBs
YXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGNvbgogI2lmIFVTRShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0g
U2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUp
OwogI2Vsc2UKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdl
dCgpOwogI2VuZGlmCiAKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1
clNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVt
cGxhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwg
dGVtcGxhdGVTaXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1h
Z2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
Ymx1clJlY3QpOwogICAgIGlmICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBi
bHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVj
dC53aWR0aCgpICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCks
IGJsdXJSZWN0LCB7IH0pOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3Quc2l6ZSgp
LCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVm
ZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUp
CkBAIC05MTIsNyArOTEyLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogICAgIGFkanVz
dEJsdXJSYWRpdXModHJhbnNmb3JtKTsKIAotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNp
emUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXpl
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCA0OTZlY2EzMjRkM2U0ZGEy
MmZjYTU5OTk4ZWI1ZWY1ZWU3M2QyMDlhLi43MjJlZWZmZTZjOWU1ZmQyODY2YmUyNzI4N2E0NzAy
MTAwY2JmYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGUKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gYnVmZmVyLnNp
emVGb3JEZXN0aW5hdGlvblNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKyAgICBGbG9hdFNpemUgYnVm
ZmVyRGVzdGluYXRpb25TaXplID0gZGVzdFJlY3Quc2l6ZSgpOwogICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NmYxOTY0ZDA5NTUyYmQxYTI3
ZmMwZDIyODA5ZDhhM2RhNmI3NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYg
VVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGgu
aD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1h
Z2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGht
ZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JN
KENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2lu
Y2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNl
cyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMg
b3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJ
RVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJ
bWFnZUJ1ZmZlcik7Ci0KLXN0YXRpYyBGbG9hdFNpemUgc2NhbGVTaXplVG9Vc2VyU3BhY2UoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2luZ1N0b3JlU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQotewotICAgIGZsb2F0IHhNYWduaWZpY2F0
aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSkgLyBpbnRl
cm5hbFNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB5TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0
PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAvIGludGVybmFsU2l6ZS5oZWlnaHQo
KTsKLSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxTaXplLndpZHRoKCkgKiB4TWFnbmlmaWNh
dGlvbiwgbG9naWNhbFNpemUuaGVpZ2h0KCkgKiB5TWFnbmlmaWNhdGlvbik7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBj
YXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBD
b250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZF
KElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBj
b2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwot
ICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2Ug
PSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAg
IH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xv
clNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigp
OwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZl
cihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRy
LCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdy
YXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAv
IHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNw
YWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUo
c2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBz
dWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBm
bG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7
Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5o
ZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEg
bG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVk
SGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgo
KSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50LCBSZWNv
cmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVj
b3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0gICAgLy8g
UHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUu
d2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1T
aXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhl
aWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2VsZXJhdGVS
ZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUgPT0gVW5h
Y2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFj
ZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNj
ZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6
ZShGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSkpOwotICAg
ICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1f
ZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+
ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNnQ29u
dGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgp
LCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9Ci0j
ZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAg
aWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7
IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0
aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9k
YXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsK
LSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
QVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwot
Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQot
ICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVH
ZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNv
bnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0
PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1h
Z2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEu
ZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1f
ZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0g
ICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1f
ZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQo
KSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAg
IGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
KTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0
V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwg
cmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6
On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXpl
Rm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBkZXN0aW5hdGlvblNpemUpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGRlc3RpbmF0aW9uU2l6ZSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSgpKTsKLX0KLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBj
b25zdAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkg
ZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRh
dGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGlu
dGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgot
ICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3Vy
ZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1h
Z2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90
YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0g
ICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRv
dGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRl
cm5hbFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1l
bW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBp
bnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBj
YXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0
J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4g
b25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIu
Ci0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygp
IGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1f
ZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMo
KTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVm
ZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5z
dXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9k
YXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0K
LQotc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYg
KGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
Ym91bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0
PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1h
Z2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndp
ZHRoKCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRp
YyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0
YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXpl
IGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAo
cmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRv
IGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53
aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCks
IHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwot
ICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2Rl
Q29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2NhbGVTaXplVG9Vc2VyU3BhY2UobG9naWNhbFNpemUs
IGJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNp
emVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2
ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgaW50ZXJu
YWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jlc29s
dXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIElu
dFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIElu
dFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNp
emU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlv
blNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6
ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKLX0KLQotQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENv
cHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKLX0KLQot
UmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEu
c3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFn
ZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkp
OwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdl
QnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNv
bnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZp
b3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGlt
YWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRo
KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLmJ5dGVz
UGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8s
IG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERl
ZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3Rv
cmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2Ut
PmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgaW1h
Z2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZGVzdENvbnRleHQuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0g
aW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotICAgIEludFNpemUgYmFja2luZ1N0b3Jl
U2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLQotICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZh
Y2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotICAgIAot
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3Jj
UmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNv
cHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsK
LSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRq
dXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAg
ICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdT
dG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHku
Ci0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGlt
YWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAg
ICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5n
LCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8
SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBj
b3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25z
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsK
LQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0g
PT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAq
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2Rh
dGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1Jl
Y3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVu
c2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBp
ZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4
dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAg
ICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJu
IG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNy
Y1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3Qg
SW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewot
ICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hD
b250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0Owot
ICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3Jk
aW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVk
U291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJj
ZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIH0KLQotICAgIG1fZGF0YS5wdXRE
YXRhKHNvdXJjZSwgc291cmNlRm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VS
ZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSk7Ci0gICAgCi0gICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNh
Y2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRD
cmVhdGVJbWFnZSgpLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAg
ICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQo
KS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIENG
U3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRG
T1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNU
UigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJldHVybiBrVVRUeXBlSlBFRzsKLX0KLSAg
ICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0
IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9uPwotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOwotI2Vs
c2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RS
IGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3Ig
YWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlw
ZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0
IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KLSAgICBz
dGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7
Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNv
bXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
bWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIp
KQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQotICAgICAgICByZXR1cm4ga1VUVHlw
ZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrVVRUeXBlUE5H
OwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2Us
IENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRh
UmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVz
dGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKLSAgICBpZiAoIWRlc3Rp
bmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkp
ICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAg
ICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBk
ZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENG
TnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYq
cXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9u
TG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29t
cHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENG
KENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFy
eUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9
Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8g
YmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUg
bWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2Vl
bSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24u
Z2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwotICAgIHJldHVybiBDR0ltYWdl
RGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJp
bmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAg
ICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0
ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAgIHJl
dHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQot
c3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCi17Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0
cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19
Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUs
IHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRh
dGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NG
RGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAg
IHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJl
dGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgp
OwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7
Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0g
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlm
IChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24n
dCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRl
IG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0
aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAg
ICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAq
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRv
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxs
cHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAg
ICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJ
bWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olllcykg
ewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAg
ICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwg
aW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAg
Q0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwot
ICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNpemVGb3JEZXN0aW5hdGlvblNp
emUobG9naWNhbFNpemUoKSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdl
U2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAg
IH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1
dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxD
RkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7
Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8g
PSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRh
dGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQot
ICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVH
cyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29t
cG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNl
LndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERh
dGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXplKTsKLSAgICAgICAgdW5zaWdu
ZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAg
ICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsK
LSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1
NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAv
IDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAw
XSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kg
KyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VB
bHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgotICAgICAgICBk
YXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgIH0KLQotICAgIHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdo
dCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVh
dGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCks
IDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBz
b3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAg
ICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgp
LCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdl
RGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBx
dWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwot
ICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJ
bWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlw
ZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0
YSgpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICByZXR1cm4gbV9kYXRhLnRvQkdSQURhdGEoY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxMTZiNmMwNTE1Mzk3NzUwY2IzZTQ5MTViZmJhOWNi
NzNjZjc2YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzODYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisK
KyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVz
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJh
dGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZSA9IHsg
Y2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKSwgY2VpbGYocmVzb2x1dGlvblNj
YWxlICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBpZiAoc2NhbGVkU2l6ZS5pc0VtcHR5KCkgfHwg
IXNjYWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisg
ICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5hbFNpemUud2lkdGgoKSk7Cisg
ICAgaWYgKGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLmhlaWdodCgpKSAqIGJ5dGVz
UGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVy
biB7IH07CisgICAgCisgICAgcmV0dXJuIGludGVybmFsU2l6ZTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sK
KyAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQudHJhbnNs
YXRlKDAsIC1tX2ludGVybmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dC5hcHBseURldmlj
ZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdl
LCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndp
ZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
aW50ZXJuYWxTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXpl
LndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9
CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGlt
YWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNp
emVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSks
IG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorewor
ICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlv
blNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0
OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYg
KGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkg
PyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1
c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1h
Z2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0
b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4o
ZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworUmV0YWluUHRyPENGRGF0YVJlZj4gSW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAKKyAgICBhdXRvIHV0aSA9IFVU
SUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBBU1NFUlQodXRp
KTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdl
dCgpLCBrVVRUeXBlSlBFRykpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBo
YSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxh
Y2suCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNp
emUoKSksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgICAgICBpZiAoIXByZW11bHRp
cGxpZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc2l6ZV90
IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGll
ZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVk
RGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAoIWRhdGFQcm92
aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGltYWdlID0gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZl
UmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgp
LCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRN
b2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53
aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAg
ICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwg
dXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRh
dGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQorICAgICAgICBy
ZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCitTdHJp
bmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBl
LCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICByZXR1cm4gZGF0YVVSTChk
YXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1JlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNyZWF0ZUdldEltYWdl
RGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVk
LCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4gYXJlYSA9IDQ7CisgICAgYXJlYSAqPSBzcmNSZWN0LndpZHRoKCk7CisgICAg
YXJlYSAqPSBzcmNSZWN0LmhlaWdodCgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYg
KCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXpl
IH07CisgICAgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oYnVmZmVyUmVjdCwgc3JjUmVj
dCk7CisgICAgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNp
emUoKSB9OworCisgICAgaWYgKHNyY1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0
WCgtc3JjUmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVz
dFJlY3Quc2V0WSgtc3JjUmVjdC55KCkpOworCisgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKKyAgICAgICAgYXJyYXktPnplcm9GaWxsKCk7CisgICAgCisgICAgcmV0
dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVQdXRJ
bWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwg
SW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsgSW50
UG9pbnQ6Onplcm8oKSwgc3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0
aW9uKGRhdGFSZWN0LCBzcmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RDbGlw
cGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChzcmNS
ZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3JjUmVj
dC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0
WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3Qg
PSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3QuaW50
ZXJzZWN0KGJ1ZmZlclJlY3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVj
dC5zaXplKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3sKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0
UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsK
KyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQ
aXhlbFszXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNy
Y1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkK
K3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSkgewor
ICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwg
c3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAg
ICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAg
ICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRl
c3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBp
eGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3dh
cCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQ
aXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0g
KiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogMjU1KSAv
IGFscGhhOworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZv
cm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhl
bFszXTsKKyAgICBpZiAoYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVk
VG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0
LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChzcmND
b2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0g
KHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMV0g
PSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsy
XSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVs
WzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3dhcCBw
aXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhl
bFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxb
MV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzU2xvdygKKyAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoQ29sb3JGb3JtYXQsIGNvbnN0IHVp
bnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPiBjb3B5RnVuY3RvcjsKKyAgICAKKyAgICBp
ZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChz
cmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYm
IGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
KTsKKyAgICAgICAgY29weUZ1bmN0b3IgPSBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZDsKKyAgICB9IGVsc2UgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIGNvcHlGdW5jdG9yID0gY29weVByZW11bHRp
cGxpZWRUb1VucHJlbXVsdGlwbGllZDsKKyAgICBlbHNlCisgICAgICAgIGNvcHlGdW5jdG9yID0g
Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZDsKKyAgICAgICAgCisgICAgc2l6ZV90
IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8
IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGJ5
dGVzUGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZvcm1h
dCwgJnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAgICAg
c3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVz
UGVyUm93OworICAgIH0KK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3RhdGljIGlubGluZSB2
SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQgYnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdkltYWdlX0J1ZmZlciB2SW1h
Z2VCdWZmZXI7CisgICAgCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJ
bWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9
IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdl
QnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSBy
b3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBj
b3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNy
Y0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYg
c3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNy
Y0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29s
b3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVp
bnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFu
bmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKHNyY0NvbG9y
Rm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0
aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3JjQ29s
b3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0
aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZk
ZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ICE9
IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEg
PC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07
CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1h
cCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBo
YUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGlm
IChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQgJiYgc3JjQ29sb3JGb3JtYXQgPT0g
ZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFG
b3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhh
Rm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtl
VkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3Ms
IHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQs
IHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBk
ZXN0KTsKK30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhl
bHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3Jt
YXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNS
b3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCog
ZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgY29weUltYWdlUGl4ZWxzU2xv
dyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dz
LCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0
Um93cywgc2l6ZSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjhmZTBlYTZhYTBh
OTcxMjcxMjFlM2IzYTk0MjFlMTU5ZWY1YmQwOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKQEAgLTAs
MCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFj
a2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWln
aHQoKSk7IH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJy
aWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgor
ICAgIHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCisgICAg
dm9pZCBzZXR1cENvbnRleHQoR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICB2aXJ0dWFsIFJldGFp
blB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKworICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBj
b25zdDsKKyAgICB2b2lkIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKGNvbnN0IEludFNpemUm
IHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisK
KyAgICBzdGF0aWMgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1h
dCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50
U2l6ZSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENH
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRmMWZhNmFm
YjgwMzE4MmIxMzlmN2ZiNGYzNTFjODY4NzMyZjYyODgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBDQSB1c2Vz
IEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBv
cHRpbWl6ZWQuCisjZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworI2lm
IFVTRV9BUkdCMzIKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcElu
Zm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVy
MzJIb3N0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9
IENvbG9yRm9ybWF0OjpCR1JBOworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8g
RGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Citjb25z
dGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQ6
OlJHQkE7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRl
SW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YTsK
KyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBpbnRlcm5hbFNpemUud2lkdGgoKTsKKwor
ICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93
KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQo
IShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNpemVfdCBu
dW1CeXRlcyA9IGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBjZ0Nv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbnRlcm5hbFNpemUu
d2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywgY2FjaGVkQ0dD
b2xvclNwYWNlKGNvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbykpOworICAgIGlmICghY2dD
b250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOworCisgICAgY29uc3Qg
YXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXpl
X3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworICAgIH07
CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUltYWdlRGF0YSkpOworCisgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4obmV3IEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1vdmUoY29udGV4
dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0
IEludFNpemUmLCBmbG9hdCwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCkKK3sKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRhUHJv
dmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6
IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRhKQorICAgICwgbV9kYXRhUHJv
dmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29u
dGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJUKG1fZGF0YVByb3ZpZGVy
KTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENvbnRleHQodGhpcy0+Y29udGV4
dCgpKTsKK30KKworTWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3Jl
YXRlU2VuZFJpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gTWFjaFNlbmRSaWdodCgpOworfQor
CitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAg
IGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgCisg
ICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZSgKKyAgICAgICAgICAgIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJu
YWxTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hl
ZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJv
dmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBudWxscHRyOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAq
IG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVz
UGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQ
ZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpS
R0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93
LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25z
dAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3Jk
aW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25T
Y2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsK
KyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3JjUmVjdFNjYWxlZCwg
c3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0
YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3Mg
PSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJl
Y3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVy
Um93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KG1fZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RD
bGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZvcm1hdCwgc3JjQnl0
ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJH
QkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICBy
ZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBzcmNTaXplOwor
ICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVT
eXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAh
PSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
ICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICB9CisK
KyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAg
Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVjdFNjYWxlZCwg
ZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIAorICAgIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3Mg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgZGVzdFJlY3QueSgpICogZGVz
dEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93ID0gNCAqIHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dz
ID0gYXJyYXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBz
cmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBp
bnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBCYWNrZW5kQ29s
b3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhkMjkyMzVmZjM1MDU1MmEyN2E2MjRk
N2YxZjc1ZWNjMTRhZDdjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRS
aWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisgICAgCisgICAg
V0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBw
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0
YVByb3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKwor
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxT
aXplLndpZHRoKCk7IH0KKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRh
UHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEu
aCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWlu
dDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYK
LQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9T
dXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwv
c3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZv
ciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4K
LSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVm
ZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRl
c3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQot
ICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFj
ZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBt
YXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4
ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQg
cHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3Qgdklt
YWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChk
ZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJH
QkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hh
bm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEo
dm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3Qg
aW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5w
dXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAg
c3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93
Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVp
Z2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5k
YXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwot
ICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Ig
bm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQot
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8
dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJh
dGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEs
IHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVy
RGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVp
Z2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAg
ICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWlu
dDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAg
ICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tl
ZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3Qu
bWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5z
YWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9
IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0g
cmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBv
cmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsK
LSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXpl
LndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lk
dGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lk
dGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwot
ICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQo
KTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAg
ICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAg
IGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAt
IG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAg
ICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVu
ZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhl
aWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAg
IHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhf
dCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0
eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCog
c3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAg
aWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRl
c1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cg
KyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0g
ICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdp
ZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAg
ICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5y
b3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RS
b3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRh
dGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0
YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewot
ICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAg
ICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5z
YWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIg
aXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAg
ICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAq
IDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dz
W2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQot
ICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCAr
IDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVH
ZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0g
c3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vs
c2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2Fm
ZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNy
Y1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93Owot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpz
dXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygp
OwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJh
c2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAg
IHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVp
Z2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsK
LSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBp
ZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEg
dG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAz
IH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRl
c3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAo
KHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAg
ICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZl
R2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgu
dW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICog
NDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCAr
IDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCAr
IDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jv
d3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAg
ICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUm
IHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykK
LXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJj
ZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNv
dXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVz
dFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdl
dCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkgPCBz
aXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAg
IEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICAK
LSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBz
b3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53
aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRo
KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tl
ZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIEFT
U0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0
KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAw
KTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7
Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55
KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9
IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3Qu
aGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAgIAot
ICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwot
ICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBz
cmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYgKCFh
Y2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQo
KTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSAr
IChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBz
cmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gY29u
c3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0
LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVz
dFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRh
dGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFz
ZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNl
eCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlz
IGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAg
ICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93
c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
c3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0g
KHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJv
d3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93
cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJv
d3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSwg
SU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRlc3RC
eXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dzID0g
c3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRlc3R5
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRo
ID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZl
R2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBz
cmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwot
ICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJv
d0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsK
LQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRl
c3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMg
ZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsg
MiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhf
dCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAy
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9
IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0j
ZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjNTVhNTRhZDkxMTc5NTNjYTVlNjk2ZGEwN2U2ZTBkZjY4MTQzZDU4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4K
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0Nv
bG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJvdmlk
ZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAg
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7Ci0K
LSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0YSB7
IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRl
cjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNl
Rm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhNDE0NjBmNDg0MzQzODI4
ZjNjMmU1NGU2ZGQwNmQ0ZDljZjg5MGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaCIKKworI2lmIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworCitJbnRTaXplIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEludFNpemUgaW50ZXJu
YWxTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhp
bXVtU2l6ZSgpOworICAgIGlmIChpbnRlcm5hbFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgo
KSB8fCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgPiBtYXhTaXplLmhlaWdodCgpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgcmV0dXJuIGludGVybmFsU2l6ZTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sK
KyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRl
KGludGVybmFsU2l6ZSwgaW50ZXJuYWxTaXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFj
ZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBS
ZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9y
bUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW50ZXJuYWxTaXplKSk7CisgICAgCisgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
TWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHNlbmRSaWdodCkpKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNl
KQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3Vy
ZmFjZSkpCit7CisgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgc2V0dXBDb250ZXh0KGNvbnRl
eHQoKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAgIDogSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoc2VuZFJpZ2h0KSwg
Y2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSkpKQoreworfQorCitNYWNoU2VuZFJpZ2h0
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlU2VuZFJpZ2h0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVTZW5kUmlnaHQoKTsKK30KKworR3JhcGhpY3ND
b250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lk
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0Nv
bnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZh
Y2UtPmJ5dGVzUGVyUm93KCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKK30KKworTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAg
ICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKFdURk1vdmUobV9zdXJmYWNlKSk7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0
ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdl
ID0gc2lua0ludG9OYXRpdmVJbWFnZSgpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0
Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCptX3N1cmZhY2UpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAgIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JG
b3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0
ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jl
c29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBk
ZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3JjUmVj
dFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8ICFh
cnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCog
ZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0
ZXNQZXJSb3coKTsKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAg
IHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsg
c3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsIG91dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0pCit7CisgICAgSW50U2l6ZSBzcmNTaXplU2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0
IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAg
ICAgICBzcmNTaXplU2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3Jj
UmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgfQorCisgICAgSW50UmVj
dCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGNhbGN1bGF0ZVB1
dEltYWdlRGF0YVJlY3RzKHNyY1NpemVTY2FsZWQsIHNyY1JlY3RTY2FsZWQsIGRlc3RQb2ludCwg
c3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93KCk7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNl
LCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKKyAgICB1aW50OF90
KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VB
ZGRyZXNzKCkpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgp
ICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNyY1NpemUud2lkdGgo
KTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQu
eSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29w
eUltYWdlUGl4ZWxzKGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJS
b3csIHNyY1Jvd3MsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9y
Rm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkp
OworCisgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4K
KyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2
NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCisgICAgY29udGV4dCgpLmZp
bGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhOWJiMTc5ZmIxOTRkYzZiNDcxZTkxYmIz
MTFjNGNjNzJjN2EzZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
SU9TdXJmYWNlOworCitjbGFzcyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBN
YWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0OworCisgICAgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBv
dmVycmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1lbW9yeUNvc3Qo
KTsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0
ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7ICAg
IAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworICAgIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRS
aWdodCk7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0OworCisgICAgc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTBkYjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2
NWIyNC4uNWM3YjMzNmYxMDMyNDAwODI2MjBlYzhmYjcxOTY0NTg2MmQzNTg1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgogCisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVUSVV0
aWxpdGllcy5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDQgKzQ2LDEwNiBAQCB1aW50OF90IHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkK
ICAgICByZXR1cm4gKih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorYm9vbCBlbmNvZGVJbWFnZShD
R0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAh
ZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFk
b3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7
CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChDRkVxdWFs
KHV0aSwga1VUVHlwZUpQRUcpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFs
aXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0
byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1
YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51
bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBr
Q0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0
IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVBy
b3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEs
ICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVD
YWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25C
YWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGll
cyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywg
YnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZElt
YWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAg
ICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwor
fQorCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IFVUSUZyb21NSU1FVHlw
ZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIENH
SW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OworICAgIHVu
c2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBr
VVRUeXBlSlBFRykpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFu
bmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisg
ICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgp
OworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXpl
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWRE
YXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRp
cGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBp
ICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAg
ICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAw
XSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAg
ICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9y
ZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRh
dGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQg
KiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNv
dXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlk
ZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAq
IHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJE
ZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NH
UmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5j
b2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwor
fQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZE
YXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsK
KyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Cit9CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJu
IGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOwor
fQorCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIo
Y2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQor
CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRv
IGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVy
biBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFk
NDE5NTUyLi5lYzVjZTQzZjRkMWI1NzI1NDc3YTIzYWE0ZmM4YjZlYmY3MGQ0MmJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oCkBAIC0yNyw2ICsyNywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKKwogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJ
bWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNp
emUpOwogCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKKworU3RyaW5nIGRhdGFV
UkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7CitWZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDgw
ZjZiMTg3MjUyMjk2OGVhN2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2MuLjI4MjFlZjgxZDc1ZGZiMGZm
MDVhODViZTVjOWZiYzI1OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NH
Q29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CisjaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UuaAppbmRleCAyNDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2NGM5YTA0ZmY5NjljZGIzLi40
Y2MwZmEzZjc5NzI3ZWI5ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMTAwLDEw
ICsxMDAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
IGNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJv
bUltYWdlKENHSW1hZ2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZy
b21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAg
ICAgV0VCQ09SRV9FWFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgbW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpp
bmRleCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2Qw
YThmODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBA
CiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1w
b3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBv
cnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3Vy
ZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAg
ICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNl
KSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RG
TW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNp
Z25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qg
c2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNh
MTE0OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVt
c0Zyb21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5
TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYpOwogCiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45OWYxY2UyNzM1NDUwYmRhYzNiYmRmMTFhMzA4NWQ5YTdmM2M5
ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5
TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihk
aXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCks
IEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAg
ICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsg
IH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0
OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZv
aWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNw
bGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENv
bnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSkKKyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXko
eyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNw
bGF5TGlzdCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4g
bV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkg
eyBmYWxzZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1
Li5hZjNhYWRlMmEzMzJjYzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4YjU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKQEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1
bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9u
czsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICBhdXRvIHBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7CiAKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcmVzdWx0
SW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgcGl4ZWxBcnJheURpbWVuc2lvbnMuc2NhbGUocmVz
dWx0SW1hZ2UtPnJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0z
MTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5
KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlt
YWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2Ut
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpw
aXhlbEFycmF5LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBl
JiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1
NjE4ZThmZGRkODRlY2IuLjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0N2Q0MDU4MDA0ZWE3MTcyZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVs
IGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEu
CiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5h
bFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKICAgICBpZiAo
IXNyY1BpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAq
IHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVB
cnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFy
cmF5LCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgQ29vcmRpbmF0
ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1Mjdh
NTYyNzM1M2RmNDQ5Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBtX3NvdXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5n
TW9kZSBtX3JlbmRlcmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAg
ZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2
ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi41YzhiM2I0ZGUwYWZhNzE0
NThjZGNmNmM2YmMwZmZkMmNjYmQxNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNzksOSAr
Mjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQog
CiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0
LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgp
LCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVz
dGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0K
IApAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpA
QCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJz
aW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1
bHQpIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMv
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWQwYjcy
MGQ5NmI3YWE0ODYxNjZmMDVmNmRhMjYxYTAxMjkwNWY3YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitl
bnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0
aXBsaWVkLAorICAgIFVucHJlbXVsdGlwbGllZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IDFj
NjZhZDc5Y2U0MGMxNDU1OGY2NjUyNTJiMjVlM2JiN2RlZDE2YmQuLjg5N2NlNDBkMDRjN2UwYWQx
ZWExOTJjYjkxMDYxOWY4ZjkyMjI0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgsNyArNDU4
LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlcigp
IGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2Fw
dHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDViOTFiMjY4NmFlMjYx
ZWI1M2MwNjg5YmVlYzYyZjU1ZTNmYjQ1OC4uOGY1MGU1NzU3MWQ3YjM4NTAwZWVkN2JjZGE2YjNh
NjQyYWJmNzk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBA
IC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGlu
Z1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0gICAg
bV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0
b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/
IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5idWlsZEZpbHRl
cihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0
aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVy
TGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4NjNjMWVk
MmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFjNjE1MjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0xODEsMTQgKzE4MSwxNCBAQCBz
dGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1h
Z2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBwZWRJ
bnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0ZXJT
aGFwZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsKICAg
ICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlv
bmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGljc0Nv
bnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAgICAg
IGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdl
LCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwor
ICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZl
ci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
SW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0g
cGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQg
PSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAK
aW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3N2I2M2M2
ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAt
MTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBw
aW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxk
Q3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVu
Y29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQg
YnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdl
ID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFi
c29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4
dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6
OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAgICAgICAg
aWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0MzE2MWIu
LjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhlODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBw
bHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBlZmZl
Y3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAg
IGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0
ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJl
ci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDog
VW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJl
ci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIHNv
dXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0
ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6Okxp
bmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGlj
KSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJl
bmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAg
ICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBo
aWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBu
dWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxu
Iik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0Y2ZjMDIy
YjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
CiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5
bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJbnRl
cnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xvclNwYWNl
OjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcw
KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2Nl
bGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5n
LCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEt
Pm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdl
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcAppbmRleCBiODIxNDExYWRlNzc1MDg1NjE2ODg1NmVkMjJiNjJlYTZiNWNk
M2Q5Li45Nzg2N2FhZDNjMjdiNWI1MzhkM2E3OWZiNDk1ZGRkNGYwZjQzZDkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBAQCBOYXRp
dmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3Jh
cGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBDYWlybyBk
b2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywgc28gaXQncyBPSyB0byBt
YWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCBmZjUyZDI1MzZmNTY1
ZmEyOTViZWI2MjAxMjY4YTBmMzMzMTcwZmYzLi4xOTFhYzg2MWNlNGVjNzU1MmQ2OWIwNDkyZDky
ZjczZGI2MDhjNzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0Cisr
KyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAgc2V0KFdl
YktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V2ViS2l0X0RFUklWRURfU09VUkNFU19E
SVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAgIiR7V0VCS0lUX0RJUn0vR1BV
UHJvY2VzcyIKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQi
CiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAgICAgIiR7V0VCS0lUX0RJUn0v
TmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJv
Y2Vzcy9Db29raWVzIgpAQCAtNzgsNiArNzksNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dhbWVwYWQiCiAgICAgIiR7V0VC
S0lUX0RJUn0vV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiIKICAgICAiJHtXRUJLSVRfRElSfS9XZWJQ
cm9jZXNzL0dQVSIKKyAgICAiJHtXRUJLSVRfRElSfS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSWNvbkRhdGFiYXNlIgogICAg
ICIke1dFQktJVF9ESVJ9L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUiCiAgICAgIiR7V0VCS0lU
X0RJUn0vV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggNzk5NGUzY2E3Nzc2MzI5ZDZmNzVk
N2FhZjBjOTNmZDlhYTA1OWUxMC4uYzk2OGQzNDc4YTYzZDVhZmFkNzQ3ZTljMmIzMTk5ZDNmYjcw
NzQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2Zp
bGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIp
L21vZGVscy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwK
ICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmlu
CiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmlu
CiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDAsNiArMTAyLDcgQEAgJChQ
Uk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmlu
CiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dl
YlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVzc2Fn
ZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
CmluZGV4IDBjZDIzZTAxYmJhY2QyZWM0YTBiZGMzYmRmZjJiZTBkN2I2MGIwMWIuLjcxZGE2NTNi
N2ViNzNiNjJmMTAwNDNlNGFkNDJlMzcxYjk1Yzk2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzUHJv
eHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2Fn
ZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1
ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdl
cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTEzNSw2ICsxNDEs
OSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNl
aXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdl
c1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtl
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDlkM2UyYTkwYzdiNGQ5
MGE0MjZjNzZhNGUwNWU2YjJmODFjYzBlOWUuLjY0MWZhNjZkNzUxZGFhMTU0NmMxZjYxZTQzMDM5
ZjQ3OTdlMDk0MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcg
QEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIp
L0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAg
ICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIp
L0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAg
ICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBW
UEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQo
V2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRp
YUNhY2hlIFwKQEAgLTE0MCwxMSArMTQyLDE0IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAg
IFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciBcCiAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5
IFwKICAgICBQbHVnaW5Qcm94eSBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXIgXAorCVJlbW90ZUlt
YWdlQnVmZmVyUHJveHkgXAogICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgXAog
ICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwKICAgICBSZW1vdGVP
YmplY3RSZWdpc3RyeSBcCisJUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBSZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgXAog
ICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA1MmE5NWNlMGRlZDcw
M2Q2MWQzNGE5ZDE3ZjBjOGI0MmU2NjRmZGRhLi5lODVjYmVkZDAyZjc2ZGYxYTgxNzZlY2ZmMWI1
MWUzN2NlMDk5YzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0xMjEsNiArMTIxLDQ2IEBAIFJlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyJiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZW1vdGVNZWRp
YVJlc291cmNlTWFuYWdlCiAgICAgcmV0dXJuICptX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2Vy
OwogfQogCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKKyAgICAgICAg
cmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQ
cm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAg
IHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNz
YWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CisgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVz
c2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisjZW5kaWYKKyNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJU
QykKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6Okxp
YldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKKyAgICAgICAgbGli
V2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAg
ICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIpOworfQorCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNo
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRl
Y29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7Cisg
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAg
IHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJv
bVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKKyAgICAgICAgdXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9jZXNz
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRj
aFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKIFJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpy
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpCiB7CiAgICAgaWYgKCFtX3JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5KQpAQCAtMTQ5LDQ0ICsxODksMTcgQEAgTGliV2ViUlRDQ29kZWNz
UHJveHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmxpYldlYlJUQ0NvZGVjc1Byb3h5KCkK
IH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVy
KQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQog
ewotICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAg
ICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJv
bVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7Ci0gICAgICAg
IHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6
OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewot
ICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSNlbmRpZgotI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQotICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29k
ZWNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICBsaWJXZWJSVENDb2Rl
Y3NQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVj
b2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0jZW5kaWYKKyAgICBBU1NFUlQoIW1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5n
QmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcikKIHsKLSAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKLSAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3lu
Y01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewotICAgICAgICB1
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQ
VVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSNlbmRpZgotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgQVNT
RVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBBU1NFUlQobV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgPT0gcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBh
YzcxMjVkNzM4ZDg2ODg4ZWVhOGI0YTkyNTE1ZjlkZTRkMWY2YjA0Li40NWUwYjUxZTNjNTY2Mjc0
NDE0YTE1NGQwY2U4NjdmZTY2NjZhZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBAQAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNs
dWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVk
ZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisj
aW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlm
aWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAt
NDYsMTggKzQ4LDIwIEBAIGNsYXNzIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogCiBjbGFz
cyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUo
R1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246
OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAg
ICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9
CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFu
dXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5z
aW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAog
ICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03NSwxNCArNzksMjEgQEAgcHJpdmF0ZToKIAogICAg
IC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5l
Y3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lk
IGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5h
bDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9p
ZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7Cisg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29u
c3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTMsNiAr
MTA0LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29k
ZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJl
MDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2
ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyAr
MjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdjOGZhM2U3Yjg1MGUxMzdiYWUzMmVkZGI4YTcxNWU4
NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlN
ZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisg
ICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7Cisg
ICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1l
c3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRp
Zmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAg
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJ
UEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlm
aWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRp
ZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExNmExNDNlNzdiMjIyYzM1NTE4ZDNkNTY2ZmYz
YTllNWEyMWJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMu
aD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6
TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJs
aWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgp
OworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29u
bmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1
aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1v
dGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAg
dm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZs
dXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7
CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
bWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBhZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRkNzJkZGVi
NWVjOTU4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCAr
MSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IE5v
dFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
ZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1ZWQxYzg5MTZjMjQ0NWQ3Y2U4YTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJl
cGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNz
IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkg
eworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVm
ZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNr
ZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBt
X2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9i
YWNrZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
bG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3Qu
aXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250
ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAg
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmNlZTNlN2MxOWY0NTY4OWVmNWJlMjVjYTgzMTE1MDdjODNhNjc3ZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47
Cit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40OWY5YmI1ZDZiYmVmY2ViMTM4OGJmNzg0NmZiNDdiOTVkOGJlNDBhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VX
ZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2Vp
dmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQor
ICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRv
VUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdl
dCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rp
b24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRp
ZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAu
Y29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAg
aWYgKCFncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRj
aCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxl
cmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUlt
YWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6
CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRl
bnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNo
b3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFn
ZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VC
dWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJlZTUxMWU2
OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNl
bmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0
ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6Cisg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5k
ZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0
IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAg
ICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1h
cCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50
ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2lj
YWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdl
QnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNl
SW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggYzlkMGU3YzY5MWZmN2M5NTVmOGMzNTEx
MDAxYzQwYTU1NGFiOTA0ZS4uMDI4NWUxNGNhZDhhZjkxN2Y3NjFkN2VhOTM1MzNkZDllMmZkYzFh
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsy
Nyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09O
TkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVT
U0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJf
QVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRU
UklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hy
b25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zvcndh
cmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5k
UmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdX
ZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTEsNiAr
MjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50
ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCisgICAgICAgICdX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjE4
LDkgKzIyMiwxMiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgp
OgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXIn
LAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6Oklt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAg
ICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dl
YktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSVENE
ZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2MCwxMyAr
NzY3LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAg
ICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAg
ICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5o
YXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFt
ZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZF
Ul9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAg
ICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZF
Ul9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5j
X21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3lu
Y19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQ
QVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
aWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZl
ci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xh
c3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc1LDEzICs3ODUsMTYgQEAgZGVmIGdlbmVyYXRlX21l
c3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQog
Ci0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVy
Lmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAg
ICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRp
ZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNv
ZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19h
dHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRl
KE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAg
ICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2Up
IGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19h
dHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
ICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFN
KGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJB
TShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0o
cmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCmluZGV4IDFkZTMwNDJjMDc5MTY1YTFkMjVhNmY0YjU4ZDY2MDlhNjU2NjAyZjgu
LmFhODlmNjVhYmI0NjQ2ODY5YzgzMGI5NWZkZjc1NjRjYzBlMjQzYTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxh
eUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtNzg5LDYgKzc5MCwyNiBAQCB0ZW1w
bGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50
RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0
czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0g
RW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6
RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0
ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVz
aW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0CmluZGV4IGQwMzkzYmIwNjJkOTdhZTk2YTcyMjVhNmQ2MDdiMDc0YjM4ZTBjOTguLmY3MjI1
MjdlODZlNDczYTQwZDEzOTMwNmUzZjA5Y2ZlZDkzNjdiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjks
NiArMjksOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCiBH
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmli
dXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5j
cHAKQEAgLTUxMiw2ICs1MTQsOCBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclBy
aXZhdGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1h
bmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBl
Q2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNv
dXJjZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3Bw
CiAKIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKaW5kZXggZmU3NTc5NTM3NjFiOTlmNjliODI4YzExYmJjMGYzMzFhZWVm
YzE5MS4uZmE4M2ZkYzkyYTFmZDU1N2QyZDljYTYwMmU2NGE2MWI5MzJhMzE2YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291
cmNlc0NvY29hLnR4dApAQCAtNjMxLDkgKzYzMSwxMyBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNv
dXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0
aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVt
b3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcAogU2VydmljZVdvcmtlckZldGNoVGFza01lc3NhZ2VSZWNlaXZlci5jcHAKIFRl
eHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU3NzhiYTU4NzIz
MmM2ZTZhNzgyMjQ2YjljN2NiMzIwYWU4ZmNjZWEuLmQzMWIzM2Q3YzI5MWU1MmNmODc2NzQ4ZmFl
MWExNDI3NDBlMGVkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMzk0Myw4ICszOTQzLDI2IEBACiAJCTcxQTY3NkE0MjJDNjIzMTgw
MDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBh
dGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9u
R2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5h
bWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3Vj
aEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRz
RGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0
ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5OTIzQUQyRkQ2
MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8q
IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0MTAwMjYy
NjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJD
b2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3Rl
SW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1h
Z2VCdWZmZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVD
MkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVEMjNC
NEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyog
V0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
V2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJD
NTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTYzNzIsNiArNjM5MCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0g
KAogCQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3MkJCRTQw
RTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4ODIz
QjYxMjYxMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3NTJDRDkwMEVBNUNB
MCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1MkNEOTAw
RUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02Mzg4LDYgKzY0MDcsNyBA
QAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYy
Mzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2NUIg
LyogbWVkaWEgKi8sCisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0Jh
Y2tlbmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJ
CQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5j
cHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaCAqLywKQEAgLTc3NDksNiArNzc2OSwzOCBAQAogCQkJbmFtZSA9IG1hYzsKIAkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZG
NyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5jcHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyogUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2NDIzQzFBMDQx
MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIx
RjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5o
ICovLAorCQkJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJ
CXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKKwkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7
CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRUE5MjNBRDdC
REYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovLAorCQkJCTcyMUYx
RTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJCQk3
MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAorCQkJ
CTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJ
CTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5p
biAqLywKKwkJCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0
MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzJENUMyRUUyM0I1NkM4NDAw
RjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0
aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9Owog
CQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRlMzIzMDc3
MGYyNDM2MWI2YWJhYThlMTdlNGQyZTVhYzAuLjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEzODA1NTBh
YWE0Zjk0ZDhlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsKLX0K
LQotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nl
c3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVt
ZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BV
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1
cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlcj4oKSkKICAgICAgICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZl
TWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlk
UmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9v
bCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5n
UmVmZXJlbmNlKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCAzMWM2
MTA0NjY5ZjJmMDJmZmE0NDBmZWI4ODA5MjZjNzRhZTI2YWNmLi42ZDFiODNkZTU4MzZhZmFlMjFh
ZmMzNGY1OGEyMmU1ZDZkMzIzYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAg
IH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNl
aXZlck1hcDsgfQogCiBwcml2YXRlOgogICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uKElQQzo6Q29u
bmVjdGlvbjo6SWRlbnRpZmllcik7CkBAIC01MywxMCArNTUsMTUgQEAgcHJpdmF0ZToKICAgICAv
LyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0
aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUs
IElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAorICAgIGJvb2wg
ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJv
b2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24g
ZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNv
bm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21l
c3NhZ2VSZWNlaXZlck1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4NGNlOWQ2
NGIzMC4uNTdmZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+
IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1h
Z2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIyYmJkZDg2MzQwNTIwNWFkYTdlZjNjYzczODQ2MDE5ZmIxOTkzYjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGUgeyB9Owor
dXNpbmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2VhZjk0NGJhMzhmMGE5OTRhNWJlNTI0MTk1
OWY0YWM4OGE1OTIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJ
ZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVySWRl
bnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRl
bnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0Y2U4MGY3YjFhNmVjYmM4MmJl
NDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKQEAgLTAsMCAr
MSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBSZWdpc3RlciBp
dHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgor
ICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNl
aXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VC
dWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1v
dGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2Fn
ZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJN
YXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigp
Lm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVm
ZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIu
dG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29u
bmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1l
ZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFj
a2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJ
bnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJlbW90ZUlt
YWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8SVBDOjpDb25u
ZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndh
aXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6Oldh
aXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisK
K3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sKKyAgICBj
b25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNp
Z25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0ZWQoKSAmJiB3
YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOwor
CisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgaXNQZW5kaW5n
Rmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNoSWRlbnRpZmll
cigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIoSW1h
Z2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVjZWl2
ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVtb3RlSW1h
Z2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9
IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCwgbV9z
ZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42YjU2ZTMxZDBjYWYyMDZlZTUwNmM5Nzk2OTA1Yjc4NDBhNDliOGFiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1z
Lmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNl
bmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAg
flJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5l
Y3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWlu
dDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAg
IC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7Cisg
ICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0
ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAg
ICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZv
aWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lk
IHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7ICAgICAgICAK
KyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hZjg3NzU1N2MwYWE4YzhhOTA1MDRhMTM1ODBkYTU5MWFhNWJmYzVkCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAg
dm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxT
aXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0
KQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTU3MWM3YWQ4MDRjMmM0MWZlZDE2Y2IxMDZjNjZkMDlmNzQwMzUxZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5k
VHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAg
ICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2Vu
ZFR5cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcikKKyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAg
ICAsIFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tl
bmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9i
YWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNv
bnN0X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVk
QmFja2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAg
IHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3Bs
YXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAg
ICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsK
KyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbHVz
aERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgp
OworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTgzM2QzNmU0NmM4YjAwZWE5MTk4MzkzNjgxODM0MTFmNzg1YzBj
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIg
PSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsK
K3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQxNTExN2I1ZTEzZWNiNjA2ZDQ1MjJkZjQ3YjBlZDJjMmExZTkzMGEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
Kworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gQ3JlYXRl
IHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
OworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRj
aCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxl
cmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUlt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlQnVmZmVy
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5ZDFmNDRjMDUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6
OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAg
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYs
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6
Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDY1ZmI4YzZmNzdmN2ZkZTM4
ZjY4Y2JiMDc1MjQ2Yzk5NGRiMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0g
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
clR5cGU+OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
d2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCmluZGV4IDQ2ZDExOTg3NzJjNTFiOGFkOTBlZjhh
MTcxMzIxZmZjZTI5MGZjZjkuLmIwMjkyMWUwNjFhNjBlMzM1MDg4N2U3YjA4OTMyNGVhYjhlYTNm
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldl
YlJUQ0NvZGVjcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
TGliV2ViUlRDQ29kZWNzLmNwcApAQCAtNDIsNiArNDIsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIHN0YXRpYyB3ZWJydGM6OldlYktpdFZp
ZGVvRGVjb2RlciBjcmVhdGVWaWRlb0RlY29kZXIoY29uc3Qgd2VicnRjOjpTZHBWaWRlb0Zvcm1h
dCYgZm9ybWF0KQogewogICAgIGlmIChmb3JtYXQubmFtZSAhPSAiSDI2NCIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1OGEu
LjQ4MWZhYWFhY2FkMjBkMjYzOWU4NWQxNjU2M2JlYjI4NzJlMDBkZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlv
bi5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmgiCiAjaW5jbHVkZSAiVXNlckRhdGEuaCIKICNpbmNsdWRlICJXZWJDb2xvckNob29z
ZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTg4MSwxNSArODgy
LDIyIEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5
ZXJGYWN0b3J5KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9E
SVNQTEFZX01PTklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9t
ZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRp
c3BsYXlJRCkgY29uc3QKIHsKICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJh
d2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVm
cmVzaE1vbml0b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgog
CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gV2ViQ2hyb21lQ2xpZW50OjpjcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisg
ICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICBy
ZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CiAjZW5kaWYKK30KIAogdm9pZCBXZWJD
aHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXll
ciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZmRhMzM4ZWNmYTY4NTVlMWMxZDYw
ODUwZTQ3MWY2Nzk0ZWQxYzJjZC4uNGRlZGZlZTc4NDExNjVlNTc3ZDk0MDMyMzU1MWI0ZjUzYjJk
MWRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjMxLDYgKzIzMSw4IEBAIHByaXZhdGU6CiAg
ICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJl
ZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNl
bmRpZgogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKwogICAgIENvbXBvc2l0aW5nVHJp
Z2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250
ZXh0TWVudUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCmluZGV4IGVmMDM1MDM0MmJiODIyNDZjZDE5ZjM1NGQ5
YmNjMDI5MWYyOTA0M2QuLjI0MDdmMTA2OWI1N2ZiZjY1OTQ4ODc1NDEyOGNlOGZhYjFlY2JiZjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNv
bnRleHRNZW51Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0yMDIsNyArMjAyLDcgQEAgUmV0YWlu
UHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5n
U2VydmljZVBpY2tlckl0ZW0KICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIFRoaXMgaXMg
ZWZmZWN0aXZlbHkgYSBzbmFwc2hvdCwgYW5kIHdpbGwgYmUgcGFpbnRlZCBpbiBhbiB1bmFjY2Vs
ZXJhdGVkIGZhc2hpb24gaW4gbGluZSB3aXRoIEZyYW1lU25hcHNob3R0aW5nLgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0
LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG5pbDsK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDI3NGZlYzcxMzdkNzE1Mzk1ZDc5MDQ4ZTk3Njg0OTMwMzNjZmNmMjIuLmFkNGE4
NTNjMGNhNWJkY2I5M2Q0ZThjZmZlMzVlZTQzNTExOWJjZTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBA
QAorMjAyMC0wMS0wNiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2Fu
dmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDEtMDYgIERhbmllbCBCYXRl
cyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFByZWNpc2lvbiBvZiBnZXRDbGllbnRS
ZWN0cygpLCBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSBkaWZmZXJzIGRlcGVuZGluZyB3aGV0aGVy
IHNpbXBsZSBsaW5lIGxheW91dCBvciBsaW5lIGJveCBsYXlvdXQgaXMgdXNlZApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0
ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0
Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50
eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0
LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAg
KGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmls
bC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxs
LXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwx
MCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386993</attachid>
            <date>2020-01-07 10:43:53 -0800</date>
            <delta_ts>2020-01-07 11:36:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200107104352.patch</filename>
            <type>text/plain</type>
            <size>363647</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTZkNzVhZDAyOWIyYWVh
MzUzN2YyN2JmOGJjYTgwOTM1MGU1NTZkYS4uM2FmZGU4YzNmOGVhNTA5Y2FkYjMxZGU1Y2YzMGM4
NjUwZGRjOGY0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6aW50ZXJuYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVy
OjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxl
cmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVz
UGVyUm93IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAy
MDIwLTAxLTA3ICB5b3Vlbm4gZmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgTWVkaWFSZWNvcmRlciBiYWNrZW5kIGluIEdQVVByb2Nlc3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXgg
YTFkZmQ3YWFkMjJlOWJkMjc3NjIwZTM2ZGI5MjE5MDVhMmI3Zjc5MS4uMTc3ZWIyMWUwNDdjNzJk
Mjc4NmUyMjhlMzY0ZGEwNDIwZTI3MjlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NiBAQAorMjAy
MC0wMS0wNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisg
ICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0Ogor
ICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJL
aXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAg
ICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAg
ICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
UHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlclByb3h5OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHku
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJEYXRhLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgor
ICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHku
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eTo6flJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICog
U291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyOjpSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBj
b25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuaDoKKwogMjAyMC0wMS0wNyAgeW91ZW5uIGZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAK
ICAgICAgICAgSW1wbGVtZW50IE1lZGlhUmVjb3JkZXIgYmFja2VuZCBpbiBHUFVQcm9jZXNzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZDg4OTNhOGM0MTUxNzBhYThjODViMGVkMTY0
NDU3MWFmMDI0NTBjYi4uZGMyZjQxMjQ0ZTIyMTdlYjVhZGVjYWZlMmU3YWE1NmE3MTdjZGQ1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTA3
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51
Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVu
dFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDcgIHlvdWVubiBmYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBNZWRpYVJlY29yZGVyIGJh
Y2tlbmQgaW4gR1BVUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggODEyZWQ0NjlkMjA5MDg1
NThjZGQ3Y2RlODI4M2NlZTg4NmI4ZWNjMC4uN2ZhZjMzYTQ4MDc2YTZiMmJhNTMwMTY4NGQ5ZTVj
ZWM2ZmEwODMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDI0LDYgKzEwMjQsNyBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXku
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVm
cmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc0LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2Vy
dmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDUs
MTMgKzExMDYsMTYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGls
aXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVRleHRUcmFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1l
UmFuZ2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
YWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJv
YXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQw
ZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVy
OjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVm
ZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VC
dWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEy
OTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0
NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2
LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
aW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzVi
NTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBv
aW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQxMTIxNTU3YWU2ZjM1ZGI5YWQ1ZjRjMWU4YWNjY2EwODY2M2U2ZmIuLjdh
MjA5YTg2N2QzZTFhMTQwZGIyMDM0NDVlZDNhZGVlMjc2ODhlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNS4uNGYwM2Vj
MjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2ZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ1MTRh
ZjZjNTIzOTEwMTE4Nzc5M2JmOWRmZTM4ZWFjYTg2MzRlNGYuLjQyMzM2MzUzNzIzMTUyNjE1ODkw
OTNjY2U0NGUxYTVmOGE0NmJmNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEy
NTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1
NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50
UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAw
OUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1
ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZF
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1
ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEy
OTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJ
CTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTND
QTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjRE
OTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBE
MjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzQsMTAgKzIxMzIs
MjEgQEAKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIz
QjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQ
cm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNB
RDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4Mjgg
LyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5n
T3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0
OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAv
KiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2
MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8q
IEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4Lmgg
Ki87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdG
MjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rp
dml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRl
Q2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJB
MDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMy
MUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBo
eXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
QkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJD
RDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJF
NTIzQjFBODZEMDBGNjdENDMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTMyM0IxQTc0RDAwRjY3
RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVu
ZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUg
LyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdG
QzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAq
LzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENF
NzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDEsOSArNjU1MCw2
IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRS
ZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVu
dFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUw
MDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRG
RTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMSw4ICs5NjA3LDEwIEBACiAJCTcx
RUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3Rv
bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDky
MkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlw
dDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyog
SW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEw
MEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIz
ODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJs
ZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjIzLDcgKzk2MzEsMjEgQEAKIAkJNzI3
QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEw
N0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYx
MjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8q
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBE
MjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3
MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQ
YWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTMy
M0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBwYXRoID0gdHJhbnNmb3Jtcy9BbHBoYVByZW11
bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU2MjNC
MzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
cmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTkyM0I0
NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQx
NzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJGMUFEOUYxQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRGcmFnRGVwdGguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2ODcsNyArMTI3MDksNiBAQAogCQlCMkEwMTU5
NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0
IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEx
RjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEg
LyogU1ZHRm9udEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxl
bWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY4Niw2ICsxNjcwNyw3
IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3QuY3BwICovLAogCQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdC5oICovLAorCQkJCTcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0UmVjb3JkZXIuY3BwICovLApAQCAtMjQ4OTQsOSArMjQ5MTYsMTIgQEAKIAkJCQk5MzQ5
MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIx
QzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJ
QTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cu
Y3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0
YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNE
NTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcy
QkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAq
LywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuY3BwICovLApAQCAtMjQ5NzMsNiArMjQ5OTgsNyBAQAogCQkJCUZCQzIyMEREMTIzN0ZC
RUIwMEJDRjc4OCAvKiBvcGVuZ2wgKi8sCiAJCQkJMzcyMTQ5MzMxOEYwQjZENjAwMTU2RURDIC8q
IG9wZW50eXBlICovLAogCQkJCTQ5RTkxMUIyMEVGODZEMjcwMDlEMENBRiAvKiB0cmFuc2Zvcm1z
ICovLAorCQkJCTcyRDVDMkUzMjNCMUE3NEQwMEY2N0Q0MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0
aW9uLmggKi8sCiAJCQkJNDkwNzA3RTQxMjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJp
ZGdlLmNwcCAqLywKIAkJCQk0OTA3MDdFNTEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRC
cmlkZ2UuaCAqLywKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFja1By
aXZhdGUuaCAqLywKQEAgLTI0OTkyLDYgKzI1MDE4LDcgQEAKIAkJCQk0QjdBRTQ5MjIxNzdCNTZG
MDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUw
MDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzgg
LyogRGVjb2RpbmdPcHRpb25zLmggKi8sCisJCQkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8q
IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4
NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1
MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJF
Q0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0y
NTA4Myw3ICsyNTExMCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdl
QmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdl
QnVmZmVyLmNwcCAqLywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZm
ZXIuaCAqLywKLQkJCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
LmggKi8sCisJCQkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFj
a2VuZC5oICovLAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIu
Y3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAq
LywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBA
IC0yNTE0MCw2ICsyNTE2OCw4IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBh
dGhVdGlsaXRpZXMuaCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVy
bi5jcHAgKi8sCiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywK
KwkJCQk3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICov
LAorCQkJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Ki8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywK
IAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9h
ZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRy
YWNrLmggKi8sCkBAIC0yNTE0OSw2ICsyNTE3OSw5IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAw
RDhBQUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBS
ZW1vdGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8q
IFJlbW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8q
IFJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAv
KiBSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8q
IFJlbmRlcmluZ01vZGUuaCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91
bmRlZFJlY3QuY3BwICovLAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVk
UmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNw
cCAqLywKQEAgLTI4OTkwLDYgKzI5MDIzLDcgQEAKIAkJCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERB
RTcgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYx
MTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODNCQjVDODgxRDVENkY0NTAwNUE3MUY0IC8qIEFsbERlc2NlbmRhbnRzQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRTUyM0IxQTg2RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4
RCAvKiBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMDhDM0Qy
MTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5Njg0LDYgKzI5NzE4LDggQEAKIAkJCQkx
MTJGQjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCMDk5MDEyM0MwOTIz
QzAwNzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyOTIsOCArMzAzMjgsMTAgQEAK
IAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIy
QTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNH
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYz
MjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzIxRjFFQTcyM0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1
IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYz
MThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNS
b290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc2Myw2ICszMTgwMSw3IEBACiAJCQkJ
QTU1NEI1RjMxRTM4MzkzQTAwMUQ0RTAzIC8qIFBlcmZvcm1hbmNlVXNlclRpbWluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkQ1ODFGQjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkUwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0
aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQxQzIzQUMy
MUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MURCQzFCNTYyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMUQyQzgyQjcyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJblBp
Y3R1cmVTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNC
NjggLyogUGljdHVyZUluUGljdHVyZVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc4Miw2
ICszMTgyMSw3IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZl
bnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZE
QkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTk1
MUQ1NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2Fy
ZEV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNTYyRjk2MTE1NzNGODhGMDAzMUNBMTYgLyog
UGxhdGZvcm1MYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU0NEY3ODkxNUNGQjJBODAwQUYz
M0E4IC8qIFBsYXRmb3JtTG9jYWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTU5LDYgKzMxOTk5
LDggQEAKIAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4RjJGMDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJl
c291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyog
UmVuZGVySW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVD
MkVBMjNCNEMwRjgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MjM4MjZBODIzQzFGNThCMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTU2QzdDNEIyMjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNj
aGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8q
IFJlbmRlcklubGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1
MUNEIC8qIFJlbmRlckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDE4MTc1
MTVlMWNjNzA5MGM3ZTU5YTBjYmQyNTNmZjcyNjE3NDRjNzMuLmY1MDFjYTIzYTczOTVmMWU1YjIx
YzgxYjA0ZGRiMDE5M2I3YTJmMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTIxLDggKzkyMSw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRT
aXplJiBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBidWZmZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAw
LCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBJ
bnRTaXplIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOworICAgICAgICBhdXRv
IGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNh
bFNpemUuaGVpZ2h0KCkpKTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAg
IGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjc4NSwxMyArMjc4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0
KSwgVW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgYXV0byBidWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWln
aHQpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAg
ICAgICBpZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5
KCppbWFnZURhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNp
emUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwg
SW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOwogCiAgICAgICAgIGF1dG8gYml0
bWFwID0gSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8
Ym9vbD4ob3JpZ2luQ2xlYW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXAp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGU1Yjhh
YjQ2OWNlYzRiYzA1OGM0MzdkMTk5NTA0MGI1MDIxYzc0MzEuLjJmYTUzYWEzOGMxZmNjMTE3MzU2
YWY5ZjE1NWQwMTVkNDQzN2YwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NG
aWx0ZXJJbWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlcklt
YWdlVmFsdWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegog
CiAgICAgLy8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUg
KDE0OTQyNCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNj
ZWxlcmF0ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBV
bmFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGV4dHVyZSkKICAg
ICAgICAgcmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5jcHAKaW5kZXggZjRiNzcwN2U5N2E4ZmU1MWY4ZTI1Nzc1OGFkZTRi
NmRkZmY1MDJlNS4uNjVkNDY0ZmRkN2Q1ODhlYzczMTYxNmI3NDAzN2E4NDI4ZWVmMzFmMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKQEAgLTkzLDcgKzkzLDcg
QEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgaWYg
KCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBt
X2NvcGllZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
LCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKKyAgICBtX2NvcGllZEJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBpZiAoIW1fY29waWVkQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAt
MTAyLDcgKzEwMiw3IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBj
b25zdAogICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7
CiAgICAgbV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBtX2Nv
cGllZEltYWdlID0gbV9jb3BpZWRCdWZmZXItPmNvcHlJbWFnZShtX2NvcGllZEJ1ZmZlci0+ZmFz
dENvcHlJbWFnZU1vZGUoKSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIG1fY29waWVk
SW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQ
cmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMjNk
OWIzNGU4NDhmNmQwMWQzNGE5ZGFmZmJhMzA1MGZjN2E3MTMxNi4uOTA5MzNlMjNhYzA4MTgwMzNj
NzZmYzNlMjgyMTE5MTgwMTQ4NmM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5o
IgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCkBAIC02MCw2ICs2MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgVVNFKENHKQorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICNpbmNsdWRlICJDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oIgog
I2luY2x1ZGUgIk1lZGlhU3RyZWFtLmgiCkBAIC0zNDUsOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0
cmluZyYgdHlwZSkKIAogICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Y3JlYXRlKCp0aGlzLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXko
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5l
ZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBj
cmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9z
aXRpb24oKTsKQEAgLTgxOCwzOSArODIwLDI3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNo
b3VsZEFjY2VsZXJhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIAogdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5TGlz
dERyYXdpbmcpCiB7Ci0gICAgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2VzRGlz
cGxheUxpc3REcmF3aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlzcGxh
eUxpc3REcmF3aW5nID0gdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0
RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52YXNF
bGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KQogewotICAgIGlmICh0cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7Ci0KLSAgICBpZiAoaXM8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAmJiBi
dWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250
ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERp
c3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlzdEFz
VGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250
ZXh0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlzcGxh
eUxpc3QoKS5hc1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3RyaW5n
IEhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6
QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQo
ZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgp
ICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpKQorICAg
ICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0
KCktPmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBAIC04ODUsMTEg
Kzg3NSwyNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNv
bnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkp
ID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0g
KGRvY3VtZW50KCkudmlldygpICYmIGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1l
bnQoKS52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKyAgICAKKyAgICAv
LyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2Fu
dmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdF
bmFibGVkKCkpOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVt
b3RlIGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxz
ZTsKKworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc1JlbW90
ZURyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUo
KSkgPyBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlJl
bW90ZTsKKyAgICBlbHNlIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlz
cGxheUxpc3RBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVs
c2UKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
KwogICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJp
bmdNb2RlLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVm
ZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KTsKKwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBt
X2NvbnRleHQtPmlzMmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyBy
ZXF1aXJlbWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFi
NDU0ZDU2MDUwNjMyNi4uNDIxMzRhMTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3
IEBAIHByaXZhdGU6CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAg
Ym9vbCBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJv
b2w+IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkgeyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1h
Z2VCaXRtYXAuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXgg
NWY0OWY3MzlhMWY1YzNiZTBlZTE3MWYzNGY5NjNlMDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVm
ZTM0NTM4N2E5MDJmZTY5MmIzMDk5NTRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5j
cHAKQEAgLTYxLDkgKzYxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQml0bWFwKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVu
ZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVu
ZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVu
YWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+
IEltYWdlQml0bWFwOjpjcmVhdGUoSW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCmluZGV4IDA5MWEzNjk5MmE5YzM1ZjEzMGY4NWRjYzgxOGY5NTk3ZTI3
MmRlY2YuLjRlYWE1OGRiMWIwNTMxYzNiNzdjOGY4YWI5OTRjOThlODExZDAxZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9J
bWFnZUJpdG1hcCgpCiAgICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsg
bnVsbHB0ciB9IH07CiAKICAgICAgICAgaWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAg
ICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCksIHRydWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVy
biB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCksIHRydWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1
ZmZlciA9IHRha2VJbWFnZUJ1ZmZlcigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3
ICsyNDMsNyBAQCB2b2lkIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25z
dAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KSk7CisgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyAr
MjU3LDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRh
a2VJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKSk7CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCmluZGV4IDg5ZDhmNDI0M2IyYjkyZGZiY2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLjVi
MWIwN2VmNzczODQzMzYwOGU4ODJmYjllM2JhOWEyYjFhNGM5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwCkBAIC0xODA2LDcgKzE4MDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNhbGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0g
ICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxl
cmF0ZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdl
QnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9
CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKElt
YWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQpAQCAtMTk5MCw3ICsxOTkwLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZh
c1BhdHRlcm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgK
ICAgICAgICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNy
ZWF0ZShCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwg
cmVwZWF0WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQo
KSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAg
ICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVu
dCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkg
OiBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTIwNzUsMjEgKzIwNzUsNiBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wg
dHJhY2tzRGlzcGxheQogICAgICAgICBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5yZW1vdmUodGhp
cyk7CiB9CiAKLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5TGlz
dEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3JlY29yZGluZ0NvbnRleHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1f
cmVjb3JkaW5nQ29udGV4dC0+ZGlzcGxheUxpc3QuYXNUZXh0KGZsYWdzKTsKLX0KLQotU3RyaW5n
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERp
c3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBhdXRvKiBkaXNwbGF5
TGlzdCA9IGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLmdldCh0aGlzKTsKLSAgICBpZiAoIWRpc3Bs
YXlMaXN0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+YXNU
ZXh0KGZsYWdzKTsKLX0KLQogY29uc3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OlN0YXRlLCAxPiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygp
CiB7CiAgICAgcmVhbGl6ZVNhdmVzKCk7CkBAIC0yMTU5LDEwICsyMTQ0LDEwIEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVh
dGVJbWFnZURhdGEoZmxvCiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKKyAgICBy
ZXR1cm4gZ2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIHN4LCBzeSwgc3cs
IHNoKTsKIH0KIAotRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBz
aCkgY29uc3QKK0V4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAg
ICBpZiAoIWNhbnZhc0Jhc2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFz
IGhhcyBiZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw3ICsy
MTgxLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAot
ICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1h
Z2VEYXRhUmVjdCwgbnVsbHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBieXRlQXJy
YXkgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIGltYWdlRGF0YVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOwogICAgIGlmICghYnl0
ZUFycmF5KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAg
IGNvbnNvbGVNZXNzYWdlLmFwcGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBm
cm9tIGNhbnZhcy4gUmVxdWVzdGVkIHNpemUgd2FzICIpOwpAQCAtMjIxOCwxMCArMjIwMywxMCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwg
ZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5
SGVpZ2h0KQogewotICAgIHB1dEltYWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0sIGR4LCBkeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5
SGVpZ2h0KTsKKyAgICBwdXRJbWFnZURhdGEoZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNh
bCwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwogfQog
Ci12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRp
cnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBk
aXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdl
QnVmZmVyKiBidWZmZXIgPSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIp
CkBAIC0yMjQ1LDcgKzIyMzAsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNp
emUgZGVzdE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkp
OwogICAgIEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAg
ICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRS
ZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxD
b29yZGluYXRlU3lzdGVtID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5h
bFNpemUoKSkpOworICAgIAorICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50
KCksIGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCA/IGJ1ZmZl
ci0+bG9naWNhbFNpemUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKICAgICBpZiAoZGVz
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0
KGRlc3RSZWN0KTsKQEAgLTIyNTMsNyArMjIzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNv
CiAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRh
dGEuaGVpZ2h0KCkpKTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSks
IHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAg
ICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCAqZGF0YS5kYXRhKCksIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdo
dCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0p
OwogCiAgICAgZGlkRHJhdyhkZXN0UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGln
bm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4
IDNkZmM5YzlmY2U1MmJlODg5MmJmNDk4YWU2NzIyMTg3ZjFiZWU5MWQuLjk2NDAwZDFhZjUwMGQ1
OGUxZGQ5YmQxMTE3NDgyMTQxYTcyYmI1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTIyMiw5
ICsyMjIsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7IH0KICAgICB2b2lkIHNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlMaXN0QXNU
ZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0gICAgU3RyaW5nIHJlcGxheURp
c3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0KICAgICB1
c2luZyBEaXJlY3Rpb24gPSBDYW52YXNEaXJlY3Rpb247CiAKICAgICBjbGFzcyBGb250UHJveHkg
OiBwdWJsaWMgRm9udFNlbGVjdG9yQ2xpZW50IHsKQEAgLTM3MSw4ICszNjgsOCBAQCBwcm90ZWN0
ZWQ6CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJh
d0ltYWdlKFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVP
cGVyYXRvcik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VE
YXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZs
b2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxv
YXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVp
Z2h0KTsKKyAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKENv
b3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBj
b25zdDsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBDb29yZGluYXRlU3lzdGVt
LCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBk
aXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQo
KSBjb25zdCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMTRlYTM3ZDhkN2Vh
ZmIwMWI1YzRjZTE5ZWJlNzZjNTE4Y2ZjZDRhOC4uYjUxYjRkYmYxM2VlNTA2ZWI5NDk4YzQzZWY0
NWM5NDRkZDczZTBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNiw5ICszNiw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQpOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdN
b2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdN
b2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNl
bHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVy
YXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ+IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
KENhbnZhc0Jhc2UmIGNhbnZhcywgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mm
JiBzZXR0aW5ncykKQEAgLTY5LDcgKzY5LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKIAogYm9vbCBJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBidWZm
ZXJSZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOworICAgIHJldHVybiBidWZmZXJSZW5kZXJp
bmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogfQogCiB2b2lkIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dDo6c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4g
aW1hZ2VCaXRtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDBjMmZjODRiZmMwNmJkZjRkOGRjMzZj
NzVkOWI5OWI2ZGJmZDIzZTUuLjY5ZDM0MTExZWJhNTdmNDE0OGVhYzhlNmJiNTA3MGQ3MTRjMzQ0
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwCkBAIC0zOTM5LDcgKzM5MzksNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRAogICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYg
KGltYWdlKQogICAgICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC00MDYxLDcgKzQwNjEsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRAogICAgICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1h
Z2UyRCIsIFRleFN1YkltYWdlLCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0
KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlby5nZXQoKSwgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAg
ICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdM
OjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEpOwpAQCAtNDUwMCw3ICs0NTAwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAg
ICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAg
ICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4
dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkg
ewotICAgICAgICAgICAgICAgIGlmIChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9j
b250ZXh0LmdldCgpLCB0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAg
ICAgIGlmIChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9i
amVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFj
a0ZsaXBZKSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWln
aHQoKSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAg
ICAgICAgfQpAQCAtNDUwOCw3ICs0NTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0
cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAg
ICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJu
IHsgfTsKQEAgLTQ1NzcsNyArNDU3Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAg
ICAgICAgICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1
cmVJbnRlcm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsK
ICAgICAgICAgICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsK
LSAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0
YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJl
LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lk
dGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtNDYyMiw3ICs0NjIyLDcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBh
dGguCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRl
by5nZXQoKSwgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7
IH07CiAgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNl
OjpWaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ2
NDcsNyArNDY0Nyw3IEBAIFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSYgaW1hZ2UsIGludCB3CiAgICAgRmxvYXRSZWN0IHNy
Y1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVj
dChGbG9hdFBvaW50KCksIHNpemUpOwogICAgIGJ1Zi0+Y29udGV4dCgpLmRyYXdJbWFnZShpbWFn
ZSwgZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1
ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTYzNDQsNyAr
NjM0NCw3IEBAIEltYWdlQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFn
ZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJCiAgICAgfQogCiAgICAgLy8gRklYTUUg
KDE0OTQyMyk6IFNob3VsZCB0aGlzIEltYWdlQnVmZmVyIGJlIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkPwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIEFTU0VSVChtX2J1ZmZlcnMuc2l6ZSgpID4gMCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggMGNiZDBh
M2NjZTAzOTI5NWI0OTI1Y2UzMWEwNTRlMWY2OTEwZDkzMC4uNmVhNzkyMTRmOGE2ZTAwNWIwYmUy
NDQ5YTJkZDY3Mjg4ZmMzYWMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFk
b3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUmVmUHRy
PEltYWdlPiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0
VHJhY2tSZXByZXNlbnRhdGkKICAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50
UG9pbnQoKSwgbGF5ZXItPnNpemUoKSk7CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBh
aW50aW5nUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZp
Y2VTY2FsZUZhY3RvcikpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZh
MWZiZmE3ZWZmZDdhZjUuLjYzN2U3N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgyMTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJvbWU6
OnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3Zl
cykKICAgICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50
aWxNb3VzZU1vdmVzKTsKIH0KIAorUmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRSZW5k
ZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAg
ICAgICAgbV9yZW5kZXJpbmdCYWNrZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZCgpOworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRmb3Jt
RGlzcGxheUlEIENocm9tZTo6ZGlzcGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNw
bGF5SUQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2NjhkNDQ3
MGVjNTEzNjFhZjQ5Li40NjhjMTcwMDhhYWZhNDdmYWEyMzdjNzRmZjQ4ZjQwMjMwZGRiYWU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lLmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0
Q3Vyc29yKGNvbnN0IEN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVu
VW50aWxNb3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCog
c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAogICAgIHZvaWQg
c2NoZWR1bGVBbmltYXRpb24oKSBvdmVycmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlE
IGRpc3BsYXlJRCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0
RGF0YURpZENoYW5nZVN1cHByZXNzZWQgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5k
ZXggNjI2MTdmNzhmM2UyZjA0NzQ4YWE1OGFkYWViOGZhMzBiZDcxMmFkNC4uYzk5ZDM2YWZmYWE4
NjVhOWU2YTk1ZGM1MzViNDg3NDhjN2VlM2UxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5j
bHVkZSAiUmVnaXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVj
dC5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBl
cy5oIgogI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNo
UG9wdXBNZW51LmgiCkBAIC0zMDMsNiArMzA0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVm
UHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBs
YXRmb3JtRGlzcGxheUlEKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxw
dHIgYXMgdGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVy
KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIo
R3JhcGhpY3NMYXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVTbmFwc2hvdHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAKaW5kZXggMGE0NGMyZmExYTA5NDk3Y2ZkZjU1ODg4MzJmZmRmZjEwMjMzMzBlMS4uZTI0
ZDkyZTZmM2U2MWQzOGE5YjI0NDg1ZjRkMTNkZTUwZTUzM2EyZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmIGZyYW1l
LCBjb25zdCBJbnRSZQogICAgIGlmIChvcHRpb25zICYgU25hcHNob3RPcHRpb25zUGFpbnRXaXRo
SW50ZWdyYWxTY2FsZUZhY3RvcikKICAgICAgICAgc2NhbGVGYWN0b3IgPSBjZWlsZihzY2FsZUZh
Y3Rvcik7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0
b3IpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
LCBzY2FsZUZhY3Rvcik7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGJ1ZmZlci0+Y29udGV4dCgpLnRyYW5zbGF0ZSgtaW1hZ2VSZWN0LngoKSwgLWltYWdl
UmVjdC55KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNs
aWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRl
eCA0YzM1MzMwOTE2MTlkYzY0M2Y4NzI5MDljYjcxZjc4MjhlZjg1YmJjLi4yMTA3YTllMWU5OWNm
MzUxZDllNjE2NjgwNWM0YTU2MzNhZTQ3ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VD
b25zb2xlQ2xpZW50LmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGll
bnQ6OnNjcmVlbnNob3QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwg
UmVmCiAgICAgICAgICAgICAgICAgYXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNvdXJjZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIEludFJlY3Qgc291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsK
LSAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRh
LT5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNl
U2l6ZSwgc291cmNlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdl
QnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCAqaW1hZ2VEYXRhLT5kYXRhKCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QpOwogICAgICAg
ICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5n
Il9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Ib3N0V2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKaW5k
ZXggMmNmZWNhZGMyNGQ5ODJhODYxNjM3NGI3NmEwZTRmYjBmZmY3YTlkNC4uZjVmMjE3Y2NkODQw
NjA4MDAyNTVjMjAzZDIyMTdjYWVjZTBjZTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vSG9zdFdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RX
aW5kb3cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTIzLDE0ICsyMywxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRl
ZiBIb3N0V2luZG93X2gKLSNkZWZpbmUgSG9zdFdpbmRvd19oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsK
K2NsYXNzIFJlbmRlcmluZ0JhY2tlbmQ7CiAKIGNsYXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEhvc3RXaW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAg
LTY0LDYgKzY0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNb3Zlcyhib29sKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ0JhY2tl
bmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCA9IDA7CisgICAgCiAgICAgdmlydHVh
bCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybURp
c3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBAIHB1YmxpYzoK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RXaW5kb3dfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYWI0Njg2NzY4ZjFhMjgyZDU4ODFjOTM5Nzk0
NmQ1YmEyMDA2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQaHlzaWNh
bEltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFja2VuZFR5cGU+CitjbGFzcyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIDogcHVibGljIFBo
eXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVm
ZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRh
QmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEJhc2VQaHlzaWNhbElt
YWdlQnVmZmVyKFdURk1vdmUoZGF0YUJhY2tlbmQpKQorICAgICAgICAsIERpc3BsYXlMaXN0OjpE
cmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCBmNTg2ZGQ0YjJhZjkxZjQ1NjU1MzVhNzAyOTM5MjNhZjJiYWFk
YmEyLi4zNWJkNThjM2QxMmZmODRjMGU2NjQyZjgxODI3MDk5Y2U4MzdlMjgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAt
MzUwLDcgKzM1MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpOwogI2VuZGlmCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQ7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBp
c0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNh
dmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggNDU4YWU3
MmYyYWUwMjU2MjQ3NjhlODc5ZGJkNDk2OTY0YjQ5MWIxOC4uMDBiZTBmZWEwNjA1NWNhMzFiMmM4
ODc0ZGQzNzRlZWExZDQyODQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKKyNpbmNsdWRlICJBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
aAppbmRleCBjZWVhMWRhNDBlYjMyZmY3OGExZTc1ZTE3YmZlMDA5MjAxYjc2ZjEyLi4yNmExMmRl
M2JlNGFjNmI4ODQzNjRjNTU0Mzk3ZjdmNzFjNzhhYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIldp
bmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgpAQCAtMTIyLDE3ICsxMjMsNiBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRU
ZXh0QWxpZ24KIH07CiAKLWVudW0gUmVuZGVyaW5nTW9kZSB7Ci0gICAgVW5hY2NlbGVyYXRlZCwK
LSAgICBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIsIC8vIFVzZSBwbGFpbiBtZW1vcnkg
YWxsb2NhdGlvbiByYXRoZXIgdGhhbiBwbGF0Zm9ybSBBUEkgdG8gYWxsb2NhdGUgYmFja2luZyBz
dG9yZS4KLSAgICBBY2NlbGVyYXRlZAotfTsKLQotZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHsKLSAgICBQcmVtdWx0aXBsaWVkLAotICAgIFVucHJlbXVsdGlwbGllZAotfTsKLQog
U3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwg
V2ViQ29yZTo6QmxlbmRNb2RlKTsKIFN0cmluZyBibGVuZE1vZGVOYW1lKFdlYkNvcmU6OkJsZW5k
TW9kZSk7CiBib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkJsZW5k
TW9kZSYpOwpAQCAtMTQzLDcgKzEzMyw2IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPCiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
V2luZFJ1bGUpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKLVdFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMWEwZjgxNmZk
YTgwMzAyNzk2YWEzYTNlNTliNmRmOTE5OTVkMDNjNy4uNGUyYmU3MWM3NDFjNTVmNTZjMGFkMDQ2
YTc5N2U1MGEwOTcxODhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDM4ICsyOCw0NCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJD
b2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0g
NDA5NjsKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5n
dGggKiBNYXhDbGFtcGVkTGVuZ3RoOworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZl
cihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3cpOworfQogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNw
YWNlOjpTUkdCLCBjb250ZXh0KTsKK30KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKSk7Ci0gICAg
aWYgKCFzdWNjZXNzKQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2Fs
ZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcg
c2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5j
b250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZl
cjsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRl
eHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBidWZmZXI7CisgICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJl
bmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgor
CitzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7CitzdGF0aWMgY29u
c3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExl
bmd0aDsKIAogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJiBzaXplKQogewpAQCAtMTA1LDk3ICsxMTEsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVy
OjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVj
dChyZWN0LmxvY2F0aW9uKCksIGNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAh
VVNFKENHKSAmJiAhVVNFKENBSVJPKQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JH
UkFEYXRhKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVy
IGJhY2tlbmRzLgotICAgIHJldHVybiB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8
fCBVU0UoRElSRUNUMkQpKQotCi1GbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5h
dGlvblNpemUoRmxvYXRTaXplIHNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9yU3Bh
Y2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBzUkdC
IDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6
OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5l
YXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAg
Y29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0g
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAgIH0g
ZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0g
ICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9h
dCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NS
R0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0
aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJh
bnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFVT
RShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJu
YWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdl
RGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJh
eS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zm
c2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50
OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIGlm
ICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhl
bEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUg
bHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUp
YSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywg
bHVtYSk7Ci0gICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVt
aW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlv
bnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAgICBn
ZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotfQotCi0jaWYgIVVTRShDQUlSTykKLVBs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0Rl
bnVtLCBib29sLCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlm
IHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hl
cgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCisgICAgcmV0dXJu
IGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKIH0KLSNlbmRp
ZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRv
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0yMDQsNjMgKzEyNSwyNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdAogCiAgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZm
ZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHJlY3Quc2l6ZSgpLCBjb250ZXh0KTsKIAotICAgIGF1
dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0
aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29s
b3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNv
bG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Ig
b24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2Nh
bGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29u
dGV4dCwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNy
ZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKTsKLSNlbmRpZgotfQotCi1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKLXsKLSAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdz
IHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNv
bHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNp
emUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CisgICAgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVy
biBpbWFnZUJ1ZmZlcjsKIH0KIAotYm9vbCBJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlcikKIHsKLSAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChj
b250ZXh0LnNjYWxlRmFjdG9yKCksIHRoaXMtPmNvbnRleHQoKS5zY2FsZUZhY3RvcigpKTsKKyAg
ICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKIH0KIAotI2lmICFV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0KCkgY29uc3QKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1h
Z2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJl
IGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJl
IGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8g
SXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8g
YW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRo
KCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNp
bmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVy
OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1
bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
cmV0dXJuIDA7CisgICAgaW1hZ2VCdWZmZXItPmRyYXdDb25zdW1pbmcoY29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQotI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CmluZGV4IDUzMzNjZjRlYzIyOGY5ZGIzNzNmMjU4ZTZiOWM3YjllZTRmYzhhYzAuLjAzODJiNzQw
NDI0MGY1YmY0ODE2ZWQ4YWU1ZjY2NmZjNTNlMjZjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTcwICsy
Nyw4MSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAj
aW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50
OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3Jl
Q29weSB7Ci0gICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1
YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJl
c2VydmVSZXNvbHV0aW9uIHsKLSAgICBObywKLSAgICBZZXMsCi19OworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKK2NsYXNzIERyYXdpbmdDb250ZXh0OworfQogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVf
RVhQT1JUKTsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJp
ZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwg
cG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xv
clNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9y
U3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQotICAg
IC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFu
ZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUg
YW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJs
ZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRo
aXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNp
emUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7Ci0gICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwot
Ci0gICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAg
Y29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0g
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxT
aXplOyB9Ci0KLSAgICBGbG9hdFNpemUgc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUp
IGNvbnN0OwotCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHV0aW9uU2NhbGU7IH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0OworICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNs
YW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tl
ciBvciBjbGlwcGVyLgorICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZs
b2F0U2l6ZSYpOworICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0
U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNp
emUoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShj
b25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0
IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVm
UHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNv
bHV0aW9uOjpObyk7Ci0gICAgLy8gR2l2ZSBoaW50cyBvbiB0aGUgZmFzdGVyIGNvcHlJbWFnZSBN
b2RlLCByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmUgaWYgaXQgc3VwcG9ydHMgdGhlIERvbnRD
b3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yCi0gICAgLy8gb3IgcmV0dXJuIENvcHlCYWNraW5nU3Rv
cmUgaWYgaXQgZG9lc24ndC4gIAotICAgIHN0YXRpYyBCYWNraW5nU3RvcmVDb3B5IGZhc3RDb3B5
SW1hZ2VNb2RlKCk7CisgICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBlbnVtIENvb3Jk
aW5hdGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRp
bmF0ZVN5c3RlbSB9OworICAgIEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3Rl
bSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNp
emUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExv
Z2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkg
PSAwOwogCi0gICAgdm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKKyAgICB2aXJ0
dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0K
ICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgaW50ZXJu
YWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkg
Y29uc3QgPSAwOwogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1
dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90
PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0OworICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAw
OyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1
cm4gMDsgfQogCi0jaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
KCkgY29uc3Q7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0ID0gMDsKIAotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFu
c2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJh
bnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0
Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBi
YXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0x
LCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFj
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIC8vIEZJWE1FOiBj
dXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlv
biB0aGF0IHRoZXkgb25seSB3b3JrCi0gICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Ig
b3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSwgUGxhdGZv
cm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpOworICAgIHN0YXRpYyBOYXRpdmVJbWFn
ZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBj
cmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNp
emVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVO
ZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0
YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGlj
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxl
KTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwogCi1wcml2YXRl
OgotI2lmIFVTRShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2Vy
IHRoYW4gdGhlIGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8v
IGltYWdlLCBjcm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0g
ICAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0
YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRp
ZgotICAgIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEs
IC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgU3RyaW5nIHRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkg
PSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0ID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lz
dGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKIAotICAgIGlubGluZSB2b2lkIGdlbmVyaWND
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250
ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3Mg
Q3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5l
cmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQg
Y2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKLQotcHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEg
bV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsK
LSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Ig
d2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAv
LyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgot
ICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRv
dyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVy
aW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJF
Q1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25z
dCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNjZXNzKTsKLSNlbmRpZgotfTsKKyAgICB2aXJ0
dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwg
R0MzRGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKIAotI2lmIFVTRShDRykKLVN0cmluZyBk
YXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEm
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotI2Vu
ZGlmCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2
ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgPSAwOworfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45Nzg1YzhlNzhjNDFjMzI2NTVmMTJjMjcyMDIwMWFlZTA4ZjJhZjEzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIGNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdD
b25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKK3sKKyAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgbV9pbnRlcm5hbFNpemUpOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Qs
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVs
QXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhl
bE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAg
dWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdWludDhfdCByID0gc3Jj
UGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1Bp
eGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3Jj
UGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICAKKyAgICAgICAgZG91
YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91
YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCAr
IDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBsdW1pbmFuY2VSZWN0LnNpemUo
KSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NhZTQz
NTNlOTdkODdiYjA1MjlhNmVjNDI3YTdhNzVjOTllM2U0NwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0w
LDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgor
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZTsKKworZW51bSBCYWNraW5n
U3RvcmVDb3B5IHsKKyAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVu
dCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5nU3RvcmUg
Ly8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFz
cyBQcmVzZXJ2ZVJlc29sdXRpb24geworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xh
c3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2Vu
dW0gY2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisgICAg
QmFja2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgor
ICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1
YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25z
dCB7IHJldHVybiBtX2ludGVybmFsU2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNm
b3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4g
NCAqIG1faW50ZXJuYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1YWwgc2l6
ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgTmF0
aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAg
dmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgdmlydHVh
bCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObyk7CisgICAgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisKKyAgICB2aXJ0
dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBj
b25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsg
fQorICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwg
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFBvaW50JiwgQ29vcmRpbmF0ZVN5c3RlbSkgeyB9CisgICAgCisgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsg
fQorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0MzRGVudW0sIFBsYXRm
b3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgICAgIDogbV9sb2dpY2FsU2l6ZShs
b2dpY2FsU2l6ZSkKKyAgICAgICAgLCBtX2ludGVybmFsU2l6ZShpbnRlcm5hbFNpemUpCisgICAg
ICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICAgICAsIG1fY29s
b3JTcGFjZShjb2xvclNwYWNlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnRTaXplIG1fbG9naWNh
bFNpemU7CisgICAgSW50U2l6ZSBtX2ludGVybmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRp
b25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVjMGQzNmZl
ZmJkMTJhYmU1NDNjM2YyMDM0ZjYxNThiM2QyY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIklt
YWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDE2
N2E1N2UwODUzZDVlM2ZjMzgwMjdkZDg2NDY4MDA3YTJhZTdkCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBA
IC0wLDAgKzEsMjA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFBo
eXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgQXJn
dW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6
OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZmZXIsIEltYWdlQnVmZmVyVHlwZT46OnZhbHVlKTsKKyAgICAg
ICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYm
IGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisgICAgewor
ICAgIH0KKworICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0
dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5k
LmdldCgpOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkg
eworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2Vu
ZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zv
cm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQo
KSA/IGVuc3VyZUJhY2tlbmQoKS0+YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNmb3JtKCk7
IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50U2l6ZSgp
OyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBl
bnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmludGVybmFsU2l6ZSgpIDogSW50U2l6
ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5yZXNvbHV0aW9uU2NhbGUoKSA6
IDE7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5tZW1vcnlDb3N0KCkgOiAwOyB9Cisg
ICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVu
c3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgOiAw
OyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdD
b250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNv
cHlCZWhhdmlvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZp
b3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4
dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3Is
IHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFj
a2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7
CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAg
ICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRvTHVtaW5h
bmNlTWFzaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVm
ZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQt
PnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQ
aHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVm
ZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQt
PnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
KCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlz
KS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5nZXRJbWFnZURh
dGEob3V0cHV0Rm9ybWF0LCByZWN0LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
YXJyYXksIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNo
Q29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0
LCBhcnJheSwgZGF0YVNpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5ZXIoKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBkZXN0aW5hdGlv
blRleHR1cmUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEs
IGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5
VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9y
bWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDMyMzZkNWU5
N2ZmZTY1ZTY4MTEyMGZkODVhMTUxYzJjYjRmM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVT
RShDRykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJP
KQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDsKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIEFj
Y2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFn
ZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1
ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRm
b3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZjAwODYx
ODVjZjIyODViYmYyNTU4MmY5OTcyMzlmNmU5ZDdlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNp
bmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFj
a2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQmIFJl
bmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5z
aGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0
ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdl
QnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3Bs
YXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRQbGF0
Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2QzOTIwNDA0Y2NhNWNiNGJj
MjIzMjc3NWM2NDkwMjliNWNjNTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFz
cyBXRUJDT1JFX0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGlj
IFJlbmRlcmluZ0JhY2tlbmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRv
dyogPSBudWxscHRyKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBk
ZWZhdWx0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICBSZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJjYzM5ODhmZDY0M2RhNzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAg
LTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJl
bmRlcmluZ01vZGUgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAg
RGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2Nl
bGVyYXRlZCwKKyAgICBSZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0
MDQxYjNmODEwNzY3OGM1NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2
OGQ1NjVmMTI0NDk0ZWMzMzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNsZWFyU2NyYXRjaEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90
IHVzZWQgd2l0aCBhY2NlbGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7Cisg
ICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXIuZ2V0KCk7CiAgICAgfQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3coY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IElu
dFJlY3QKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0
LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0
IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2Ug
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGll
cy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5s
YXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVy
SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IEZsb2F0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRp
bGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRp
ZXMmIGxheWVySW1hZ2VQcm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdC
dWZmZXIpCiB7Ci0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBh
bmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRl
ZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRl
ZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAK
QEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRp
bGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxh
eWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRl
bXBsYXRlU2l6ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGll
cyk7Ci0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1w
bGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsK
ICNlbmRpZgogCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRT
aGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNp
ZiBVU0UoQ0cpCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRv
bigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXll
ckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxl
cmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRv
KiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQs
MTIgKzg4NCwxMiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZm
ZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAK
ICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0
byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVj
dCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxh
eWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRh
LT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxh
eWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBs
YXllckltYWdlLnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lk
IFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJ
bWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7
CiAKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50
U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7
CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNp
emUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKaW5kZXggNDk2ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5
YS4uNzIyZWVmZmU2YzllNWZkMjg2NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXpl
IGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRl
c3RSZWN0LnNpemUoKSk7CisgICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRl
c3RSZWN0LnNpemUoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIu
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzNTZmMTk2NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0j
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1
ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYv
RGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElV
dGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBh
bmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNF
X0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklO
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMg
RmxvYXRTaXplIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSkKLXsKLSAgICBmbG9hdCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0
PihiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAg
ZmxvYXQgeU1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSkgLyBpbnRlcm5hbFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6
ZShsb2dpY2FsU2l6ZS53aWR0aCgpICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdo
dCgpICogeU1hZ25pZmljYXRpb24pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNw
YWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dD
b250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1h
cDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dD
b250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBr
Q0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNl
Q29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSAgICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5
RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3Bh
Y2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAg
ICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBj
b250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JT
cGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNv
cnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1
ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVm
ZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJv
b2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRp
b25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtl
IGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWls
ZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdo
dCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAg
aWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFz
SW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9z
aXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBB
Y2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0
KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9z
aXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBt
X3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxv
d3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3Jk
T3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8
c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5
dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50
U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51
bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhT
aXplLmhlaWdodCgpKQotICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxz
ZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0K
LSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dD
b250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUg
dXNlckJvdW5kcyA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2Fm
ZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJ
T1N1cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91
bmRzKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAg
ICAgICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dCho
b3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAg
Q0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgdXNlckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0
YS5zdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BB
UkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAg
ICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxz
LCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFh
Y2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJN
YWxsb2M6OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAq
IG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRh
dGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAg
ICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwg
a0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcElu
Zm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dD
b250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpLCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNl
LCBtX2RhdGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURh
dGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAg
SW1hZ2VCdWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAg
ICB9OwotICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEu
Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5
dGVzLnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5z
YWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRl
eHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAs
IC1tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRy
dWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9v
bCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2Fj
aGVkQ0dDb2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5k
b3csIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1
bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9h
dFNpemUgZGVzdGluYXRpb25TaXplKSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1Vz
ZXJTcGFjZShkZXN0aW5hdGlvblNpemUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5h
bFNpemUoKSk7Ci19Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
c2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlD
b3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3
ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBo
b3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0
IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNj
ZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWdu
ZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFs
Qnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkK
LSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJu
IDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19
Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAg
ICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJv
bSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEg
d2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0
YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5n
IGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBh
Y2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBk
b2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0j
ZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRh
LnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3ND
b250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNo
KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwg
Y29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0lt
YWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQo
KSkpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0
KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkp
KSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGlt
YWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBi
YWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8
IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAg
aW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJu
YWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVp
Z2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0Qmxl
bmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCks
IGxvZ2ljYWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9
IHNjYWxlU2l6ZVRvVXNlclNwYWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRl
cm5hbFNpemUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5n
ZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGlt
YWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYg
KG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVo
YXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgp
LCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGlt
YWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0g
aW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRp
b25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBj
cmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
V1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5n
U3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJh
Y2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICBy
ZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQot
ICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9t
SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGlt
YWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlm
Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9u
dENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9k
YXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdl
dCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxz
ZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlm
Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZm
ZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwot
ICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRp
b25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9k
YXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2Ug
PSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZm
ZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNj
YWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tp
bmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UK
LSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAm
Y29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGlu
dG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2Uo
aW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29u
dGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPElt
YWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8g
b3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHkt
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5k
ZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdl
KENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENv
bnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3Qg
PSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlm
IChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0g
c3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3Jj
UmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwg
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVj
dCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJj
ZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1h
dCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5h
bFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8v
IEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVx
dWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhw
bGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEs
IDEsIDAsIDApKTsKLX0KLQotc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNv
bnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5k
aWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2Vydmlj
ZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlw
ZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAg
Ly8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMg
d2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZv
dW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikp
Ci0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdV
VEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJp
bWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMg
Ym9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICgh
aW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
ZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVz
OwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5
ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXBy
ZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1
dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29u
c3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5
OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsK
LSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwg
JmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJ
bWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBp
biBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2Fs
bGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9w
ZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVz
dGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRh
dGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERh
dGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExl
bmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBl
ICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4g
ZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAg
aWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29s
dXRpb24pKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0g
ICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFn
ZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAot
ewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRp
RnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0g
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAg
ICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVk
RGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRh
U2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgp
OwotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRh
LT5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEt
PmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0
KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigp
LCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwg
ZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkp
OwotICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwg
NCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShj
b250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRv
UmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXpl
SW5Vc2VyU3BhY2UgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAg
ICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBp
bWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQo
KSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9
IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0g
ICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRh
dGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3Zl
KGNmRGF0YSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3Qg
SW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRp
RnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0g
ICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0g
ICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0
b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0
KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBj
aGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2su
Ci0gICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdo
dCgpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShz
aXplKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxp
ZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11
bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0g
ICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAg
ICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAg
YnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIEln
bm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRh
LmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEs
IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJv
dmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAq
IHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJv
dmlkZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwg
NCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICgh
ZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEp
OwotfQotCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRv
IGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVy
biBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsK
LX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAo
YXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICBy
ZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7
Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lMTE2YjZjMDUxNTM5Nzc1MGNiM2U0OTE1YmZiYTljYjczY2Y3NmMyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorCisjaWYgVVNFKEFDQ0VMRVJB
VEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitJbnRTaXplIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJ
bnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
Cit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAq
IHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07
CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2li
bGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgaW50ZXJu
YWxTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4oaW50ZXJuYWxTaXplLndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNP
dmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwg
UmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0
ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVy
biBpbnRlcm5hbFNpemU7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29u
dGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgY29udGV4dC5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUu
aGVpZ2h0KCkpOworICAgIGNvbnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRp
b25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplKQoreworICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkp
KQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGlt
YWdlLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUu
aGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdl
PiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdl
UmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxT
aXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0
KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRN
b2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxv
Z2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxv
Z2ljYWxTaXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5n
ZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGlt
YWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7
CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVy
bmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1Jl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNh
bFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0
aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdl
KGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29u
dGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0
b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NG
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJU
KE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1p
bWVUeXBlKSk7CisgICAgCisgICAgYXV0byB1dGkgPSBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUp
LmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBs
aWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwga1VUVHlwZUpQRUcpKSB7Cisg
ICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0
byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBwcmVtdWx0aXBs
aWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpLCBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2Fs
U2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOworICAgICAgICB2ZXJpZnlJ
bWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXpl
KTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3Jl
YXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUs
IG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dp
Y2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAo
bV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJh
Y2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nh
cnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGF1
dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRM
YXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dC
bGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgp
LCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5o
ZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0
KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0byBjZkRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwor
ICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZE
YXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92
ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRv
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNv
bnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5n
ZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAg
IGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNv
bHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwor
ICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNv
bnN0Cit7CisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0Owor
ICAgIGFyZWEgKj0gc3JjUmVjdC53aWR0aCgpOworICAgIGFyZWEgKj0gc3JjUmVjdC5oZWlnaHQo
KTsKKyAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRh
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0g
eyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVk
ID0gaW50ZXJzZWN0aW9uKGJ1ZmZlclJlY3QsIHNyY1JlY3QpOworICAgIGRlc3RSZWN0ID0geyBJ
bnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNS
ZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3QueCgpKTsKKworICAg
IGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3QueSgp
KTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCisgICAgICAg
IGFycmF5LT56ZXJvRmlsbCgpOworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25z
dAoreworICAgIEludFJlY3QgZGF0YVJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1NpemUg
fTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgc3JjUmVjdCk7
CisgICAgCisgICAgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3Zl
QnkoZGVzdFBvaW50KTsKKyAgICAKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBk
ZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNS
ZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVj
dC55KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBt
X2ludGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVyc2VjdChidWZmZXJSZWN0KTsKKwor
ICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgaWYgKHNyY0NvbG9yRm9y
bWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihz
cmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVs
IGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07
CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3Jj
UGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9
IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxp
ZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29s
b3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChz
cmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1Bp
eGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxb
Ml0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8
LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7
CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRl
c3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxb
M10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhl
bCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKGFscGhhID09
IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xv
ckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9y
Rm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4g
UkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1
OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
KyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlJ
bWFnZVBpeGVsc1Nsb3coCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1
aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc3RkOjpm
dW5jdGlvbjx2b2lkKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVp
bnQ4X3QqKT4gY29weUZ1bmN0b3I7CisgICAgCisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRl
c3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGNvcHlGdW5jdG9y
ID0gY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgfSBlbHNlIGlmIChkZXN0
QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQor
ICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQ7
CisgICAgZWxzZQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlVbnByZW11bHRpcGxpZWRUb1By
ZW11bHRpcGxpZWQ7CisgICAgICAgIAorICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lk
dGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAg
ICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29s
b3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJS
b3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKKyNp
ZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdl
QnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIAorICAgIHZJ
bWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLmhl
aWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhl
bENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9IGJ5dGVz
UGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1cm4gdkltYWdl
QnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0
ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3Jt
YXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB2
SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxw
aGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZv
cm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVs
cyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwg
MCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRl
c3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6
UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFn
ZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0
OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFn
ZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwor
ICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAg
ICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25z
dCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRl
Q2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAg
ICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmND
b2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRl
c3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93
cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVz
dEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAg
ICAgICBjb3B5SW1hZ2VQaXhlbHNTbG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwg
c3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0
LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFn
ZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFn
ZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBk
ZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZWxzZQordm9pZCBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFGb3JtYXQsIHNyY0Nv
bG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorI2VuZGlm
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZmUwZWE2YWEwYTk3MTI3MTIxZTNiM2E5NDIxZTE1OWVm
NWJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZl
ckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpOworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVz
ZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
MSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOyB9CisKKyAgICBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250ZXh0KEdyYXBo
aWNzQ29udGV4dCYpOworCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNy
ZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNy
Y1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxh
dGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xp
cHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUlt
YWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0
LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjFmYTZhZmI4MDMxODJiMTM5ZjdmYjRmMzUxYzg2
ODczMmY2Mjg4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTk0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFu
ZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgorI2RlZmluZSBVU0Vf
QVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpZiBVU0VfQVJHQjMyCitjb25zdGV4cHIg
Y29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKK2NvbnN0ZXhwciBjb25z
dCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdDo6QkdSQTsKKyNl
bHNlCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9ybWF0
IEJhY2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpSR0JBOworI2VuZGlmCisKK1dURl9N
QUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAg
ICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRhdGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJS
b3cgPSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2Mo
aW50ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUu
aGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdo
KGRhdGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5o
ZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwg
RGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4
dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9
IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVl
KGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0
ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChz
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RG
TW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbnRTaXplJiwgZmxvYXQsIENvbG9y
U3BhY2UsIE1hY2hTZW5kUmlnaHQpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRh
aW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisg
ICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3Zp
ZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VSVCht
X2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4
dCk7CisgICAgc2V0dXBDb250ZXh0KHRoaXMtPmNvbnRleHQoKSk7Cit9CisKK01hY2hTZW5kUmln
aHQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIE1hY2hTZW5kUmlnaHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICpt
X2NvbnRleHQ7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
Ojpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6
CisgICAgICAgIHJldHVybiBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5n
U3RvcmU6CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAg
ICBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIs
IGJ5dGVzUGVyUm93KCksCisgICAgICAgICAgICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNw
YWNlKSwgRGVmYXVsdEJpdG1hcEluZm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAg
ICAgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QK
K3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51
bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUu
d2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsK
KworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2Rh
dGEpOworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
Q29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dp
Y2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1Jl
Y3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5h
dGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3Jj
UmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1Jl
Y3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0
ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVj
dCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxl
ZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RS
ZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisgICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgc3JjUmVjdENsaXBw
ZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAg
Y29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBCYWNrZW5kQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAg
ICAgICBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRl
c3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lk
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAg
SW50U2l6ZSBzcmNTaXplU2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2Fs
ZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0
ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXpl
U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xp
cHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJl
Y3RzKHNyY1NpemVTY2FsZWQsIHNyY1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBw
ZWQsIGRlc3RSZWN0KTsKKyAgICAKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdygpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4obV9kYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0
LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplU2Nh
bGVkLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1Jl
Y3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsK
KworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0
OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44ZDI5MjM1ZmYzNTA1NTJhMjdhNjI0ZDdmMWY3NWVjYzE0YWQ3YzE5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENH
KQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFn
ZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5k
b3cqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIE1hY2hTZW5kUmlnaHQpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIE1hY2hTZW5k
UmlnaHQgY3JlYXRlU2VuZFJpZ2h0KCkgY29uc3Q7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0
aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsK
KyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3Qg
SW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJv
dygpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2
b2lkKiBtX2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92
aWRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdh
NTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5l
cy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUg
PEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRp
c3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEku
aD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAt
PiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpKQotc3RhdGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1
ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMu
ZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3Ig
IT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAz
LCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEg
ZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07
Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBr
dkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShj
b25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0g
ICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChr
dkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFu
bmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JB
LCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAy
LCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAm
ZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUp
ICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5w
dXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0
KTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAg
IHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJv
dzsKLSAgICBzcmMuZGF0YSA9IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAg
IGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0
LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJ
bWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShp
bnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0
KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lk
dGggKiBoZWlnaHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAg
IHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFj
a2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6Okxv
Y2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9j
ay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJS
b3coKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRh
dGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZykgY29uc3QKLXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9
IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgp
OwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1
bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhY
KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54
KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgp
IHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnpl
cm9GaWxsKCk7Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVz
dHggPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAo
b3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHgg
PSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3Rk
OjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0g
ICAgaWYgKGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBz
aXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0g
ICAgCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAg
IENoZWNrZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAw
KSB7Ci0gICAgICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7
Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4o
ZGVzdGgudW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5k
eS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdo
dCgpOwotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAg
ICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0
YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2ln
bmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYg
KCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51
bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMu
cm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93
czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53
aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIK
LSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQot
ICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGgg
KiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgot
ICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2Ug
aW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3Jj
Um93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJh
c2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFz
ZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9B
UkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdl
dCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFz
ZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1ti
YXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAg
ICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5
dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkg
KiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3Jj
Um93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGgg
PSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAg
ZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11
bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBj
b25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdl
UGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90
IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxw
aGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
fQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
dXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJl
Y3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0g
ICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVj
a2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVj
dC54KCkpOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHNpemUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NF
UlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVH
ZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHgg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAg
IEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hl
Y2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNl
UmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9p
bnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnku
dW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50
PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgp
KTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAg
IENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNS
b3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54
ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVp
bnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewot
ICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
ICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAg
c3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0g
aGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jv
d3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0
LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRl
c3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0Iz
MgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQot
ICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
I2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7
ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQo
KTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAg
ICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMy
Ci0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGlt
YWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4
ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXgg
KyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nl
c3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5i
eXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRl
c3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdklt
YWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwot
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93
Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVp
bnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAg
IGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBk
ZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAg
ICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAg
ICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAg
ICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNl
eCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsg
Ml07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jh
c2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5
NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJ
bWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBz
dHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJf
dCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNl
OwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93Owot
ICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdh
cmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJp
dG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsK
LQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBm
b3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44YTQxNDYwZjQ4NDM0MzgyOGYzYzJlNTRlNmRkMDZkNGQ5Y2Y4OTBl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0Uo
Q0cpICYmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
KyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAg
ICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoaW50
ZXJuYWxTaXplLndpZHRoKCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaW50ZXJuYWxTaXplLmhlaWdo
dCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVy
biBpbnRlcm5hbFNpemU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNp
emUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBp
ZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUsIGludGVybmFs
U2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2Up
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4g
Y2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwor
ICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29u
dGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJv
KCksIGludGVybmFsU2l6ZSkpOworICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
KHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0
KQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5h
bFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKSk7
Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ0dC
YWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVCht
X3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dChjb250ZXh0KCkpOworfQorCitJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRS
aWdodCkKKyAgICA6IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50
ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIElPU3VyZmFjZTo6Y3JlYXRl
RnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UpKSkKK3sKK30KKworTWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+
Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5l
bnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRl
cygpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVy
Um93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQor
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNy
ZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lu
a0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2lu
dGVybmFsU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBj
b25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJl
YSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2Fs
U2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOworCisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50
OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFz
ZUFkZHJlc3MoKSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgp
LCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAg
ICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRS
ZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJh
eSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVk
LCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3Jj
UmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEo
KSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisK
KyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBzcmNS
ZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7
CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBvdXRwdXRG
b3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0
UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3Jj
U2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVj
dDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2Fs
ICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAg
SW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXpl
U2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVj
dCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFj
Y2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIGRlc3RSZWN0Lnko
KSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93
cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsg
c3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhpbnB1dEZvcm1h
dCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVz
UGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEZvcmNlIHJlY3Jl
YXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRo
aXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwg
MCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cp
ICYmIEhBVkUoSU9TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44YTliYjE3OWZiMTk0ZGM2YjQ3MWU5MWJiMzExYzRjYzcyYzdhM2YwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykg
JiYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsK
KyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsK
K3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRl
cm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hT
ZW5kUmlnaHQpOworCisgICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5k
UmlnaHQoKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNv
c3QoKSBvdmVycmlkZSB7IHJldHVybiBtZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdl
UHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgp
IG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQm
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3Rl
bSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9T
dXJmYWNlPiYmKTsKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdW5zaWduZWQg
Ynl0ZXNQZXJSb3coKSBjb25zdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1f
c3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykgJiYgSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4IDg5
ZDA0MzljMjEwZGI1MDFhYzkzOWViMTE0MTQ4ODFlZWVjNjViMjQuLjVjN2IzMzZmMTAzMjQwMDgy
NjIwZWM4ZmI3MTk2NDU4NjJkMzU4NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCkBA
IC0yNiw3ICsyNiwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCIKIAorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxJ
bWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MSw0ICs0NiwxMDYgQEAgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0
IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCop
bGFzdEJ5dGU7CiB9CiAKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJp
bmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0
YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlv
bkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGtVVFR5cGVKUEVHKSAmJiBx
dWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAg
Ly8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGlu
YXRpb24uCisgICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJl
ckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxp
dHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5
Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNz
aW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRp
Y3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlD
YWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgfQorCisg
ICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNr
IGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgK
KyAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8g
d29yay4KKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwg
aW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5h
dGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxD
RkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OworCisgICAgYXV0byB1dGkgPSBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3Ry
aW5nKCk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBo
YUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291
cmNlLmRhdGEoKS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0
YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwga1VUVHlwZUpQRUcpKSB7CisgICAgICAg
IC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51
YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQg
KiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0
aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAg
ICB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBhbHBoYSA9IGRhdGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1
NSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhh
IC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFs
cGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAq
IGFscGhhIC8gMjU1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZm
ZXJbaSArIDBdID0gZGF0YVtpICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9
IGRhdGFbaSArIDFdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAy
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBr
Q0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisg
ICAgICAgIGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVy
aWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3Vy
Y2UuaGVpZ2h0KCkpOworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5o
ZWlnaHQoKSwgMCkpOworICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndp
ZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8s
IGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
KTsKKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1
dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZE
YXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+
IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENG
RGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBt
aW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChj
b25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBt
aW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1p
bWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRh
dGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsK
KyAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0
aChjZkRhdGEpKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEo
Y29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwg
bWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgp
KTsKKyAgICByZXR1cm4geyB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXgg
MTYxMjhhMTlhYmQxZmI4M2FiMzFhMTE1YzY4OTUwNDkxZDQxOTU1Mi4uZWM1Y2U0M2Y0ZDFiNTcy
NTQ3N2EyM2FhNGZjOGI2ZWJmNzBkNDJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAt
MjcsNiArMjcsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7
CisKIFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChj
b25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIAorYm9vbCBlbmNvZGVJbWFn
ZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
Q0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWlu
dDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KTsKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3
ZTAwNTYzMzMyNTg4MjNjLi4yODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
UkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1
MWIxNzRiNmIyNGJhYzUzNjRjOWEwNGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFk
MGUxMTczNGRhYjIxNGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTEwMCwxMCArMTAwLDYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1
cmZhY2VSZWYsIENHQ29sb3JTcGFjZVJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAg
ICAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1
cmZhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAx
MDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUw
ZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5o
IgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNp
bXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEku
aD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJl
ZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElP
U3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0
YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9y
QmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVf
dCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhl
bCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZi
NzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4
XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAog
ICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBA
IC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJD
b3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlm
MWNlMjczNTQ1MGJkYWMzYmJkZjExYTMwODVkOWE3ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
RGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJh
d2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2Nv
bnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rp
c3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2Fs
U2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxE
cmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBj
b25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3Ry
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAg
IG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsK
KyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3Jl
cGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOwor
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdy
YXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7Cisg
ICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8g
RGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFi
ZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEz
ZjIxMjYxNzE3ZGQxZDg1OGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4
NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
ICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAg
SW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkp
OwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhl
bEFycmF5RGltZW5zaW9ucyk7CisgICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdl
UmVjdCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0
b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50
U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOwor
ICAgIHBpeGVsQXJyYXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2Nh
bGUoKSk7CisKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVD
b2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJl
Y3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNp
emUoKSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2Fm
MDZjMDFhN2M3OGE3ZmI5NDdkNDA1ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBA
IC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIg
d291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJl
YShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3Jj
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRv
d0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVt
KTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5h
dGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAg
ICByZXR1cm47CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJy
YXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0
aCgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBz
aGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0
ZVN5c3RlbSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCks
IHNoYWRvd0FyZWEsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7
CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
CmluZGV4IDQ5ZThjNWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1
YjEzN2Q4MjJjNzAxNTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsK
ICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsg
VW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAx
IH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1
NTA3NGEyZjk3MmI1OTBmYS4uNWM4YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBG
aWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRp
b25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAo
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0
aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVj
dCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXko
Km1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVm
ZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
OwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lk
IEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
OwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkMGI3MjBkOTZiN2FhNDg2MTY2ZjA1ZjZkYTI2
MWEwMTI5MDVmN2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIDogdWludDhfdCB7CisgICAgUHJlbXVsdGlwbGllZCwKKyAgICBVbnByZW11bHRp
cGxpZWQKK307CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChX
VEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAppbmRleCAxYzY2YWQ3OWNlNDBjMTQ1NThmNjY1MjUy
YjI1ZTNiYjdkZWQxNmJkLi44OTdjZTQwZDA0YzdlMGFkMWVhMTkyY2I5MTA2MTlmOGY5MjIyNGNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFs
dGltZVZpZGVvU291cmNlLmNwcApAQCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdl
QnVmZmVyKQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0
ZWQpOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXpl
KCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCmluZGV4IGQ1YjkxYjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0
NTguLjhmNTBlNTc1NzFkN2IzODUwMGVlZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAg
IAogICAgIGVuc3VyZUxheWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIo
cmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxl
cmF0ZWQpOworICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRl
dmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRl
cnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFp
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQy
MDI5YTJkNDQ2NGRmNWNiN2IzYTQ0MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5
ODRiNWQyYjUyMWE2OTkxYzYxNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcApAQCAtMTgxLDE0ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBT
aGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMK
ICAgICBJbnRSZWN0IG1hcmdpblJlY3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBh
dXRvIGludGVydmFscyA9IG1ha2VVbmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJl
Y3QuaGVpZ2h0KCksIC1tYXJnaW5SZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRo
aXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1h
Z2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAo
aW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBw
aXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1h
Z2VSZWN0LnNpemUoKSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAg
ICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwog
ICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBm
b3VyIGJ5dGVzOiBSR0JBLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNk
Mjk3NzViODQ2ZjA1OWQ1YTJjYTcxM2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFj
ZTcxN2VjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgYwogCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2Ug
JiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTog
VGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVy
YXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcs
IHRob3VnaC4KLSAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JT
cGFjZTo6U1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2
M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFi
YTkzOGQwZDllMjYzNGQ4ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVs
dGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwg
ZWZmZWN0aXZlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUs
IGNvbnRleHQpOwogICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1f
cmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4
Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25j
YXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAg
ZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwg
dGhpcyA8PCAiIHBvc3RBcHBseVJlc291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApp
bmRleCAxNzg3ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5
Nzg3MjIwNDY1YmM2YWVjMGI1ODA0YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEs
NyArNzEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50
ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFj
ZTo6U1JHQjsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNo
b3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRj
aCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNr
ZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0
ZWQsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwog
ICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgy
MTQxMWFkZTc3NTA4NTYxNjg4NTZlZDIyYjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4
ZDNhNzlmYjQ5NWRkZDRmMGY0M2Q5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCkBAIC0yMTgsNyArMjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVy
YXRlZCBkcmF3aW5nIGZsYWcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIp
IC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
Q01ha2VMaXN0cy50eHQKaW5kZXggNTMyNjc4ZjM3NjAzM2MzYzAwZjlmNmJkNWEzMGMzODY5MGUz
MzRiZi4uMGFiOTIwMTYyNGU4NjBhMGQ5Y2MwZjA3MTlmYTYzMTVmMmYxNTYyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0CkBAIC0xNyw2ICsxNyw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dlYktpdF9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dF
QktJVF9ESVJ9IgogICAgICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lU
X0RJUn0vR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05l
dHdvcmtQcm9jZXNzIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBlZGZiNmUxZTA1
ZTU2NDAwOGI3ZDU3YTg3NDUzNzhjNDNkNjZjZjk2Li43YTUyMTQyNWZmOTMxNzJiNWFiN2UxZGMy
NDIwYWZlNjVjOTc2ZjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CkBAIC0xNSw2ICsxNSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9I
RUFERVJTX0RJUikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19E
SVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3Mu
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVBy
b2Nlc3Muc2IuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMiw2ICsx
MDQsNyBAQCAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2Vz
L0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNv
ZGVjcy5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKaW5kZXggZGZiYzBlZmU2Yjg0NzI2Zjk2Yzg5ODI4Y2Q4M2QwZWQ3NTkwNWEw
Ni4uOTBkOTExMWZkMTBlODYzNDViN2VmNGZmNTNiMTU5YTBjMzEyY2FjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIw
LDEyIEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdp
blByb2Nlc3NQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2Fn
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2lu
UHJveHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZUltYWdlQnVmZmVyTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAt
MTQyLDYgKzE0OCw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VS
ZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVz
c2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTI5
MDkzMDk3Y2Q5YmRlYjM0NWExOWE1ZDM3ZmU1N2E1NDBkZWI3MC4uNWFkZTlkNDc0YjI2MjVlZjQx
MzgzMjZhY2I1ODRjOWEwY2RlOTI2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
MjUsNiArMjUsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAg
ICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9t
ZWRpYSBcCisgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAg
ICQoV2ViS2l0MikvR1BVUHJvY2Vzcy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1By
b2Nlc3MgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2
ICs1Myw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlv
biBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL0dQVS9tZWRpYSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL01lZGlhQ2FjaGUgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDYyMGI0MWYyOGQ2Njc2YTNkZTE3
ZjQ3NmIyZGYzODhmZmY2NDc3MGQuLjNkZTMyZDAzNGRkMDRlOTcwMjBiNTNiMWNhZjE0ODZlY2M0
MzIwNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE2MCw1MiArMTYwLDcwIEBAIExpYldlYlJUQ0NvZGVj
c1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94eSgp
CiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
cikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nl
c3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBN
ZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKyAgICAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KKwogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNz
YWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdl
YlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorICAgIAogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90
ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBsaWJXZWJSVENDb2RlY3NQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9p
ZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlF
bmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHko
KS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5
bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CiAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3Jl
YXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmlu
Z0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAg
ICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaAppbmRleCBmNDg1OTY0ZDQ2YzUyZTMzOGQyYWJlNGY3NjVkZGNiNWE5NGEwNzkw
Li4wMjcwMzdmZTk5NDY0MDlmMDZjMjNiZjZjZWNkMzc4NTNhNTZlN2I4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAg
LTI4LDEzICsyOCwxNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNS
ZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVk
ZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgi
CisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJD
b3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2lu
Y2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1
ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIApAQCAtNDcsMTggKzQ5LDIwIEBAIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyUHJveHk7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6IHB1
YmxpYyBSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6Q29u
bmVjdGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M+IGNyZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZp
ZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAgIHZp
cnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6
TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3Nh
Z2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBt
X2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQ
cm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7
IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsK
ICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRl
bnRpZmllcjsgfQogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlcigpOwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTc3LDE0ICs4MSwy
MSBAQCBwcml2YXRlOgogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lk
IGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwotICAgIHZvaWQgZGlkUmVjZWl2ZUlu
dmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsK
ICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JikgZmluYWw7
CisgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+Jik7CisKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpOwogCiAgICAgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7CiAK
ICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVByb2Nl
c3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VS
ZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlBy
b2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVJlc291cmNl
TWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyUHJveHk7CkBAIC05Niw2ICsxMDcsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09B
KSAmJiBVU0UoTElCV0VCUlRDKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaWJXZWJSVENDb2RlY3NQ
cm94eT4gbV9saWJXZWJSVENDb2RlY3NQcm94eTsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluCmluZGV4IDNkNDBhNTcxMmUwMmQxNDlkMTRmOTJmNTZlNDQ1MzQ2YzAxMjIxZDguLjkzMmMw
MTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJjNTI1OWJhNGQ3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
LW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgeworbWVzc2FnZXMgLT4gR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CisgICAgdm9pZCBD
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFj
a2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWYyN2M4ZmEzZTdiODUw
ZTEzN2JhZTMyZWRkYjhhNzE1ZTg0NmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAK
QEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikK
KyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKGltYWdlQnVm
ZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQoreworICAgIGlmIChh
dXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVj
ZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIu
dG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgp
KQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdo
dCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dChjb25zdCBE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaENvbnRleHQoZGlzcGxh
eUxpc3QpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElk
ZW50aWZpZXIoZmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTE2YTE0M2U3
N2IyMjJjMzU1MThkM2Q1NjZmZjNhOWU1YTIxYmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkK
KyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH5SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6Ok1lc3NhZ2VT
ZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNv
bnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgTWFj
aFNlbmRSaWdodCk7CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAg
dmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRp
ZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGFlNzhlMmNlNGFi
OTUxOWI2NWFiODRiNGQ3MmRkZWI1ZWM5NThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90
ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6Oklt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgxMDM3MWRlM2FlOTA2NDE3MTVlZDFjODkxNmMy
NDQ1ZDdjZThhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDogcHVi
bGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIg
PSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBC
YXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVy
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4g
QmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0
ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAg
ICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRy
PEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNr
ZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJlbW90ZUNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2Vu
ZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2Vu
ZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNyZWF0ZVNlbmRSaWdodCgpKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZVBoeXNp
Y2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOworICAgICAgICByZXBsYXll
ci5yZXBsYXkoKTsKKyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4
dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mY2VlM2U3YzE5ZjQ1Njg5ZWY1YmUyNWNhODMxMTUwN2M4
M2E2NzdlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFn
ZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ZjliYjVkNmJiZWZjZWIxMzg4YmY3
ODQ2ZmI0N2I5NWQ4YmU0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBA
IC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpj
cmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
Cit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisg
ICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7Cisg
ICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1l
c3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0
Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50
NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50
b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBp
ZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVB
Y2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJl
bmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAg
ICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUo
bG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisg
ICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZlck1h
cC5hZGQoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Cit9CisK
K3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICAvLyBDcmVh
dGVTdXJmYWNlIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBv
bmUuCisgICAgaWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRp
ZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM5OTM4YmVlNTExZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUg
IlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNw
YWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHBy
aXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2Vp
dmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KCk7CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXI7IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAg
IC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJl
Y2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdl
QnVmZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKTsKKworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4+
OworICAgIEltYWdlQnVmZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4N2Y4MDJjMzZm
ZDk1N2JjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAg
LTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmll
cikKKyAgICB2b2lkIFJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRp
ZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBmOGJj
ZTE0NTUwN2RmNDllODllZDRmNzE5ODc2ZTEwYmY3MDk2YmRlLi5lZDllMTc3ZGIzZmUxNjA3ZWNh
ZDMzNTdiYjkzNjM1ODM1MTAyZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0
IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24n
CitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2Fn
ZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVG
Q09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VT
X0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNf
dGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQo
WwogICAgICAgICAnTWFjaFNlbmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAn
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xv
clNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVu
dGlmaWVyJywKQEAgLTIxMSw2ICsyMTQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9y
d2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAg
ICAgICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVu
dGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2Vi
Q29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2Vydmlj
ZVdvcmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9y
Q2xpZW50RGF0YScsCkBAIC0yMTgsMTAgKzIyMiwxMyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3Rf
YmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJl
Z2lzdHJhdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0
aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcs
CisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAg
J1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJI
b3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVt
b3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6UmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXInLAorICAg
ICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OlJUQ0RlY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2Rlcklk
ZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXInLApAQCAt
NzYyLDEzICs3NjksMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6
CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBhc3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2Fn
ZSkKIAotICAgIGlmIGFzeW5jX21lc3NhZ2VzOgorICAgIGlmIGFzeW5jX21lc3NhZ2VzIG9yIHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgog
ICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlJXNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKVxuJyAlIChyZWNl
aXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZ
X1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tc
bicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVE
X1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0
byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogCiAgICAgICAgIHJlc3VsdCAr
PSBbYXN5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdl
IGluIGFzeW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdB
TlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKVxuJykKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgaWYg
KHJlY2VpdmVyLnN1cGVyY2xhc3MpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICVz
OjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTtcbicgJSAocmVjZWl2ZXIu
c3VwZXJjbGFzcykpCiAgICAgICAgIGVsc2U6CkBAIC03NzcsMTMgKzc4NywxNiBAQCBkZWYgZ2Vu
ZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J31cbicpCiAKLSAgICBpZiBzeW5jX21lc3NhZ2VzOgorICAgIGlmIHN5bmNfbWVzc2FnZXMgb3Ig
cmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9p
ZCAlczo6ZGlkUmVjZWl2ZVN5bmMlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2
ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19h
dHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtc
bicpCiAgICAgICAgIHJlc3VsdCArPSBbc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwg
bWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2
ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVT
RURfUEFSQU0oY29ubmVjdGlvbik7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5V
U0VEX1BBUkFNKGRlY29kZXIpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNF
RF9QQVJBTShyZXBseUVuY29kZXIpO1xuJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggMWRlMzA0MmMwNzkxNjVhMWQyNWE2ZjRiNThkNjYwOWE2
NTY2MDJmOC4uYWE4OWY2NWFiYjQ2NDY4NjljODMwYjk1ZmRmNzU2NGNjMGUyNDNhMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTI2LDYgKzI2
LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L0F1dG9wbGF5RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CkBAIC03ODksNiArNzkwLDI2
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U2VyaWFsaXplZEF0
dGFjaG1lbnREYXRhPiB7CiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24+IHsKKyAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24s
CisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwKKyAg
ICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQKKyAgICA+
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkLAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlOjpEaXNwbGF5TGlzdCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1vdGVB
Y2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1vdGUKKyAgICA+Owor
fTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xvclNwYWNlPiB7
CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKICAgICBXZWJDb3JlOjpDb2xvclNwYWNl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKaW5kZXggMzA2Y2QxZTY5MzU2NjFhZDQxYzA2MDkyODQ4YmY5YWYzNmIxYjcy
Ni4uMzUyZTM0MWU2NDI1OTI0N2U1YjYxZjUzODM2NTMyODYwZTU1ZDQ5MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CkBAIC0zMSw2ICszMSw4IEBAIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZS5jcHAKIEdQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZUxvYWRlci5jcHAKIEdQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0FkQ2xp
Y2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWN0aXZpdHlU
cmFja2VyLmNwcApAQCAtNTE0LDYgKzUxNiw4IEBAIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlh
UGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlci5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
TUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVN
ZWRpYVJlc291cmNlUHJveHkuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0Nv
ZGVjcy5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJpdmF0ZS5jcHAK
IFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJvdmlkZXIuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKaW5kZXggYWJjOGI4NTkyZmIyNjcwMGI1NmMwZjQ3Njg3NTkwY2YyYjA2ZTY5
MC4uMWJhNzM0YmFjNzRmZjg0OTg3ZDE3ODk5Mjg1ZjU0MDIyYjRkOGExNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dApAQCAtNjMxLDExICs2MzEsMTUgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3Vy
Y2VzCiBFZGl0YWJsZUltYWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAK
IEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90
ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRj
aFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBjZjBiM2JlZTdlMDJmZDI2ODEzOTkzYzM1NWEwOThlMzUyZWI4MjMw
Li5lY2RhN2JlOTJkYWVlYjQ4ZmJmMTllNDNkM2YwNTUxODBlYjU2YTM0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5NTQsOCArMzk1
NCwyNiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hB
Y3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJl
UmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYy
MzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8q
IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNo
UG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk4MjNBRDJGRDYw
MEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFF
OUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAv
KiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2MDIz
QzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5
RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhF
ODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90
ZUltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjND
IC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIz
QyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTgyM0IzODQy
MTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1
QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUMyM0I0
QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRTIzQjU2Qzg0MDBG
NjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0
ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdL
V2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQy
RDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzgzLDYgKzY0MDEsNyBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEyRjIzOUIzQjBDMDA5NTk4
RTIgLyogbWVkaWEgKi8sCisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmlu
Z0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywK
IAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
ICovLAogCQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlv
bi5oICovLApAQCAtNjM5OSw2ICs2NDE4LDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5
MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJ
CQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMUYxRTk3MjNB
RDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOThFMjNCNjMz
Q0EwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8q
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQw
MDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCkBAIC03NzcxLDYgKzc3
OTEsMzggQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFOUEyM0FEMkZE
NjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAorCQkJCTcyMUYxRTk4
MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIx
RjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW4gKi8sCisJCQkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQzIzQjRDODIzMDBG
NjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MkQ1QzJF
RDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJ
CQkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIz
QyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIuaCAqLywKKwkJCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VC
dWZmZXJJZGVudGlmaWVyLmggKi8sCisJCQkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJl
bW90ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyog
UmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyog
UmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAw
MjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIz
QUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcy
RDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywK
KwkJCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
ICovLAorCQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8q
IENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmNwcAppbmRleCAxOGU5MzZkZTMyMzA3NzBmMjQzNjFiNmFiYWE4ZTE3ZTRkMmU1YWMwLi4x
ODhmYWMyMGExZTkyM2RmNjJiYjFhMzgwNTUwYWFhNGY5NGQ4ZTM2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAt
NjAsMjkgKzYwLDM1IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6
Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2Vp
dmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwg
SVBDOjpTdHJpbmdSZWZlcmVuY2UpCi17Ci19Ci0KLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246
OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+
KCktPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CiAgICAgICAgIGlmIChhdXRvKiBjYXB0dXJlTWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI+KCkpCiAgICAgICAgICAg
ICBjYXB0dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0Nv
ZGVjczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNl
bmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3Bh
dGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7
CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggMzFjNjEwNDY2OWYyZjAyZmZhNDQwZmViODgwOTI2Yzc0
YWUyNmFjZi4uNmQxYjgzZGU1ODM2YWZhZTIxYWZjMzRmNThhMjJlNWQ2ZDMyM2M3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
aApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUg
IkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBA
IC00Niw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAg
ICAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rp
b24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVy
TWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogcHJpdmF0ZToKICAgICBH
UFVQcm9jZXNzQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwpAQCAtNTMs
MTAgKzU1LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAg
ICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7Cisg
ICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKICAgICB2b2lk
IGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
TmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4m
KTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBH
UFUgcHJvY2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAg
SVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5
NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAy
Njk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyAr
MjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9j
ZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rp
c3BhdGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmJiZGQ4NjM0MDUyMDVhZGE3ZWYzY2M3Mzg0
NjAxOWZiMTk5M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAs
MCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09i
amVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+Owor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MDdlYWY5NDRiYTM4ZjBhOTk0YTViZTUyNDE5NTlmNGFjODhhNTkyMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdl
QnVmZmVySWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJZGVudGlmaWVy
VHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRhNTFiNGNlODBmN2IxYTZlY2JjODJiZTQ2NWQ5YTgxZmQxZDM5ZDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlcjo6
UmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
KyAgICA6IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpCit7CisgICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGlu
IHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2
ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAq
dGhpcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVJbWFnZUJ1
ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9
CisKK1JlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIoKQoreworICAgIC8vIFVu
LXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBt
ZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8v
IFJlbGVhc2UgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIobV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworSVBD
OjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUlt
YWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK2Jvb2wgUmVtb3Rl
SW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKQoreworICAgIFJlZjxJ
UEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVj
dGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdl
QnVmZmVyOjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQ+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
LCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VB
cnJpdmVzKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRp
ZmllcigpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
OworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxN
ZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcj4obV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5n
SWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjplbnN1
cmVVcGRhdGVkQmFja2VuZCgpCit7CisgICAgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIE1heFdh
aXRzQ291bnQgPSAzOworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291
bnQ7ICFpc0JhY2tlbmRDcmVhdGVkKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3Vu
dCA9IE1heFdhaXRzQ291bnQ7IGlzUGVuZGluZ0ZsdXNoKCkgJiYgd2FpdHNDb3VudC0tOyApCisg
ICAgICAgIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1
ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNo
SWRlbnRpZmllcikKK3sKKyAgICBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyID0gZmx1c2hJZGVu
dGlmaWVyOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sK
KyAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcjo6
Z2VuZXJhdGUoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpG
bHVzaENvbnRleHQoZGlzcGxheUxpc3QsIG1fc2VudEZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VC
dWZmZXJJZGVudGlmaWVyKTsKKyAgICBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI1NmUzMWQwY2FmMjA2ZWU1
MDZjOTc5NjkwNWI3ODQwYTQ5YjhhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VT
ZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJp
Z2h0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlcgor
ICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNz
YWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIH5SZW1vdGVJbWFnZUJ1ZmZlcigpOworCitwcm90
ZWN0ZWQ6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpD
b2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1l
c3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBCbG9ja2VycworICAgIGJvb2wgd2FpdENy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworICAgIGJvb2wgd2FpdFNldEZsdXNoSWRlbnRpZmll
cigpOworCisgICAgdm9pZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgIGJvb2wgaXNQZW5k
aW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNl
aXZlZEZsdXNoSWRlbnRpZmllcjsgfQorCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
IG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSwgTWFjaFNlbmRSaWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVh
dGVkKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIpOyAgICAgICAgCisgICAgdm9pZCByZW1vdGVGbHVzaENvbnRleHQo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50
aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3Nl
bnRGbHVzaElkZW50aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNl
aXZlZEZsdXNoSWRlbnRpZmllcjsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4Nzc1NTdjMGFhOGM4YTkw
NTA0YTEzNTgwZGE1OTFhYTViZmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdl
cy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisj
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdl
QnVmZmVyIE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNh
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNw
YWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICB2b2lkIFNldEZsdXNoSWRlbnRpZmll
cihXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30K
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzFjN2FkODA0YzJjNDFmZWQx
NmNiMTA2YzY2ZDA5Zjc0MDM1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5o
CkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVibGljIERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZm
ZXIgeworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQorICAgIHsKKyAgICAgICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+KG5ldyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgICAgIDogQmFzZURpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIoc2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlcihzaXplLCBy
ZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBN
YWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9iYWNrZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1v
dmUoc2VuZFJpZ2h0KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2Vu
ZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICAgICAgcmV0dXJuIG1f
YmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90
ZUZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4MzNkMzZlNDZj
OGIwMGVhOTE5ODM5MzY4MTgzNDExZjc4NWMwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9QbGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2lu
ZyBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTUxMTdiNWUxM2VjYjYwNmQ0NTIyZGY0N2Iw
ZWQyYzJhMWU5MzBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdC
YWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQoKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQoKQoreworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQor
CitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7Cisg
ICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQo
TWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0
aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9
IFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VC
dWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5n
TW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpbWFnZUJ1
ZmZlciA9IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmlu
Z01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgfQor
ICAgIAorICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmJlOWRjYmQ2MGYzOTU4NzdmNDhlNTE3
MTg1MDlkOWQxZjQ0YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCww
ICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0Jh
Y2tlbmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQKKyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kCisgICAgLCBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5k
PiBjcmVhdGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisKKyAgICAvLyBJ
UEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNrZW5kCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhv
c3RXaW5kb3cqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kKCk7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZDQ2NWZiOGM2Zjc3ZjdmZGUzOGY2OGNiYjA3NTI0NmM5OTRkYjFkNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlw
ZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZp
ZXI8UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlPjsKKworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApp
bmRleCA0NmQxMTk4NzcyYzUxYjhhZDkwZWY4YTE3MTMyMWZmY2UyOTBmY2Y5Li5iMDI5MjFlMDYx
YTYwZTMzNTA4ODdlN2IwODkzMjRlYWI4ZWEzZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKQEAgLTQyLDYg
KzQyLDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCiBzdGF0aWMgd2VicnRjOjpXZWJLaXRWaWRlb0RlY29kZXIgY3JlYXRlVmlkZW9EZWNvZGVy
KGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCkKIHsKICAgICBpZiAoZm9ybWF0
Lm5hbWUgIT0gIkgyNjQiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3NWQ3Yjhj
YzEwZmZhMDA4MDNkNDgyMTczYmU1YTM1NThhLi40ODFmYWFhYWNhZDIwZDI2MzllODVkMTY1NjNi
ZWIyODcyZTAwZGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMzksNiArMzksNyBAQAog
I2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJQYWdlQmFubmVyLmgi
CisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlVzZXJEYXRh
LmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3Vt
ZW50Q29kZXJzLmgiCkBAIC04ODEsMTUgKzg4MiwyMiBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSog
V2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlz
cGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1
dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBk
cmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0Jh
Y2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpOwogI2VuZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhp
Y3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5o
CmluZGV4IGZkYTMzOGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFmNjc5NGVkMWMyY2QuLjRkZWRmZWU3
ODQxMTY1ZTU3N2Q5NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAg
LTIzMSw2ICsyMzEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVm
cmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9y
bURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qg
ZmluYWw7CisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdU
cmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQppbmRl
eCBlZjAzNTAzNDJiYjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEwNjliNTdm
YmY2NTk0ODg3NTQxMjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5t
bQpAQCAtMjAyLDcgKzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNs
aWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFuZCB3
aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0aCBG
cmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFi
dWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjYmFkNWIxOGIwNjI5Y2M4MGNi
YzI5MjI5NmU1NDZkMTk0MmIxYzVhLi5iMmI4YmExNWE0NDgwMGMyMDU5YzMwYTg0MWRkZmM3NzYz
MWE5NjBkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMDcgIFNhaWQgQWJvdS1IYWxs
YXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFz
IHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
OgorCiAyMDIwLTAxLTA3ICBQYWJsbyBTYWF2ZWRyYSAgPHBzYWF2ZWRyYUBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJlLXN5bmMgd2ViLXBsYXRmb3JtLXRlc3RzL2NvbnRlbnQtc2VjdXJpdHktcG9s
aWN5IGZyb20gdXBzdHJlYW0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9j
YW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3MmFjY2E4
Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2YmZiMzk3
MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAKKyhzYXZl
CisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikK
LSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikKKyAgKHN0
cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNoYWRvd3Mt
aWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBz
aXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387006</attachid>
            <date>2020-01-07 11:36:13 -0800</date>
            <delta_ts>2020-01-07 13:23:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200107113612.patch</filename>
            <type>text/plain</type>
            <size>362955</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkwMjhlY2U1ZGZlM2Zi
ODMwYmQwNWQ1OGI0NGIyNmRlZGVjZGU3YS4uMWQ5MjQ0NzIwZjk2YWE3N2FkYzE2YmY0Mzk3ZTY5
NmU3Y2E3M2Q3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6aW50ZXJuYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVy
OjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxl
cmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVz
UGVyUm93IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAy
MDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OWI4Mzcy
ZTE5OTkwOGM0ZGRkYTcyMmYxZGI4ZDk2M2ZhODY2ZWQ0Li4wYzdmZDcyYjFjMjMwMmZmNjhmYjRm
YTdhZTU0ZGM4NWRjZTA1YzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDIwLTAxLTA3
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAo
V2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
bGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAg
ICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToK
KyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1l
c3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgor
CiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IGM3NGVmYTlmNzQwM2U5NzYyOGRlMTRhODM5YWUzMzgyNWNhZGYzZjUu
LjRlMDRiYzkzYmY5ZDUxOGIwMzcxYjBhZTAwY2VhOGEyOWE3Y2QxODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0wNyAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52
YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAg
ICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2Vydmlj
ZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggNDY2MTljNjVkNmIzYzNkODFmZjRjMmU1MDA1MjE2YWE0OTYy
ZWMxNC4uMDU1MWMwNTQ5MDljZDg3Y2JlMDM5MWQ1YzBkMmUwY2U0OWI0YmRjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xMDIyLDYgKzEwMjIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAt
MTA3MSw3ICsxMDcyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1l
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDMsMTMgKzExMDQsMTYgQEAgc2V0KFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2Ft
cGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5k
aW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9h
cmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUy
N2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5
MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1j
bGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQog
CiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAg
ICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUp
OwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJ
bWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAg
IG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThh
YzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBA
QCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdM
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkK
IAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFh
MDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVh
YzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01h
Yy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyAr
NTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYwYmJiZmQ0
NmVlODc5NjhmZDJjMWVmYTVmZjc3YjdlZjBhYzRkNjguLjVmZjFmYjViN2M1ZjdmOGIzMjU0Mzhh
NDI1ZDYyNDc2NjRmMWE2YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY4LDYgKzE4NjgsNyBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNv
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg3LDYg
KzE4ODgsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTQ1M2Q4OTA5N2U2
ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNS4uNGYwM2VjMjNkOGM0MGZiOTZhMmU1NzcwMWUz
NjZhYjAxNGNlY2ZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVjNDA4NGQ5ODQ1OGMzNTMyNDI1YmM5ZWVm
NzUzN2Y1MDYzNWIzNTAuLmExYTQ3NzIxMTU2NzUzYzY4NWMzNDQ5YjNlMDgwYTgzMTdlZWY3Mjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAw
OUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1
MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NW
R0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1
IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJl
ZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzMsMTAgKzIxMzEsMjEgQEAKIAkJNzIxNDQzMzIyMjNF
Qzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMz
MzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQ
cm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIx
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4
QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgw
MDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2
QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBS
ZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEz
QThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURD
ODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZp
dHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVF
NTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIz
QzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4
IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQy
MDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIz
QUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYx
MjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFNTIzQjFBODZEMDBGNjdENDMgLyog
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3
MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgx
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBD
RTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDAsOSArNjU0OSw2IEBACiAJCTIyNUExNkIzMEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
MjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdy
YXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0Yx
MUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMw
MEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTU5OCw4ICs5NjA0LDEwIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQx
MSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9y
dC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3Vw
cG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYw
MDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRl
ZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZG
NyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5
IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhU
QmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhU
QmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC05NjIwLDcgKzk2MjgsMjEgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4
IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhU
c1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAw
MDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVY
VHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAw
MDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTgg
LyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJG
QTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNp
Y2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAy
M0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFD
RTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWlu
dGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oOyBwYXRoID0gdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5k
ZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRl
cmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAv
KiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNF
WFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQy
RjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEOUYxQTM5
MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFWFRGcmFnRGVwdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTI2ODQsNyArMTI3MDYsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyog
R3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1
MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEg
LyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNjY4Myw2ICsxNjcwNCw3IEBACiAJCQljaGlsZHJlbiA9ICgK
IAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJ
CTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJCTcyQkJF
NDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJ
CQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAog
CQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJ
CQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
LApAQCAtMjQ4ODksOSArMjQ5MTEsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAg
LyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIg
LyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQy
MEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBC
OTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQkU0
MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJ
CQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0
MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIx
REIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1
NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5
NjgsNiArMjQ5OTMsNyBAQAogCQkJCUZCQzIyMEREMTIzN0ZCRUIwMEJDRjc4OCAvKiBvcGVuZ2wg
Ki8sCiAJCQkJMzcyMTQ5MzMxOEYwQjZENjAwMTU2RURDIC8qIG9wZW50eXBlICovLAogCQkJCTQ5
RTkxMUIyMEVGODZEMjcwMDlEMENBRiAvKiB0cmFuc2Zvcm1zICovLAorCQkJCTcyRDVDMkUzMjNC
MUE3NEQwMEY2N0Q0MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8sCiAJCQkJNDkwNzA3
RTQxMjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmNwcCAqLywKIAkJCQk0OTA3
MDdFNTEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2UuaCAqLywKIAkJCQlCRUYy
OUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFja1ByaXZhdGUuaCAqLywKQEAgLTI0OTg3
LDYgKzI1MDEzLDcgQEAKIAkJCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFp
bnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXku
aCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmgg
Ki8sCisJCQkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3Bs
YXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0yNTA3OCw3ICsyNTEwNSw4IEBACiAJ
CQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJ
CQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlC
MkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzIwMjgwRDEy
M0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0
MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlG
RUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2
MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhB
NzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTEzNSw2ICsyNTE2Myw4IEBA
CiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJ
CQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZF
NUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNGRTIzQUFCRkEy
MDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDIzMjNBQzQ5
M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJMDU2MkY5NjAxNTcz
Rjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RD
MDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3
RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTE0NCw2
ICsyNTE3NCw5IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICov
LAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5jcHAg
Ki8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmgg
Ki8sCisJCQkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3Bw
ICovLAorCQkJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmgg
Ki8sCisJCQkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLywK
IAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICovLAogCQkJ
CUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RE
NDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKQEAgLTI4OTg1LDYgKzI5
MDE4LDcgQEAKIAkJCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVP
ck5vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0IC8qIEFm
ZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCQjVDODgxRDVENkY0NTAwNUE3
MUY0IC8qIEFsbERlc2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJE
NUMyRTUyM0IxQTg2RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2ZVRleHRD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1
ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI5Njc5LDYgKzI5NzEzLDggQEAKIAkJCQkxMTJGQjM1MjIzOUMyM0M0MDA4NzA1
NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3RTYzMjI3
NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
NUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzAyODcsOCArMzAzMjMsMTAgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVD
MDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODEx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxRjFFQTcy
M0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJ
bWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTky
RDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMTc1Nyw2ICszMTc5NSw3IEBACiAJCQkJQTU1NEI1RjMxRTM4MzkzQTAwMUQ0
RTAzIC8qIFBlcmZvcm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1ODFG
QjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlENURDMkUwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURCQzFCNTYyMzQ3QjNEMjAwQjkw
MUFGIC8qIFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUQy
QzgyQjcyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjggLyogUGljdHVyZUluUGljdHVy
ZVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc3Niw2ICszMTgxNSw3IEBACiAJCQkJQkNB
QTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRN
YWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQ
bGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYxMjNDMTk1QTgwMDI2
MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVDNDc2
ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwNTYyRjk2MTE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjU0NEY3ODkxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTUzLDYgKzMxOTkzLDggQEAKIAkJCQlCQ0VBNDg3NjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJG
MDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0
eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVDMkVBMjNCNEMwRjgwMEY2N0Q0MyAv
KiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZBODIzQzFGNThC
MDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIy
MjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDE4MTc1MTVlMWNjNzA5MGM3ZTU5YTBjYmQy
NTNmZjcyNjE3NDRjNzMuLmY1MDFjYTIzYTczOTVmMWU1YjIxYzgxYjA0ZGRiMDE5M2I3YTJmMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcApAQCAtOTIxLDggKzkyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9IGJ1
ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgp
LCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJl
Y3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKICAg
ICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjc4
NSwxMyArMjc4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShG
bG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgVW5hY2NlbGVyYXRlZCwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgewog
ICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEsIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNpemUobG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgSW50U2l6ZShsb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCksIEludFBvaW50KCkpOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0p
OwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGU1YjhhYjQ2OWNlYzRiYzA1OGM0MzdkMTk5
NTA0MGI1MDIxYzc0MzEuLjJmYTUzYWEzOGMxZmNjMTE3MzU2YWY5ZjE1NWQwMTVkNDQzN2YwY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiw3
ICsxMTYsNyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIElt
YWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVy
IHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0
ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBh
dXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6
bnVsbEltYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAK
aW5kZXggZjRiNzcwN2U5N2E4ZmU1MWY4ZTI1Nzc1OGFkZTRiNmRkZmY1MDJlNS4uNjVkNDY0ZmRk
N2Q1ODhlYzczMTYxNmI3NDAzN2E4NDI4ZWVmMzFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50
Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCAxLCBDb2xvclNwYWNlOjpTUkdC
LCBudWxscHRyKTsKKyAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1fY29waWVkQnVm
ZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTAyLDcgKzEwMiw3IEBAIEltYWdl
KiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgICAgICBtX2NvbnRl
eHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgbV9kZXN0aW5hdGlvbkdy
YXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEltYWdlID0gbV9jb3BpZWRC
dWZmZXItPmNvcHlJbWFnZShtX2NvcGllZEJ1ZmZlci0+ZmFzdENvcHlJbWFnZU1vZGUoKSwgUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZl
ci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMjNkOWIzNGU4NDhmNmQwMWQzNGE5ZGFm
ZmJhMzA1MGZjN2E3MTMxNi4uOTA5MzNlMjNhYzA4MTgwMzNjNzZmYzNlMjgyMTE5MTgwMTQ4NmM3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNhbnZhc1Bh
dHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRl
ICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC02MCw2
ICs2MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRl
ICJDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFt
LmgiCkBAIC0zNDUsOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkKIAogICAgIG1f
Y29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBkb2N1bWVu
dCgpLmluUXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1f
Y29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVu
ZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFz
LgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKQEAgLTgxOCwzOSAr
ODIwLDI3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCiB7Ci0gICAgaWYg
KHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nKQotICAg
ICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0gdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogewotICAgIGlmICh0
cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXk7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwogfQogCiBTdHJpbmcgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBp
ZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVy
biBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlzcGxheUxpc3QoKS5hc1RleHQoZmxhZ3Mp
OwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojpy
ZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0Lmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpICYmIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCktPmFzVGV4dChmbGFncyk7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBAIC04ODUsMTEgKzg3NSwyNyBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgp
IHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gQWNjZWxlcmF0ZWQgOiBVbmFj
Y2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3VtZW50KCkudmlldygpICYm
IGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKS0+
aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNl
dHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3Vt
ZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworICAgIAorICAg
IC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRyYXdpbmcgb24gY2FudmFz
LgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKworICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc1JlbW90ZURyYXdpbmcpCisgICAgICAgIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlJlbW90ZTsKKyAgICBlbHNlIGlmICh1
c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNj
ZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAgICAgICAgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKwogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgewog
ICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxl
cmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2MDUwNjMyNi4uNDIxMzRh
MTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBtX3VzZXNEaXNwbGF5TGlz
dERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3MzlhMWY1YzNiZTBlZTE3
MWYzNGY5NjNlMDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4N2E5MDJmZTY5MmIzMDk5
NTRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0
bWFwKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJl
bmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMg
UmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUo
SW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4
IDA5MWEzNjk5MmE5YzM1ZjEzMGY4NWRjYzgxOGY5NTk3ZTI3MmRlY2YuLjRlYWE1OGRiMWIwNTMx
YzNiNzdjOGY4YWI5OTRjOThlODExZDAxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAg
ICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAg
ICAgaWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IElt
YWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVy
YXRlZCksIHRydWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVh
dGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCksIHRydWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZl
cigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIE9mZnNj
cmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8
fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6
OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0
CiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkKSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg5ZDhmNDI0
M2IyYjkyZGZiY2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLjViMWIwN2VmNzczODQzMzYwOGU4ODJm
YjllM2JhOWEyYjFhNGM5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xODA2LDcgKzE4
MDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmNhbGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVm
ZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVy
OjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVy
UmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNv
bnN0IEludFJlY3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTk5MCw3
ICsxOTkwLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0
cjxDYW52YXNQYXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShCaXRtYXBJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4p
IH07CiAjZW5kaWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCkt
PnJlbmRlcmluZ01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkg
PyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTIwNzUsMjEgKzIwNzUsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheQogICAgICAg
ICBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5yZW1vdmUodGhpcyk7CiB9CiAKLVN0cmluZyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6
QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlY29yZGluZ0NvbnRleHQp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcmVjb3JkaW5nQ29udGV4dC0+ZGlz
cGxheUxpc3QuYXNUZXh0KGZsYWdzKTsKLX0KLQotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKLXsKLSAgICBhdXRvKiBkaXNwbGF5TGlzdCA9IGNvbnRleHREaXNwbGF5
TGlzdE1hcCgpLmdldCh0aGlzKTsKLSAgICBpZiAoIWRpc3BsYXlMaXN0KQotICAgICAgICByZXR1
cm4geyB9OwotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+YXNUZXh0KGZsYWdzKTsKLX0KLQogY29u
c3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlLCAxPiYgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygpCiB7CiAgICAgcmVhbGl6ZVNhdmVz
KCk7CkBAIC0yMTU5LDEwICsyMTQ0LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiAKIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKKyAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIHN4LCBzeSwgc3csIHNoKTsKIH0KIAotRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBm
bG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKK0V4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQg
c3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5v
cmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNv
bnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGltYWdl
IGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkg
Y3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw3ICsyMTgxLDcgQEAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdl
RGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5ID0g
YnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwg
Y29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0pOwogICAgIGlmICghYnl0ZUFycmF5KSB7CiAgICAgICAgIFN0
cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVu
ZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVk
IHNpemUgd2FzICIpOwpAQCAtMjIxOCwxMCArMjIwMywxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBm
bG9hdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJ
bWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBk
aXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewotICAgIHB1dElt
YWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4LCBk
eSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKKyAgICBwdXRJbWFn
ZURhdGEoZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgZHgsIGR5LCBkaXJ0eVgsIGRp
cnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwg
ZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5
SGVpZ2h0KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lk
dGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52
YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcgKzIyMzAsOCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNf
Y2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RP
ZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3Jk
aW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtID8gYnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOworICAgIAorICAg
IGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0g
PT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCA/IGJ1ZmZlci0+bG9naWNhbFNpemUoKSA6IGJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RSZWN0KTsKQEAgLTIyNTMs
NyArMjIzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgc291cmNlUmVjdC5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpKTsKIAogICAg
IGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5
KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJ
bnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50
KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqZGF0YS5kYXRh
KCksIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50
UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOwogCiAgICAgZGlkRHJhdyhkZXN0
UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRv
dyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJm
NDk4YWU2NzIyMTg3ZjFiZWU5MWQuLjk2NDAwZDFhZjUwMGQ1OGUxZGQ5YmQxMTE3NDgyMTQxYTcy
YmI1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTIyMiw5ICsyMjIsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXk7IH0KICAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KGJvb2wpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1Rl
eHRGbGFncykgY29uc3Q7Ci0gICAgU3RyaW5nIHJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3Bs
YXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0KICAgICB1c2luZyBEaXJlY3Rpb24gPSBDYW52
YXNEaXJlY3Rpb247CiAKICAgICBjbGFzcyBGb250UHJveHkgOiBwdWJsaWMgRm9udFNlbGVjdG9y
Q2xpZW50IHsKQEAgLTM3MSw4ICszNjgsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1wbGF0ZTxj
bGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29u
c3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6OkNvb3Jk
aW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0
eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKKyAgICBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEmLCBDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0
eUhlaWdodCk7CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMTRlYTM3ZDhkN2VhZmIwMWI1YzRjZTE5ZWJlNzZjNTE4
Y2ZjZDRhOC4uYjUxYjRkYmYxM2VlNTA2ZWI5NDk4YzQzZWY0NWM5NDRkZDczZTBhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQpOwog
CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJp
bmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+
IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywg
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKQEAgLTY5LDcg
KzY5LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6
Y2FudmFzKCkgY29uc3QKIAogYm9vbCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2RlID09IEFj
Y2VsZXJhdGVkOworICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOwogfQogCiB2b2lkIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6
c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYXApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCmluZGV4IDBjMmZjODRiZmMwNmJkZjRkOGRjMzZjNzVkOWI5OWI2ZGJmZDIzZTUuLjY5
ZDM0MTExZWJhNTdmNDE0OGVhYzhlNmJiNTA3MGQ3MTRjMzQ0ODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CkBAIC0zOTM5LDcgKzM5MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogICAgICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2Us
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVy
biB7IH07CkBAIC00MDYxLDcgKzQwNjEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogICAg
ICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBT
b3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgdmlk
ZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwg
eG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
ICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRl
eFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDUwMCw3ICs0NTAw
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgICAgICYmIHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAgICAgICAgIGlm
IChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJnZXQs
IHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXItPmNvcHlU
b1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1h
dCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewogICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSwgdHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtNDUwOCw3ICs0
NTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgfQogCiAgICAgICAgIC8v
IE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZm
ZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRleEltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQ1NzcsNyArNDU3
Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJ
bnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
OwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwg
IXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKICAgICAgICAgICAgICAgICBJbWFn
ZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAo
YnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCks
IHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVj
dCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Zs
aXBZKSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQo
KSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNDYyMiw3ICs0NjIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VCdWZmZXI6
OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlk
ZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRleEltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ2NDcsNyArNDY0Nyw3IEBAIFJlZlB0
cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJ
bWFnZSYgaW1hZ2UsIGludCB3CiAgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBp
bWFnZS5zaXplKCkpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIHNpemUp
OwogICAgIGJ1Zi0+Y29udGV4dCgpLmRyYXdJbWFnZShpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3Qp
OwotICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1v
ZGUoKSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTYzNDQsNyArNjM0NCw3IEBAIEltYWdlQnVmZmVy
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1
ZmZlcihjb25zdCBJCiAgICAgfQogCiAgICAgLy8gRklYTUUgKDE0OTQyMyk6IFNob3VsZCB0aGlz
IEltYWdlQnVmZmVyIGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkPwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
VW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEFTU0VSVChtX2J1
ZmZlcnMuc2l6ZSgpID4gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggMGNiZDBhM2NjZTAzOTI5NWI0OTI1Y2UzMWEw
NTRlMWY2OTEwZDkzMC4uNmVhNzkyMTRmOGE2ZTAwNWIwYmUyNDQ5YTJkZDY3Mjg4ZmMzYWMyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcApAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUmVmUHRyPEltYWdlPiBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGkKICAg
ICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPnNpemUo
KSk7CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1
bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFVu
YWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZhMWZiZmE3ZWZmZDdhZjUuLjYzN2U3
N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKICAgICBtX2NsaWVudC5zZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAor
UmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNr
ZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVybiBtX3Jl
bmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRmb3JtRGlzcGxheUlEIENocm9tZTo6ZGlz
cGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5SUQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
aAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2NjhkNDQ3MGVjNTEzNjFhZjQ5Li40NjhjMTcw
MDhhYWZhNDdmYWEyMzdjNzRmZjQ4ZjQwMjMwZGRiYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKQEAg
LTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wp
IG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBv
dmVycmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNz
ZWQgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggNjI2MTdmNzhmM2UyZjA0NzQ4
YWE1OGFkYWViOGZhMzBiZDcxMmFkNC4uYzk5ZDM2YWZmYWE4NjVhOWU2YTk1ZGM1MzViNDg3NDhj
N2VlM2UxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21h
aW4uaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDMs
NiArMzA0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBoaWNzTGF5
ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9v
dEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKaW5kZXggMGE0NGMyZmEx
YTA5NDk3Y2ZkZjU1ODg4MzJmZmRmZjEwMjMzMzBlMS4uZTI0ZDkyZTZmM2U2MWQzOGE5YjI0NDg1
ZjRkMTNkZTUwZTUzM2EyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNu
YXBzaG90dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNu
YXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZQogICAgIGlm
IChvcHRpb25zICYgU25hcHNob3RPcHRpb25zUGFpbnRXaXRoSW50ZWdyYWxTY2FsZUZhY3RvcikK
ICAgICAgICAgc2NhbGVGYWN0b3IgPSBjZWlsZihzY2FsZUZhY3Rvcik7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VS
ZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJ1ZmZlci0+Y29udGV4
dCgpLnRyYW5zbGF0ZSgtaW1hZ2VSZWN0LngoKSwgLWltYWdlUmVjdC55KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4
NzI5MDljYjcxZjc4MjhlZjg1YmJjLi4yMTA3YTllMWU5OWNmMzUxZDllNjE2NjgwNWM0YTU2MzNh
ZTQ3ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAt
Mzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAg
YXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qg
c291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLT5kYXRh
KCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJM
ID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKaW5kZXggMmNmZWNhZGMyNGQ5ODJhODYx
NjM3NGI3NmEwZTRmYjBmZmY3YTlkNC4uZjVmMjE3Y2NkODQwNjA4MDAyNTVjMjAzZDIyMTdjYWVj
ZTBjZTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE0ICsyMywx
NCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBIb3N0V2luZG93X2gKLSNkZWZp
bmUgSG9zdFdpbmRvd19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldpZGdldC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsKK2NsYXNzIFJlbmRlcmluZ0JhY2tl
bmQ7CiAKIGNsYXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhvc3RX
aW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY0LDYgKzY0LDggQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29s
KSA9IDA7CiAKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQoKSBjb25zdCA9IDA7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0
aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBj
b25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRhYWI0Njg2NzY4ZjFhMjgyZDU4ODFjOTM5Nzk0NmQ1YmEyMDA2OTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFz
cyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIDogcHVibGljIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCB7CisgICAgdXNp
bmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRU
eXBlPjsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVy
KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRT
aXplJiBzaXplKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoZGF0
YUJhY2tlbmQpKQorICAgICAgICAsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQor
ICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKKyAgICAgICAgOiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAg
ICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29u
dGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaERy
YXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNv
bnRleHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBm
NTg2ZGQ0YjJhZjkxZjQ1NjU1MzVhNzAyOTM5MjNhZjJiYWFkYmEyLi4zNWJkNThjM2QxMmZmODRj
MGU2NjQyZjgxODI3MDk5Y2U4MzdlMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzUwLDcgKzM1MCw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wp
OwogI2VuZGlmCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7IH0KKyAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggNDU4YWU3MmYyYWUwMjU2MjQ3NjhlODc5ZGJk
NDk2OTY0YjQ5MWIxOC4uMDBiZTBmZWEwNjA1NWNhMzFiMmM4ODc0ZGQzNzRlZWExZDQyODQ2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCiAKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCBjZWVhMWRhNDBlYjMy
ZmY3OGExZTc1ZTE3YmZlMDA5MjAxYjc2ZjEyLi4yNmExMmRlM2JlNGFjNmI4ODQzNjRjNTU0Mzk3
ZjdmNzFjNzhhYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8
d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTIyLDE3ICsx
MjMsNiBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLWVudW0g
UmVuZGVyaW5nTW9kZSB7Ci0gICAgVW5hY2NlbGVyYXRlZCwKLSAgICBVbmFjY2VsZXJhdGVkTm9u
UGxhdGZvcm1CdWZmZXIsIC8vIFVzZSBwbGFpbiBtZW1vcnkgYWxsb2NhdGlvbiByYXRoZXIgdGhh
biBwbGF0Zm9ybSBBUEkgdG8gYWxsb2NhdGUgYmFja2luZyBzdG9yZS4KLSAgICBBY2NlbGVyYXRl
ZAotfTsKLQotZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHsKLSAgICBQcmVtdWx0
aXBsaWVkLAotICAgIFVucHJlbXVsdGlwbGllZAotfTsKLQogU3RyaW5nIGNvbXBvc2l0ZU9wZXJh
dG9yTmFtZShXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsK
IFN0cmluZyBibGVuZE1vZGVOYW1lKFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBib29sIHBhcnNlQmxl
bmRNb2RlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOwpAQCAtMTQzLDcgKzEz
Myw2IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVD
YXApOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIExpbmVKb2luKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMWEwZjgxNmZkYTgwMzAyNzk2YWEzYTNlNTliNmRm
OTE5OTVkMDNjNy4uNGUyYmU3MWM3NDFjNTVmNTZjMGFkMDQ2YTc5N2U1MGEwOTcxODhiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDM4ICsyOCw0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKLXN0YXRpYyBjb25zdCBm
bG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3Ro
Oworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3sKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5n
QmFja2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2Rl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQogCi1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsK
K30KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihu
ZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJp
bmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIGlm
IChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1
ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBn
cmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVk
U2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotI2lmIFVTRShESVJF
Q1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7
CisgICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgorCitzdGF0aWMgY29uc3QgZmxvYXQg
TWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7CitzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFy
ZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAogYm9vbCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewpAQCAtMTA1
LDk3ICsxMTEsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIGNs
YW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKENBSVJP
KQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgotICAgIHJldHVy
biB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpKQotCi1G
bG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplIHNp
emUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnRy
YW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRz
dENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1
cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAg
ICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xv
clNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
ZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAg
ICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBj
b2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJD
b2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNm
b3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFj
ZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7
Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xv
cik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5
OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZp
Y2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQg
SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBJbnRS
ZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8g
c3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsK
LSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNp
Z25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0
aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIGlmICghYSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0KTsKLSAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0ICsgMik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsg
ZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAg
c3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7Ci0gICAgfQotICAgIHB1
dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQo
KSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewot
ICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZl
cnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5h
bmNlTWFzaygpOwotfQotCi0jaWYgIVVTRShDQUlSTykKLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
JiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKQorSW50
U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNm
b3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24g
dGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXpl
ICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKIH0KLSNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiB7CkBAIC0yMDQsNjMgKzEyNSwyNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdAog
CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJT
aXplKHJlY3Quc2l6ZSgpLCBjb250ZXh0KTsKIAotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29u
dGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigp
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZShzaXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0g
ICAgaWYgKCFidWZmZXIpCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwor
ICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8g
U2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRl
eHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAg
IHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3JlYXRl
KHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJl
bmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgotfQot
Ci1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICAvLyBFbmxh
cmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5n
IGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVs
IHBlciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2Nh
bGVGYWN0b3IoKSk7CisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
KnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAot
Ym9vbCBJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikK
IHsKLSAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChjb250ZXh0LnNjYWxlRmFjdG9yKCks
IHRoaXMtPmNvbnRleHQoKS5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXIt
PnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK1Jl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKIHsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5
IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBk
YXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBp
bnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4K
LSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5o
ZWlnaHQoKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVS
ZXNvbHV0aW9uKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3Qo
KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaW1hZ2VC
dWZmZXItPmRyYXdDb25zdW1pbmcoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQotI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDUzMzNjZjRlYzIyOGY5
ZGIzNzNmMjU4ZTZiOWM3YjllZTRmYzhhYzAuLjAzODJiNzQwNDI0MGY1YmY0ODE2ZWQ4YWU1ZjY2
NmZjNTNlMjZjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTcwICsyNyw4MSBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNE
LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGlu
Z09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Ci1jbGFzcyBJbWFn
ZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNs
YXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3JlQ29weSB7Ci0gICAgQ29weUJhY2tp
bmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBj
b3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFm
ZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIHsKLSAg
ICBObywKLSAgICBZZXMsCi19OworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERyYXdp
bmdDb250ZXh0OworfQogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVfRVhQT1JUKTsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsK
IHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9u
IGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBI
b3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhv
c3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBi
dWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlz
IGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBh
dGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3
aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgYm9vbCBp
c0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwotCi0gICAgLy8gVGhlIGFjdHVhbCBy
ZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9n
aWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0KLSAgICBGbG9hdFNp
emUgc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUpIGNvbnN0OwotCi0gICAgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworICAg
IC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZl
ciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0
YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRp
YyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2Nh
bGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7
CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9h
dFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0gICAgLy8g
R2l2ZSBoaW50cyBvbiB0aGUgZmFzdGVyIGNvcHlJbWFnZSBNb2RlLCByZXR1cm4gRG9udENvcHlC
YWNraW5nU3RvcmUgaWYgaXQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2
aW9yCi0gICAgLy8gb3IgcmV0dXJuIENvcHlCYWNraW5nU3RvcmUgaWYgaXQgZG9lc24ndC4gIAot
ICAgIHN0YXRpYyBCYWNraW5nU3RvcmVDb3B5IGZhc3RDb3B5SW1hZ2VNb2RlKCk7CisgICAgc3Rh
dGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9OworICAgIElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdl
QnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgdm9pZCBwdXRC
eXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KICAgICAKLSAgICB2b2lkIGNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOwogCi0gICAgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAgIHZpcnR1YWwg
c2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaXpl
X3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0jaWYgVVNFKENB
SVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdl
PiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotI2lmICFV
U0UoQ0cpCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+Jik7Ci0jZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS5oZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0
VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwotICAgIHNpemVfdCBleHRl
cm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
Ci0gICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0s
IGJvb2wsIGJvb2wpOworICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUlt
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAg
c3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVu
IGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1h
c2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0
IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZs
b2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBl
ZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRS
ZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwogCi1wcml2YXRlOgotI2lmIFVTRShDRykKLSAgICAv
LyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhlIGludGVybmFsU2l6
ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8vIGltYWdlLCBjcm9wIHRoZSByZXN1
bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQp
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01QdHI8SUQyRDFCaXRt
YXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0g
ICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHN0YXRp
YyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRh
dGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2lj
YWwpID0gMDsKIAotICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCk7Ci0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFz
cyBHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2U7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmll
bmQgY2xhc3MgR3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFn
ZTsKLQotcHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUg
bV9zaXplOwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRp
b25TY2FsZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2Vz
cyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtu
b3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIElt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwot
I2lmIFVTRShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBi
b29sJiBzdWNjZXNzKTsKLSNlbmRpZgotfTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wp
IGNvbnN0ID0gMDsKIAotI2lmIFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1W
ZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotI2VuZGlmCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZp
cnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
ZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Nzg1Yzhl
NzhjNDFjMzI2NTVmMTJjMjcyMDIwMWFlZTA4ZjJhZjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9O
YXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50
b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0
dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBJ
bnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUpOwor
ICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3QsIENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwpOworICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAg
IGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAgICBpZiAoIWEpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCArIDIpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEy
NSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAg
ICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKwor
ICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICpzcmNQaXhlbEFycmF5LCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50
UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NhZTQzNTNlOTdkODdiYjA1MjlhNmVjNDI3
YTdhNzVjOTllM2U0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RX
aW5kb3c7CitjbGFzcyBJbWFnZTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5
QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3Qg
dGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBt
YXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24g
eworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50
OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5
c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisgICAgQmFja2luZ1N0b3JlCit9OworCitj
bGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkltYWdlQnVm
ZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0K
KworICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXpl
OyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFs
U2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFs
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLmFy
ZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0Rh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgQ29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBw
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQ29v
cmRpbmF0ZVN5c3RlbSkgeyB9CisgICAgCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9QbGF0Zm9ybVRleHR1cmUoR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVt
LCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCisgICAgICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAgICAg
LCBtX2ludGVybmFsU2l6ZShpbnRlcm5hbFNpemUpCisgICAgICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
ICAgIHsKKyAgICB9CisKKyAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBt
X2ludGVybmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNw
YWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVjMGQzNmZlZmJkMTJhYmU1NDNjM2YyMDM0ZjYx
NThiM2QyY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cu
aCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgi
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bo
eXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bo
eXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDE2N2E1N2UwODUzZDVlM2ZjMzgwMjdk
ZDg2NDY4MDA3YTJhZTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMjA2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBw
dWJsaWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdl
QnVmZmVyVHlwZSA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRz
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZm
ZXIsIEltYWdlQnVmZmVyVHlwZT46OnZhbHVlKTsKKyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFj
a2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3cpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJ
bWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFBoeXNpY2FsSW1hZ2VC
dWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDog
bV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisgICAgeworICAgIH0KKworICAgIFBoeXNpY2Fs
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1
cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+
YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2lj
YWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJl
QmFja2VuZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBpbnRl
cm5hbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1
cmVCYWNrZW5kKCktPmludGVybmFsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8g
ZW5zdXJlQmFja2VuZCgpLT5yZXNvbHV0aW9uU2NhbGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBt
ZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5z
dXJlQmFja2VuZCgpLT5tZW1vcnlDb3N0KCkgOiAwOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3Vy
ZUJhY2tlbmQoKS0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFn
ZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2lj
YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICByZXR1cm4gYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3Jl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0
dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFn
ZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAg
ICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25z
dW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29u
dmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwg
cXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4o
KnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0
YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0g
PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNv
bnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0
LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUm
IGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgZGF0YVNpemUsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFy
Z2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhh
LCBmbGlwWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDMyMzZkNWU5N2ZmZTY1ZTY4MTEyMGZkODVhMTUx
YzJjYjRmM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1
ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBV
U0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNl
bGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBV
U0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCisjaWYg
VVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNp
bmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IFBsYXRmb3JtSW1hZ2VC
dWZmZXI7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1h
Z2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQ
bGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNw
bGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZjAwODYxODVjZjIyODViYmYyNTU4MmY5OTcy
MzlmNmU5ZDdlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNp
bmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0Jh
Y2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBz
aGFyZWRSZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAg
ICByZXR1cm4gaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KCkgPyAqaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJl
bmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAg
IGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAg
aW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3Bs
YXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tl
bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42N2QzOTIwNDA0Y2NhNWNiNGJjMjIzMjc3NWM2NDkwMjliNWNjNTkw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3Bh
Y2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xhc3Mg
SW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBSZW5k
ZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIHNo
YXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKKyAgICAK
KyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJpbmdCYWNr
ZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2RhNzA0NDFl
NTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgeworICAgIEFj
Y2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRl
ZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBSZW1vdGUK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEwNzY3OGM1NmFjZGIw
YzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMzMzJkNWY5
NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRjaEJ1ZmZl
cigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2NlbGVyYXRl
ZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxl
cmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAgfQogCkBA
IC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3coY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBTaGFkb3dC
bHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllckltYWdlUHJv
cGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYg
ZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2Vs
ZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4
cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAKIHZvaWQg
U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQcm9wZXJ0
aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAgYXV0byBs
YXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFn
ZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNoQnVm
ZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBsYXllcklt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0
ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
dGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBs
YXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03MzksNyAr
NzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAgYXV0byog
bGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIo
dGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8g
bGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJ
bWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2b2lkIFNo
YWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0
KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllcklt
YWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRh
dGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNp
emUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5
KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1
clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJs
dXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRD
b2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYg
dGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1No
YWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0
CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxheWVySW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVy
dGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRp
ZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICgh
bGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNDk2
ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5YS4uNzIyZWVmZmU2YzllNWZkMjg2
NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTAwLDcgKzUw
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6
ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRlc3RSZWN0LnNpemUoKSk7CisgICAg
RmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTZmMTk2
NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNp
bmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgot
I2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1
cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlm
Ci0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiBy
ZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6ZVRv
VXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJh
Y2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKLXsKLSAgICBmbG9h
dCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLndp
ZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRpb24g
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRlcm5h
bFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0aCgp
ICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdodCgpICogeU1hZ25pZmljYXRpb24p
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRl
eHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFj
ZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJl
YWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFj
ZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2Uo
Y2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAg
ICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0Nv
bnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3Bh
Y2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNv
bG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9
IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdl
QnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihu
ZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5n
TW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxl
KHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBt
X2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZh
aWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBz
aXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25T
Y2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0
aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVk
V2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQp
OwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAo
bV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVj
a2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hl
Y2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5k
aWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQ
ZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxv
dz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJm
YWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUu
d2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAgICAg
ICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJp
bmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFj
ZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7
Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IHNpemVGb3JE
ZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZl
R2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0g
ICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9k
YXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAg
ICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNn
Q29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsK
LSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2Vu
ZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRl
cmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFj
Y2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7
Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxv
YyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51
bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5k
YXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8g
PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJI
b3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndp
ZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykp
OwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZy
ZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVh
dGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAg
ICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFn
ZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Pihj
Z0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IElt
YWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdl
Q29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0K
LUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFn
ZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXpl
KSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNp
emUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQg
Y29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwg
YWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50
ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJl
Y2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlv
biBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRh
LnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNl
IHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0
YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53
aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZl
cjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNv
c3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdl
IG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhv
dy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhl
IHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlz
IEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2Ut
PnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJz
LgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNl
LT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250
ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJl
dHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENv
bnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAs
IDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdl
OwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFs
U2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
Ci17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9
PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwg
bG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2Fs
U2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCks
IGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQu
Z2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNwYWNl
KGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUpOwotICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0g
ICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShp
bWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5i
YWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVy
LT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
LCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNraW5n
U3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9O
YXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1
ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6
OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShp
bWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0lt
YWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRj
aCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0g
ICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIs
IG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0
YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1f
ZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7
Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXpl
IGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7
Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRv
SW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZl
cikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJh
dyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250
ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5l
ZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAg
ICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdl
KENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQg
dG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVm
UHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQot
ICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAot
ewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1
c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29y
ZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9u
cykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAg
ICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpn
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1l
bnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0g
c291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0g
ICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAg
ICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAg
ICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwg
c2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhl
IElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1
cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBu
ZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotc3Rh
dGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5
cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlw
ZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1F
OiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZT
dHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5j
bGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dz
IHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0
IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3cs
IG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5
NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigi
cHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0g
Q0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRU
eXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwg
ImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAg
cmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
Q0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0
YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0
aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8
PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhl
IEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJE
b3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1h
Z2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lk
KiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0
aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dy
b3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291
bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBp
dCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdl
KGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICBy
ZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQot
Ci1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0
YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2
NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYg
Y2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENG
RGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJl
dHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1
cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7
Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0
byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4g
eyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBm
bHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERh
dGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAg
Ly8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVh
bGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRh
ID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxT
aXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6
ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsK
LSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51
bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNh
bFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJE
ZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAw
LCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAobV9y
ZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
aW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbWFn
ZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8g
Y29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzaXplRm9y
RGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53
aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShp
bWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBk
YXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0
YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlw
bGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAg
ICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRv
IG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXpl
ID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXBy
ZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICog
YWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFd
ICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFb
aSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5m
byA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5l
bC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291
cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3Vy
Y2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhh
SW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0
KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVS
TChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNl
LCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCks
IG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNv
dXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50
b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE2YjZjMDUxNTM5Nzc1MGNi
M2U0OTE1YmZiYTljYjczY2Y3NmMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
Mzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
IlVUSVV0aWxpdGllcy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRT
aXplIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNj
YWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxm
KHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUu
aXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShzY2Fs
ZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1Bl
clJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXpl
LndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5
dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5oZWln
aHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBj
b250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRl
eHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQoreworICAgIGlmIChp
bWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGlu
dGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAs
IGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0
dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJ
bnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7
CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9n
aWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0
KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Cisg
ICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNv
cHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QK
K3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdU
Rk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2Nh
bGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVy
bmFsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAg
IGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8g
Q29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2Ut
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1JldGFpblB0cjxD
RkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAg
YXV0byB1dGkgPSBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Cisg
ICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChD
RkVxdWFsKHV0aS5nZXQoKSwga1VUVHlwZUpQRUcpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgorICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50
KCksIGxvZ2ljYWxTaXplKCkpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAg
aWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdo
KHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRh
UHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwg
cHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAg
aWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VB
bHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0g
MSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAg
IGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVy
bmFsU2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNp
emUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29u
dGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAg
ICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Cisg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2Uo
aW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NG
RGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0
dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9z
OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
cmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBz
cmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVjdC53
aWR0aCgpOworICAgIGFyZWEgKj0gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5oYXNP
dmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJheSA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0
KCkpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBt
X2ludGVybmFsU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1ZmZl
clJlY3QsIHNyY1JlY3QpOworICAgIGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNS
ZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAgICAg
IGRlc3RSZWN0LnNldFgoLXNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDAp
CisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3QueSgpKTsKKworICAgIGlmIChkZXN0UmVj
dC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgpOwor
ICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3Jj
UmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgZGF0
YVJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1NpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBl
ZCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgc3JjUmVjdCk7CisgICAgCisgICAgZGVzdFJlY3Qg
PSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsKKyAgICAK
KyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0
LngoKSAtIHNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAg
IGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkpOworCisgICAgSW50UmVj
dCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAg
IGRlc3RSZWN0LmludGVyc2VjdChidWZmZXJSZWN0KTsKKworICAgIHNyY1JlY3RDbGlwcGVkLnNl
dFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90
KiBkZXN0UGl4ZWwpCit7CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJH
QkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0g
c3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBp
eGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVs
dGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90
KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlm
ICghYWxwaGEpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3Jj
Q29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9y
Rm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBh
bHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhh
OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7Cisg
ICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4
ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0g
KHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhl
bFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFs
cGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5
UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRl
c3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRl
c3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAg
ZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKENvbG9yRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4gY29weUZ1bmN0b3I7
CisgICAgCisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAg
ICAgICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGNvcHlGdW5jdG9yID0gY29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQ7CisgICAgfSBlbHNlIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICBjb3B5RnVuY3RvciA9
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQ7CisgICAgZWxzZQorICAgICAgICBj
b3B5RnVuY3RvciA9IGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgICAg
IAorICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
eCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Io
c3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4
XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0
YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVz
UGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFn
ZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBz
dGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VC
dWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkp
OworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1
ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJ
bWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQor
eworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAg
QVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VS
VChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
ICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1h
Z2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxh
Z3MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAg
IGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJ
bWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JH
UkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAg
dkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmND
b2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBj
aGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsg
MiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRl
c3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0Nv
bG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNT
bG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRl
c3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZm
ZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7
CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNy
Y0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RD
b2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywg
dWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJ
bWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY4ZmUwZWE2YWEwYTk3MTI3MTIxZTNiM2E5NDIxZTE1OWVmNWJkMDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgUmVmUHRyPElt
YWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJy
aWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9n
aWNhbFNpemUuaGVpZ2h0KCkpOyB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisK
K3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFj
a2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOworCisgICAg
dmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7
CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5
KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0
JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJl
Y3QpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBk
ZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJv
d3MsIGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZjFmYTZhZmI4MDMxODJiMTM5ZjdmYjRmMzUxYzg2ODczMmY2Mjg4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJl
c2FtcGxpbmcgaXMgb3B0aW1pemVkLgorI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19G
QU1JTFkpCisKKyNpZiBVU0VfQVJHQjMyCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERl
ZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMySG9zdDsKK2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5k
Q29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdDo6QkdSQTsKKyNlbHNlCitjb25zdGV4cHIgY29uc3Qg
Q0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9
IENvbG9yRm9ybWF0OjpSR0JBOworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHZvaWQqIGRhdGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXpl
LndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgp
LCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisK
KyAgICBzaXplX3QgbnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJv
dzsKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKwor
ICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwg
aW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJS
b3csIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsK
KyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsK
KworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRh
dGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEp
KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBX
VEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbnRTaXplJiwgZmxvYXQsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQp
Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNv
bnRleHQpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAg
ICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4
dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVCht
X2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0
KHRoaXMtPmNvbnRleHQoKSk7Cit9CisKK01hY2hTZW5kUmlnaHQgSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1hY2hTZW5k
UmlnaHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSkpOworICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVy
biBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2ludGVybmFsU2l6ZS53aWR0
aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5dGVzUGVyUm93KCksCisgICAg
ICAgICAgICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcElu
Zm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgMCwgdHJ1ZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6
ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6
ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jv
d3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpOworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBD
b2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRl
c3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYg
bV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJl
Y3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNy
Y1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8
fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBCYWNrZW5kQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENv
bG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXpl
KCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW50U2l6ZSBzcmNTaXplU2NhbGVk
ID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNv
bHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVkLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRl
c3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNyY1NpemVTY2FsZWQsIHNy
Y1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICAK
KyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhKSArIGRlc3RS
ZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplU2NhbGVkLndpZHRoKCk7CisgICAgdWlu
dDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5
dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgQmFja2VuZENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVj
dC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDI5MjM1ZmYz
NTA1NTJhMjdhNjI0ZDdmMWY3NWVjYzE0YWQ3YzE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVi
bGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQp
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIE1hY2hTZW5kUmlnaHQgY3JlYXRlU2VuZFJpZ2h0
KCkgY29uc3Q7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0
ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJl
dGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIDQg
KiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgUmV0
YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFi
YWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0
ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
I2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0j
aW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1
c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBp
cyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMy
IHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQgdW5w
cmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1h
Z2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRl
c3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5S
R0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNv
bnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNo
YW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBz
cmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsK
LSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1h
Z2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252
ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBS
R0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdklt
YWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9G
bGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQg
dHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7
Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9IGlu
cHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsK
LSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0
OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEo
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ci17
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0gICAg
aWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1bHQu
ZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsK
LSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3Mo
KSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0
LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0
KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6
IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+
IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwg
MCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkg
PiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0gICAg
aW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAg
ICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAg
b3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNh
ZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0
KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdpbnkg
PSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9
IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3RoICs9
IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAw
OwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIHNp
emUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUu
aGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50
PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0
KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgp
OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93Owot
ICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5n
KSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAg
ICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAg
c3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNy
Y0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAg
ICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBz
cmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBo
ZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdl
dCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0
LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVs
dGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5w
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNl
bmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBz
cmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAv
LyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdC
MzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAg
ICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lk
dGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpM
b2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+
Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9y
aWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3Jj
LmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1h
Z2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsK
LSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5y
b3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7
Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMs
IGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4
ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3Nb
YmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNl
eCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dz
W2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyAr
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAg
IEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+
IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hl
Y2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VSVChk
ZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4LnVu
c2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQo
KSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1h
eFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQ
b2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdl
dCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291
cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsK
LQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3Qu
eSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRl
c3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5z
YWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNl
UmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50
PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51
bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQg
PSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBk
ZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNp
emUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSAr
IChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0g
ICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAg
IAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJS
b3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2Fm
ZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAg
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBz
cmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZl
R2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRl
c3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVs
dGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAg
ICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8g
Qnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMy
Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93
c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3Mg
Kz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwot
ICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAg
ICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVz
cygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAg
ICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0g
aGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQot
ICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51
bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRh
ID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBp
eGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhf
dCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFu
bmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAg
IH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgp
OyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0
KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4
X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNS
b3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYg
Ly8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29s
b3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIg
KkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZm
ZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBj
b2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAg
IHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVm
PiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VC
dWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYK
LQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQg
cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTQx
NDYwZjQ4NDM0MzgyOGYzYzJlNTRlNmRkMDZkNGQ5Y2Y4OTBlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNF
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2Uu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKwor
SW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRl
cm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElP
U3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBt
YXhTaXplLndpZHRoKCkgfHwgaW50ZXJuYWxTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1
cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUsIGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNw
YWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+
ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRl
eHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOwor
ICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFj
ZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVw
Q29udGV4dChjb250ZXh0KCkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICA6IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3Zl
KHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpKSkKK3sKK30KKwor
TWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdo
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9
CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQo
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgp
Cit7CisgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30K
Kworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRlcygpOworfQorCit1bnNpZ25lZCBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05h
dGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1f
c3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBp
ZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRl
eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1
aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAg
ICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAg
ICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgSU9TdXJmYWNl
OjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6
QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBz
cmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOwor
ICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0
YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYg
KCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOwor
ICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRl
c3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9z
dXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNC
eXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhl
bHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJH
UkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpS
R0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAg
cmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7
CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxl
ICE9IDEpIHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0K
KworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAg
ICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVk
LCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisKKyAgICB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7
CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBz
cmNTaXplLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNy
Y1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICog
NDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEs
IHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVz
dFJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBj
YWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAg
IGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTliYjE3OWZiMTk0
ZGM2YjQ3MWU5MWJiMzExYzRjYzcyYzdhM2YwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0UpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgV0VC
Q09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKworICAg
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1
c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVycmlkZSB7IHJldHVy
biBtZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
TmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIAorICAg
IHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKyAgICBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdDsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4IDg5ZDA0MzljMjEwZGI1MDFhYzkzOWVi
MTE0MTQ4ODFlZWVjNjViMjQuLjVjN2IzMzZmMTAzMjQwMDgyNjIwZWM4ZmI3MTk2NDU4NjJkMzU4
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCkBAIC0yNiw3ICsyNiwxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKIAor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNp
bmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs0NiwxMDYgQEAgdWludDhf
dCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90
IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK2Jvb2wg
ZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdl
IHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVz
dGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEs
IHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKKyAg
ICBpZiAoQ0ZFcXVhbCh1dGksIGtVVFR5cGVKUEVHKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49
IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNz
aW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgIGF1dG8g
Y29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qg
dm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5Owor
ICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAg
ICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtl
eSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgfQorCisgICAgLy8gU2V0dGluZyBrQ0dJbWFn
ZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBp
bWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBpbiB0aGUgY2FsbGlu
ZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKyAgICBDR0ltYWdlRGVz
dGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGll
cy5nZXQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0
aW9uLmdldCgpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25z
dCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSBV
VElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgQVNTRVJUKHV0
aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhh
TGFzdDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwor
ICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFs
KHV0aS5nZXQoKSwga1VUVHlwZUpQRUcpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBw
cmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWZm
ZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFb
aSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OworICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsg
MF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOworICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGRhdGEgPSBwcmVtdWx0
aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOworICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAs
IGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAgIGlm
ICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQo
KSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0
bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwg
MCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAgIGF1dG8gY2ZEYXRh
ID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsK
KyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNm
RGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1v
dmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFz
ZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwg
YmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorewor
ICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisg
ICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4g
ImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNm
RGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZChDRkRh
dGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKKyAgICByZXR1
cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sK
KyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQor
ICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9Owor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlhYmQxZmI4M2FiMzFh
MTE1YzY4OTUwNDkxZDQxOTU1Mi4uZWM1Y2U0M2Y0ZDFiNTcyNTQ3N2EyM2FhNGZjOGI2ZWJmNzBk
NDJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjcsNiArMjcsMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVfRVhQT1JUIHVp
bnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNp
emVfdCBidWZmZXJTaXplKTsKIAorYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmlu
Z1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisK
K1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJp
bmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRh
dGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcAppbmRleCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMyNTg4MjNjLi4yODIx
ZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApA
QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZEb2N1
bWVudC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIyNGJhYzUzNjRjOWEw
NGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRhYjIxNGE2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
LmgKQEAgLTEwMCwxMCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYsIENHQ29sb3JTcGFj
ZVJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+IGNyZWF0ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAgICAKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7
Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2
Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAt
MzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNl
UG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0
YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgog
I2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYg
QEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4m
JiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdU
Rk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUlt
YWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0g
ICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRp
ZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNp
emUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQ
aXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGgg
PSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1
MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2
ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAg
ICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZv
aWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0
aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlmMWNlMjczNTQ1MGJkYWMzYmJkZjEx
YTMwODVkOWE3ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5j
bHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFz
cyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29u
dGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9y
bSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlz
KS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVw
bGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgp
OyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3Qu
cmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMaXN0
Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlcGxheWVyIHJl
cGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAgaWYgKG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0ID0gcmVw
bGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBtX2Rpc3BsYXlMaXN0
LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRl
eHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQw
MzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3ZGQxZDg1OGI1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxB
cnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7Cisg
ICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhl
bEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5v
cm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5z
aW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVsQXJyYXlEaW1lbnNp
b25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAg
IGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2Ut
PnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAg
IHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0KTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1
MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3OGE3ZmI5NDdkNDA1
ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2
b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIC8vIFRPRE86
IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0
aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdl
QnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIHNyY1BpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9y
ZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBjb250
ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJl
YS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdElt
YWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgp
LCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgcmVzdWx0
SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50
KCksIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAKICAgICByZXN1bHRDb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAg
IHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThjNWEyNmU3NzFj
NDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAxNTMyZGFiZDI0
OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0
ZXJSZXNvbHV0aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwot
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAg
IFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCB9OwogICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uNWM4
YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cApAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVm
ZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7
CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRl
c3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHBy
ZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAog
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJl
ZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2lt
YWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFkMGI3MjBkOTZiN2FhNDg2MTY2ZjA1ZjZkYTI2MWEwMTI5MDVmN2EKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fs
cGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIDogdWludDhfdCB7
CisgICAgUHJlbXVsdGlwbGllZCwKKyAgICBVbnByZW11bHRpcGxpZWQKK307CisKK1dFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcAppbmRleCAxYzY2YWQ3OWNlNDBjMTQ1NThmNjY1MjUyYjI1ZTNiYjdkZWQxNmJkLi44OTdj
ZTQwZDA0YzdlMGFkMWVhMTkyY2I5MTA2MTlmOGY5MjIyNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApA
QCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6
aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIG1faW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ1
YjkxYjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0NTguLjhmNTBlNTc1NzFkN2IzODUw
MGVlZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
RmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAogICAgIGVuc3VyZUxheWVyRmls
dGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRl
dmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRl
cnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIG1fZmlsdGVy
cy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogfQog
CiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5YTJkNDQ2NGRmNWNiN2IzYTQ0
MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5ODRiNWQyYjUyMWE2OTkxYzYxNTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMTgxLDE0
ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hh
cGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICBJbnRSZWN0IG1hcmdpblJl
Y3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBhdXRvIGludGVydmFscyA9IG1ha2VV
bmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJlY3QuaGVpZ2h0KCksIC1tYXJnaW5S
ZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3Qg
YmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNp
emUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZHJh
d0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAK
LSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZm
ZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVj
dC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5
ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBwaXhl
bEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JBLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNkMjk3NzViODQ2ZjA1OWQ1YTJjYTcx
M2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFjZTcxN2VjNWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgYwogCiAg
ICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1w
dHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hv
dWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNo
IHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgY2xp
cHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgVW5hY2NlbGVy
YXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
LCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAmY29udGV4
dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5
MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFiYTkzOGQwZDllMjYzNGQ4ZTgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBB
Y2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBD
b2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAgIGlmICgh
c291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFw
LmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZmlsdGVyRGF0
YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFw
aGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RBcHBseVJl
c291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCAxNzg3ZTE4YzJkY2VmNWJk
Zjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5Nzg3MjIwNDY1YmM2YWVjMGI1ODA0
YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBz
dHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0
eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdC
ID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQjsKICAgICAgICAgLy8g
RklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRp
b25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3Mg
YWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOworICAgICAg
ICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgICAgICBpZiAoIW1hc2tlckRh
dGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgyMTQxMWFkZTc3NTA4NTYxNjg4NTZl
ZDIyYjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4ZDNhNzlmYjQ5NWRkZDRmMGY0M2Q5
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yMTgsNyAr
MjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGZsYWcsIHNv
IGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIu
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0
ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXgg
ZmY1MmQyNTM2ZjU2NWZhMjk1YmViNjIwMTI2OGEwZjMzMzE3MGZmMy4uM2U0Zjc1OGIyMjQ2ZTZk
Yzg0NTZmZGE1ZDBlYmE4ODM0YzQ2NWIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC0xNyw2ICsx
Nyw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dlYktpdF9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQktJVF9ESVJ9IgogICAgICIke1dF
QktJVF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzIgogICAgICIk
e1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIiCiAgICAgIiR7V0VCS0lUX0RJ
Un0vTmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCA3OTk0ZTNjYTc3NzYzMjlkNmY3NWQ3YWFmMGM5M2Zk
OWFhMDU5ZTEwLi5jOTY4ZDM0NzhhNjNkNWFmYWQ3NDdlOWMyYjMxOTlkM2ZiNzA3NDdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysr
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNSw2
ICsxNSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW9kZWxzLnB5
CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNU
X0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9H
UFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KICQoUFJPSkVD
VF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMCw2ICsxMDIsNyBAQCAkKFBST0pFQ1RfRElS
KS9XZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRnVs
bFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5pbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMGNk
MjNlMDFiYmFjZDJlYzRhMGJkYzNiZGZmMmJlMGQ3YjYwYjAxYi4uNzFkYTY1M2I3ZWI3M2I2MmYx
MDA0M2U0YWQ0MmUzNzFiOTVjOTYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIwLDEyIEBAICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2Vz
UmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9Q
bHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlc1JlcGxpZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1h
Z2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2Fn
ZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVz
c2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAtMTM1LDYgKzE0MSw5IEBAICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5
TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzUmVwbGllcy5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggOWQzZTJhOTBjN2I0ZDkwYTQyNmM3NmE0
ZTA1ZTZiMmY4MWNjMGU5ZS4uOTFjMThmYTFhMTZiYTE1NDUyZjczNDliZjUyZGMyYjgxNGUyMTFi
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUsNyBAQCBWUEFUSCA9
IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vz
cy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisgICAgJChXZWJLaXQy
KS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vz
cy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAogICAgICQoV2ViS2l0
MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9tZWRpYSBcCisg
ICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdl
YktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhQ2FjaGUgXApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuY3BwCmluZGV4IDUyYTk1Y2UwZGVkNzAzZDYxZDM0YTlkMTdmMGM4YjQyZTY2NGZkZGEu
LmQ5NGU1MWNkZDdmODlhY2ZhZDE4YTc5ZjM3OWY0YmZjYWFmNGY3MmMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
QEAgLTE0OSw0NCArMTQ5LDYwIEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQ
cm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCku
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNpZiBQ
TEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNl
aXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29k
ZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJv
eHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFu
YWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlv
biwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBhYzcxMjVkNzM4ZDg2ODg4ZWVhOGI0YTkyNTE1
ZjlkZTRkMWY2YjA0Li40NWUwYjUxZTNjNTY2Mjc0NDE0YTE1NGQwY2U4NjdmZTY2NjZhZjA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAog
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1z
Lmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNp
bmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Np
b25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDYsMTggKzQ4LDIwIEBAIGNsYXNzIFJlbW90
ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
CiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAg
ICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAg
LCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nl
c3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklE
KTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0K
KyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1
cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkg
eyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2Vi
UHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03
NSwxNCArNzksMjEgQEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50
CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFt
ZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVy
PiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hT
eW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9w
dHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1f
bG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJl
ZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAg
bV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZp
ZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTMsNiArMTA0LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2Vi
UlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIy
MWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3Nh
Z2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2Ugewor
ICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJl
bmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdj
OGZhM2U3Yjg1MGUxMzdiYWUzMmVkZGI4YTcxNWU4NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIo
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAg
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9
CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sK
KyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+
bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdl
QnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAo
YXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5j
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdo
dCBzZW5kUmlnaHQpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRl
eHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250
ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWExNmExNDNlNzdiMjIyYzM1NTE4ZDNkNTY2ZmYzYTllNWEyMWJjYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRS
aWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
KyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBD
OjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIK
KyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9y
U3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBh
ZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRkNzJkZGViNWVjOTU4YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdl
cyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1
c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwg
V2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1
ZWQxYzg5MTZjMjQ0NWQ3Y2U4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHku
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQ
cm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwg
cHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbElt
YWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47Cisg
ICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRp
Zmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6
dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdU
Rk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAg
ICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgp
LCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgp
LCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVy
KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAg
ICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmNlZTNlN2MxOWY0NTY4OWVmNWJlMjVj
YTgzMTE1MDdjODNhNjc3ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eTxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBs
YXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxB
Y2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OWY5YmI1ZDZiYmVm
Y2ViMTM4OGJmNzg0NmZiNDdiOTVkOGJlNDBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisK
K25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5p
cXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQor
CitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5l
Y3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0g
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVy
RGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
Cit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAgaWYgKCFncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVy
ID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIp
CisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1h
Z2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZl
cikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdl
QnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7Cisg
ICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVm
b3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVy
SWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVy
KEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhh
c2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdl
YWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3
ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkK
aW5kZXggNWQ4NDQ3MTMyNWJiYTdhNDM1ZWQ5MzNjMDkwOTA5NDUzYjlkNDAyNS4uNTNiNzkyZWRi
NmI2MjM3N2M4ZWM5YzMzYTk5YTU1NDliOWE1NTVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Vi
a2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHND
b25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNw
YXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVy
JwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBT
WU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAg
ZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4g
ZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywK
KyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2Vi
Q29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXIn
LAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6
OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fu
bm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllcicsCisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAg
ICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZp
Y2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjE4LDkgKzIyMiwxMiBAQCBkZWYgdHlwZXNfdGhh
dF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2
ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVD
aGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyJywK
KyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVz
b3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFn
ZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2MSwxMyArNzY4LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNz
YWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNf
bWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBp
ZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENI
X01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlk
UmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZl
ci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAg
ICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0
dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xu
JykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVy
LCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVj
ZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJl
dHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc2
LDEzICs3ODYsMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAg
ICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFU
Q0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCBy
ZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FU
VFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAg
IGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FU
VFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2Fn
ZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2Fn
ZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVT
U0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNw
YXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDFkZTMwNDJjMDc5
MTY1YTFkMjVhNmY0YjU4ZDY2MDlhNjU2NjAyZjguLmFhODlmNjVhYmI0NjQ2ODY5YzgzMGI5NWZk
Zjc1NjRjYzBlMjQzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFy
Z3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVu
dC5oPgpAQCAtNzg5LDYgKzc5MCwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsK
IAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1
ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQs
CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8
V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAg
ICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGQwMzkzYmIwNjJkOTdhZTk2
YTcyMjVhNmQ2MDdiMDc0YjM4ZTBjOTguLmY3MjI1MjdlODZlNDczYTQwZDEzOTMwNmUzZjA5Y2Zl
ZDkzNjdiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjksNiArMjksOCBAQCBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIu
Y3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAog
CiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1By
b2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUxMiw2ICs1MTQsOCBAQCBXZWJQ
cm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNz
L0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9t
ZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3Mv
R1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCiAKIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZmU3NTc5
NTM3NjFiOTlmNjliODI4YzExYmJjMGYzMzFhZWVmYzE5MS4uZmE4M2ZkYzkyYTFmZDU1N2QyZDlj
YTYwMmU2NGE2MWI5MzJhMzE2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNjMxLDkgKzYz
MSwxMyBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9s
bGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VS
ZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BV
UHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRD
Q29kZWNzTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogU2VydmljZVdvcmtlckZl
dGNoVGFza01lc3NhZ2VSZWNlaXZlci5jcHAKIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDU3NzhiYTU4NzIzMmM2ZTZhNzgyMjQ2YjljN2NiMzIwYWU4ZmNj
ZWEuLmQzMWIzM2Q3YzI5MWU1MmNmODc2NzQ4ZmFlMWExNDI3NDBlMGVkOTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzk0Myw4ICsz
OTQzLDI2IEBACiAJCTcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3Vj
aEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1
cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJD
NjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2Nzcg
LyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0
Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTgyM0FEMkZE
NjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFG
MUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3
IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8q
IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTYw
MjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4
NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
OEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVt
b3RlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEy
M0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTEyM0FCMDc2MzAwQTYx
MjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW47IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFODIzQjM4
NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
RDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQzIz
QjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVFMjNCNTZDODQw
MEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4
RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYzNzIsNiArNjM5MCw3IEBACiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1
OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVy
aW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4ODIzQjYxMjYxMDBBRTU2ODYgLyogd2VicnRjICov
LAogCQkJCTJEN0U0M0MwMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5j
cHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0
aW9uLmggKi8sCkBAIC02Mzg4LDYgKzY0MDcsNyBAQAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5
RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYyMzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywK
IAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2NUIgLyogbWVkaWEgKi8sCisJCQkJNzIxRjFFOTcy
M0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2
MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYg
LyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5
RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywKQEAgLTc3NDksNiAr
Nzc2OSwzOCBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07CisJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUU5QTIzQUQy
RkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8sCisJCQkJNzIxRjFF
OTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3
MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdl
cy5pbiAqLywKKwkJCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyRDVDMkVDMjNCNEM4MjMw
MEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTcyRDVD
MkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywK
KwkJCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Lm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYx
MjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllci5oICovLAorCQkJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJCQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyog
UmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAorCQkJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2MDIzQzE4Mjg3
MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDEx
MjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJCQkJ
NzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICov
LAorCQkJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmggKi8sCisJCQkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMg
LyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRlMzIzMDc3MGYyNDM2MWI2YWJhYThlMTdlNGQyZTVhYzAu
LjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEzODA1NTBhYWE0Zjk0ZDhlMzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBA
IC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBD
OjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNl
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsKLX0KLQotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRl
Y29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1v
dGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
cj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKICAgICAgICAg
ICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgogI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRD
Q29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
I2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlz
cGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikK
K3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQorewogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCAzMWM2MTA0NjY5ZjJmMDJmZmE0NDBmZWI4ODA5MjZj
NzRhZTI2YWNmLi42ZDFiODNkZTU4MzZhZmFlMjFhZmMzNGY1OGEyMmU1ZDZkMzIzYzcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
QEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwog
ICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVj
dGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2
ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiBwcml2YXRlOgogICAg
IEdQVVByb2Nlc3NDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CkBAIC01
MywxMCArNTUsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAog
ICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsK
KyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZv
aWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VOYW1lKSBvdmVycmlkZTsKIAorICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVy
PiYpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhl
IEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAg
ICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggZDM2Zjhh
MDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4NGNlOWQ2NGIzMC4uNTdmZWNkZTlkZjI3YzczOWE2Y2Jm
MDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3
ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVBy
b2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRz
RGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyYmJkZDg2MzQwNTIwNWFkYTdlZjNjYzcz
ODQ2MDE5ZmIxOTkzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApAQCAt
MCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
T2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wN2VhZjk0NGJhMzhmMGE5OTRhNWJlNTI0MTk1OWY0YWM4OGE1OTIyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdl
QnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1h
Z2VCdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZp
ZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGE1MWI0Y2U4MGY3YjFhNmVjYmM4MmJlNDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJH
UFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVy
OjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQorICAgIDogbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIg
aW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFw
JiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQ
cm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNl
aXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCks
ICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdl
QnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
bV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
K30KKworUmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8g
VW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAg
IG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAg
Ly8gUmVsZWFzZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdl
QnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJ
UEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVH
UFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3Rl
SW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1v
dGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVm
PElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVu
c3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25u
ZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1h
Z2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2Fn
ZUFycml2ZXMpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVu
dGlmaWVyKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5
PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdl
QnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRp
bmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVu
c3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sKKyAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4
V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHND
b3VudDsgIWlzQmFja2VuZENyZWF0ZWQoKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2Fp
dENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0Nv
dW50ID0gTWF4V2FpdHNDb3VudDsgaXNQZW5kaW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkK
KyAgICAgICAgd2FpdFNldEZsdXNoSWRlbnRpZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdl
QnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1
c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElk
ZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4
dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQor
eworICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
OjpnZW5lcmF0ZSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6
OkZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjU2ZTMxZDBjYWYyMDZl
ZTUwNmM5Nzk2OTA1Yjc4NDBhNDliOGFiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2Fn
ZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5k
UmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVy
CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgflJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3By
b3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUm
LCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6
OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6
TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0
Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVudGlm
aWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBpc1Bl
bmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3Jl
Y2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgor
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlLCBNYWNoU2VuZFJpZ2h0KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENy
ZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllcik7ICAgICAgICAKKyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4
dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdl
QnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRl
bnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1f
c2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3Jl
Y2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjg3NzU1N2MwYWE4Yzhh
OTA1MDRhMTM1ODBkYTU5MWFhNWJmYzVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3Nh
Z2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1h
Z2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNp
Y2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlm
aWVyKFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQor
fQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU3MWM3YWQ4MDRjMmM0MWZl
ZDE2Y2IxMDZjNjZkMDlmNzQwMzUxZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
LmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMg
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1
ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxv
Z2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RG
TW92ZShzZW5kUmlnaHQpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNr
ZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgICAgICByZXR1cm4g
bV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVt
b3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTgzM2QzNmU0
NmM4YjAwZWE5MTk4MzkzNjgxODM0MTFmNzg1YzBjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3Vz
aW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
PFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxh
dGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQxNTExN2I1ZTEzZWNiNjA2ZDQ1MjJkZjQ3
YjBlZDJjMmExZTkzMGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAs
MCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZCgpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCgpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3Jl
YXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9
CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sK
KyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2Vu
ZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0Jh
Y2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5l
Y3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVBy
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVy
ID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVu
ZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJp
bmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9
CisgICAgCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1
MTcxODUwOWQ5ZDFmNDRjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5n
QmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHBy
aXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2Vp
dmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tl
bmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8v
IElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6
SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kNDY1ZmI4YzZmNzdmN2ZkZTM4ZjY4Y2JiMDc1MjQ2Yzk5NGRiMWQ1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJU
eXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRp
ZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGU+OworCit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3Bw
CmluZGV4IDQ2ZDExOTg3NzJjNTFiOGFkOTBlZjhhMTcxMzIxZmZjZTI5MGZjZjkuLmIwMjkyMWUw
NjFhNjBlMzM1MDg4N2U3YjA4OTMyNGVhYjhlYTNmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApAQCAtNDIs
NiArNDIsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKIHN0YXRpYyB3ZWJydGM6OldlYktpdFZpZGVvRGVjb2RlciBjcmVhdGVWaWRlb0RlY29k
ZXIoY29uc3Qgd2VicnRjOjpTZHBWaWRlb0Zvcm1hdCYgZm9ybWF0KQogewogICAgIGlmIChmb3Jt
YXQubmFtZSAhPSAiSDI2NCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdi
OGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1OGEuLjQ4MWZhYWFhY2FkMjBkMjYzOWU4NWQxNjU2
M2JlYjI4NzJlMDBkZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIu
aCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiVXNlckRh
dGEuaCIKICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKQEAgLTg4MSwxNSArODgyLDIyIEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5
KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIH0KIAogI2lm
IFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KIFJlZlB0cjxE
aXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJl
c2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKICAgICBpZiAo
YXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJu
IGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QK
K3sKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlKCk7CiAjZW5kaWYKK30KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFw
aGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKaW5kZXggZmRhMzM4ZWNmYTY4NTVlMWMxZDYwODUwZTQ3MWY2Nzk0ZWQxYzJjZC4uNGRlZGZl
ZTc4NDExNjVlNTc3ZDk0MDMyMzU1MWI0ZjUzYjJkMWRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApA
QCAtMjMxLDYgKzIzMSw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlS
ZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRm
b3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25z
dCBmaW5hbDsKKwogICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGlu
Z1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCmlu
ZGV4IGVmMDM1MDM0MmJiODIyNDZjZDE5ZjM1NGQ5YmNjMDI5MWYyOTA0M2QuLjI0MDdmMTA2OWI1
N2ZiZjY1OTQ4ODc1NDEyOGNlOGZhYjFlY2JiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50
Lm1tCkBAIC0yMDIsNyArMjAyLDcgQEAgUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51
Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0KICAgICAgICAg
cmV0dXJuIG5pbDsKIAogICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBzbmFwc2hvdCwgYW5k
IHdpbGwgYmUgcGFpbnRlZCBpbiBhbiB1bmFjY2VsZXJhdGVkIGZhc2hpb24gaW4gbGluZSB3aXRo
IEZyYW1lU25hcHNob3R0aW5nLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAo
IWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY1YTZiMDk2NTNjMWQ0M2Mz
MjYyMTJjNjA0MTliZmQ0YWRiNWIzZTguLmJkM2FhOGM4Y2U2NmQxZGVlZjQ5NWU5NDhlY2Q4Y2Iy
MWVmMWQ2MTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0wMS0wNyAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52
YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50
eHQ6CisKIDIwMjAtMDEtMDcgIFRydWl0dCBTYXZlbGwgIDx0c2F2ZWxsQGFwcGxlLmNvbT4KIAog
ICAgICAgICBDb3JyZWN0IGV4cGVjdGF0aW9ucyBtYWRlIGluIHIyNTQxMzQsIHIyNTQxMzUsIGFu
ZCByMjU0MTM2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFz
LWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMWI1N2U3OTFiNzJhY2NhODc3NjE0NDc5
YjRkYzdmZTVjOTU5NGQ3Ny4uMzRjODdiOWIwNDI5NDU1YTliZjExNDFjNmJmYjM5NzFjNzUyMGI4
ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxp
c3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAocmVz
dG9yZS1pbmRleCAwKSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChmaWxs
LWNvbG9yICNDODAwMDApKQorICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2UtdGhp
Y2tuZXNzIDEuMDApCisgIChmaWxsLWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9yZS10
cmFuc2Zvcm1zIDEpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1NXg1
MCkKICAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387023</attachid>
            <date>2020-01-07 13:23:11 -0800</date>
            <delta_ts>2020-01-07 19:01:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200107132310.patch</filename>
            <type>text/plain</type>
            <size>363435</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkwMjhlY2U1ZGZlM2Zi
ODMwYmQwNWQ1OGI0NGIyNmRlZGVjZGU3YS4uMWQ5MjQ0NzIwZjk2YWE3N2FkYzE2YmY0Mzk3ZTY5
NmU3Y2E3M2Q3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6aW50ZXJuYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVy
OjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxl
cmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVz
UGVyUm93IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAy
MDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OWI4Mzcy
ZTE5OTkwOGM0ZGRkYTcyMmYxZGI4ZDk2M2ZhODY2ZWQ0Li4wYzdmZDcyYjFjMjMwMmZmNjhmYjRm
YTdhZTU0ZGM4NWRjZTA1YzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDIwLTAxLTA3
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAo
V2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
bGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAg
ICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToK
KyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1l
c3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgor
CiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IGM3NGVmYTlmNzQwM2U5NzYyOGRlMTRhODM5YWUzMzgyNWNhZGYzZjUu
LjRlMDRiYzkzYmY5ZDUxOGIwMzcxYjBhZTAwY2VhOGEyOWE3Y2QxODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0wNyAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52
YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAg
ICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2Vydmlj
ZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggNDY2MTljNjVkNmIzYzNkODFmZjRjMmU1MDA1MjE2YWE0OTYy
ZWMxNC4uMDU1MWMwNTQ5MDljZDg3Y2JlMDM5MWQ1YzBkMmUwY2U0OWI0YmRjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xMDIyLDYgKzEwMjIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAt
MTA3MSw3ICsxMDcyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1l
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDMsMTMgKzExMDQsMTYgQEAgc2V0KFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2Ft
cGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5k
aW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9h
cmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUy
N2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5
MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1j
bGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQog
CiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAg
ICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUp
OwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJ
bWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAg
IG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThh
YzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBA
QCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdM
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkK
IAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFh
MDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVh
YzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01h
Yy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyAr
NTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYwYmJiZmQ0
NmVlODc5NjhmZDJjMWVmYTVmZjc3YjdlZjBhYzRkNjguLjVmZjFmYjViN2M1ZjdmOGIzMjU0Mzhh
NDI1ZDYyNDc2NjRmMWE2YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY4LDYgKzE4NjgsNyBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNv
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg3LDYg
KzE4ODgsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTQ1M2Q4OTA5N2U2
ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNS4uNGYwM2VjMjNkOGM0MGZiOTZhMmU1NzcwMWUz
NjZhYjAxNGNlY2ZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVjNDA4NGQ5ODQ1OGMzNTMyNDI1YmM5ZWVm
NzUzN2Y1MDYzNWIzNTAuLmExYTQ3NzIxMTU2NzUzYzY4NWMzNDQ5YjNlMDgwYTgzMTdlZWY3Mjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAw
OUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1
MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NW
R0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1
IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJl
ZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzMsMTAgKzIxMzEsMjEgQEAKIAkJNzIxNDQzMzIyMjNF
Qzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMz
MzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQ
cm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIx
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4
QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgw
MDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2
QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBS
ZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEz
QThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURD
ODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZp
dHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVF
NTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIz
QzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4
IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQy
MDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIz
QUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYx
MjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFNTIzQjFBODZEMDBGNjdENDMgLyog
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3
MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgx
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBD
RTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDAsOSArNjU0OSw2IEBACiAJCTIyNUExNkIzMEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
MjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdy
YXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0Yx
MUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMw
MEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTU5OCw4ICs5NjA0LDEwIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQx
MSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9y
dC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3Vw
cG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYw
MDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRl
ZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZG
NyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5
IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhU
QmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhU
QmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC05NjIwLDcgKzk2MjgsMjEgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4
IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhU
c1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAw
MDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVY
VHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAw
MDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTgg
LyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJG
QTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNp
Y2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAy
M0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFD
RTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWlu
dGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTMyM0IxQTc0RDAwRjY3RDQzIC8qIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oOyBwYXRoID0gdHJhbnNmb3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5k
ZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRl
cmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAv
KiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNF
WFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQy
RjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEOUYxQTM5
MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBFWFRGcmFnRGVwdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTI2ODQsNyArMTI3MDYsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyog
R3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
R3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1
MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEg
LyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNjY4Myw2ICsxNjcwNCw3IEBACiAJCQljaGlsZHJlbiA9ICgK
IAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJ
CTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJCTcyQkJF
NDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJ
CQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAog
CQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJ
CQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICov
LApAQCAtMjQ4ODksOSArMjQ5MTEsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAg
LyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIg
LyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQy
MEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBC
OTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQkU0
MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJ
CQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0
MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIx
REIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1
NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5
NjgsNiArMjQ5OTMsNyBAQAogCQkJCUZCQzIyMEREMTIzN0ZCRUIwMEJDRjc4OCAvKiBvcGVuZ2wg
Ki8sCiAJCQkJMzcyMTQ5MzMxOEYwQjZENjAwMTU2RURDIC8qIG9wZW50eXBlICovLAogCQkJCTQ5
RTkxMUIyMEVGODZEMjcwMDlEMENBRiAvKiB0cmFuc2Zvcm1zICovLAorCQkJCTcyRDVDMkUzMjNC
MUE3NEQwMEY2N0Q0MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8sCiAJCQkJNDkwNzA3
RTQxMjE5QzA0MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmNwcCAqLywKIAkJCQk0OTA3
MDdFNTEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJLaXRCcmlkZ2UuaCAqLywKIAkJCQlCRUYy
OUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVkaW9UcmFja1ByaXZhdGUuaCAqLywKQEAgLTI0OTg3
LDYgKzI1MDEzLDcgQEAKIAkJCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFp
bnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXku
aCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmgg
Ki8sCisJCQkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3Bs
YXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0yNTA3OCw3ICsyNTEwNSw4IEBACiAJ
CQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJ
CQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlC
MkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzIwMjgwRDEy
M0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0
MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlG
RUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2
MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhB
NzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTEzNSw2ICsyNTE2Myw4IEBA
CiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJ
CQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZF
NUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNGRTIzQUFCRkEy
MDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDIzMjNBQzQ5
M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJMDU2MkY5NjAxNTcz
Rjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RD
MDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3
RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTE0NCw2
ICsyNTE3NCw5IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICov
LAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5jcHAg
Ki8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmgg
Ki8sCisJCQkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3Bw
ICovLAorCQkJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmgg
Ki8sCisJCQkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLywK
IAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICovLAogCQkJ
CUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RE
NDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKQEAgLTI4OTg1LDYgKzI5
MDE4LDcgQEAKIAkJCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVP
ck5vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0IC8qIEFm
ZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCQjVDODgxRDVENkY0NTAwNUE3
MUY0IC8qIEFsbERlc2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJE
NUMyRTUyM0IxQTg2RDAwRjY3RDQzIC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2ZVRleHRD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1
ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI5Njc5LDYgKzI5NzEzLDggQEAKIAkJCQkxMTJGQjM1MjIzOUMyM0M0MDA4NzA1
NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3RTYzMjI3
NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
NUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzAyODcsOCArMzAzMjMsMTAgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVD
MDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODEx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxRjFFQTcy
M0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJ
bWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTky
RDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMTc1Nyw2ICszMTc5NSw3IEBACiAJCQkJQTU1NEI1RjMxRTM4MzkzQTAwMUQ0
RTAzIC8qIFBlcmZvcm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1ODFG
QjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlENURDMkUwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURCQzFCNTYyMzQ3QjNEMjAwQjkw
MUFGIC8qIFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUQy
QzgyQjcyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjggLyogUGljdHVyZUluUGljdHVy
ZVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc3Niw2ICszMTgxNSw3IEBACiAJCQkJQkNB
QTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRN
YWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQ
bGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYxMjNDMTk1QTgwMDI2
MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVDNDc2
ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwNTYyRjk2MTE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjU0NEY3ODkxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTUzLDYgKzMxOTkzLDggQEAKIAkJCQlCQ0VBNDg3NjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJG
MDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0
eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVDMkVBMjNCNEMwRjgwMEY2N0Q0MyAv
KiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZBODIzQzFGNThC
MDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIy
MjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDE4MTc1MTVlMWNjNzA5MGM3ZTU5YTBjYmQy
NTNmZjcyNjE3NDRjNzMuLmY1MDFjYTIzYTczOTVmMWU1YjIxYzgxYjA0ZGRiMDE5M2I3YTJmMzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcApAQCAtOTIxLDggKzkyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9IGJ1
ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgp
LCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJl
Y3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKICAg
ICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjc4
NSwxMyArMjc4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShG
bG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgVW5hY2NlbGVyYXRlZCwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgewog
ICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEsIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNpemUobG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgSW50U2l6ZShsb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCksIEludFBvaW50KCkpOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0p
OwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGU1YjhhYjQ2OWNlYzRiYzA1OGM0MzdkMTk5
NTA0MGI1MDIxYzc0MzEuLjJmYTUzYWEzOGMxZmNjMTE3MzU2YWY5ZjE1NWQwMTVkNDQzN2YwY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiw3
ICsxMTYsNyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIElt
YWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVy
IHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0
ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBh
dXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6
bnVsbEltYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAK
aW5kZXggZjRiNzcwN2U5N2E4ZmU1MWY4ZTI1Nzc1OGFkZTRiNmRkZmY1MDJlNS4uNjVkNDY0ZmRk
N2Q1ODhlYzczMTYxNmI3NDAzN2E4NDI4ZWVmMzFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50
Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCAxLCBDb2xvclNwYWNlOjpTUkdC
LCBudWxscHRyKTsKKyAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1fY29waWVkQnVm
ZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTAyLDcgKzEwMiw3IEBAIEltYWdl
KiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgICAgICBtX2NvbnRl
eHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgbV9kZXN0aW5hdGlvbkdy
YXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEltYWdlID0gbV9jb3BpZWRC
dWZmZXItPmNvcHlJbWFnZShtX2NvcGllZEJ1ZmZlci0+ZmFzdENvcHlJbWFnZU1vZGUoKSwgUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZl
ci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMjNkOWIzNGU4NDhmNmQwMWQzNGE5ZGFm
ZmJhMzA1MGZjN2E3MTMxNi4uOTA5MzNlMjNhYzA4MTgwMzNjNzZmYzNlMjgyMTE5MTgwMTQ4NmM3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNhbnZhc1Bh
dHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRl
ICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC02MCw2
ICs2MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRl
ICJDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFt
LmgiCkBAIC0zNDUsOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkKIAogICAgIG1f
Y29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBkb2N1bWVu
dCgpLmluUXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1f
Y29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVu
ZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFz
LgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKQEAgLTgxOCwzOSAr
ODIwLDI3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCiB7Ci0gICAgaWYg
KHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nKQotICAg
ICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0gdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogewotICAgIGlmICh0
cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXk7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwogfQogCiBTdHJpbmcgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBp
ZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVy
biBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlzcGxheUxpc3QoKS5hc1RleHQoZmxhZ3Mp
OwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojpy
ZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0Lmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpICYmIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCktPmFzVGV4dChmbGFncyk7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBAIC04ODUsMTEgKzg3NSwyNyBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgp
IHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gQWNjZWxlcmF0ZWQgOiBVbmFj
Y2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3VtZW50KCkudmlldygpICYm
IGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKS0+
aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNl
dHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3Vt
ZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworICAgIAorICAg
IC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRyYXdpbmcgb24gY2FudmFz
LgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKworICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc1JlbW90ZURyYXdpbmcpCisgICAgICAgIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlJlbW90ZTsKKyAgICBlbHNlIGlmICh1
c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNj
ZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAgICAgICAgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKwogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgewog
ICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxl
cmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2MDUwNjMyNi4uNDIxMzRh
MTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBtX3VzZXNEaXNwbGF5TGlz
dERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3MzlhMWY1YzNiZTBlZTE3
MWYzNGY5NjNlMDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4N2E5MDJmZTY5MmIzMDk5
NTRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0
bWFwKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJl
bmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMg
UmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUo
SW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4
IDA5MWEzNjk5MmE5YzM1ZjEzMGY4NWRjYzgxOGY5NTk3ZTI3MmRlY2YuLjRlYWE1OGRiMWIwNTMx
YzNiNzdjOGY4YWI5OTRjOThlODExZDAxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAg
ICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAg
ICAgaWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IElt
YWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVy
YXRlZCksIHRydWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVh
dGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCksIHRydWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZl
cigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIE9mZnNj
cmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8
fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6
OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0
CiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkKSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg5ZDhmNDI0
M2IyYjkyZGZiY2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLjViMWIwN2VmNzczODQzMzYwOGU4ODJm
YjllM2JhOWEyYjFhNGM5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xODA2LDcgKzE4
MDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmNhbGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVm
ZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVy
OjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVy
UmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNv
bnN0IEludFJlY3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTk5MCw3
ICsxOTkwLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0
cjxDYW52YXNQYXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShCaXRtYXBJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4p
IH07CiAjZW5kaWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCkt
PnJlbmRlcmluZ01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkg
PyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTIwNzUsMjEgKzIwNzUsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheQogICAgICAg
ICBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5yZW1vdmUodGhpcyk7CiB9CiAKLVN0cmluZyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6
QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlY29yZGluZ0NvbnRleHQp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcmVjb3JkaW5nQ29udGV4dC0+ZGlz
cGxheUxpc3QuYXNUZXh0KGZsYWdzKTsKLX0KLQotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKLXsKLSAgICBhdXRvKiBkaXNwbGF5TGlzdCA9IGNvbnRleHREaXNwbGF5
TGlzdE1hcCgpLmdldCh0aGlzKTsKLSAgICBpZiAoIWRpc3BsYXlMaXN0KQotICAgICAgICByZXR1
cm4geyB9OwotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+YXNUZXh0KGZsYWdzKTsKLX0KLQogY29u
c3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlLCAxPiYgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygpCiB7CiAgICAgcmVhbGl6ZVNhdmVz
KCk7CkBAIC0yMTU5LDEwICsyMTQ0LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiAKIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKKyAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIHN4LCBzeSwgc3csIHNoKTsKIH0KIAotRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBm
bG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKK0V4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQg
c3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5v
cmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNv
bnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGltYWdl
IGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkg
Y3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw3ICsyMTgxLDcgQEAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdl
RGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5ID0g
YnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwg
Y29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0pOwogICAgIGlmICghYnl0ZUFycmF5KSB7CiAgICAgICAgIFN0
cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVu
ZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVk
IHNpemUgd2FzICIpOwpAQCAtMjIxOCwxMCArMjIwMywxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBm
bG9hdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJ
bWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBk
aXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewotICAgIHB1dElt
YWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4LCBk
eSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKKyAgICBwdXRJbWFn
ZURhdGEoZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgZHgsIGR5LCBkaXJ0eVgsIGRp
cnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwg
ZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5
SGVpZ2h0KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lk
dGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52
YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcgKzIyMzAsOCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNf
Y2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RP
ZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3Jk
aW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtID8gYnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOworICAgIAorICAg
IGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0g
PT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCA/IGJ1ZmZlci0+bG9naWNhbFNpemUoKSA6IGJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RSZWN0KTsKQEAgLTIyNTMs
NyArMjIzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgc291cmNlUmVjdC5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpKTsKIAogICAg
IGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5
KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJ
bnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50
KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqZGF0YS5kYXRh
KCksIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50
UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOwogCiAgICAgZGlkRHJhdyhkZXN0
UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRv
dyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJm
NDk4YWU2NzIyMTg3ZjFiZWU5MWQuLjk2NDAwZDFhZjUwMGQ1OGUxZGQ5YmQxMTE3NDgyMTQxYTcy
YmI1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTIyMiw5ICsyMjIsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXk7IH0KICAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KGJvb2wpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1Rl
eHRGbGFncykgY29uc3Q7Ci0gICAgU3RyaW5nIHJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3Bs
YXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0KICAgICB1c2luZyBEaXJlY3Rpb24gPSBDYW52
YXNEaXJlY3Rpb247CiAKICAgICBjbGFzcyBGb250UHJveHkgOiBwdWJsaWMgRm9udFNlbGVjdG9y
Q2xpZW50IHsKQEAgLTM3MSw4ICszNjgsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1wbGF0ZTxj
bGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29u
c3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6OkNvb3Jk
aW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0
eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKKyAgICBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEmLCBDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0
eUhlaWdodCk7CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMTRlYTM3ZDhkN2VhZmIwMWI1YzRjZTE5ZWJlNzZjNTE4
Y2ZjZDRhOC4uYjUxYjRkYmYxM2VlNTA2ZWI5NDk4YzQzZWY0NWM5NDRkZDczZTBhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQpOwog
CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJp
bmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+
IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywg
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKQEAgLTY5LDcg
KzY5LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6
Y2FudmFzKCkgY29uc3QKIAogYm9vbCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2RlID09IEFj
Y2VsZXJhdGVkOworICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOwogfQogCiB2b2lkIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6
c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYXApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCmluZGV4IDBjMmZjODRiZmMwNmJkZjRkOGRjMzZjNzVkOWI5OWI2ZGJmZDIzZTUuLjY5
ZDM0MTExZWJhNTdmNDE0OGVhYzhlNmJiNTA3MGQ3MTRjMzQ0ODggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CkBAIC0zOTM5LDcgKzM5MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogICAgICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2Us
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVy
biB7IH07CkBAIC00MDYxLDcgKzQwNjEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogICAg
ICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBT
b3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgdmlk
ZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwg
eG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
ICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRl
eFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDUwMCw3ICs0NTAw
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgICAgICYmIHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAgICAgICAgIGlm
IChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJnZXQs
IHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXItPmNvcHlU
b1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1h
dCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewogICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSwgdHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtNDUwOCw3ICs0
NTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgfQogCiAgICAgICAgIC8v
IE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZm
ZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRleEltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQ1NzcsNyArNDU3
Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJ
bnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
OwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwg
IXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKICAgICAgICAgICAgICAgICBJbWFn
ZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAo
YnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCks
IHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVj
dCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Zs
aXBZKSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQo
KSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNDYyMiw3ICs0NjIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VCdWZmZXI6
OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlk
ZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRleEltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ2NDcsNyArNDY0Nyw3IEBAIFJlZlB0
cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJ
bWFnZSYgaW1hZ2UsIGludCB3CiAgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBp
bWFnZS5zaXplKCkpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIHNpemUp
OwogICAgIGJ1Zi0+Y29udGV4dCgpLmRyYXdJbWFnZShpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3Qp
OwotICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1v
ZGUoKSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTYzNDQsNyArNjM0NCw3IEBAIEltYWdlQnVmZmVy
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1
ZmZlcihjb25zdCBJCiAgICAgfQogCiAgICAgLy8gRklYTUUgKDE0OTQyMyk6IFNob3VsZCB0aGlz
IEltYWdlQnVmZmVyIGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkPwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
VW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEFTU0VSVChtX2J1
ZmZlcnMuc2l6ZSgpID4gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggMGNiZDBhM2NjZTAzOTI5NWI0OTI1Y2UzMWEw
NTRlMWY2OTEwZDkzMC4uNmVhNzkyMTRmOGE2ZTAwNWIwYmUyNDQ5YTJkZDY3Mjg4ZmMzYWMyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcApAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUmVmUHRyPEltYWdlPiBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGkKICAg
ICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPnNpemUo
KSk7CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1
bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFVu
YWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZhMWZiZmE3ZWZmZDdhZjUuLjYzN2U3
N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKICAgICBtX2NsaWVudC5zZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAor
UmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNr
ZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVybiBtX3Jl
bmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRmb3JtRGlzcGxheUlEIENocm9tZTo6ZGlz
cGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5SUQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
aAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2NjhkNDQ3MGVjNTEzNjFhZjQ5Li40NjhjMTcw
MDhhYWZhNDdmYWEyMzdjNzRmZjQ4ZjQwMjMwZGRiYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKQEAg
LTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wp
IG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBv
dmVycmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNz
ZWQgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggNjI2MTdmNzhmM2UyZjA0NzQ4
YWE1OGFkYWViOGZhMzBiZDcxMmFkNC4uYzk5ZDM2YWZmYWE4NjVhOWU2YTk1ZGM1MzViNDg3NDhj
N2VlM2UxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21h
aW4uaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDMs
NiArMzA0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBoaWNzTGF5
ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9v
dEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKaW5kZXggMGE0NGMyZmEx
YTA5NDk3Y2ZkZjU1ODg4MzJmZmRmZjEwMjMzMzBlMS4uZTI0ZDkyZTZmM2U2MWQzOGE5YjI0NDg1
ZjRkMTNkZTUwZTUzM2EyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNu
YXBzaG90dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNu
YXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZQogICAgIGlm
IChvcHRpb25zICYgU25hcHNob3RPcHRpb25zUGFpbnRXaXRoSW50ZWdyYWxTY2FsZUZhY3RvcikK
ICAgICAgICAgc2NhbGVGYWN0b3IgPSBjZWlsZihzY2FsZUZhY3Rvcik7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VS
ZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJ1ZmZlci0+Y29udGV4
dCgpLnRyYW5zbGF0ZSgtaW1hZ2VSZWN0LngoKSwgLWltYWdlUmVjdC55KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4
NzI5MDljYjcxZjc4MjhlZjg1YmJjLi4yMTA3YTllMWU5OWNmMzUxZDllNjE2NjgwNWM0YTU2MzNh
ZTQ3ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAt
Mzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAg
YXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qg
c291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLT5kYXRh
KCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJM
ID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKaW5kZXggMmNmZWNhZGMyNGQ5ODJhODYx
NjM3NGI3NmEwZTRmYjBmZmY3YTlkNC4uZjVmMjE3Y2NkODQwNjA4MDAyNTVjMjAzZDIyMTdjYWVj
ZTBjZTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE0ICsyMywx
NCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBIb3N0V2luZG93X2gKLSNkZWZp
bmUgSG9zdFdpbmRvd19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldpZGdldC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsKK2NsYXNzIFJlbmRlcmluZ0JhY2tl
bmQ7CiAKIGNsYXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhvc3RX
aW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY0LDYgKzY0LDggQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29s
KSA9IDA7CiAKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQoKSBjb25zdCA9IDA7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0
aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBj
b25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjRhYWI0Njg2NzY4ZjFhMjgyZDU4ODFjOTM5Nzk0NmQ1YmEyMDA2OTAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFz
cyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIDogcHVibGljIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCB7CisgICAgdXNp
bmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRU
eXBlPjsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVy
KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRT
aXplJiBzaXplKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoZGF0
YUJhY2tlbmQpKQorICAgICAgICAsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQor
ICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKKyAgICAgICAgOiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAg
ICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29u
dGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaERy
YXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNv
bnRleHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBm
NTg2ZGQ0YjJhZjkxZjQ1NjU1MzVhNzAyOTM5MjNhZjJiYWFkYmEyLi4zNWJkNThjM2QxMmZmODRj
MGU2NjQyZjgxODI3MDk5Y2U4MzdlMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzUwLDcgKzM1MCw3IEBAIHB1Ymxp
YzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wp
OwogI2VuZGlmCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7IH0KKyAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggNDU4YWU3MmYyYWUwMjU2MjQ3NjhlODc5ZGJk
NDk2OTY0YjQ5MWIxOC4uMDBiZTBmZWEwNjA1NWNhMzFiMmM4ODc0ZGQzNzRlZWExZDQyODQ2OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJH
cmFwaGljc1R5cGVzLmgiCiAKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCBjZWVhMWRhNDBlYjMy
ZmY3OGExZTc1ZTE3YmZlMDA5MjAxYjc2ZjEyLi4yNmExMmRlM2JlNGFjNmI4ODQzNjRjNTU0Mzk3
ZjdmNzFjNzhhYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8
d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTIyLDE3ICsx
MjMsNiBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLWVudW0g
UmVuZGVyaW5nTW9kZSB7Ci0gICAgVW5hY2NlbGVyYXRlZCwKLSAgICBVbmFjY2VsZXJhdGVkTm9u
UGxhdGZvcm1CdWZmZXIsIC8vIFVzZSBwbGFpbiBtZW1vcnkgYWxsb2NhdGlvbiByYXRoZXIgdGhh
biBwbGF0Zm9ybSBBUEkgdG8gYWxsb2NhdGUgYmFja2luZyBzdG9yZS4KLSAgICBBY2NlbGVyYXRl
ZAotfTsKLQotZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHsKLSAgICBQcmVtdWx0
aXBsaWVkLAotICAgIFVucHJlbXVsdGlwbGllZAotfTsKLQogU3RyaW5nIGNvbXBvc2l0ZU9wZXJh
dG9yTmFtZShXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsK
IFN0cmluZyBibGVuZE1vZGVOYW1lKFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBib29sIHBhcnNlQmxl
bmRNb2RlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOwpAQCAtMTQzLDcgKzEz
Myw2IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRT
dHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVD
YXApOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIExpbmVKb2luKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggMWEwZjgxNmZkYTgwMzAyNzk2YWEzYTNlNTliNmRm
OTE5OTVkMDNjNy4uNGUyYmU3MWM3NDFjNTVmNTZjMGFkMDQ2YTc5N2U1MGEwOTcxODhiOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1p
dGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI4LDM4ICsyOCw0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Cisj
aW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKLXN0YXRpYyBjb25zdCBm
bG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3Ro
Oworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3sKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5n
QmFja2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2Rl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQogCi1XVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsK
K30KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihu
ZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJp
bmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIGlm
IChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1
ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBn
cmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVk
U2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotI2lmIFVTRShESVJF
Q1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJv
b2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBp
ZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7
CisgICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgorCitzdGF0aWMgY29uc3QgZmxvYXQg
TWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7CitzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFy
ZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAogYm9vbCBJbWFnZUJ1
ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewpAQCAtMTA1
LDk3ICsxMTEsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIGNs
YW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKENBSVJP
KQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgotICAgIHJldHVy
biB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpKQotCi1G
bG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplIHNp
emUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnRy
YW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRz
dENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1
cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAg
ICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xv
clNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
ZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGlj
IGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAg
ICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBj
b2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJD
b2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNf
Y2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNm
b3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFj
ZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7
Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xv
cik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3Vu
ZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5
OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZp
Y2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQg
SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBJbnRS
ZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8g
c3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsK
LSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNp
Z25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0
aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIGlmICghYSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0KTsKLSAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0ICsgMik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsg
ZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAg
c3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7Ci0gICAgfQotICAgIHB1
dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQo
KSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewot
ICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZl
cnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5h
bmNlTWFzaygpOwotfQotCi0jaWYgIVVTRShDQUlSTykKLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVm
ZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
JiwgR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKQorSW50
U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNm
b3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24g
dGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXpl
ICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKIH0KLSNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCiB7CkBAIC0yMDQsNjMgKzEyNSwyNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdAog
CiAgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJT
aXplKHJlY3Quc2l6ZSgpLCBjb250ZXh0KTsKIAotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29u
dGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigp
KTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZShzaXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0g
ICAgaWYgKCFidWZmZXIpCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwor
ICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8g
U2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRl
eHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAg
IHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3JlYXRl
KHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJl
bmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgotfQot
Ci1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICAvLyBFbmxh
cmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5n
IGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVs
IHBlciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2Nh
bGVGYWN0b3IoKSk7CisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIo
KnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAot
Ym9vbCBJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikK
IHsKLSAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChjb250ZXh0LnNjYWxlRmFjdG9yKCks
IHRoaXMtPmNvbnRleHQoKS5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXIt
PnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK1Jl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKIHsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5
IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBk
YXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBp
bnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4K
LSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5o
ZWlnaHQoKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVS
ZXNvbHV0aW9uKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3Qo
KSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaW1hZ2VC
dWZmZXItPmRyYXdDb25zdW1pbmcoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OwogfQotI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDUzMzNjZjRlYzIyOGY5
ZGIzNzNmMjU4ZTZiOWM3YjllZTRmYzhhYzAuLjAzODJiNzQwNDI0MGY1YmY0ODE2ZWQ4YWU1ZjY2
NmZjNTNlMjZjMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTcwICsyNyw4MSBAQAogCiAjcHJhZ21hIG9u
Y2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNE
LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGlu
Z09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Ci1jbGFzcyBJbWFn
ZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNs
YXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3JlQ29weSB7Ci0gICAgQ29weUJhY2tp
bmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBj
b3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFm
ZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIHsKLSAg
ICBObywKLSAgICBZZXMsCi19OworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERyYXdp
bmdDb250ZXh0OworfQogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVfRVhQT1JUKTsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsK
IHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9u
IGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBI
b3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhv
c3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBi
dWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlz
IGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBh
dGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3
aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgYm9vbCBp
c0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQot
ICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwotCi0gICAgLy8gVGhlIGFjdHVhbCBy
ZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9n
aWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0KLSAgICBGbG9hdFNp
emUgc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUpIGNvbnN0OwotCi0gICAgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KLQot
ICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworICAg
IC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZl
ciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0
YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRp
YyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2Nh
bGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7
CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9h
dFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0gICAgLy8g
R2l2ZSBoaW50cyBvbiB0aGUgZmFzdGVyIGNvcHlJbWFnZSBNb2RlLCByZXR1cm4gRG9udENvcHlC
YWNraW5nU3RvcmUgaWYgaXQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2
aW9yCi0gICAgLy8gb3IgcmV0dXJuIENvcHlCYWNraW5nU3RvcmUgaWYgaXQgZG9lc24ndC4gIAot
ICAgIHN0YXRpYyBCYWNraW5nU3RvcmVDb3B5IGZhc3RDb3B5SW1hZ2VNb2RlKCk7CisgICAgc3Rh
dGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9OworICAgIElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdl
QnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgdm9pZCBwdXRC
eXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KICAgICAKLSAgICB2b2lkIGNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOwogCi0gICAgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAgIHZpcnR1YWwg
c2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaXpl
X3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0jaWYgVVNFKENB
SVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdl
PiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotI2lmICFV
U0UoQ0cpCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9p
ZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+Jik7Ci0jZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS5oZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0
VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwotICAgIHNpemVfdCBleHRl
cm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9u
cyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3Jr
Ci0gICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBV
TlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0s
IGJvb2wsIGJvb2wpOworICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUlt
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAg
c3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVu
IGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1h
c2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0
IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZs
b2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBl
ZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6
ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRS
ZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOwogCi1wcml2YXRlOgotI2lmIFVTRShDRykKLSAgICAv
LyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhlIGludGVybmFsU2l6
ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8vIGltYWdlLCBjcm9wIHRoZSByZXN1
bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQp
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01QdHI8SUQyRDFCaXRt
YXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0g
ICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotICAgIHN0YXRp
YyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRh
dGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2lj
YWwpID0gMDsKIAotICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCk7Ci0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFz
cyBHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1h
Z2U7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmll
bmQgY2xhc3MgR3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFn
ZTsKLQotcHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUg
bV9zaXplOwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRp
b25TY2FsZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2Vz
cyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtu
b3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIElt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwot
I2lmIFVTRShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJl
bmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBi
b29sJiBzdWNjZXNzKTsKLSNlbmRpZgotfTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHQzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wp
IGNvbnN0ID0gMDsKIAotI2lmIFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0
YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1W
ZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotI2VuZGlmCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZp
cnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWlu
ZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45Nzg1Yzhl
NzhjNDFjMzI2NTVmMTJjMjcyMDIwMWFlZTA4ZjJhZjEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9O
YXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50
b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0
dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAg
ICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBJ
bnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUpOwor
ICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3QsIENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwpOworICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
dW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAg
IGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlM
ZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAgICBpZiAoIWEpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCArIDIpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEy
NSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAg
ICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKwor
ICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICpzcmNQaXhlbEFycmF5LCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50
UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NhZTQzNTNlOTdkODdiYjA1MjlhNmVjNDI3
YTdhNzVjOTllM2U0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RX
aW5kb3c7CitjbGFzcyBJbWFnZTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5
QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3Qg
dGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBt
YXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24g
eworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50
OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5
c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisgICAgQmFja2luZ1N0b3JlCit9OworCitj
bGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkltYWdlQnVm
ZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0K
KworICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXpl
OyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFs
U2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFs
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLmFy
ZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3QgPSAwOworCisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0
ciBzaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0Rh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25z
dCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IHsg
cmV0dXJuIHsgfTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgQ29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBw
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQ29v
cmRpbmF0ZVN5c3RlbSkgeyB9CisgICAgCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBj
b3B5VG9QbGF0Zm9ybVRleHR1cmUoR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVt
LCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCisgICAgICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAgICAg
LCBtX2ludGVybmFsU2l6ZShpbnRlcm5hbFNpemUpCisgICAgICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
ICAgIHsKKyAgICB9CisKKyAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBt
X2ludGVybmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNw
YWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVjMGQzNmZlZmJkMTJhYmU1NDNjM2YyMDM0ZjYx
NThiM2QyY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cu
aCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgi
Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bo
eXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bo
eXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDE2N2E1N2UwODUzZDVlM2ZjMzgwMjdk
ZDg2NDY4MDA3YTJhZTdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMjA2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBw
dWJsaWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdl
QnVmZmVyVHlwZSA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRz
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZm
ZXIsIEltYWdlQnVmZmVyVHlwZT46OnZhbHVlKTsKKyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFj
a2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3cpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJ
bWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4o
YXJndW1lbnRzKS4uLikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFBoeXNpY2FsSW1hZ2VC
dWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDog
bV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisgICAgeworICAgIH0KKworICAgIFBoeXNpY2Fs
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1
cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+
YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2lj
YWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJl
QmFja2VuZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBpbnRl
cm5hbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1
cmVCYWNrZW5kKCktPmludGVybmFsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8g
ZW5zdXJlQmFja2VuZCgpLT5yZXNvbHV0aW9uU2NhbGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBt
ZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5z
dXJlQmFja2VuZCgpLT5tZW1vcnlDb3N0KCkgOiAwOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3Vy
ZUJhY2tlbmQoKS0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFn
ZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2lj
YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICByZXR1cm4gYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3Jl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0
dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFn
ZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAg
ICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25z
dW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29u
dmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwg
cXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4o
KnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0
YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0g
PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNv
bnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0
LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUm
IGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgZGF0YVNpemUsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVt
IHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFy
Z2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhh
LCBmbGlwWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNDMyMzZkNWU5N2ZmZTY1ZTY4MTEyMGZkODVhMTUx
YzJjYjRmM2ZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1
ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBV
U0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNl
bGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBV
U0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCisjaWYg
VVNFKENHKSAmJiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNp
bmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IFBsYXRmb3JtSW1hZ2VC
dWZmZXI7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1h
Z2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQ
bGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNw
bGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0ZjAwODYxODVjZjIyODViYmYyNTU4MmY5OTcy
MzlmNmU5ZDdlZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNp
bmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0Jh
Y2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBz
aGFyZWRSZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAg
ICByZXR1cm4gaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KCkgPyAqaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJl
bmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAg
IGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAg
aW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3Bs
YXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tl
bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42N2QzOTIwNDA0Y2NhNWNiNGJjMjIzMjc3NWM2NDkwMjliNWNjNTkw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3Bh
Y2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xhc3Mg
SW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBSZW5k
ZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIHNo
YXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKKyAgICAK
KyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJpbmdCYWNr
ZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2RhNzA0NDFl
NTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgeworICAgIEFj
Y2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRl
ZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBSZW1vdGUK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEwNzY3OGM1NmFjZGIw
YzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMzMzJkNWY5
NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRjaEJ1ZmZl
cigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2NlbGVyYXRl
ZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxl
cmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAgfQogCkBA
IC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3coY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBTaGFkb3dC
bHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllckltYWdlUHJv
cGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYg
ZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2Vs
ZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4
cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAKIHZvaWQg
U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQcm9wZXJ0
aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAgYXV0byBs
YXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFn
ZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNoQnVm
ZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBsYXllcklt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0
ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
dGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBs
YXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03MzksNyAr
NzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAgYXV0byog
bGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIo
dGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8g
bGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJ
bWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2b2lkIFNo
YWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0
KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllcklt
YWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRh
dGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNp
emUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5
KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1
clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJs
dXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRD
b2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYg
dGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1No
YWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0
CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxheWVySW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVy
dGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRp
ZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICgh
bGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNDk2
ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5YS4uNzIyZWVmZmU2YzllNWZkMjg2
NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTAwLDcgKzUw
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6
ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRlc3RSZWN0LnNpemUoKSk7CisgICAg
RmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTZmMTk2
NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNp
bmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgot
I2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1
cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlm
Ci0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiBy
ZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6ZVRv
VXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJh
Y2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKLXsKLSAgICBmbG9h
dCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLndp
ZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRpb24g
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRlcm5h
bFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0aCgp
ICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdodCgpICogeU1hZ25pZmljYXRpb24p
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRl
eHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFj
ZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJl
YWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFj
ZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2Uo
Y2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAg
ICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0Nv
bnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3Bh
Y2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNv
bG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9
IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdl
QnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihu
ZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5n
TW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxl
KHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBt
X2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZh
aWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBz
aXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25T
Y2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0
aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVk
V2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQp
OwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAo
bV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVj
a2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hl
Y2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5k
aWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQ
ZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxv
dz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJm
YWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUu
d2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAgICAg
ICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJp
bmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFj
ZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7
Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IHNpemVGb3JE
ZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZl
R2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0g
ICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9k
YXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAg
ICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNn
Q29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsK
LSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2Vu
ZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRl
cmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFj
Y2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7
Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxv
YyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51
bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5k
YXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8g
PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJI
b3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndp
ZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykp
OwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZy
ZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVh
dGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAg
ICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFn
ZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Pihj
Z0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IElt
YWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdl
Q29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0K
LUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFn
ZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXpl
KSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNp
emUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQg
Y29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwg
YWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50
ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJl
Y2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlv
biBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRh
LnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNl
IHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0
YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53
aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZl
cjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNv
c3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdl
IG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhv
dy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhl
IHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlz
IEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2Ut
PnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJz
LgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNl
LT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250
ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJl
dHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENv
bnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAs
IDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdl
OwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFs
U2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
Ci17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9
PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwg
bG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2Fs
U2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCks
IGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQu
Z2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNwYWNl
KGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUpOwotICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0g
ICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShp
bWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5i
YWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVy
LT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
LCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNraW5n
U3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9O
YXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1
ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6
OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShp
bWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0lt
YWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRj
aCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0g
ICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIs
IG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0
YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1f
ZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7
Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXpl
IGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7
Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRv
SW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZl
cikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJh
dyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250
ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5l
ZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAg
ICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdl
KENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQg
dG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVm
UHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQot
ICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAot
ewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1
c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29y
ZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9u
cykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAg
ICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpn
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1l
bnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0g
c291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0g
ICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAg
ICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAg
ICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwg
c2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhl
IElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1
cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBu
ZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotc3Rh
dGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5
cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlw
ZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1F
OiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZT
dHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5j
bGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dz
IHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0
IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3cs
IG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5
NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigi
cHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0g
Q0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRU
eXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwg
ImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAg
cmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
Q0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0
YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0
aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8
PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhl
IEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJE
b3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1h
Z2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lk
KiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0
aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dy
b3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291
bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBp
dCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdl
KGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICBy
ZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQot
Ci1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0
YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2
NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYg
Y2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENG
RGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJl
dHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1
cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7
Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0
byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4g
eyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBm
bHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERh
dGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAg
Ly8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVh
bGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRh
ID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxT
aXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6
ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsK
LSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51
bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNh
bFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJE
ZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAw
LCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAobV9y
ZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
aW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbWFn
ZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8g
Y29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzaXplRm9y
RGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53
aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShp
bWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBk
YXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0
YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlw
bGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAg
ICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRv
IG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXpl
ID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXBy
ZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICog
YWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFd
ICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFb
aSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5m
byA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5l
bC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291
cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3Vy
Y2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhh
SW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0
KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVS
TChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNl
LCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCks
IG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNv
dXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50
b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMTE2YjZjMDUxNTM5Nzc1MGNi
M2U0OTE1YmZiYTljYjczY2Y3NmMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
Mzg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUg
IlVUSVV0aWxpdGllcy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRT
aXplIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNj
YWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxm
KHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUu
aXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShzY2Fs
ZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1Bl
clJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXpl
LndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5
dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5oZWln
aHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBj
b250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRl
eHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQoreworICAgIGlmIChp
bWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGlu
dGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAs
IGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0
dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJ
bnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7
CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9n
aWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0
KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Cisg
ICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNv
cHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QK
K3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdU
Rk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2Nh
bGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVy
bmFsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAg
IGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8g
Q29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2Ut
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1JldGFpblB0cjxD
RkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAg
YXV0byB1dGkgPSBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Cisg
ICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChD
RkVxdWFsKHV0aS5nZXQoKSwga1VUVHlwZUpQRUcpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgorICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50
KCksIGxvZ2ljYWxTaXplKCkpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAg
aWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdo
KHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRh
UHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwg
cHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAg
aWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VB
bHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0g
MSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAg
IGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVy
bmFsU2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNp
emUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29u
dGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAg
ICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Cisg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2Uo
aW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NG
RGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0
dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9z
OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
cmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBz
cmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVjdC53
aWR0aCgpOworICAgIGFyZWEgKj0gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5oYXNP
dmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJheSA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0
KCkpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBt
X2ludGVybmFsU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1ZmZl
clJlY3QsIHNyY1JlY3QpOworICAgIGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNS
ZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAgICAg
IGRlc3RSZWN0LnNldFgoLXNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDAp
CisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3QueSgpKTsKKworICAgIGlmIChkZXN0UmVj
dC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgpOwor
ICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3Jj
UmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgZGF0
YVJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1NpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBl
ZCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgc3JjUmVjdCk7CisgICAgCisgICAgZGVzdFJlY3Qg
PSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsKKyAgICAK
KyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0
LngoKSAtIHNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAg
IGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkpOworCisgICAgSW50UmVj
dCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAg
IGRlc3RSZWN0LmludGVyc2VjdChidWZmZXJSZWN0KTsKKworICAgIHNyY1JlY3RDbGlwcGVkLnNl
dFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVt
dWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90
KiBkZXN0UGl4ZWwpCit7CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1h
dCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJH
QkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0g
c3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBp
eGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVs
dGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25z
dCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90
KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlm
ICghYWxwaGEpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3Jj
Q29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9y
Rm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBh
bHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhh
OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7Cisg
ICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4
ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0g
KHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhl
bFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFs
cGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5
UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRl
c3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRl
c3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAg
ZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKENvbG9yRm9y
bWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4gY29weUZ1bmN0b3I7
CisgICAgCisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAg
ICAgICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCk7CisgICAgICAgIGNvcHlGdW5jdG9yID0gY29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQ7CisgICAgfSBlbHNlIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICBjb3B5RnVuY3RvciA9
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQ7CisgICAgZWxzZQorICAgICAgICBj
b3B5RnVuY3RvciA9IGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgICAg
IAorICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
eCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Io
c3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4
XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0
YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVz
UGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFn
ZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBz
dGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VC
dWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkp
OworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1
ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJ
bWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQor
eworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAg
QVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VS
VChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
ICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1h
Z2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxh
Z3MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAg
IGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJ
bWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JH
UkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAg
dkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmND
b2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBj
aGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsg
MiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRl
c3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0Nv
bG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNT
bG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRl
c3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZm
ZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7
CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNy
Y0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RD
b2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywg
dWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJ
bWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY4ZmUwZWE2YWEwYTk3MTI3MTIxZTNiM2E5NDIxZTE1OWVmNWJkMDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShj
b25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgUmVmUHRyPElt
YWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOwor
ICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJy
aWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYpIG92ZXJyaWRlOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9n
aWNhbFNpemUuaGVpZ2h0KCkpOyB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisK
K3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFj
a2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOworCisgICAg
dmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7
CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5
KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0
JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJl
Y3QpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBk
ZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJv
d3MsIGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40ZjFmYTZhZmI4MDMxODJiMTM5ZjdmYjRmMzUxYzg2ODczMmY2Mjg4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJl
c2FtcGxpbmcgaXMgb3B0aW1pemVkLgorI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19G
QU1JTFkpCisKKyNpZiBVU0VfQVJHQjMyCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERl
ZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMySG9zdDsKK2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5k
Q29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdDo6QkdSQTsKKyNlbHNlCitjb25zdGV4cHIgY29uc3Qg
Q0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9
IENvbG9yRm9ybWF0OjpSR0JBOworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHZvaWQqIGRhdGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXpl
LndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgp
LCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisK
KyAgICBzaXplX3QgbnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJv
dzsKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKwor
ICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwg
aW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJS
b3csIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsK
KyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsK
KworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRh
dGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEp
KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBX
VEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBJbnRTaXplJiwgZmxvYXQsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQp
Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNv
bnRleHQpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAg
ICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4
dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVCht
X2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0
KHRoaXMtPmNvbnRleHQoKSk7Cit9CisKK01hY2hTZW5kUmlnaHQgSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIE1hY2hTZW5k
UmlnaHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSkpOworICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVy
biBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2ludGVybmFsU2l6ZS53aWR0
aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5dGVzUGVyUm93KCksCisgICAg
ICAgICAgICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcElu
Zm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgMCwgdHJ1ZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6
ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6
ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jv
d3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpOworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBD
b2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRl
c3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYg
bV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJl
Y3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNy
Y1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8
fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBCYWNrZW5kQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENv
bG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXpl
KCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW50U2l6ZSBzcmNTaXplU2NhbGVk
ID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNv
bHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVkLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRl
c3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNyY1NpemVTY2FsZWQsIHNy
Y1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICAK
KyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhKSArIGRlc3RS
ZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplU2NhbGVkLndpZHRoKCk7CisgICAgdWlu
dDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5
dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgQmFja2VuZENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVj
dC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZDI5MjM1ZmYz
NTA1NTJhMjdhNjI0ZDdmMWY3NWVjYzE0YWQ3YzE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aApAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVi
bGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQp
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIE1hY2hTZW5kUmlnaHQgY3JlYXRlU2VuZFJpZ2h0
KCkgY29uc3Q7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3Jt
YXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0
ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJl
dGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIDQg
KiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgUmV0
YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFi
YWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0
ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
I2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0j
aW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1
c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBp
cyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMy
IHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQgdW5w
cmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1h
Z2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRl
c3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5S
R0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNv
bnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNo
YW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0K
LXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBz
cmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsK
LSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1h
Z2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252
ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBS
R0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdklt
YWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9G
bGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQg
dHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7
Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9IGlu
cHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsK
LSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0
OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVOVVNF
RF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEo
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ci17
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0gICAg
aWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1bHQu
ZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsK
LSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3Mo
KSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0
LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9
IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0
KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6
IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+
IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwg
MCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkg
PiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0gICAg
aW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAg
ICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAg
b3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNh
ZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0
KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdpbnkg
PSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9
IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3RoICs9
IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAw
OwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIHNp
emUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUu
aGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50
PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0
KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgp
OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93Owot
ICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5n
KSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAg
ICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAg
c3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNy
Y0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAg
ICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBz
cmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBo
ZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdl
dCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0
LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVs
dGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5w
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNl
bmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAg
ICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBz
cmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAv
LyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdC
MzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBo
ZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAg
ICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lk
dGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpM
b2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+
Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9y
aWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3Jj
LmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1h
Z2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsK
LSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5y
b3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7
Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMs
IGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4
ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENS
QVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3Nb
YmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNl
eCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
dCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dz
W2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyAr
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFU
RSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAg
IEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+
IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hl
Y2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VSVChk
ZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4LnVu
c2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQo
KSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1h
eFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQ
b2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdl
dCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291
cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsK
LQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3Qu
eSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRl
c3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5z
YWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNl
UmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50
PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51
bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQg
PSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBk
ZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNp
emUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSAr
IChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0g
ICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAg
IAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJS
b3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2Fm
ZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAg
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBz
cmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZl
R2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRl
c3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVs
dGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJl
bXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5k
aWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAg
ICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8g
Qnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMy
Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93
c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3Mg
Kz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwot
ICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAg
ICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVz
cygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAg
ICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0g
aGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQot
ICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51
bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRh
ID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBp
eGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhf
dCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFu
bmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAg
IH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgp
OyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0
KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4
X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNS
b3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShB
Q0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYg
Ly8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2L251
bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29s
b3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIg
KkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZm
ZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBj
b2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAg
IHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVm
PiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VC
dWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYK
LQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNv
bnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQg
cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTQx
NDYwZjQ4NDM0MzgyOGYzYzJlNTRlNmRkMDZkNGQ5Y2Y4OTBlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNF
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2Uu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKwor
SW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRl
cm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElP
U3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBt
YXhTaXplLndpZHRoKCkgfHwgaW50ZXJuYWxTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1
cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUsIGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNw
YWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+
ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRl
eHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOwor
ICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFj
ZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVw
Q29udGV4dChjb250ZXh0KCkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICA6IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3Zl
KHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpKSkKK3sKK30KKwor
TWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdo
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9
CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQo
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgp
Cit7CisgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30K
Kworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRlcygpOworfQorCit1bnNpZ25lZCBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05h
dGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1f
c3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0Nv
bnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBp
ZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRl
eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1
aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAg
ICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAg
ICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgSU9TdXJmYWNl
OjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6
QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBz
cmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOwor
ICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0
YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYg
KCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOwor
ICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRl
c3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9z
dXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNC
eXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhl
bHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJH
UkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpS
R0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAg
cmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7
CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxl
ICE9IDEpIHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0K
KworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAg
ICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVk
LCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisKKyAgICB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxv
Y2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7
CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBz
cmNTaXplLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNy
Y1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICog
NDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEs
IHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVz
dFJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBj
YWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAg
IGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNFKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YTliYjE3OWZiMTk0
ZGM2YjQ3MWU5MWJiMzExYzRjYzcyYzdhM2YwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgK
QEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0UpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxM
T0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgV0VC
Q09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKworICAg
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1
c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92
ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVycmlkZSB7IHJldHVy
biBtZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
TmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIAorICAg
IHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKyAgICBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdDsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4IDg5ZDA0MzljMjEwZGI1MDFhYzkzOWVi
MTE0MTQ4ODFlZWVjNjViMjQuLjVjN2IzMzZmMTAzMjQwMDgyNjIwZWM4ZmI3MTk2NDU4NjJkMzU4
NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCkBAIC0yNiw3ICsyNiwxMiBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKIAor
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNp
bmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNp
bmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNl
NjQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs0NiwxMDYgQEAgdWludDhf
dCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90
IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK2Jvb2wg
ZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdl
IHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVz
dGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEs
IHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKKyAg
ICBpZiAoQ0ZFcXVhbCh1dGksIGtVVFR5cGVKUEVHKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49
IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNz
aW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgIGF1dG8g
Y29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qg
dm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5Owor
ICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAg
ICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtl
eSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgfQorCisgICAgLy8gU2V0dGluZyBrQ0dJbWFn
ZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBp
bWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBpbiB0aGUgY2FsbGlu
ZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKyAgICBDR0ltYWdlRGVz
dGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGll
cy5nZXQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0
aW9uLmdldCgpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25z
dCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSBV
VElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisgICAgQVNTRVJUKHV0
aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhh
TGFzdDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwor
ICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFs
KHV0aS5nZXQoKSwga1VUVHlwZUpQRUcpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBw
cmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWZm
ZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFb
aSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OworICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsg
MF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOworICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGRhdGEgPSBwcmVtdWx0
aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOworICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAs
IGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAgIGlm
ICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQo
KSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0
bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwg
MCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAgIGF1dG8gY2ZEYXRh
ID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsK
KyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNm
RGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1v
dmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFz
ZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwg
YmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorewor
ICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisg
ICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4g
ImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNm
RGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZChDRkRh
dGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKKyAgICByZXR1
cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sK
KyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQor
ICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9Owor
fQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlhYmQxZmI4M2FiMzFh
MTE1YzY4OTUwNDkxZDQxOTU1Mi4uZWM1Y2U0M2Y0ZDFiNTcyNTQ3N2EyM2FhNGZjOGI2ZWJmNzBk
NDJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjcsNiArMjcsMTYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVfRVhQT1JUIHVp
bnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNp
emVfdCBidWZmZXJTaXplKTsKIAorYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmlu
Z1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisK
K1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJp
bmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRh
dGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcAppbmRleCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMyNTg4MjNjLi4yODIx
ZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApA
QCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZEb2N1
bWVudC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIyNGJhYzUzNjRjOWEw
NGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRhYjIxNGE2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
LmgKQEAgLTEwMCwxMCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYsIENHQ29sb3JTcGFj
ZVJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+IGNyZWF0ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAgICAKLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7
Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsKIAogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2
Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAt
MzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNl
UG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0
YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgog
I2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYg
QEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4m
JiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdU
Rk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUlt
YWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0g
ICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRp
ZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNp
emUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQ
aXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGgg
PSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1
MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2
ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAg
ICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZv
aWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQo
KSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0
aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikK
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlmMWNlMjczNTQ1MGJkYWMzYmJkZjEx
YTMwODVkOWE3ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAg
LTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5j
bHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFz
cyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29u
dGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0Nv
bnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9y
bSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlz
KS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVw
bGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgp
OyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3Qu
cmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMaXN0
Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlcGxheWVyIHJl
cGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAgaWYgKG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0ID0gcmVw
bGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBtX2Rpc3BsYXlMaXN0
LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRl
eHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQw
MzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3ZGQxZDg1OGI1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250
ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxB
cnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7Cisg
ICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhl
bEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5v
cm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5z
aW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVsQXJyYXlEaW1lbnNp
b25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICBzd2l0Y2gg
KG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAg
IGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2Ut
PnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAg
IHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0KTsKIH0K
IAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENv
bG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1
MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3OGE3ZmI5NDdkNDA1
ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2
b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIC8vIFRPRE86
IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0
aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdl
QnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIHNyY1BpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9y
ZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBjb250
ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJl
YS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdElt
YWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgp
LCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgcmVzdWx0
SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50
KCksIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAKICAgICByZXN1bHRDb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAg
IHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQ
YWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThjNWEyNmU3NzFj
NDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAxNTMyZGFiZDI0
OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0
ZXJSZXNvbHV0aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwot
ICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAg
IFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCB9OwogICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uNWM4
YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cApAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVm
ZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7
CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRl
c3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVj
dC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1
bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29w
eVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHBy
ZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVBy
ZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAog
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJl
ZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2lt
YWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90cmFuc2Zvcm1zL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RyYW5zZm9ybXMvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFkMGI3MjBkOTZiN2FhNDg2MTY2ZjA1ZjZkYTI2MWEwMTI5MDVmN2EKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90cmFuc2Zvcm1zL0Fs
cGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIDogdWludDhfdCB7
CisgICAgUHJlbXVsdGlwbGllZCwKKyAgICBVbnByZW11bHRpcGxpZWQKK307CisKK1dFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcAppbmRleCAxYzY2YWQ3OWNlNDBjMTQ1NThmNjY1MjUyYjI1ZTNiYjdkZWQxNmJkLi44OTdj
ZTQwZDA0YzdlMGFkMWVhMTkyY2I5MTA2MTlmOGY5MjIyNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApA
QCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6
aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIG1faW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ1
YjkxYjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0NTguLjhmNTBlNTc1NzFkN2IzODUw
MGVlZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRl
RmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAogICAgIGVuc3VyZUxheWVyRmls
dGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRl
dmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRl
cnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIG1fZmlsdGVy
cy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJl
bmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogfQog
CiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5YTJkNDQ2NGRmNWNiN2IzYTQ0
MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5ODRiNWQyYjUyMWE2OTkxYzYxNTIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMTgxLDE0
ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hh
cGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICBJbnRSZWN0IG1hcmdpblJl
Y3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBhdXRvIGludGVydmFscyA9IG1ha2VV
bmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJlY3QuaGVpZ2h0KCksIC1tYXJnaW5S
ZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3Qg
YmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNp
emUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZHJh
d0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAK
LSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZm
ZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVj
dC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5
ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBwaXhl
bEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JBLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNkMjk3NzViODQ2ZjA1OWQ1YTJjYTcx
M2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFjZTcxN2VjNWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xp
cHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBl
cjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgYwogCiAg
ICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1w
dHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hv
dWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNo
IHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgY2xp
cHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgVW5hY2NlbGVy
YXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
LCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAmY29udGV4
dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5
MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFiYTkzOGQwZDllMjYzNGQ4ZTgwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhl
aWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hl
YXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBB
Y2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBD
b2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAgIGlmICgh
c291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFw
LmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVh
ckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZmlsdGVyRGF0
YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFw
aGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJl
YW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RBcHBseVJl
c291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCAxNzg3ZTE4YzJkY2VmNWJk
Zjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5Nzg3MjIwNDY1YmM2YWVjMGI1ODA0
YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBz
dHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0
eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdC
ID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQjsKICAgICAgICAgLy8g
RklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRp
b25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3Mg
YWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOworICAgICAg
ICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgICAgICBpZiAoIW1hc2tlckRh
dGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgyMTQxMWFkZTc3NTA4NTYxNjg4NTZl
ZDIyYjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4ZDNhNzlmYjQ5NWRkZDRmMGY0M2Q5
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yMTgsNyAr
MjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAg
ICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGZsYWcsIHNv
IGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIu
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0
ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXgg
ZmY1MmQyNTM2ZjU2NWZhMjk1YmViNjIwMTI2OGEwZjMzMzE3MGZmMy4uM2U0Zjc1OGIyMjQ2ZTZk
Yzg0NTZmZGE1ZDBlYmE4ODM0YzQ2NWIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC0xNyw2ICsx
Nyw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dlYktpdF9ERVJJ
VkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQktJVF9ESVJ9IgogICAgICIke1dF
QktJVF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzIgogICAgICIk
e1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIiCiAgICAgIiR7V0VCS0lUX0RJ
Un0vTmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCA3OTk0ZTNjYTc3NzYzMjlkNmY3NWQ3YWFmMGM5M2Zk
OWFhMDU5ZTEwLi5jOTY4ZDM0NzhhNjNkNWFmYWQ3NDdlOWMyYjMxOTlkM2ZiNzA3NDdkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysr
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNSw2
ICsxNSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW9kZWxzLnB5
CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNU
X0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9H
UFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KICQoUFJPSkVD
VF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMCw2ICsxMDIsNyBAQCAkKFBST0pFQ1RfRElS
KS9XZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRnVs
bFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5pbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggMGNk
MjNlMDFiYmFjZDJlYzRhMGJkYzNiZGZmMmJlMGQ3YjYwYjAxYi4uNzFkYTY1M2I3ZWI3M2I2MmYx
MDA0M2U0YWQ0MmUzNzFiOTVjOTYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIwLDEyIEBAICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2Vz
UmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9Q
bHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlc1JlcGxpZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1h
Z2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2Fn
ZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVz
c2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAtMTM1LDYgKzE0MSw5IEBAICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5
TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xs
aW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzUmVwbGllcy5o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggOWQzZTJhOTBjN2I0ZDkwYTQyNmM3NmE0
ZTA1ZTZiMmY4MWNjMGU5ZS4uMWY0YTQ0N2IxNDhjYjMyMGFjZjY3OTA3ZTZiZDA3Y2VhNGViYjg3
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUsNyBAQCBWUEFUSCA9
IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vz
cy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisgICAgJChXZWJLaXQy
KS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vz
cy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAogICAgICQoV2ViS2l0
MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9tZWRpYSBcCisg
ICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdl
YktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhQ2FjaGUgXApA
QCAtMTQwLDExICsxNDIsMTQgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyIFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkgXAogICAgIFBs
dWdpblByb3h5IFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlciBcCisgICAgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSBcCiAgICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBcCiAgICAgUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eSBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJl
Z2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNj
cm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAg
UmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDUyYTk1Y2UwZGVkNzAzZDYx
ZDM0YTlkMTdmMGM4YjQyZTY2NGZkZGEuLmQ5NGU1MWNkZDdmODlhY2ZhZDE4YTc5ZjM3OWY0YmZj
YWFmNGY3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0OSw0NCArMTQ5LDYwIEBAIExpYldlYlJUQ0Nv
ZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94
eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVj
b2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBy
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2Ug
aWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRp
YVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNl
aXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1
cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhj
b25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykK
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldl
YlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2Vi
UlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVw
bHlFbmNvZGVyKQorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVy
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQ
cm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVB
TSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVz
ZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAg
ICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
RnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNw
YXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisK
K3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sK
KyAgICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgPT0gcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBhYzcx
MjVkNzM4ZDg2ODg4ZWVhOGI0YTkyNTE1ZjlkZTRkMWY2YjA0Li40NWUwYjUxZTNjNTY2Mjc0NDE0
YTE1NGQwY2U4NjdmZTY2NjZhZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBAQAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRl
ICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVy
Lmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDYs
MTggKzQ4LDIwIEBAIGNsYXNzIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogCiBjbGFzcyBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BV
UHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246Oklk
ZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVy
biBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVz
c2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAgICBH
UFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9Cisg
ICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFudXBG
b3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9u
KCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmll
cigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAogICAg
IExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03NSwxNCArNzksMjEgQEAgcHJpdmF0ZToKIAogICAgIC8v
IElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rp
b24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUlu
dmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3Nh
Z2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsK
KworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9pZCBj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2
b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
IAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAg
SVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3Qg
V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFS
ZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTMsNiArMTA0
LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29kZWNz
UHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJk
MTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2Zjli
YzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIs
OSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mg
V2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChX
ZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdjOGZhM2U3Yjg1MGUxMzdiYWUzMmVkZGI4YTcxNWU4NDZm
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1h
Z2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNz
YWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVy
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAg
LCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAg
aWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3Nh
Z2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
ci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6
OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIu
dG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCit7CisgICAgc2VuZChNZXNzYWdl
czo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6
ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2Vu
ZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
KQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmll
ciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExNmExNDNlNzdiMjIyYzM1NTE4ZDNkNTY2ZmYzYTll
NWEyMWJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUg
Ik1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4K
KyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVz
c2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6
CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpOwor
Citwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVj
dGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50
NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1vdGVD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdm9p
ZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jiwg
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNo
Q29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7CisK
KyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVz
c2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBhZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRkNzJkZGViNWVj
OTU4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwy
OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisj
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IE5vdFJl
ZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1ZWQxYzg5MTZjMjQ0NWQ3Y2U4YTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxh
eWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNhbElt
YWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgewor
ICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6
Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVy
Ojp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5k
LCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6IEJh
c2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
bV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBtX2Jh
Y2tlbmQtPnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9iYWNr
ZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbG9j
YWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXRl
bUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250ZXh0
KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIEJh
c2VQaHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZmNlZTNlN2MxOWY0NTY4OWVmNWJlMjVjYTgzMTE1MDdjODNhNjc3ZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1
c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40OWY5YmI1ZDZiYmVmY2ViMTM4OGJmNzg0NmZiNDdiOTVkOGJlNDBhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFr
UHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byog
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5n
ZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVy
TWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIu
dG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAg
ICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUlu
dDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgp
KQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24o
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmll
ciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAuY29u
dGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAgaWYg
KCFncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRjaCAo
cmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0
ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
KyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6Cisg
ICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRp
ZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3Vs
ZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFnZUJ1
ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VCdWZm
ZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJlZTUxMWU2OWRm
ZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRl
cgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIu
CisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92
ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Cisg
ICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAg
IHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAgICB1
c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1hcCBt
X2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4g
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQg
eworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxT
aXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlSW1h
Z2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2Ny
aXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNWQ4NDQ3MTMyNWJiYTdhNDM1ZWQ5MzNjMDkw
OTA5NDUzYjlkNDAyNS4uNTNiNzkyZWRiNmI2MjM3N2M4ZWM5YzMzYTk5YTU1NDliOWE1NTVlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsyNyw3
IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVD
VElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVTU0FH
RV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJfQVRU
UklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklC
VVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25v
dXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRf
ZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5kUmln
aHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJD
b3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTEsNiArMjE0
LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAg
ICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50ZXJJ
RCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCisgICAgICAgICdXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjE4LDkg
KzIyMiwxMiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6OkltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAg
ICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktp
dDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNv
ZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2MSwxMyArNzY4
LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBp
ZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNf
YXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVz
dWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwg
cmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9B
VFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAg
ICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9B
VFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21l
c3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19t
ZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRD
SF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYg
KGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZlci5z
dXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2
ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3Mp
KQogICAgICAgICBlbHNlOgpAQCAtNzc2LDEzICs3ODYsMTYgQEAgZGVmIGdlbmVyYXRlX21lc3Nh
Z2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0g
ICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhh
c19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJl
Y2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVy
KVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRy
aWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5P
VF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAg
ICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZv
ciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRy
aWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAg
ICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNv
bm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShk
ZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVw
bHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCmluZGV4IDFkZTMwNDJjMDc5MTY1YTFkMjVhNmY0YjU4ZDY2MDlhNjU2NjAyZjguLmFh
ODlmNjVhYmI0NjQ2ODY5YzgzMGI5NWZkZjc1NjRjYzBlMjQzYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2
ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtNzg5LDYgKzc5MCwyNiBAQCB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0
YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisKK3Rl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4geworICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwK
KyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6
OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlz
cGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQs
CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5n
IHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CmluZGV4IGQwMzkzYmIwNjJkOTdhZTk2YTcyMjVhNmQ2MDdiMDc0YjM4ZTBjOTguLmY3MjI1Mjdl
ODZlNDczYTQwZDEzOTMwNmUzZjA5Y2ZlZDkzNjdiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMjksNiAr
MjksOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCiBHUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRp
b25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAK
QEAgLTUxMiw2ICs1MTQsOCBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZh
dGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2Fj
aGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJj
ZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCiAK
IFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQKaW5kZXggZmU3NTc5NTM3NjFiOTlmNjliODI4YzExYmJjMGYzMzFhZWVmYzE5
MS4uZmE4M2ZkYzkyYTFmZDU1N2QyZDljYTYwMmU2NGE2MWI5MzJhMzE2YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dApAQCAtNjMxLDkgKzYzMSwxMyBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJj
ZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAog
R1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcAogU2VydmljZVdvcmtlckZldGNoVGFza01lc3NhZ2VSZWNlaXZlci5jcHAKIFRleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU3NzhiYTU4NzIzMmM2
ZTZhNzgyMjQ2YjljN2NiMzIwYWU4ZmNjZWEuLmQzMWIzM2Q3YzI5MWU1MmNmODc2NzQ4ZmFlMWEx
NDI3NDBlMGVkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMzk0Myw4ICszOTQzLDI2IEBACiAJCTcxQTY3NkE0MjJDNjIzMTgwMDdE
NjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGgg
PSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUg
PSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3VjaEFj
dGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlz
cGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVNp
bXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5OTIzQUQyRkQ2MDBC
REFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIx
RjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMz
IC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xv
clBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQw
RjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1h
Z2VCdWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VC
dWZmZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU3
MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVEMjNCNEM4
MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tX
ZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vi
c2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4
N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRl
RGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tX
ZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTYzNzIsNiArNjM5MCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3MkJCRTQwRTIz
QUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4ODIzQjYx
MjYxMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3NTJDRDkwMEVBNUNBMCAv
KiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1MkNEOTAwRUE1
Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02Mzg4LDYgKzY0MDcsNyBAQAog
CQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYyMzc1
MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2NUIgLyog
bWVkaWEgKi8sCisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tl
bmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQky
RDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAg
Ki8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaCAqLywKQEAgLTc3NDksNiArNzc2OSwzOCBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAv
KiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5jcHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2NDIzQzFBMDQxMDAy
NjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFF
QTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICov
LAorCQkJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJCXBh
dGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
KwkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRUE5MjNBRDdCREYw
MEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovLAorCQkJCTcyMUYxRTlC
MjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJCQk3MkJC
RTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAorCQkJCTcy
QkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcy
QkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAq
LywKKwkJCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlci5oICovLAorCQkJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzJENUMyRUUyM0I1NkM4NDAwRjY3
RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9
IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3
QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRlMzIzMDc3MGYy
NDM2MWI2YWJhYThlMTdlNGQyZTVhYzAuLjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEzODA1NTBhYWE0
Zjk0ZDhlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9jZXNz
Q29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsKLX0KLQot
dm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3ND
b25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJ
UEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50
PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJv
Y2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVN
YW5hZ2VyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlcj4oKSkKICAgICAgICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVz
c2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFVTRShMSUJXRUJSVEMp
ICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
ICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlkUmVj
ZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZl
ck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFw
KCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIp
OworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVm
ZXJlbmNlKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCAzMWM2MTA0
NjY5ZjJmMDJmZmE0NDBmZWI4ODA5MjZjNzRhZTI2YWNmLi42ZDFiODNkZTU4MzZhZmFlMjFhZmMz
NGY1OGEyMmU1ZDZkMzIzYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH5H
UFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJl
Y2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZl
ck1hcDsgfQogCiBwcml2YXRlOgogICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uKElQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllcik7CkBAIC01MywxMCArNTUsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJ
UEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9u
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAorICAgIGJvb2wgZGlz
cGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wg
ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJv
bSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3Nh
Z2VSZWNlaXZlck1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4NGNlOWQ2NGIz
MC4uNTdmZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+IEdQ
VVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIy
YmJkZDg2MzQwNTIwNWFkYTdlZjNjYzczODQ2MDE5ZmIxOTkzYjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGUgeyB9OwordXNp
bmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZl
cklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2VhZjk0NGJhMzhmMGE5OTRhNWJlNTI0MTk1OWY0
YWM4OGE1OTIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVu
dGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVySWRlbnRp
ZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRp
ZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0Y2U4MGY3YjFhNmVjYmM4MmJlNDY1
ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKQEAgLTAsMCArMSwx
MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUg
IlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlN
ZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNl
bGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZl
ck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJ
bWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJl
Y2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1l
c3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJl
bGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVy
OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24o
KTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9V
SW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlh
dGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRl
cnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJlbW90ZUltYWdl
QnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRG
b3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0
Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRG
b3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK3Zv
aWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sKKyAgICBjb25z
dGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNpZ25l
ZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0ZWQoKSAmJiB3YWl0
c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworCisg
ICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgaXNQZW5kaW5nRmx1
c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNoSWRlbnRpZmllcigp
OworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVjZWl2ZWRG
bHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VC
dWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCwgbV9zZW50
Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVuc3VyZVVw
ZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YjU2ZTMxZDBjYWYyMDZlZTUwNmM5Nzk2OTA1Yjc4NDBhNDliOGFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+
CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRl
cgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgflJl
bW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rp
b24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0
X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8v
IEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAg
Ym9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0ZWRC
YWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vu
dEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICAv
LyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNl
dEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7ICAgICAgICAKKyAg
ICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRl
bnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZjg3NzU1N2MwYWE4YzhhOTA1MDRhMTM1ODBkYTU5MWFhNWJmYzVkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAgdm9p
ZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXpl
LCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQor
ICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNTU3MWM3YWQ4MDRjMmM0MWZlZDE2Y2IxMDZjNjZkMDlmNzQwMzUxZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1
c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5
cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAs
IFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tlbmQg
PSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNr
ZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0
X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFj
a2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlM
aXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAgICAg
ICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAg
ICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaERy
YXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOwor
ICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTgzM2QzNmU0NmM4YjAwZWE5MTk4MzkzNjgxODM0MTFmNzg1YzBjNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3Vz
aW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQx
NTExN2I1ZTEzZWNiNjA2ZDQ1MjJkZjQ3YjBlZDJjMmExZTkzMGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gQ3JlYXRlIHRo
ZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOwor
fQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAo
cmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0
ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5ZDFmNDRjMDUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6OlJl
bmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBw
cml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNv
bm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29s
b3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDY1ZmI4YzZmNzdmN2ZkZTM4ZjY4
Y2JiMDc1MjQ2Yzk5NGRiMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgK
QEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5
cGU+OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2Vi
cnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dl
YnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCmluZGV4IDQ2ZDExOTg3NzJjNTFiOGFkOTBlZjhhMTcx
MzIxZmZjZTI5MGZjZjkuLmIwMjkyMWUwNjFhNjBlMzM1MDg4N2U3YjA4OTMyNGVhYjhlYTNmNWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJU
Q0NvZGVjcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGli
V2ViUlRDQ29kZWNzLmNwcApAQCAtNDIsNiArNDIsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIHN0YXRpYyB3ZWJydGM6OldlYktpdFZpZGVv
RGVjb2RlciBjcmVhdGVWaWRlb0RlY29kZXIoY29uc3Qgd2VicnRjOjpTZHBWaWRlb0Zvcm1hdCYg
Zm9ybWF0KQogewogICAgIGlmIChmb3JtYXQubmFtZSAhPSAiSDI2NCIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1OGEuLjQ4
MWZhYWFhY2FkMjBkMjYzOWU4NWQxNjU2M2JlYjI4NzJlMDBkZDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi5o
IgogI2luY2x1ZGUgIlBhZ2VCYW5uZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgiCiAjaW5jbHVkZSAiVXNlckRhdGEuaCIKICNpbmNsdWRlICJXZWJDb2xvckNob29zZXIu
aCIKICNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKQEAgLTg4MSwxNSArODgyLDIy
IEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQ
TEFZX01PTklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNs
aWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3Bs
YXlJRCkgY29uc3QKIHsKICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2lu
Z0FyZWEoKSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCitz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAg
cmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1
cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CiAjZW5kaWYKK30KIAogdm9pZCBXZWJDaHJv
bWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciog
bGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZmRhMzM4ZWNmYTY4NTVlMWMxZDYwODUw
ZTQ3MWY2Nzk0ZWQxYzJjZC4uNGRlZGZlZTc4NDExNjVlNTc3ZDk0MDMyMzU1MWI0ZjUzYjJkMWRm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjMxLDYgKzIzMSw4IEBAIHByaXZhdGU6CiAgICAg
UmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJl
c2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRp
ZgogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKwogICAgIENvbXBvc2l0aW5nVHJpZ2dl
ckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0
TWVudUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNvbnRleHRNZW51Q2xpZW50Lm1tCmluZGV4IGVmMDM1MDM0MmJiODIyNDZjZDE5ZjM1NGQ5YmNj
MDI5MWYyOTA0M2QuLjI0MDdmMTA2OWI1N2ZiZjY1OTQ4ODc1NDEyOGNlOGZhYjFlY2JiZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRl
eHRNZW51Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0yMDIsNyArMjAyLDcgQEAgUmV0YWluUHRy
PE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2Vy
dmljZVBpY2tlckl0ZW0KICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIFRoaXMgaXMgZWZm
ZWN0aXZlbHkgYSBzbmFwc2hvdCwgYW5kIHdpbGwgYmUgcGFpbnRlZCBpbiBhbiB1bmFjY2VsZXJh
dGVkIGZhc2hpb24gaW4gbGluZSB3aXRoIEZyYW1lU25hcHNob3R0aW5nLgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNp
emUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG5pbDsKIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGY1YTZiMDk2NTNjMWQ0M2MzMjYyMTJjNjA0MTliZmQ0YWRiNWIzZTguLmJkM2FhOGM4
Y2U2NmQxZGVlZjQ5NWU5NDhlY2Q4Y2IyMWVmMWQ2MTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAor
MjAyMC0wMS0wNyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgor
CisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFz
LWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDEtMDcgIFRydWl0dCBTYXZlbGwg
IDx0c2F2ZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBDb3JyZWN0IGV4cGVjdGF0aW9ucyBtYWRl
IGluIHIyNTQxMzQsIHIyNTQxMzUsIGFuZCByMjU0MTM2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXgg
MWI1N2U3OTFiNzJhY2NhODc3NjE0NDc5YjRkYzdmZTVjOTU5NGQ3Ny4uMzRjODdiOWIwNDI5NDU1
YTliZjExNDFjNmJmYjM5NzFjNzUyMGI4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsx
LDExIEBACiAgCisoc2F2ZQorICAocmVzdG9yZS1pbmRleCAwKSkKIChzZXQtc3RhdGUKLSAgKGNo
YW5nZS1mbGFncyAyNTYpCi0gIChmaWxsLWNvbG9yICNDODAwMDApKQorICAoY2hhbmdlLWZsYWdz
IDEwNTA5MTIpCisgIChzdHJva2UtdGhpY2tuZXNzIDEuMDApCisgIChmaWxsLWNvbG9yICNDODAw
MDApCisgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIDEpKQogKGZpbGwtcmVjdAogICAoZXh0
ZW50IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUw
KSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387059</attachid>
            <date>2020-01-07 19:01:48 -0800</date>
            <delta_ts>2020-01-07 21:40:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200107190146.patch</filename>
            <type>text/plain</type>
            <size>363586</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkwMjhlY2U1ZGZlM2Zi
ODMwYmQwNWQ1OGI0NGIyNmRlZGVjZGU3YS4uMWQ5MjQ0NzIwZjk2YWE3N2FkYzE2YmY0Mzk3ZTY5
NmU3Y2E3M2Q3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrbmVk
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQb3JjZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQb3JjZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6aW50ZXJuYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVy
OjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxl
cmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVz
UGVyUm93IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAy
MDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OWI4Mzcy
ZTE5OTkwOGM0ZGRkYTcyMmYxZGI4ZDk2M2ZhODY2ZWQ0Li4wYzdmZDcyYjFjMjMwMmZmNjhmYjRm
YTdhZTU0ZGM4NWRjZTA1YzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDIwLTAxLTA3
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAo
V2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
bGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAg
ICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToK
KyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1l
c3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgor
CiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IGM3NGVmYTlmNzQwM2U5NzYyOGRlMTRhODM5YWUzMzgyNWNhZGYzZjUu
LjRlMDRiYzkzYmY5ZDUxOGIwMzcxYjBhZTAwY2VhOGEyOWE3Y2QxODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0wNyAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52
YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAg
ICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2Vydmlj
ZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggNDY2MTljNjVkNmIzYzNkODFmZjRjMmU1MDA1MjE2YWE0OTYy
ZWMxNC4uMDU1MWMwNTQ5MDljZDg3Y2JlMDM5MWQ1YzBkMmUwY2U0OWI0YmRjZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xMDIyLDYgKzEwMjIsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9y
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAt
MTA3MSw3ICsxMDcyLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1l
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDMsMTMgKzExMDQsMTYgQEAgc2V0KFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VC
dWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2Ft
cGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5n
VHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5k
aW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9h
cmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUy
N2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5
MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1j
bGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQog
CiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAg
ICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUp
OwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJ
bWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAg
IG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThh
YzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBA
QCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdM
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkK
IAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VU
SVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFh
MDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVh
YzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01h
Yy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyAr
NTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYwYmJiZmQ0
NmVlODc5NjhmZDJjMWVmYTVmZjc3YjdlZjBhYzRkNjguLjVmZjFmYjViN2M1ZjdmOGIzMjU0Mzhh
NDI1ZDYyNDc2NjRmMWE2YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY4LDYgKzE4NjgsNyBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNv
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg3LDYg
KzE4ODgsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Ry
aW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTQ1M2Q4OTA5N2U2
ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNS4uNGYwM2VjMjNkOGM0MGZiOTZhMmU1NzcwMWUz
NjZhYjAxNGNlY2ZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGVjNDA4NGQ5ODQ1OGMzNTMyNDI1YmM5ZWVm
NzUzN2Y1MDYzNWIzNTAuLjI0OTFlMmU4YTZjMDhhYzI3ZDIxM2ZjN2MwMjkzYjRjZmU4OTFiYTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAw
OUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1
MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8q
IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NW
R0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1
IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJl
ZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzMsMTAgKzIxMzEsMjEgQEAKIAkJNzIxNDQzMzIyMjNF
Qzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMz
MzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQ
cm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIx
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4
QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgw
MDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2
QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBS
ZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgy
NkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIy
MzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJs
ZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0
eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAw
QTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcy
QkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3
MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgx
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBD
RTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDAsOSArNjU0OSw2IEBACiAJCTIyNUExNkIzMEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
MjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdy
YXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0Yx
MUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMw
MEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTU5OCw4ICs5NjA0LDExIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQx
MSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9y
dC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3Vw
cG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYw
MDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRl
ZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZG
NyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5
IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHBhdGggPSAuLi9BbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
NEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MjAsNyArOTYyOSwyMCBAQAogCQk3MjdBRkVEMTFBMkVBNkEw
MDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIx
QTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhU
c1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYw
MEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUz
RkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJ
bWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdE
NDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0
MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmluZ0Jh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJG
MDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQx
NzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
RjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEyNjg0LDcgKzEyNzA2LDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAw
NkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1
ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1
ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFC
RjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRF
bGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2ODMsNiArMTY3MDQsNyBAQAogCQkJY2hp
bGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNw
cCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywK
KwkJCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1z
LmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVt
cy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29y
ZGVyLmNwcCAqLywKQEAgLTI0ODgwLDYgKzI0OTAyLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAw
MkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
ICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJ
CQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlC
Mjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjQ4ODks
OSArMjQ5MTIsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3ND
b250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3ND
b250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENG
MTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4MjAw
QTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIzQUFD
RTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRDIz
QUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
ICovLAorCQkJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEg
LyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAw
RTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5ODcsNiArMjUwMTMs
NyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmgg
Ki8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJ
CTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3
MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAog
CQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3Bw
ICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0
b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hN
b25pdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1MDc4LDcgKzI1MTA1LDggQEAKIAkJCQk1NUEzMzZG
ODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3
NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIz
ODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMw
MDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2
RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMx
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3
MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAw
MEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0
QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MTM1LDYgKzI1MTYzLDggQEAKIAkJCQkyRDUw
MDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVD
MEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVE
MDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAv
KiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjND
IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNB
MTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAv
KiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIw
MDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ0LDYgKzI1MTc0LDkg
QEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDcz
QTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkw
NzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3
MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJ
NzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3
MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5
NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQx
MkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5ODUsNiArMjkwMTgsNyBAQAog
CQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNm
b3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxs
RGVzY2VuZGFudHNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZDMjIzQzU2
Rjc5MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4
QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
Mjk2NzksNiArMjk3MTMsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNw
bGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdC
Q0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RE
NTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3
MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3
QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJE
OTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMDI4Nyw4ICszMDMyMywxMCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAv
KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVB
RDREMUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5n
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5
QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIx
MjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBC
REFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJv
bHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3
MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAg
LTMxNzU3LDYgKzMxNzk1LDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVy
Zm9ybWFuY2VVc2VyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNC
MDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBG
NDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVm
ZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGlj
dHVyZUluUGljdHVyZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEz
RjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTMxNzc2LDYgKzMxODE1LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1
MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2Ft
ZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMw
MEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1
NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzE5NTMsNiArMzE5OTMsOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0
QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYx
NzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4
NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAv
KiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5
QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKaW5kZXggMTgxNzUxNWUxY2M3MDkwYzdlNTlhMGNiZDI1M2ZmNzI2MTc0
NGM3My4uZjUwMWNhMjNhNzM5NWYxZTViMjFjODFiMDRkZGIwMTkzYjdhMmYzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3Bw
CkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxT
aXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxv
Z2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBs
b2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAo
IWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2Rl
OjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShs
b2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2Nh
bGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXpl
KGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAg
ICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQp
LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkp
OworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhl
aWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9p
bnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RG
TW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAg
IHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFj
NzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBA
IFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJ
bWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5v
dCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVy
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2Uo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3
NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMx
NjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1
c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNv
cGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIp
OworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBh
aW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250
ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29w
eUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICBy
ZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3
YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgog
I2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBA
CiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0Nh
cHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0
NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50
OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWly
a3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9j
b250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5z
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBh
bmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52
YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAg
Ym9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBz
aXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3RE
cmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3RE
cmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0
LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9j
b250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVy
bjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJl
cGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5n
ZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29u
dGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAg
ICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxl
bWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBj
b25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5n
ZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIo
KSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigp
LT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0
dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3Bs
YXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAg
ICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0
KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYg
YnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkt
PnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0Nv
bnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdo
dCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUg
PSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7
Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQo
KS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93
KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3Ig
RGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3RE
cmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0
aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6
IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9v
bCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9k
ZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5
TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNp
emUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hv
dWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhv
c3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8v
IFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3Rh
dGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBi
NTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZi
ZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25v
cmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7
IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwog
ICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2Uw
MjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAj
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUg
PSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUg
PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9k
ZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdN
b2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwog
I2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNp
emUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggMDkxYTM2OTky
YTljMzVmMTMwZjg1ZGNjODE4Zjk1OTdlMjcyZGVjZi4uNGVhYTU4ZGIxYjA1MzFjM2I3N2M4Zjhh
Yjk5NGM5OGU4MTFkMDFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3Jl
ZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9m
ZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVy
biB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1f
aGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6
OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1
ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1
ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAg
ICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFz
OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQog
CiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdl
QnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAo
c2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4g
c2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQp
KTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52
YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJj
YjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJi
MWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRl
bXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2Fs
Y3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3Qg
SW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShi
dWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUo
KSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVj
dCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBA
QCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1Bh
dHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92
ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRp
ZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRl
b0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5n
TW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdD
b250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsK
ICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3
NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHRE
aXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5h
c1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBj
b25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCku
Z2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0g
ICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIx
NTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdl
RGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5
c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8
SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKElt
YWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBm
bG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQg
c3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFu
KCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3Nh
Z2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9t
IGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmln
aW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1h
Z2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdl
QgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEo
aW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdl
dFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRl
U3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRp
bmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRl
ciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgi
VW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMg
Iik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYg
ZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxv
YXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRh
dGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgs
IGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRh
LCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0
eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0
eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEm
IGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5i
dWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwg
SW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4o
ZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0g
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3Rl
bSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2lj
YWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3Qu
aW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRl
cm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VE
YXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRS
ZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3Vy
Y2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0
YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0
YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNl
dCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6
ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0
T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52
YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlw
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIx
ODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAK
LSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBj
b25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlv
bjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpA
QCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZv
aWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2
b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJ
bWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0
IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGly
dHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsK
IAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5i
NTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2Vs
ZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZl
clJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVm
ZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYK
IAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBI
VE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBj
b25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7
CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRC
aXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5k
ZXggMGMyZmM4NGJmYzA2YmRmNGQ4ZGMzNmM3NWQ5Yjk5YjZkYmZkMjNlNS4uNjlkMzQxMTFlYmE1
N2Y0MTQ4ZWFjOGU2YmI1MDcwZDcxNGMzNDQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5Mzks
NyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICghYnVmZmVy
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwor
ICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGlt
YWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAg
LTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxW
aWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9X
aWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5
b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFz
dENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0Zy
YW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBp
ZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFn
ZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRl
eHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxG
b3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAg
ICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJl
LT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+
Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+
b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5w
YWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0
bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBF
eGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1
cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUlt
YWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAg
ICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9y
bWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAg
ICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+
aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBi
dWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYg
YnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0
ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZl
ci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVy
bmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00
NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9J
bWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWlt
YWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdy
YXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFn
ZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUo
KSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVm
LT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0
dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAg
ICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYg
RU5BQkxFKFZJREVPKQpAQCAtNjM0NCw3ICs2MzQ0LDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0
IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZm
ZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJh
dGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICgh
dGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXpl
KCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29u
dHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBk
OTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBA
IC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0Nv
bnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3Qg
cGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAg
IC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9u
YWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRl
ZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZm
ZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXgg
ZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMz
YzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0
LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdC
YWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlm
ICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2Ns
aWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFj
a2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBj
b25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2
MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2Zh
YTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7
CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsg
fQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBA
IC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAg
IGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNl
IH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5k
PiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4
ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRl
ICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2lu
Y2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVh
dGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJu
IG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxw
dHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRh
dGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NM
YXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRm
NTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBl
NTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAt
MTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFt
ZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMg
JiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBz
Y2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgp
LCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNs
YXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFm
NzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2
LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJj
ZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0
KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZl
ci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNl
U2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1
ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBl
NGZiMGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2lu
ZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xh
c3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAor
ICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNv
bnN0ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7
CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsK
QEAgLTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQx
Y2FlZjg1NDFkZWUwNjJiZmUwNTQxNmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24u
aApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVp
bnQ4X3QgeworICAgIFByZW11bHRpcGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitX
RUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFt
JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZk
NWJhMjAwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhY2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlz
aWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjo6dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJh
Y2tlbmQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0K
KworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlz
aWNhbEltYWdlQnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKaW5kZXggZjU4NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJh
Mi4uMzViZDU4YzNkMTJmZjg0YzBlNjY0MmY4MTgyNzA5OWNlODM3ZTI4MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1
MCw3ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2Vs
ZXJhdGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJl
dHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVk
OyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZl
KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJm
MmFlMDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3
NGRkMzc0ZWVhMWQ0Mjg0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgK
aW5kZXggY2VlYTFkYTQwZWIzMmZmNzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNi
ZTRhYzZiODg0MzY0YzU1NDM5N2Y3ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5k
UnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KQEAgLTEyMiwxNyArMTIzLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4
dEFsaWduCiB9OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0g
ICAgVW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFs
bG9jYXRpb24gcmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3Rv
cmUuCi0gICAgQWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiB7Ci0gICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0
cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdl
YkNvcmU6OkJsZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1v
ZGUpOwogYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1v
ZGUmKTsKQEAgLTE0Myw3ICsxMzMsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdp
bmRSdWxlKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDFhMGY4MTZmZGE4
MDMwMjc5NmFhM2EzZTU5YjZkZjkxOTk1ZDAzYzcuLjRlMmJlNzFjNzQxYzU1ZjU2YzBhZDA0NmE3
OTdlNTBhMDk3MTg4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29s
b3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQw
OTY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3Ro
ICogTWF4Q2xhbXBlZExlbmd0aDsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tl
bmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1hZ2VCdWZmZXIo
c2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2lu
ZG93KTsKK30KIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKK3N0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFj
ZTo6U1JHQiwgY29udGV4dCk7Cit9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlm
ICghc3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVk
U2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNj
YWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7
CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0
LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKKwor
c3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0
IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5n
dGg7CiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKIHsKQEAgLTEwNSw5NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6
Y2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3Qo
cmVjdC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVT
RShDRykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JB
RGF0YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBi
YWNrZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwg
VVNFKERJUkVDVDJEKSkKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRp
b25TaXplKEZsb2F0U2l6ZSBzaXplKSBjb25zdAotewotICAgIHJldHVybiBzaXplOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JT
cGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNl
ID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8
LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29s
b3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xv
clNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdC
KSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFy
UmdiTFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNv
bG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAg
IGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAg
ICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVs
c2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0
aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAg
ICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
Y29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdC
Q29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGlj
X2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5z
Zm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0Uo
Q0cpCi0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNl
TWFzaygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFs
U2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEobHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXkt
Pmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNl
dCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhf
dCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAo
IWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1
bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEg
LyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1
bWEpOwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWlu
YW5jZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25z
IHdpdGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0
Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFw
aGljc0NvbnRleHRHTE9wZW5HTCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51
bSwgYm9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQog
ewotICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0
aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIK
KyAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBl
eHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYK
IAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1
ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpAQCAtMjA0LDYzICsxMjUsMjcgQEAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QKIAogICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAKLSAgICBhdXRv
IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUs
IDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhp
cywgLXJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9y
U3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xv
clNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9u
IHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxl
ZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRl
eHQsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVh
dGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZl
clNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCi17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0
cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1
dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXpl
KHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVyLT5jb250ZXh0
KCkuZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4g
aW1hZ2VCdWZmZXI7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoY29u
dGV4dC5zY2FsZUZhY3RvcigpLCB0aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKSk7CisgICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNpZiAhVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVt
b3J5Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBp
bnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBj
YXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0
J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFu
eSBwb2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgp
ICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5r
SW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJl
dHVybiAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApp
bmRleCA1MzMzY2Y0ZWMyMjhmOWRiMzczZjI1OGU2YjljN2I5ZWU0ZmM4YWMwLi4wMzgyYjc0MDQy
NDBmNWJmNDgxNmVkOGFlNWY2NjZmYzUzZTI2YzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE3MCArMjcs
ODEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgorI2lu
Y2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2lu
Y2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZs
b2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsK
LWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNv
cHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdz
IGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJz
ZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNl
cnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsKK25hbWVzcGFjZSBEaXNwbGF5
TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xhc3MgSW1hZ2VCdWZmZXIgewot
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VY
UE9SVCk7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVu
ZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBv
aW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JT
cGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNU
MkQpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNw
YWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAv
LyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQg
Y29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYs
IENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCiAgICAgLy8gQ3JlYXRlIGFu
IGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUg
cmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlz
IGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXpl
IGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3ND
b250ZXh0JikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKLQot
ICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNv
bnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAg
IGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6
ZTsgfQotCi0gICAgRmxvYXRTaXplIHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKSBj
b25zdDsKLQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x1dGlvblNjYWxlOyB9Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdDsKKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFt
cGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIg
b3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNp
emUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29u
c3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBj
bGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24gdGhlIGZhc3RlciBjb3B5SW1hZ2UgTW9k
ZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlmIGl0IHN1cHBvcnRzIHRoZSBEb250Q29w
eUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9yIHJldHVybiBDb3B5QmFja2luZ1N0b3Jl
IGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0Q29weUlt
YWdlTW9kZSgpOworICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgZW51bSBDb29yZGlu
YXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0gfTsKKyAgICBJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJ
bnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0g
PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0g
MDsKIAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgdmlydHVh
bCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAg
ICAgCi0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNp
emUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGludGVybmFs
U2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNv
bnN0ID0gMDsKIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9
IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJu
IDA7IH0KIAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgp
IGNvbnN0OwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFj
a2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCA9IDA7CiAKLSNpZiAhVVNFKENHKQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KLSAgICB2b2lkIHRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENv
bG9yU3BhY2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFz
ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwg
MCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0jZW5kaWYKLSAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25z
dDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgdmlydHVhbCB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICAvLyBGSVhNRTogY3Vy
cmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24g
dGhhdCB0aGV5IG9ubHkgd29yawotICAgIC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9y
IFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0MzRGVudW0sIFBsYXRmb3Jt
M0RPYmplY3QsIEdDM0RlbnVtLCBib29sLCBib29sKTsKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQ
dHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pOworICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSks
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSAgICAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3Jl
YXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXpl
TmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0
aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBG
bG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7
Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0gMDsKIAotcHJpdmF0ZToK
LSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0
aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBp
bWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0
aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAg
IHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0Owot
I2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0
aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYK
LSAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCA9IDA7CiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3Rl
bTo6TG9naWNhbCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
LCBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCA9IEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsKSA9IDA7CiAKLSAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29u
dmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4
dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENy
b3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJh
dGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNs
YXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1f
ZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0g
ICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdp
bGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8g
c28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAg
ICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cq
LCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmlu
Z01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8
Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNU
MkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKLX07CisgICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdD
M0RlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7CiAKLSNpZiBVU0UoQ0cpCi1TdHJpbmcgZGF0
YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLSNlbmRp
ZgorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJ
bWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpID0gMDsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTc4NWM4ZTc4YzQxYzMyNjU1ZjEyYzI3MjAyMDFhZWUwOGYyYWYxMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJl
Y3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHBy
ZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCks
IG1faW50ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFy
cmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxP
ZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVp
bnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAg
aWYgKCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1Bp
eGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhl
bEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Bp
eGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJs
ZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJs
ZSlhIC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAz
LCBsdW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCks
IGx1bWluYW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjYWU0MzUz
ZTk3ZDg3YmIwNTI5YTZlYzQyN2E3YTc1Yzk5ZTNlNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCww
ICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNp
bmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5j
bHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0
b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQg
ZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8v
IFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2VudW0gY2xhc3Mg
UHJlc2VydmVSZXNvbHV0aW9uIHsKKyAgICBObywKKyAgICBZZXMsCit9OworCitlbnVtIGNsYXNz
IENvbG9yRm9ybWF0IDogdWludDhfdCB7CisgICAgUkdCQSwKKyAgICBCR1JBCit9OworCitlbnVt
IGNsYXNzIENvb3JkaW5hdGVTeXN0ZW0gOiB1aW50OF90IHsKKyAgICBMb2dpY2FsLAorICAgIEJh
Y2tpbmdTdG9yZQorfTsKKworY2xhc3MgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Zmx1c2hDb250ZXh0KCkgeyB9CisKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBj
b25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3BhY2UgY29sb3JT
cGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9y
bSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDQg
KiBtX2ludGVybmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0dWFsIHNpemVf
dCBleHRlcm5hbE1lbW9yeUNvc3QoKSB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIHZp
cnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIHZpcnR1YWwg
UmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworCisgICAgdmlydHVh
bCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRv
QkdSQURhdGEoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29u
c3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3QmLCBj
b25zdCBJbnRQb2ludCYsIENvb3JkaW5hdGVTeXN0ZW0pIHsgfQorICAgIAorICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtLCBQbGF0Zm9y
bTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgICAgICA6IG1fbG9naWNhbFNpemUobG9n
aWNhbFNpemUpCisgICAgICAgICwgbV9pbnRlcm5hbFNpemUoaW50ZXJuYWxTaXplKQorICAgICAg
ICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAgICAgLCBtX2NvbG9y
U3BhY2UoY29sb3JTcGFjZSkKKyAgICB7CisgICAgfQorCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxT
aXplOworICAgIEludFNpemUgbV9pbnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9u
U2NhbGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZi
ZDEyYWJlNTQzYzNmMjAzNGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxNjdh
NTdlMDg1M2Q1ZTNmYzM4MDI3ZGQ4NjQ2ODAwN2EyYWU3ZAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDIwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlz
aWNhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mPEltYWdlQnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAg
IGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6
Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBi
YWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAg
ICB9CisKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVh
bCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5n
ZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQt
PmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkg
PyBlbnN1cmVCYWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3Vy
ZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsg
fQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUo
KTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAx
OyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVu
c3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAg
IHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1
cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsg
fQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5
QmVoYXZpb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tl
bmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50
b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5
c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50
b0JHUkFEYXRhKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgp
KSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcyku
Zmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRh
KG91dHB1dEZvcm1hdCwgcmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFy
cmF5LCBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
ID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaENv
bnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
YXJyYXksIGRhdGFTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBib29sIGNvcHlUb1BsYXRm
b3JtVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgZGVzdGluYXRpb25U
ZXh0dXJlLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBi
b29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tl
bmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRv
UGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1h
dCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjI2YzFmYWNkYzBk
ZDRiODM1Yjc4NWZlNmYzM2I3ZTk1NDIxYTM0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiBI
QVZFKElPU1VSRkFDRSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2Vs
aWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ7CisjZW5kaWYKKwor
I2lmIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0UpCit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworI2Vsc2UK
K3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9ybUlt
YWdlQnVmZmVyQmFja2VuZDsKKyNlbmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0g
UGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBB
Y2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEFjY2Vs
ZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5
TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZD47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRmMDA4NjE4NWNmMjI4NWJi
ZjI1NTgyZjk5NzIzOWY2ZTlkN2VlNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNo
cm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcg
UmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAq
c2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAg
IHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2Nl
bGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZDM5MjA0MDRjY2E1Y2I0YmMyMjMyNzc1YzY0
OTAyOWI1Y2M1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29sb3JTcGFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RXaW5k
b3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEludFNpemU7CisKK2NsYXNzIFdFQkNPUkVf
RVhQT1JUIFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyaW5n
QmFja2VuZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiA9IG51bGxw
dHIpOworICAgIAorICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cisg
ICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIAorcHJvdGVjdGVkOgorICAgIFJl
bmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmNjMzk4OGZk
NjQzZGE3MDQ0MWU1MzM4YjE2YTExYjA1NDYzMTM4NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaApAQCAtMCwwICsxLDQw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgUmVuZGVyaW5nTW9k
ZSB7CisgICAgQWNjZWxlcmF0ZWQsCisgICAgVW5hY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlz
dEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAorICAgIFJlbW90ZUFjY2VsZXJhdGVkLAor
ICAgIFJlbW90ZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3
Njc4YzU2YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjYxMmY5ZTlkMjJkNjcxZjY4ZDU2NWYxMjQ0
OTRlYzMzMmQ1Zjk0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAgY2xlYXJT
Y3JhdGNoQnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hhZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRo
IGFjY2VsZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsK
ICAgICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNo
YWRvdyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiB2
b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExh
eWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZl
ckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6
ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxv
YXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0
Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJ
bWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsK
LSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6
ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAg
ICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShs
YXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjg1LDcg
KzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9
IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXpl
KTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVySW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBh
dXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwg
VW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwog
ICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAK
QEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhU
aWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbgogI2lmIFVTRShDRykK
ICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2Ny
YXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7
CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0
ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1h
Z2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTg4NCwxMiArODg0LDEy
IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJ
bWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJl
Y3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAgICBhdXRvIGxheWVyRGF0
YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJsdXJSZWN0KTsKKyAgICBh
dXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICghbGF5ZXJEYXRhKQog
ICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEtPmRhdGEoKSwg
Ymx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5w
dXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCB7IH0pOworICAgIGxheWVySW1hZ2Uu
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmxh
eWVyRGF0YSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1
cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25z
dCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCkBAIC05MTIsNyArOTEyLDcgQEAgdm9pZCBTaGFkb3dC
bHVyOjpkcmF3U2hhZG93TGF5ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEludFJlY3QKIAogICAgIGFkanVzdEJsdXJSYWRpdXModHJhbnNmb3JtKTsKIAotICAgIGF1
dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVy
SW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRv
IGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllcklt
YWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cAppbmRleCA0OTZlY2EzMjRkM2U0ZGEyMmZjYTU5OTk4ZWI1ZWY1ZWU3M2QyMDlhLi43MjJlZWZm
ZTZjOWU1ZmQyODY2YmUyNzI4N2E0NzAyMTAwY2JmYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBA
IC01MDAsNyArNTAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVy
KEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFNpemUgYnVmZmVyRGVz
dGluYXRpb25TaXplID0gYnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNpemUoZGVzdFJlY3Quc2l6
ZSgpKTsKKyAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gZGVzdFJlY3Quc2l6
ZSgpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDM1NmYxOTY0ZDA5NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3NWIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdy
YXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3Nw
aS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAu
aD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJ
Lmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIg
LT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExP
Q0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0YXRpYyBGbG9hdFNpemUg
c2NhbGVTaXplVG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQot
ewotICAgIGZsb2F0IHhNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdT
dG9yZVNpemUud2lkdGgoKSkgLyBpbnRlcm5hbFNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB5TWFn
bmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
KSAvIGludGVybmFsU2l6ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxT
aXplLndpZHRoKCkgKiB4TWFnbmlmaWNhdGlvbiwgbG9naWNhbFNpemUuaGVpZ2h0KCkgKiB5TWFn
bmlmaWNhdGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNv
bG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRU
eXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAg
ICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwot
ICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRU
eXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0
Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xv
clNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAg
ICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3Bh
Y2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwot
ICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgp
LCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3Mp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGlu
ZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250
ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0K
LUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2Vz
cykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJl
c29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0
dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRp
b25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYo
cmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0
U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNj
YWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAg
ICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVk
OwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgo
KTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWln
aHQoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1f
ZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4o
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJl
Y29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7
Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNp
emUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgp
ID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0
KCkpCi0gICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNT
RVJUKHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0
YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+
IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRz
ID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhl
aWdodC51bnNhZmVHZXQoKSkpOwotICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6
Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xv
clNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0Nv
bnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cp
OwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRD
bGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91
bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2Ug
PSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdp
bmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFj
ayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVS
ZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5
WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5
dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEu
Yml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1f
ZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5i
aXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2
b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZl
ck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAg
ICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAg
dmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZl
R2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92
aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwg
cmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGlj
c0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxl
KEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2Fs
ZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQot
SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNz
KQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9y
U3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2Vz
cykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotRmxv
YXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBkZXN0
aW5hdGlvblNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGRl
c3RpbmF0aW9uU2l6ZSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSgpKTsK
LX0KLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1h
Z2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkg
YmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8g
YmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAv
LyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBk
byBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRh
LnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcg
Y29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFj
Y2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRv
ZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICBy
ZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVy
bmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90
IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4dGVy
bmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhy
ZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3Mg
aGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2Ug
YmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0
aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2Rh
dGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hh
c2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9k
YXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1H
cmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkK
LSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsK
LSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgp
LnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRT
aXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
ICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWln
aHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAg
ICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENH
UmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICBy
ZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdl
QWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNp
emUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9y
ZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVS
ZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwot
ICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwg
NCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29u
dGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNp
emUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2NhbGVTaXpl
VG9Vc2VyU3BhY2UobG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSk7
Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0K
LQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0g
ICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRl
ZChXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsK
LX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXIt
PmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+
bG9naWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZl
ci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0g
aW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGlt
YWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUs
IHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotQmFja2luZ1N0b3Jl
Q29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250
Q29weUJhY2tpbmdTdG9yZTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVy
OjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBp
ZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVm
ZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJu
IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZl
cihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXIt
PmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0
YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlOwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAg
ICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tp
bmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpLCA4LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JT
cGFjZSwgbV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRy
dWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAg
IGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJl
dHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRh
LnN1cmZhY2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAg
ICBBU1NFUlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwot
ICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFj
ZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3Zl
KGltYWdlQnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBz
cmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAg
IGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6
ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdl
QnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0j
ZW5kaWYKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkg
fHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3du
IGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRq
dXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQo
KSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9w
dGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAg
ICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkg
PSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1
ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJh
d1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcs
IG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1
ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNp
emUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0g
ICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAg
ICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNp
emUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwg
SW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVj
dDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkK
LSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4
ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1Jl
Y3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVB
cnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNv
dXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNv
dXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlRm9ybWF0LCBzY2FsZWRT
b3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgLy8gRm9yY2UgcmVj
cmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhy
b3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAgIC8vIFNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdo
eSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkp
OwotfQotCi1zdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJl
dHVybiBrVVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0g
ICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9u
PwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBl
KS5jcmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAv
LyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTog
QWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5
IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAg
Ly8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8v
cHJvYmxlbS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBO
RyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtV
VFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAg
cmV0dXJuIGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAg
IGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIp
KQotICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBrVVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29k
ZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAh
dXRpIHx8ICFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0
aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGks
IDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYg
KENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYm
ICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVh
bGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVz
c2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBr
ZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAg
IGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAgICBp
bWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFs
dWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5
VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGlu
YXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJv
cGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0
aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0
aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0
KCkpOwotICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5n
ZXQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBi
YXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEp
LCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2
NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9y
KENGRGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0
YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRh
KSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBk
YXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0g
ICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4g
ImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewot
ICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwot
ICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0
b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVt
dWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkg
ewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhh
dmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVs
dGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQo
KSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAq
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAg
IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwg
ZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJv
dmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBk
YXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIs
IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1h
cEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlk
ZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBl
bHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNh
bFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFj
ZSA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUobG9naWNhbFNpemUoKSk7Ci0gICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUlu
VXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2Uu
Z2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVu
Y29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsK
LX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdl
QWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25l
ZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90
PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VU
SSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNv
IHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAg
c2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAg
ICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3Jv
dyhzaXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERh
dGEuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkg
ewotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAg
IGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0
YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0g
ZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJd
ID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDJdID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBk
YXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBh
bHBoYSBjaGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwot
ICAgIH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJj
ZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndp
ZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNl
LndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQg
fCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFn
ZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0
cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNm
RGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwo
ZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEg
PSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRh
VmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVZlY3Rvcjx1aW50OF90
PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICByZXR1
cm4gbV9kYXRhLnRvQkdSQURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhM2RjOGQz
MDdkODc1NmNjZmQxMTE0NDA0ZTM1YjdkZGIzYjA1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAK
QEAgLTAsMCArMSwzODUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUu
aD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZSA9IHsgY2Vp
bGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKSwgY2VpbGYocmVzb2x1dGlvblNjYWxl
ICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBpZiAoc2NhbGVkU2l6ZS5pc0VtcHR5KCkgfHwgIXNj
YWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisgICAg
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAg
aWYgKGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVu
c2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLmhlaWdodCgpKSAqIGJ5dGVzUGVy
Um93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7
IH07CisgICAgCisgICAgcmV0dXJuIGludGVybmFsU2l6ZTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQudHJhbnNsYXRl
KDAsIC1tX2ludGVybmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dC5hcHBseURldmljZVNj
YWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRo
KCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50
ZXJuYWxTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVh
dGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXplLndp
ZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisK
K3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1
dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlv
bjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGlt
YWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRl
eHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgp
LCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7
CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdl
U2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFn
ZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJ
blVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBw
cmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJu
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIG1f
bG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lu
a0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAg
IHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlvblNj
YWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1
dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBD
b3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0UmVj
dCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3Jl
IDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBo
YXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAKKyAgICBhdXRvIHV0aSA9IHV0aUZy
b21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVn
VVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwg
c28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAg
ICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpLCBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9
IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOworICAg
ICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRh
KCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEo
KSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgs
IDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dC
aXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVBy
b3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAg
IH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24g
PT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZElt
YWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAs
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0
LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9n
aWNhbFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4
dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxT
aXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAg
YXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwg
cXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBl
LCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRhdGFW
ZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwg
cHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwg
bWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheShj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVjdC53aWR0aCgpOworICAgIGFyZWEgKj0gc3Jj
UmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOworICAgIGlmICghYXJyYXkgfHwg
IWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCBi
dWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIHNy
Y1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1ZmZlclJlY3QsIHNyY1JlY3QpOworICAgIGRl
c3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKwor
ICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3Qu
eCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFko
LXNyY1JlY3QueSgpKTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXpl
KCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgpOworICAgIAorICAgIHJldHVybiBhcnJheTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVj
dHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRl
c3RSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgZGF0YVJlY3QgPSB7IEludFBvaW50Ojp6ZXJv
KCksIHNyY1NpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihkYXRhUmVj
dCwgc3JjUmVjdCk7CisgICAgCisgICAgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBk
ZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsKKyAgICAKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAw
KQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpKTsKKwor
ICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3Qu
eSgpIC0gc3JjUmVjdC55KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2lu
dDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVyc2VjdChidWZm
ZXJSZWN0KTsKKworICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29s
b3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgaWYg
KHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0g
c3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBp
eGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVk
KENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29s
b3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWlu
dDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgY29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBk
ZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQ
aXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFs
cGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAy
NTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFs
cGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAg
ICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNv
bnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4
X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAg
aWYgKGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVs
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQg
PT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsw
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVs
WzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4
ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhh
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
cmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29s
b3JGb3JtYXQsIHVpbnQ4X3QqKT4gY29weUZ1bmN0b3I7CisgICAgCisgICAgaWYgKHNyY0FscGhh
Rm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAgICAg
IGNvcHlGdW5jdG9yID0gY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgfSBl
bHNlIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnBy
ZW11bHRpcGxpZWQ7CisgICAgZWxzZQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlVbnByZW11
bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgICAgIAorICAgIHNpemVfdCBieXRlc1BlclJv
dyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhlaWdo
dCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJvdzsg
eCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNSb3dz
W3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3MgKz0g
c3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAg
ICB9Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZl
ciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOwor
ICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENv
dW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNfY2Fz
dDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5yb3dC
eXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAgICBy
ZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4
ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1h
dCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9
IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dhcCBw
aXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0
XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBD
b2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdklt
YWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09
IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JG
b3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgor
ICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2
SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3JjQWxwaGFG
b3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZv
cm1hdCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNTbG93KHNyY0FscGhhRm9ybWF0LCBzcmND
b2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVz
dENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZl
cihzcmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0
ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKwor
ICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZv
cm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9Cisj
ZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBj
b25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFG
b3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhh
Rm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUp
OworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZmUwZWE2YWEwYTk3MTI3MTIxZTNi
M2E5NDIxZTE1OWVmNWJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1Ymxp
YyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpOworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0lu
dG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBBZmZp
bmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOyB9CisK
KyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZvaWQgc2V0dXBD
b250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRh
UmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisgICAg
dm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0
JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0OworCisgICAgc3RhdGlj
IHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNy
Y0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDg5NWE0OWVlODE2ZThiN2Jh
MjNkNWZlYWYwYTQ5ZTgzZDU4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0w
LDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ0EgdXNlcyBBUkdCMzIgZm9y
IHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgor
I2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpZiBVU0VfQVJHQjMy
Citjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKK2Nv
bnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1h
dDo6QkdSQTsKKyNlbHNlCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRt
YXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworY29uc3RleHByIGNvbnN0
IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpSR0JBOworI2Vu
ZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRhdGE7CisgICAgdW5zaWdu
ZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7CisKKyAgICBpZiAoIXRy
eUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUo
ZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBp
bnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZl
cklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8gY2dDb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxTaXplLndpZHRoKCksIGlu
dGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hlZENHQ29sb3JTcGFjZShj
b2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFz
ZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAg
ICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0
byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwg
ZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisK
K0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCB2b2lkKiBkYXRh
LCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0
YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFT
U0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1f
Y29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KHRoaXMtPmNvbnRleHQoKSk7Cit9CisKK0dyYXBo
aWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBD
b3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAKKyAgICBjYXNl
IERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKAorICAgICAgICAgICAgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUu
aGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xv
clNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5n
ZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9C
R1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dp
Y2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cg
PSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3Vs
dC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7Cisg
ICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9
IDEpCisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisg
ICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1
dG8gYXJyYXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0
Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0g
NCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5
LT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkg
KiA0OworICAgIAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsK
KyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRh
KSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQu
eCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBh
cnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50
UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9
PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsK
KyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAg
IHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIElu
dFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxh
dGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9p
bnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQ
ZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cg
PSA0ICogc3JjU2l6ZVNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJh
eS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RD
bGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIGlucHV0Rm9y
bWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZvcm1h
dCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjODAwMzAwNzI3MzBmYTA4N2JmMzU0MTNkNjM5
YTgwODdmZmMxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisj
aW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZv
aWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0
IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2b2lkKiBtX2Rh
dGE7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1
YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJh
dGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rp
c3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRp
ZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIg
cmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYm
IChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3Rh
dGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3Jj
LCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0g
ICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdl
VW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252
ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBS
R0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdklt
YWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9G
bGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1h
Z2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJU
KHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9F
cnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFu
ZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURh
dGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAz
IH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFw
LCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0Vf
QVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFD
Q0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAg
IHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBz
cmMuZGF0YSA9IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lk
dGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVz
ID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJl
bXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxz
ZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAv
LyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6
OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWln
aHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVy
RGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNl
QmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0j
ZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QK
LXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAg
YXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlm
IChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFy
ZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1
bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAg
Q2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8
IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHku
dW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7
Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwot
ICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8
IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lu
eDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50
PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVu
ZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRo
KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAg
aW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAg
ICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAg
IG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5z
YWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVH
ZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAg
IENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lk
dGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAg
cmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICog
cmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVy
YXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQo
KTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsg
b3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNy
Yy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMg
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAg
ICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRl
c3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAg
ICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAg
ICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9
Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4
X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAg
ICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVm
ZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNl
eF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4Kysp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAg
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RS
b3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAg
SU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93
ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0
PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRl
c1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJv
d0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQot
ICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51
bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRh
ID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVm
ZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAg
cGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50
OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNo
YW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0g
c3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsg
Ml0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90
IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyAr
PSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vu
ZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgo
KSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAg
Q2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4g
ZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwot
ICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNp
emUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lu
eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBz
b3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChl
bmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+
IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVu
ZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSAr
IHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0g
ICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJU
KG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0
KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBB
U1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8
aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0
aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0g
NCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291
cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5z
YWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRl
c3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBp
ZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93
ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0
eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7
Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRo
ID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0g
ICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0g
ZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2Fm
ZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAg
ICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAg
ICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0K
LSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWlu
dDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAg
ICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZl
cnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2Fz
dDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFj
ZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpS
ZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJv
dygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCku
dW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBz
cmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihz
cmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lk
dGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVt
dWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFn
ZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2Vu
ZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUw
ZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5o
CisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYg
c3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dE
YXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1h
cEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1
Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAg
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29s
b3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VC
dWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0
YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxl
cmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZh
Y2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0
OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Y29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44MjBkMTliZjZkYzhiMGUyNzU3ZGVhOGE1OTQzNTEwYTE5ZTJjYjViCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBQTEFURk9STShDT0NP
QSkgJiYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgor
I2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQpOworCitJbnRTaXplIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAg
IGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
SW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlmIChpbnRl
cm5hbFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8fCBpbnRlcm5hbFNpemUuaGVpZ2h0
KCkgPiBtYXhTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJu
IGludGVybmFsU2l6ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKGludGVybmFsU2l6ZSwgaW50ZXJuYWxT
aXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Cisg
ICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250
ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgaW50ZXJuYWxTaXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQo
c2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQp
Cit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFs
U2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdodCkpKTsK
K30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKG1f
c3VyZmFjZSk7CisgICAgc2V0dXBDb250ZXh0KGNvbnRleHQoKSk7Cit9CisKK0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJp
Z2h0KQorICAgIDogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgSU9TdXJmYWNlOjpjcmVhdGVG
cm9tU2VuZFJpZ2h0KFdURk1vdmUoc2VuZFJpZ2h0KSwgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29s
b3JTcGFjZSkpKQoreworfQorCitNYWNoU2VuZFJpZ2h0IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlU2VuZFJpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5j
cmVhdGVTZW5kUmlnaHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVu
c3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVz
KCk7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJS
b3coKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Cit9CisK
K05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3Jl
YXRlSW1hZ2UoKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5r
SW50b0ltYWdlKFdURk1vdmUobV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVz
dGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJbWFnZSgp
KQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50
ZXJuYWxTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNv
bnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVh
KCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxT
aXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93
KCk7CisKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHVpbnQ4
X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVy
Um93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCks
IG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIEludFJl
Y3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0g
Q29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAg
ICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFJl
Y3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5
ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3JjUmVjdFNjYWxlZCwgc3JjUmVjdENsaXBwZWQs
IGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNS
ZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgp
ICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKwor
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICBJT1N1cmZh
Y2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIHNyY1Jl
Y3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsK
KworICAgIGNvcHlJbWFnZVBpeGVscyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIG91dHB1dEZv
cm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RS
ZWN0LnNpemUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBz
cmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW50U2l6ZSBzcmNT
aXplU2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0
OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwg
JiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVkLnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJ
bnRSZWN0IGRlc3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNyY1NpemVT
Y2FsZWQsIHNyY1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0
KTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAg
SU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNj
ZXNzTW9kZTo6UmVhZFdyaXRlKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgZGVzdFJlY3QueSgp
ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93ID0gNCAqIHNyY1NpemUud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dz
ID0gYXJyYXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBz
cmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKGlucHV0Rm9ybWF0
LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQ
ZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgLy8gRm9yY2UgcmVjcmVh
dGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhp
cyBpcyBuZWNlc3NhcnkuCisgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAw
LCAwKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JN
KENPQ09BKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTU2N2M2ZGQ1N2FjNTViNjljYzAwOGNlNTA0NDZjMzdiZGMzOTY4NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBQ
TEFURk9STShDT0NPQSkgJiYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
TWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElPU3VyZmFj
ZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6
ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRS
aWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7
CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBl
eHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVycmlkZSB7IHJldHVybiBtZW1vcnlDb3N0KCk7IH0KKwor
ICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0lu
dG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHJhd0NvbnN1bWluZyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOyAgICAKKyAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Q29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOwor
CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFBMQVRGT1JNKENPQ09BKSAmJiBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTBkYjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2
NWIyNC4uMGE0NWUxNjEzNTkwYWQxYWZlZmU1NTBmM2IzMmM5MTNmNzhiOGY5MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDE2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgogCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8
d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisK
KyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNlbmRpZgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDQgKzUwLDEzOCBAQCB1aW50OF90IHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSkKICAgICByZXR1cm4gKih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorQ0ZTdHJpbmdSZWYg
anBlZ1VUSSgpCit7CisjaWYgIVBMQVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOworI2VuZGlmCisgICAg
cmV0dXJuIGtVVFR5cGVKUEVHOworfQorCitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21J
bWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZT
dHJpbmcoKTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5j
bGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dz
IHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0
IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3cs
IG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5
NTI4Nj4uCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigi
cHVibGljLnBuZyIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0g
Q0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVybiBrVVRU
eXBlUE5HOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwg
ImltYWdlL2pwZWciKSkKKyAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAg
cmV0dXJuIGtVVFR5cGVHSUY7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4ga1VUVHlwZVBORzsKKyNlbmRpZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYg
aW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFi
bGVEYXRhUmVmIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0lt
YWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAo
IWRlc3RpbmF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZE
aWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVn
VVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkg
eworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBp
bWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9w
dENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5
cGUsICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3Rp
bmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVl
ID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBh
ZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGlj
dGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsK
KyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29s
b3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZl
IHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNu
J3Qgc2VlbSB0byB3b3JrLgorICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1cm4gQ0dJ
bWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOworfQorCitzdGF0aWMg
UmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBl
KG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0
YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEg
PSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxp
ZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAg
ICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBt
YW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9
IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVt
dWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAg
ICAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9
IDI1NSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFs
cGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAq
IGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAy
XSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBi
dWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAx
XSA9IGRhdGFbaSArIDFdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kg
KyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8g
PSBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwu
CisgICAgICAgIGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAg
dmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBz
b3VyY2UuaGVpZ2h0KCkpOworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJj
ZS5oZWlnaHQoKSwgMCkpOworICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNl
LndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JH
QkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUlu
Zm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpKTsKKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgp
LCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwo
Q0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNo
YXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSks
IENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIg
KyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVS
TChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNl
LCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCks
IG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+
IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0
YTsKKyAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExl
bmd0aChjZkRhdGEpKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJj
ZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdl
dCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5k
ZXggMTYxMjhhMTlhYmQxZmI4M2FiMzFhMTE1YzY4OTUwNDkxZDQxOTU1Mi4uNDM1MjkxYmU5MWVj
YWM1ZjQ5MWRmYThiNDhlZmRjZGM2ZmZhMzU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApA
QCAtMjUsOCArMjUsMjYgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgSW1hZ2VEYXRhOworCiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7
CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdVVEkoKTsKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRp
RnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CisKK2Jvb2wgZW5jb2RlSW1h
Z2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IENGTXV0YWJsZURhdGFSZWYpOworCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworVmVjdG9yPHVp
bnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0
IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggODBm
NmIxODcyNTIyOTY4ZWE3ZDk1NzZiN2UwMDU2MzMzMjU4ODIzYy4uMjgyMWVmODFkNzVkZmIwZmYw
NWE4NWJlNWM5ZmJjMjU4YjU2MmViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTQyLDYgKzQyLDcg
QEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dD
b250ZXh0Lmg+CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHUERGRG9jdW1lbnQuaD4KKyNpbmNs
dWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRy
Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3Vy
ZmFjZS5oCmluZGV4IDI0M2M0OGI5NTFiMTc0YjZiMjRiYWM1MzY0YzlhMDRmZjk2OWNkYjMuLjRj
YzBmYTNmNzk3MjdlYjlkZWVkYzRhZDBlMTE3MzRkYWIyMTRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCkBAIC0xMDAsMTAg
KzEwMCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4g
Y3JlYXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNlUmVmLCBDR0NvbG9yU3BhY2VSZWYpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9t
SW1hZ2UoQ0dJbWFnZVJlZik7CiAgICAgCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJv
bUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotI2VuZGlmCi0KICAg
ICBXRUJDT1JFX0VYUE9SVCB+SU9TdXJmYWNlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgdm9pZCBtb3ZlVG9Qb29sKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmlu
ZGV4IGMyMTI1YzNlZjE2MGMwODEwMTA5ODIzYjRiOTAzNmRkZjZmYmNmNjcuLjM5MWZjMjNjZDBh
OGY4NjlhY2MxMDczMmQxNGZkZjQ1MGZjMjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KQEAgLTMzLDcgKzMzLDYgQEAK
ICNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKICNpbXBvcnQgIklPU3VyZmFjZVBvb2wuaCIKICNpbXBv
cnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgogI2ltcG9y
dCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC0xMTAsMTMgKzEwOSw2IEBAIHZvaWQgSU9TdXJm
YWNlOjptb3ZlVG9Qb29sKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKICAg
ICBJT1N1cmZhY2VQb29sOjpzaGFyZWRQb29sKCkuYWRkU3VyZmFjZShXVEZNb3ZlKHN1cmZhY2Up
KTsKIH0KIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiBJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotICAgIHJldHVybiBXVEZN
b3ZlKGltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIE5T
RGljdGlvbmFyeSAqb3B0aW9uc0ZvckJpcGxhbmFyU3VyZmFjZShJbnRTaXplIHNpemUsIHVuc2ln
bmVkIHBpeGVsRm9ybWF0LCBzaXplX3QgZmlyc3RQbGFuZUJ5dGVzUGVyUGl4ZWwsIHNpemVfdCBz
ZWNvbmRQbGFuZUJ5dGVzUGVyUGl4ZWwpCiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAyOGUyNjQ0ZTI2ZWRiNTBkMDI1ZGVhZTU0M2Ex
MTQ5ZTNmMmFlNDkyLi4yYzY3N2Y2YjczNmU3NTJlNDFmOGIzZjI0MzQ3NmQ0NTA4NDI0MzcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fbGlzdFtpbmRleF0uZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHJlbW92ZUl0ZW1z
RnJvbUluZGV4KHNpemVfdCk7CiAKICAgICBzaXplX3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9saXN0LnNpemUoKTsgfQpAQCAtMjUxLDYgKzI1MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlM
aXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0Jik7CiAKIH0gLy8gV2ViQ29yZQotCi11c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk5ZjFjZTI3MzU0NTBiZGFjM2JiZGYxMWEzMDg1ZDlhN2YzYzll
MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVwbGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRHJhd2luZ0NvbnRl
eHQgeworcHVibGljOgorICAgIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUpCisgICAgICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlM
aXN0Q29udGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRp
c3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwg
RmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAg
IH0pCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyAg
fQorICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7
IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBt
X2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheURpc3BsYXlMaXN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXlEaXNwbGF5TGlzdC5nZXQoKTsgfQorCisgICAgdm9p
ZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KQorICAgIHsKKyAgICAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5OworICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0LnJlc2V0KCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXBsYXllciByZXBsYXllcihkZXN0Q29u
dGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7
IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIERpc3Bs
YXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBt
X3JlcGxheURpc3BsYXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7
IGZhbHNlIH07Cit9OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUu
LmFmM2FhZGUyYTMzMmNjMTBhOTYxM2YyMTI2MTcxN2RkMWQ4NThiNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcApAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFn
ZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRl
UGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25z
OwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgIGF1dG8gcGl4ZWxB
cnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRz
KG1fdmFsdWVzKTsKIAorICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJ
bWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBwaXhlbEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1
bHRJbWFnZS0+cmVzb2x1dGlvblNjYWxlKCkpOworCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAg
ICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsKQEAgLTMx
MSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXko
KnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBp
eGVsQXJyYXksIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUm
IHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2
MThlOGZkZGQ4NGVjYi4uMjVkNTdhZjA2YzAxYTdjNzhhN2ZiOTQ3ZDQwNTgwMDRlYTcxNzJkOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMTAwLDEzICsxMDAsMTMgQEAgdm9pZCBGRURyb3BTaGFk
b3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwg
YWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4K
ICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFs
U2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVs
dGlwbGllZEltYWdlRGF0YShzaGFkb3dBcmVhLCBudWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2lu
Z1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBzaGFkb3dBcmVhLCBDb29yZGluYXRlU3lzdGVtOjpCYWNraW5nU3RvcmUpOwogICAgIGlmICgh
c3JjUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29udGV4dFNoYWRvdy5ibHVy
TGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICog
c2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFy
cmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6
OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJy
YXksIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBDb29yZGluYXRl
U3lzdGVtOjpCYWNraW5nU3RvcmUpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0
LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6
ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCA0OWU4YzVhMjZlNzcxYzQyNDk2NzgxOTUyN2E1
NjI3MzUzZGY0NDk2Li5kZDM1Y2M2NWIxMzdkODIyYzcwMTUzMmRhYmQyNDkwMDRiZjJhOWY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
LmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IG1fc291cmNlSW1hZ2U7CiAgICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdN
b2RlIG1fcmVuZGVyaW5nTW9kZSB7IFVuYWNjZWxlcmF0ZWQgfTsKKyAgICBSZW5kZXJpbmdNb2Rl
IG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKICAgICBm
bG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZl
OTg2ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5NzJiNTkwZmEuLjVjOGIzYjRkZTBhZmE3MTQ1
OGNkY2Y2YzZiYzBmZmQyY2NiZDE0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3OSw5ICsy
NzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAK
ICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlv
blJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2lt
YWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Qu
c2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCks
IGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1
bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0
aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQog
CkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRS
ZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJz
aW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1
bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBA
IC00NjksNyArNDY5LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNp
b24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3Vs
dCkgewotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNv
bHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2Ugewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlLmNwcAppbmRleCAxYzY2YWQ3OWNlNDBjMTQ1NThmNjY1MjUyYjI1ZTNiYjdkZWQx
NmJkLi44OTdjZTQwZDA0YzdlMGFkMWVhMTkyY2I5MTA2MTlmOGY5MjIyNGNjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291
cmNlLmNwcApAQCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZTo6aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVmZmVyKQogICAg
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIG1f
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CmluZGV4IGQ1YjkxYjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0NTguLjhmNTBlNTc1
NzFkN2IzODUwMGVlZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBSZW5kZXJMYXll
cjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAogICAgIGVuc3Vy
ZUxheWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwg
cGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVy
YXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAg
IG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFj
dG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5YTJkNDQ2NGRm
NWNiN2IzYTQ0MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5ODRiNWQyYjUyMWE2
OTkxYzYxNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApA
QCAtMTgxLDE0ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRl
UmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICBJbnRSZWN0
IG1hcmdpblJlY3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBhdXRvIGludGVydmFs
cyA9IG1ha2VVbmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJlY3QuaGVpZ2h0KCks
IC1tYXJnaW5SZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRoaXMgYnVmZmVyIHNo
b3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1h
Z2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUo
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoaW1hZ2VCdWZmZXIp
IHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6
ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0g
aW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCks
IGltYWdlUmVjdC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBw
aXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUo
KSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAgICAgICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNp
Z25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBS
R0JBLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNkMjk3NzViODQ2ZjA1
OWQ1YTJjYTcxM2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFjZTcxN2VjNWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgYwogCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2UgJiYgIXJlcGFpbnRS
ZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5n
IGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAg
ICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwg
VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRl
VHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
LCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2M2MzZTQ5NjBiZDRl
M2JkYmQ4NzQ5MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFiYTkzOGQwZDllMjYz
NGQ4ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IFJlbmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCks
IHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVy
RGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFi
bGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFi
bGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJh
bnNmb3JtLCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwog
ICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0
ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVy
RGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
ZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAgZmlsdGVyRGF0YS5z
b3VyY2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBv
c3RBcHBseVJlc291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCAxNzg3ZTE4
YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5Nzg3MjIwNDY1YmM2
YWVjMGI1ODA0YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBi
b29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3Zn
U3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6
TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQjsKICAg
ICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUg
dW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4
dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJEYXRhLT5tYXNr
SW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVj
dCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRleHQp
OworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgICAgICBpZiAo
IW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgyMTQxMWFkZTc3NTA4
NTYxNjg4NTZlZDIyYjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4ZDNhNzlmYjQ5NWRk
ZDRmMGY0M2Q5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBA
IC0yMTgsNyArMjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5n
IGZsYWcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRl
ZCBidWZmZXIuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0
byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50
eHQKaW5kZXggZmY1MmQyNTM2ZjU2NWZhMjk1YmViNjIwMTI2OGEwZjMzMzE3MGZmMy4uM2U0Zjc1
OGIyMjQ2ZTZkYzg0NTZmZGE1ZDBlYmE4ODM0YzQ2NWIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBA
IC0xNyw2ICsxNyw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dl
YktpdF9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQktJVF9ESVJ9Igog
ICAgICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNz
IgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIiCiAgICAgIiR7
V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCA3OTk0ZTNjYTc3NzYzMjlkNmY3NWQ3
YWFmMGM5M2ZkOWFhMDU5ZTEwLi5jOTY4ZDM0NzhhNjNkNWFmYWQ3NDdlOWMyYjMxOTlkM2ZiNzA3
NDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmls
ZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
CkBAIC0xNSw2ICsxNSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikv
bW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAog
JChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4K
KyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4K
ICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
TWVkaWFSZXNvdXJjZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMCw2ICsxMDIsNyBAQCAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNvbm5lY3Rpb24ubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9X
ZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4K
KyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdl
cy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNm
aWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QK
aW5kZXggMGNkMjNlMDFiYmFjZDJlYzRhMGJkYzNiZGZmMmJlMGQ3YjYwYjAxYi4uNzFkYTY1M2I3
ZWI3M2I2MmYxMDA0M2U0YWQ0MmUzNzFiOTVjOTYxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIwLDEyIEBAICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NQcm94
eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdl
c1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5n
QXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2Vz
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAtMTM1LDYgKzE0MSw5
IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVj
dFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2Vp
dmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2Vz
UmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2Ug
Yi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggOWQzZTJhOTBjN2I0ZDkw
YTQyNmM3NmE0ZTA1ZTZiMmY4MWNjMGU5ZS4uMWY0YTQ0N2IxNDhjYjMyMGFjZjY3OTA3ZTZiZDA3
Y2VhNGViYjg3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtl
CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUsNyBA
QCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0Mikv
R1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisgICAg
JChXZWJLaXQyKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0Mikv
R1BVUHJvY2Vzcy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAogICAg
ICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBAIFZQ
QVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAgJChX
ZWJLaXQyKS9XZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9t
ZWRpYSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIFwK
ICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9X
ZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlh
Q2FjaGUgXApAQCAtMTQwLDExICsxNDIsMTQgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAg
UGx1Z2luUHJvY2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyIFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkg
XAogICAgIFBsdWdpblByb3h5IFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlciBcCisgICAgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eSBcCiAgICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBc
CiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eSBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAgIFJlbW90
ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAg
IFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94
eSBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDUyYTk1Y2Uw
ZGVkNzAzZDYxZDM0YTlkMTdmMGM4YjQyZTY2NGZkZGEuLmQ5NGU1MWNkZDdmODlhY2ZhZDE4YTc5
ZjM3OWY0YmZjYWFmNGY3MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE0OSw0NCArMTQ5LDYwIEBAIExp
YldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVEND
b2RlY3NQcm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVj
b2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6
UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewog
ICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIo
KS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAg
ICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BV
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJ
QldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAg
ICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNz
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNw
YXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNw
YXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQog
ewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAg
ICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
IAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJN
YXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rl
cik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5n
QmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7Cisg
ICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBBU1NFUlQobV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkg
PT0gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApp
bmRleCBhYzcxMjVkNzM4ZDg2ODg4ZWVhOGI0YTkyNTE1ZjlkZTRkMWY2YjA0Li40NWUwYjUxZTNj
NTY2Mjc0NDE0YTE1NGQwY2U4NjdmZTY2NjZhZjA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwx
NSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
LSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0j
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFw
LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAi
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJ
ZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9M
b2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9Vbmlx
dWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IApAQCAtNDYsMTggKzQ4LDIwIEBAIGNsYXNzIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwog
CiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRl
ZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRy
PEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVu
dCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBj
cmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5l
Y3Rpb246OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24o
KSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7
IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdl
dCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lk
IGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRT
dXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNz
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAg
ICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIo
KTsKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03NSwxNCArNzksMjEgQEAgcHJpdmF0ZToK
IAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6
OkNvbm5lY3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAg
ICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1l
KSBmaW5hbDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisg
ICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6
Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nl
c3M7CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAg
ICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmll
cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAt
OTMsNiArMTA0LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldF
QlJUQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2Vi
UlRDQ29kZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQw
YTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJi
OWVmYjU2ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAt
MjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5n
QmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdjOGZhM2U3Yjg1MGUxMzdiYWUzMmVkZGI4
YTcxNWU4NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBAIC0wLDAgKzEsNzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVy
UHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIElt
YWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgOiBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cykpCisgICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVt
b3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJv
eHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAg
ICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOwor
fQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0
dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpy
ZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCit7CisgICAgc2Vu
ZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJ
ZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNo
SWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExNmExNDNlNzdiMjIyYzM1NTE4ZDNk
NTY2ZmYzYTllNWEyMWJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0
SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2YXRl
IElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQ
Qzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsK
KyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOwor
CisgICAgdm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBs
b2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qm
KSA9IDA7CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBhZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRk
NzJkZGViNWVjOTU4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAg
LTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1ZWQxYzg5MTZjMjQ0NWQ3Y2U4YTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5
TGlzdFJlcGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4K
K2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQ
aHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1h
Z2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbElt
YWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4m
JiBiYWNrZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAg
ICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAg
ICwgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZl
ckJhY2tlbmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmludGVybmFsU2l6
ZSgpLCBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2Uo
KSwgbV9iYWNrZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxh
eUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNhbEltYWdlQnVmZmVy
Ojpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7Cisg
ICAgICAgIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDY3ODdlZWZhMjJmMGM0NjA5MTA4YjViZmI0ZDc3ZTk3NzQwYjYyZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFn
ZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNDBmZmNlOWIxOTY5OTFmZGY5OTRm
ODI0ZWQ2OTIzYTA4ODRmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBA
IC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpj
cmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
Cit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisg
ICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7Cisg
ICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1l
c3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0
Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50
NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50
b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBp
ZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAg
ICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVB
Y2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdlQnVm
ZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRp
ZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNz
YWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICgh
bV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
aW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJl
ZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZl
ci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKwor
Y2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVz
c2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+
IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisg
ICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZh
dGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7
CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1
ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJl
ZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXpl
IGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6
OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBS
ZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggNWQ4NDQ3MTMyNWJiYTdhNDM1
ZWQ5MzNjMDkwOTA5NDUzYjlkNDAyNS4uNTNiNzkyZWRiNmI2MjM3N2M4ZWM5YzMzYTk5YTU1NDli
OWE1NTVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0y
Nyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FO
VFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFU
Q0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVD
RUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlW
RVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAn
U3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2Jl
X2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ01h
Y2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAg
ICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0
Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcicsCkBAIC0y
MTEsNiArMjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQo
KToKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6
OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCisgICAg
ICAgICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VX
b3JrZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApA
QCAtMjE4LDkgKzIyMiwxMiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNs
YXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJL
aXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VC
dWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElE
JywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKKyAgICAg
ICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0
OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2
MSwxMyArNzY4LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2Up
CiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNl
aXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2
ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9S
RUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4n
KQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9S
RUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0g
W2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBp
biBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5U
U19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChy
ZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1
cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc2LDEzICs3ODYsMTYgQEAgZGVmIGdlbmVy
YXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9
XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgog
ICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQg
JXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVw
bHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVy
Lmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0
cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4n
KQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1l
c3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVy
Lmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNF
RF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURf
UEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oCmluZGV4IDFkZTMwNDJjMDc5MTY1YTFkMjVhNmY0YjU4ZDY2MDlhNjU2
NjAyZjguLmFhODlmNjVhYmI0NjQ2ODY5YzgzMGI5NWZkZjc1NjRjYzBlMjQzYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9B
dXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtNzg5LDYgKzc5MCwyNiBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRh
Y2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAor
ICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAg
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNj
ZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307
CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewog
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CmluZGV4IGQwMzkzYmIwNjJkOTdhZTk2YTcyMjVhNmQ2MDdiMDc0YjM4ZTBjOTgu
LmY3MjI1MjdlODZlNDczYTQwZDEzOTMwNmUzZjA5Y2ZlZDkzNjdiYTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApA
QCAtMjksNiArMjksOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHku
Y3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNr
QXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJh
Y2tlci5jcHAKQEAgLTUxMiw2ICs1MTQsOCBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBs
YXllclByaXZhdGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1J
TUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVk
aWFSZXNvdXJjZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3MuY3BwCiAKIFdlYlByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZmU3NTc5NTM3NjFiOTlmNjliODI4YzExYmJjMGYz
MzFhZWVmYzE5MS4uZmE4M2ZkYzkyYTFmZDU1N2QyZDljYTYwMmU2NGE2MWI5MzJhMzE2YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dApAQCAtNjMxLDkgKzYzMSwxMyBAQCBXZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJp
dmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAog
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3ND
b25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1By
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2VpdmVyLmNw
cAorUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAogU2VydmljZVdvcmtlckZldGNoVGFza01lc3NhZ2VSZWNlaXZlci5j
cHAKIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU3Nzhi
YTU4NzIzMmM2ZTZhNzgyMjQ2YjljN2NiMzIwYWU4ZmNjZWEuLmQzMWIzM2Q3YzI5MWU1MmNmODc2
NzQ4ZmFlMWExNDI3NDBlMGVkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzk0Myw4ICszOTQzLDI2IEBACiAJCTcxQTY3NkE0MjJD
NjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
Lmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNo
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3Mv
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNl
RXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5OTIz
QUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyog
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYyM0FENEYzMzAwQkRB
RkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0
MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFj
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAv
KiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyog
UmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVt
b3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVD
MkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyog
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTYzNzIsNiArNjM5MCw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3
MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcy
MTk4ODIzQjYxMjYxMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3NTJDRDkw
MEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1
MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02Mzg4LDYgKzY0
MDcsNyBAQAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5
RkIyMDYyMzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4
OEU2NUIgLyogbWVkaWEgKi8sCisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRl
cmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAq
LywKIAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCAqLywKQEAgLTc3NDksNiArNzc2OSwzOCBAQAogCQkJbmFtZSA9IG1h
YzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMUYxRTk3MjNBRDJGNUMw
MEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5jcHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcg
LyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2NDIz
QzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJ
CQkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQ
cm94eS5oICovLAorCQkJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQjIzQjRDN0E5MDBG
NjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJ
KTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRUE5
MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovLAorCQkJ
CTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywK
KwkJCQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICov
LAorCQkJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICov
LAorCQkJCTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNz
YWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQz
IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU4MjNCMzg0MjEw
MEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzJENUMyRUUyM0I1
NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwor
CQl9OwogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRl
MzIzMDc3MGYyNDM2MWI2YWJhYThlMTdlNGQyZTVhYzAuLjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEz
ODA1NTBhYWE0Zjk0ZDhlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAot
dm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkK
LXsKLX0KLQotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5z
dXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8q
IGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2Vy
TWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKICAgICAgICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRS
ZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFVTRShM
SUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNz
KCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3Nh
Z2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30K
KworYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJl
Y2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBs
eUVuY29kZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52
YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6
U3RyaW5nUmVmZXJlbmNlKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRl
eCAzMWM2MTA0NjY5ZjJmMDJmZmE0NDBmZWI4ODA5MjZjNzRhZTI2YWNmLi42ZDFiODNkZTU4MzZh
ZmFlMjFhZmMzNGY1OGEyMmU1ZDZkMzIzYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGlj
OgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6
TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3Nh
Z2VSZWNlaXZlck1hcDsgfQogCiBwcml2YXRlOgogICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uKElQ
Qzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7CkBAIC01MywxMCArNTUsMTUgQEAgcHJpdmF0ZToK
ICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpD
b25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZl
ck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAorICAg
IGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwor
ICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNvbm5l
Y3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJ
UEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1h
cCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4
NGNlOWQ2NGIzMC4uNTdmZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3Nh
Z2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIyYmJkZDg2MzQwNTIwNWFkYTdlZjNjYzczODQ2MDE5ZmIxOTkzYjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGUg
eyB9OwordXNpbmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVy
PEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9J
bWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2VhZjk0NGJhMzhmMGE5OTRhNWJl
NTI0MTk1OWY0YWM4OGE1OTIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0w
LDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVm
ZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gT2Jq
ZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0Y2U4MGY3YjFhNmVj
YmM4MmJlNDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKQEAg
LTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgi
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBSZWdp
c3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0
aW9uLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3Nh
Z2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0
ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01v
ZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXI6
On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEg
TWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVj
ZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1v
dmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUlt
YWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0
ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVj
dGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0
Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0
aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJl
bW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8SVBD
OjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rp
b24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJ
UEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7
Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sK
KyAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9y
ICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0ZWQo
KSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZCgpOworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgaXNQ
ZW5kaW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNoSWRl
bnRpZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZp
ZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1f
cmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVt
b3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRlbnRp
ZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5TGlz
dCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAg
IGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42YjU2ZTMxZDBjYWYyMDZlZTUwNmM5Nzk2OTA1Yjc4NDBhNDliOGFi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVz
c2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVz
c2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6
CisgICAgflJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFn
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KCk7CisgICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9
CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAg
ICB2b2lkIHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7ICAg
ICAgICAKKyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdl
QnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9Owor
ICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAg
ICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOwor
ICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdl
cy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hZjg3NzU1N2MwYWE4YzhhOTA1MDRhMTM1ODBkYTU5MWFhNWJmYzVk
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwK
KyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291bnRlZCB7
CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6RmxvYXRTaXplIGxv
Z2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2Vu
ZFJpZ2h0KQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTU3MWM3YWQ4MDRjMmM0MWZlZDE2Y2IxMDZjNjZkMDlmNzQwMzUxZQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw4NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxC
YWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBl
PjsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAo
QmFja2VuZFR5cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUp
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdN
b2RlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQor
ICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBt
X2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVV
cGRhdGVkQmFja2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOworICAgIH0K
KworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8m
IGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCgp
OworICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRpc3BsYXlM
aXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29u
dGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTczMmE1NWIwYjJlYjc4NDIzN2U4MmViODUxYjBiOTRi
OTI3NzlmNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwz
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZm
ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxh
dGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkYzk2NDllN2VlYTBhMWIwNjc1Y2RiZjgx
ODY3ZTRjZjdhYzJkYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZCgpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCgpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3Jl
YXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9
CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sK
KyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2Vu
ZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0Jh
Y2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5l
Y3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVBy
b2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVy
ID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVu
ZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBp
bWFnZUJ1ZmZlciA9IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJl
bmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmJlOWRjYmQ2MGYzOTU4Nzdm
NDhlNTE3MTg1MDlkOWQxZjQ0YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRl
cmluZ0JhY2tlbmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQKKyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kCisgICAg
LCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdC
YWNrZW5kPiBjcmVhdGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisKKyAg
ICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNr
ZW5kCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFn
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNv
cmU6Okhvc3RXaW5kb3cqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKCk7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgp
IH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDQ2NWZiOGM2Zjc3ZjdmZGUzOGY2OGNiYjA3NTI0NmM5OTRkYjFkNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciA9IE9iamVjdElk
ZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlPjsKKworfQorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3Mu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNz
LmNwcAppbmRleCA0NmQxMTk4NzcyYzUxYjhhZDkwZWY4YTE3MTMyMWZmY2UyOTBmY2Y5Li5iMDI5
MjFlMDYxYTYwZTMzNTA4ODdlN2IwODkzMjRlYWI4ZWEzZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKQEAg
LTQyLDYgKzQyLDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCiBzdGF0aWMgd2VicnRjOjpXZWJLaXRWaWRlb0RlY29kZXIgY3JlYXRlVmlkZW9E
ZWNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCkKIHsKICAgICBpZiAo
Zm9ybWF0Lm5hbWUgIT0gIkgyNjQiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3
NWQ3YjhjYzEwZmZhMDA4MDNkNDgyMTczYmU1YTM1NThhLi40ODFmYWFhYWNhZDIwZDI2MzllODVk
MTY1NjNiZWIyODcyZTAwZGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMzksNiArMzks
NyBAQAogI2luY2x1ZGUgIk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJQYWdlQmFu
bmVyLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlVz
ZXJEYXRhLmgiCiAjaW5jbHVkZSAiV2ViQ29sb3JDaG9vc2VyLmgiCiAjaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCkBAIC04ODEsMTUgKzg4MiwyMiBAQCBHcmFwaGljc0xheWVyRmFj
dG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAK
ICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQ
dHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlS
ZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAg
aWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJl
dHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNv
bnN0Cit7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSgpOwogI2VuZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290
R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCmluZGV4IGZkYTMzOGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFmNjc5NGVkMWMyY2QuLjRk
ZWRmZWU3ODQxMTY1ZTU3N2Q5NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKQEAgLTIzMSw2ICsyMzEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQ
bGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkg
Y29uc3QgZmluYWw7CisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9z
aXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5t
bQppbmRleCBlZjAzNTAzNDJiYjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEw
NjliNTdmYmY2NTk0ODg3NTQxMjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5tbQpAQCAtMjAyLDcgKzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0
TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3Qs
IGFuZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUg
d2l0aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmNWE2YjA5NjUzYzFk
NDNjMzI2MjEyYzYwNDE5YmZkNGFkYjViM2U4Li5iZDNhYThjOGNlNjZkMWRlZWY0OTVlOTQ4ZWNk
OGNiMjFlZjFkNjE4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMDcgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
Y2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0
ZWQudHh0OgorCiAyMDIwLTAxLTA3ICBUcnVpdHQgU2F2ZWxsICA8dHNhdmVsbEBhcHBsZS5jb20+
CiAKICAgICAgICAgQ29ycmVjdCBleHBlY3RhdGlvbnMgbWFkZSBpbiByMjU0MTM0LCByMjU0MTM1
LCBhbmQgcjI1NDEzNgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZh
cy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYx
NDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1
MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxh
eS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFz
LWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAg
KHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAo
ZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tl
LXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25v
cmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUg
NTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387072</attachid>
            <date>2020-01-07 21:40:49 -0800</date>
            <delta_ts>2020-01-08 17:37:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200107214048.patch</filename>
            <type>text/plain</type>
            <size>363944</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkwMjhlY2U1ZGZlM2Zi
ODMwYmQwNWQ1OGI0NGIyNmRlZGVjZGU3YS4uMWExMzQzZjFhN2RhYjFhOWVkYzJhNGU5M2Y3ZWQ3
ZDUwMzdkZDNjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4OCBAQAorMjAyMC0wMS0wNyAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5k
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgIFRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgaGFzIG5vdCBiZWVuIHJlLWZhY3RvcmVkIGZvciBDYWlybyBhbmQgRDJEIHBvcnRz
CisgICAgICAgIHlldC4gU28gdGhlIGJ1aWxkIHdpbGwgZmFpbCBvbiB0aGVzZSBwb3J0cy4KKwor
ICAgICAgICAqIE1vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0
YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlZGVkKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1VzZXJNZWRpYUNsaWVudC5oOgorICAgICAg
ICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlh
bGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFs
aXplcjo6cmVhZEltYWdlQml0bWFwKToKKyAgICAgICAgKiBjc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZSk6Cisg
ICAgICAgICogaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UgY29uc3QpOgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OmNyZWF0ZUNvbnRleHQyZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0ltYWdlQml0bWFwLmNwcDoKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1h
cCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVm
ZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5
TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
OgorICAgICAgICAqIGh0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNjZWxl
cmF0ZWQgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRU
cmFja1JlcHJlc2VudGF0aW9uSW1hZ2UpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogcGFnZS9DaHJvbWUuaDoKKyAgICAgICAgKiBwYWdlL0Nocm9tZUNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNv
bnN0KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXApOgorICAgICAgICAqIHBhZ2UvUGFnZUNv
bnNvbGVDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IFJlbmFtZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpyZW5kZXJpbmdNb2RlIGNvbnN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0
VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0IGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcpOgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjppbnRlcm5hbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmxvZ2ljYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmxvZ2ljYWxTaXplIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6aW50ZXJuYWxTaXplIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cmVzb2x1dGlvblNj
YWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29sb3JT
cGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJhc2VU
cmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpt
ZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
ZXh0ZXJuYWxNZW1vcnlDb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpQaHlzaWNhbEltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JhdGNoQnVmZmVy
OjpnZXRTY3JhdGNoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdS
ZWN0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAg
ICAgIChXZWJDb3JlOjpjb3B5SW1hZ2VQaXhlbHNTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxl
cmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmJ5dGVz
UGVyUm93IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRh
VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6RHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpp
bWFnZUJ1ZmZlclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlV
bm11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNm
b3Jtcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNh
bGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFw
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29u
dGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VN
YXNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFw
cGx5UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAy
MDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1OWI4Mzcy
ZTE5OTkwOGM0ZGRkYTcyMmYxZGI4ZDk2M2ZhODY2ZWQ0Li4wYzdmZDcyYjFjMjMwMmZmNjhmYjRm
YTdhZTU0ZGM4NWRjZTA1YzZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2IEBACisyMDIwLTAxLTA3
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAg
SW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAg
ICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAo
V2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IENv
cGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
bGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBj
b25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAg
ICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjpSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5Ojp+UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2Vz
Q29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToK
KyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1l
c3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgor
CiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCmluZGV4IGM3NGVmYTlmNzQwM2U5NzYyOGRlMTRhODM5YWUzMzgyNWNhZGYzZjUu
LjRlMDRiYzkzYmY5ZDUxOGIwMzcxYjBhZTAwY2VhOGEyOWE3Y2QxODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0wNyAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52
YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAg
ICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2Vydmlj
ZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA3ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0MTMyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggNDY2MTljNjVkNmIzYzNkODFmZjRjMmU1MDA1MjE2YWE0OTYy
ZWMxNC4uN2RmMmU3ZmRkY2I3YWU2OGE3YTMyM2E4ZmM1YzliY2ZjMDYzMGQ4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC0xMDEzLDYgKzEwMTMsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXJDbGllbnQu
aAogICAgIHBsYXRmb3JtL2dhbWVwYWQvUGxhdGZvcm1HYW1lcGFkLmgKIAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0FOR0xFV2ViS2l0QnJpZGdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9BdWRpb1RyYWNrUHJp
dmF0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMTAyMiw2ICsx
MDIzLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyLmgKQEAgLTEwNzEsNyArMTA3Myw3IEBAIHNldChX
ZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckRhdGEuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VPYnNlcnZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlv
bi5oCkBAIC0xMTAzLDEzICsxMTA1LDE3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JL
X0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtVGltZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
TW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGFiU2l6
ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9D
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCmlu
ZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBkMWNmYjZlODBiMjMxZGQ1NmQ2YjAuLjc0NjVkMGU2YTg2
Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhlN2FhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2Fy
ZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDbGlw
Ym9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2Fu
aXRpemVEYXRhSWZOZWUKIAogICAgICAgICBhdXRvIGJpdG1hcEltYWdlID0gQml0bWFwSW1hZ2U6
OmNyZWF0ZSgpOwogICAgICAgICBiaXRtYXBJbWFnZS0+c2V0RGF0YShXVEZNb3ZlKGJ1ZmZlclRv
U2FuaXRpemUpLCB0cnVlKTsKLSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5zaXplKCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVy
KSB7CiAgICAgICAgICAgICBtX2RhdGEgPSB7IG51bGxTdHJpbmcoKSB9OwogICAgICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFr
ZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjkyN2Nj
OTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZC4uNWU1NDI2YzExNGQzYWNmNTBiNDcxOGJj
Y2Y0NmEzN2MyY2NhZjk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBA
IC0xMzIsOCArMTMyLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNl
UG9vbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNw
cAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsx
NzcsOSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4
IGMwM2NlNmI1MTMxODIxYTAxY2M3ZDY2NTNkMTY5MTkxZGJiNzlhODEuLjBiMmJjY2M1YjU2NjYw
MzU0NTIzN2JkNWFjMDM1YWMxMWI0ZDJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBA
IC0yODksOCArMjg5LDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SU9TdXJmYWNlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENH
LmNwcApAQCAtNTI1LDcgKzUyNyw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJ
bWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dAppbmRleCA2MGJiYmZkNDZlZTg3OTY4ZmQyYzFlZmE1ZmY3N2I3ZWYwYWM0ZDY4Li41ZmYxZmI1
YjdjNWY3ZjhiMzI1NDM4YTQyNWQ2MjQ3NjY0ZjFhNmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2
OCw2ICsxODY4LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmNwcApAQCAtMTg4Nyw2ICsxODg4LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0Cmlu
ZGV4IGU0NTNkODkwOTdlNjg2YjJjMzM1MmJhZDY2ZWU3MTIzNDdjMTY2YjUuLjRmMDNlYzIzZDhj
NDBmYjk2YTJlNTc3MDFlMzY2YWIwMTRjZWNmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApA
QCAtMjg4LDggKzI4OCw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlYzQwODRkOTg0
NThjMzUzMjQyNWJjOWVlZjc1MzdmNTA2MzViMzUwLi4yNDkxZTJlOGE2YzA4YWMyN2QyMTNmYzdj
MDI5M2I0Y2ZlODkxYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkw
QjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8q
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMxMUU5MDAw
OTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIy
OEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQw
RSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJE
OUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRGRTAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTND
QTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwogCQkyNEQ5
MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYx
MDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjlB
MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1
IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC0yMTMzLDEwICsyMTMxLDIxIEBA
CiAJCTcyMTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjFGMUVBNzIzQUQ1MEEx
MDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0Mg
LyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIElt
YWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjMyM0FDNDkzRTAw
QTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2MzMgLyogSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjM4MjZBNjIzQzFG
MTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzgyNkMyMjNDNTZGNzkwMDQ5RjdGOSAvKiBBbHBo
YVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIzMDBG
NUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdGMDBB
OTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRF
RTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFEQzdG
MjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCMDk5MDEyM0MwOTIzQzAw
NzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
QkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjAyM0FDMkI3
NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJC
RTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjcyM0FDQjNFMDAw
QTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhGNDcz
RjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8qIFRp
bWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMwQUMg
LyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87IH07
CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcyRDAw
N0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC02NTQwLDkgKzY1NDksNiBAQAog
CQkyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnRSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjQwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9u
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXZlbnRSZWdp
b24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1MDAwMDlE
MEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyOTJC
MjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1
ZmZlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjgwMTM1MzY0RkUwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
NDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyNEQ5MTI4RjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERl
ZkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdB
bHRHbHlwaERlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEQ5
MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1OTgsOCArOTYwNCwxMSBAQAogCQk3MUVGQ0VE
RTIwMkIzOUM3MDBEN0M0MTEgLyogSlNBbmltYXRpb25FZmZlY3RDdXN0b20uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBbmltYXRpb25FZmZlY3RDdXN0b20uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5MjJDQzcg
LyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBh
dGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdl
QnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJG
RjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1h
dGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0
NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgyNkE2
MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
cmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QzEyM0M1NjU4
NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBwYXRoID0gLi4vQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMy
OTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXgu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVY
VEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjIwLDcgKzk2MjksMjAgQEAKIAkJ
NzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAw
QTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIw
NEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMy
RTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJF
OTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkwNEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRoLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjY4NCw3ICsxMjcwNiw2IEBACiAJCUIy
QTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlw
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8q
IEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAw
OTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9u
dEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0
MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0Zv
bnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NjgzLDYgKzE2
NzA0LDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0LmggKi8sCisJCQkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyog
RGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyog
RGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8sCkBAIC0yNDg4MCw2ICsyNDkwMiw3IEBACiAJCUIy
NzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCisJCQkJNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29s
b3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRD
Ry5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNw
cCAqLywKQEAgLTI0ODg5LDkgKzI0OTEyLDEyIEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAwN0Yy
M0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdC
RTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIw
MEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIy
QTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjky
QjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIy
QkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcy
QkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJ
CQkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8s
CisJCQkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JBMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMy
MTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNE
M0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJ
CQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAg
LTI0OTg3LDYgKzI1MDEzLDcgQEAKIAkJCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3Vz
dG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNo
QXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRp
b25zLmggKi8sCisJCQkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJl
ZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8q
IERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0yNTA3OCw3ICsyNTEwNSw4
IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmgg
Ki8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywK
IAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQky
MkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzIw
MjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJ
NzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJ
CUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNE
MTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2
MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTEzNSw2ICsyNTE2
Myw4IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAq
LywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJ
QThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNGRTIz
QUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDIz
MjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCiAJCQkJMDU2MkY5
NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5
REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJ
MDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0y
NTE0NCw2ICsyNTE3NCw5IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lv
bi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBs
ZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2Ft
cGxlLmggKi8sCisJCQkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tl
bmQuY3BwICovLAorCQkJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmggKi8sCisJCQkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUu
aCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICov
LAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJ
CTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKQEAgLTI4OTg1
LDYgKzI5MDE4LDcgQEAKIAkJCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmll
d1NpemVPck5vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0
IC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCQjVDODgxRDVENkY0
NTAwNUE3MUY0IC8qIEFsbERlc2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2
ZVRleHRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhD
MiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdC
MkRCMzE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4g
SGVhZGVycyAqLywKQEAgLTI5Njc5LDYgKzI5NzEzLDggQEAKIAkJCQkxMTJGQjM1MjIzOUMyM0M0
MDA4NzA1NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3
RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFNUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1
MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1
RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMzAyODcsOCArMzAzMjMsMTAgQEAKIAkJCQk3Qzc5MDNCMzFG
ODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQw
MDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUz
NjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJC
RDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYz
MyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIx
RjFFQTcyM0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3MDIy
MiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMTc1Nyw2ICszMTc5NSw3IEBACiAJCQkJQTU1NEI1RjMxRTM4Mzkz
QTAwMUQ0RTAzIC8qIFBlcmZvcm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkQ1ODFGQjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDlENURDMkUwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3Bl
cmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyog
UGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURCQzFCNTYyMzQ3QjNE
MjAwQjkwMUFGIC8qIFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUQyQzgyQjcyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjggLyogUGljdHVyZUlu
UGljdHVyZVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc3Niw2ICszMTgxNSw3IEBACiAJ
CQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1F
eHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2
OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYxMjNDMTk1
QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwNTYyRjk2MTE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRjU0NEY3ODkxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3Jt
TG9jYWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTUzLDYgKzMxOTkzLDggQEAKIAkJCQlCQ0VB
NDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTA4RjJGMDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNv
dXJjZVN0eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVDMkVBMjNCNEMwRjgwMEY2
N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZBODIz
QzFGNThCMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2
QzdDNEIyMjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDE4MTc1MTVlMWNjNzA5MGM3ZTU5
YTBjYmQyNTNmZjcyNjE3NDRjNzMuLmY1MDFjYTIzYTczOTVmMWU1YjIxYzgxYjA0ZGRiMDE5M2I3
YTJmMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcApAQCAtOTIxLDggKzkyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6
ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZm
ZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53
aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxT
aXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkp
KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMjc4NSwxMyArMjc4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgVW5hY2NlbGVyYXRl
ZCwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBpZiAoIWJ1ZmZl
cikgewogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNpemUobG9naWNhbFdpZHRo
LCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWln
aHQpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgSW50U2l6ZShsb2dpY2Fs
V2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIEludFBvaW50KCkpOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xl
YW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGU1YjhhYjQ2OWNlYzRiYzA1OGM0
MzdkMTk5NTA0MGI1MDIxYzc0MzEuLjJmYTUzYWEzOGMxZmNjMTE3MzU2YWY5ZjE1NWQwMTVkNDQz
N2YwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAg
LTExNiw3ICsxMTYsNyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdl
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNm
b3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
YXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsK
KyAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuICZJ
bWFnZTo6bnVsbEltYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZh
cy5jcHAKaW5kZXggZjRiNzcwN2U5N2E4ZmU1MWY4ZTI1Nzc1OGFkZTRiNmRkZmY1MDJlNS4uNjVk
NDY0ZmRkN2Q1ODhlYzczMTYxNmI3NDAzN2E4NDI4ZWVmMzFmMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgSW1hZ2UqIEN1c3Rv
bVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFo
ZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBudWxscHRyKTsKKyAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1fY29w
aWVkQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTAyLDcgKzEwMiw3IEBA
IEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgICAgICBt
X2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgbV9kZXN0aW5h
dGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEltYWdlID0gbV9j
b3BpZWRCdWZmZXItPmNvcHlJbWFnZShtX2NvcGllZEJ1ZmZlci0+ZmFzdENvcHlJbWFnZU1vZGUo
KSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGll
ZEJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRp
b246Olllcyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMjNkOWIzNGU4NDhmNmQwMWQz
NGE5ZGFmZmJhMzA1MGZjN2E3MTMxNi4uOTA5MzNlMjNhYzA4MTgwMzNjNzZmYzNlMjgyMTE5MTgw
MTQ4NmM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNh
bnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBA
IC02MCw2ICs2MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNp
bmNsdWRlICJDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oIgogI2luY2x1ZGUgIk1lZGlh
U3RyZWFtLmgiCkBAIC0zNDUsOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBI
VE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkKIAog
ICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBk
b2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJl
IGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUg
Q2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKQEAgLTgx
OCwzOSArODIwLDI3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0
VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCiB7Ci0g
ICAgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5n
KQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0g
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFj
a3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogewotICAg
IGlmICh0cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXk7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwogfQogCiBTdHJp
bmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1Rl
eHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0K
KyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAg
IHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlzcGxheUxpc3QoKS5hc1RleHQo
ZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVt
ZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxh
Z3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250
ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAg
aWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpICYmIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpKQorICAgICAgICByZXR1cm4gYnVm
ZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCktPmFzVGV4dChmbGFn
cyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBAIC04ODUsMTEgKzg3NSwyNyBAQCB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3
aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gQWNjZWxlcmF0ZWQg
OiBVbmFjY2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3VtZW50KCkudmll
dygpICYmIGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52aWV3KCktPnJv
b3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIGEg
bmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wg
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9y
KGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworICAg
IAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRyYXdpbmcgb24g
Y2FudmFzLgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKworICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc1JlbW90ZURyYXdpbmcpCisgICAg
ICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdN
b2RlOjpSZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlJlbW90ZTsKKyAgICBlbHNl
IGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hv
dWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVy
YXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAgICAgICAgcmVu
ZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldEltYWdl
QnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xv
clNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVy
KCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgp
LT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsK
KwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQo
KSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYg
YWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2MDUwNjMyNi4u
NDIxMzRhMTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBtX3VzZXNEaXNw
bGF5TGlzdERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxz
ZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29u
dGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3MzlhMWY1YzNi
ZTBlZTE3MWYzNGY5NjNlMDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4N2E5MDJmZTY5
MmIzMDk5NTRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTYxLDkgKzYx
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElt
YWdlQml0bWFwKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZm
ZXJSZW5kZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZm
ZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3Rh
dGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7Citz
dGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDsKICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpj
cmVhdGUoSW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3Bw
CmluZGV4IDA5MWEzNjk5MmE5YzM1ZjEzMGY4NWRjYzgxOGY5NTk3ZTI3MmRlY2YuLjRlYWE1OGRi
MWIwNTMxYzNiNzdjOGY4YWI5OTRjOThlODExZDAxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
SW1hZ2VCaXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAg
ICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAK
ICAgICAgICAgaWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVy
biB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5h
Y2NlbGVyYXRlZCksIHRydWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFw
OjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCksIHRydWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFn
ZUJ1ZmZlcigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lk
IE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lk
dGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5D
YW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigp
IGNvbnN0CiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg5
ZDhmNDI0M2IyYjkyZGZiY2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLjViMWIwN2VmNzczODQzMzYw
OGU4ODJmYjllM2JhOWEyYjFhNGM5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xODA2
LDcgKzE4MDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmNhbGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0
aW5nQnVmZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0dXJuIEltYWdl
QnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IEFjY2Vs
ZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUo
YnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZm
ZXIsIGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAt
MTk5MCw3ICsxOTkwLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJu
IFJlZlB0cjxDYW52YXNQYXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShCaXRtYXBJbWFn
ZTo6Y3JlYXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2lu
Q2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250
ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250
ZXh0KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTIwNzUsMjEgKzIwNzUsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheQog
ICAgICAgICBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5yZW1vdmUodGhpcyk7CiB9CiAKLVN0cmlu
ZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5
TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlY29yZGluZ0Nv
bnRleHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcmVjb3JkaW5nQ29udGV4
dC0+ZGlzcGxheUxpc3QuYXNUZXh0KGZsYWdzKTsKLX0KLQotU3RyaW5nIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1Rl
eHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBhdXRvKiBkaXNwbGF5TGlzdCA9IGNvbnRleHRE
aXNwbGF5TGlzdE1hcCgpLmdldCh0aGlzKTsKLSAgICBpZiAoIWRpc3BsYXlMaXN0KQotICAgICAg
ICByZXR1cm4geyB9OwotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+YXNUZXh0KGZsYWdzKTsKLX0K
LQogY29uc3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlLCAxPiYg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygpCiB7CiAgICAgcmVhbGl6
ZVNhdmVzKCk7CkBAIC0yMTU5LDEwICsyMTQ0LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxv
CiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQg
c2gpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKKyAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhKENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIHN4LCBzeSwgc3csIHNoKTsKIH0KIAotRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKK0V4Y2Vw
dGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpn
ZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jh
c2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJp
bmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0
IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50
ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw3ICsyMTgxLDcgQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6Omdl
dEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0
ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFy
cmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVs
bHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdl
RGF0YVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOwogICAgIGlmICghYnl0ZUFycmF5KSB7CiAgICAg
ICAgIFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdl
LmFwcGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVx
dWVzdGVkIHNpemUgd2FzICIpOwpAQCAtMjIxOCwxMCArMjIwMywxMCBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0
IGR4LCBmbG9hdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdl
RGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBm
bG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewotICAg
IHB1dEltYWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0s
IGR4LCBkeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKKyAgICBw
dXRJbWFnZURhdGEoZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgZHgsIGR5LCBkaXJ0
eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwogfQogCi12b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdl
QnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9h
dCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0
IGRpcnR5SGVpZ2h0KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRp
cnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZmZXIg
PSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcgKzIy
MzAsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJ
bWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNldChz
dGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3Qg
ZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5tb3Zl
KGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCks
IGNvb3JkaW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVt
ID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOworICAg
IAorICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVT
eXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCA/IGJ1ZmZlci0+bG9naWNhbFNpemUo
KSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RSZWN0KTsKQEAg
LTIyNTMsNyArMjIzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgc291cmNlUmVj
dC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpKTsK
IAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0
ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIElu
dFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgYnVmZmVyLT5w
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqZGF0
YS5kYXRhKCksIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVj
dCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOwogCiAgICAgZGlkRHJh
dyhkZXN0UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0s
IHNoYWRvdyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJl
ODg5MmJmNDk4YWU2NzIyMTg3ZjFiZWU5MWQuLjk2NDAwZDFhZjUwMGQ1OGUxZGQ5YmQxMTE3NDgy
MTQxYTcyYmI1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTIyMiw5ICsyMjIsNiBAQCBwdWJs
aWM6CiAgICAgYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7IH0KICAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KGJvb2wpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0
OjpBc1RleHRGbGFncykgY29uc3Q7Ci0gICAgU3RyaW5nIHJlcGxheURpc3BsYXlMaXN0QXNUZXh0
KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0KICAgICB1c2luZyBEaXJlY3Rpb24g
PSBDYW52YXNEaXJlY3Rpb247CiAKICAgICBjbGFzcyBGb250UHJveHkgOiBwdWJsaWMgRm9udFNl
bGVjdG9yQ2xpZW50IHsKQEAgLTM3MSw4ICszNjgsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1w
bGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAg
ICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBz
aCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6
OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9h
dCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKKyAgICBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKKyAgICB2b2lk
IHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9h
dCBkaXJ0eUhlaWdodCk7CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlk
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMTRlYTM3ZDhkN2VhZmIwMWI1YzRjZTE5ZWJl
NzZjNTE4Y2ZjZDRhOC4uYjUxYjRkYmYxM2VlNTA2ZWI5NDk4YzQzZWY0NWM5NDRkZDczZTBhNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQpOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRl
cmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRl
cmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVu
ZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBS
ZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOwogI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQ+IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNh
bnZhcywgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKQEAg
LTY5LDcgKzY5LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dDo6Y2FudmFzKCkgY29uc3QKIAogYm9vbCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6
OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2Rl
ID09IEFjY2VsZXJhdGVkOworICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2RlID09IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkOwogfQogCiB2b2lkIEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dDo6c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYXApCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwCmluZGV4IDBjMmZjODRiZmMwNmJkZjRkOGRjMzZjNzVkOWI5OWI2ZGJmZDIz
ZTUuLjY5ZDM0MTExZWJhNTdmNDE0OGVhYzhlNmJiNTA3MGQ3MTRjMzQ0ODggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCkBAIC0zOTM5LDcgKzM5MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRAogICAg
ICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29w
eUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAg
IHJldHVybiB7IH07CkBAIC00MDYxLDcgKzQwNjEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RAogICAgICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1Yklt
YWdlLCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1h
dCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwg
dHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwg
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAg
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZp
ZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDUwMCw3
ICs0NTAwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgICAgICYmIHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAgICAgIGF1dG8g
dGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0
LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9y
bWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAgICAg
ICAgIGlmIChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0
YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXIt
PmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5h
bGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewogICAg
ICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSwgdHlwZSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtNDUw
OCw3ICs0NTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2Ug
PSBidWZmZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Cisg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRleEltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdl
dCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQ1Nzcs
NyArNDU3Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50CiAgICAgICAgICAgICBhdXRvIHRl
eHR1cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwg
bGV2ZWwpOwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1h
dCkgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKICAgICAgICAgICAgICAg
ICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQu
Z2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUt
Pm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3Vu
cGFja0ZsaXBZKSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8o
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5o
ZWlnaHQoKSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
ICAgICAgICAgfQpAQCAtNDYyMiw3ICs0NjIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
ICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRl
eEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ2NDcsNyArNDY0Nyw3IEBA
IFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1
ZmZlcihJbWFnZSYgaW1hZ2UsIGludCB3CiAgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2lu
dCgpLCBpbWFnZS5zaXplKCkpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCks
IHNpemUpOwogICAgIGJ1Zi0+Y29udGV4dCgpLmRyYXdJbWFnZShpbWFnZSwgZGVzdFJlY3QsIHNy
Y1JlY3QpOwotICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTYzNDQsNyArNjM0NCw3IEBAIEltYWdl
QnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpp
bWFnZUJ1ZmZlcihjb25zdCBJCiAgICAgfQogCiAgICAgLy8gRklYTUUgKDE0OTQyMyk6IFNob3Vs
ZCB0aGlzIEltYWdlQnVmZmVyIGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkPwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0
ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEFTU0VS
VChtX2J1ZmZlcnMuc2l6ZSgpID4gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggMGNiZDBhM2NjZTAzOTI5NWI0OTI1
Y2UzMWEwNTRlMWY2OTEwZDkzMC4uNmVhNzkyMTRmOGE2ZTAwNWIwYmUyNDQ5YTJkZDY3Mjg4ZmMz
YWMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJv
bEVsZW1lbnRzLmNwcApAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUmVmUHRyPEltYWdlPiBNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGkKICAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXIt
PnNpemUoKSk7CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBidWZmZXIgc2hvdWxkIG5v
dCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXpl
KCksIFVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3Rvcikp
OwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuY3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZhMWZiZmE3ZWZmZDdhZjUu
LjYzN2U3N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgyMTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKICAgICBtX2NsaWVu
dC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsK
IH0KIAorUmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkg
Y29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJp
bmdCYWNrZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVy
biBtX3JlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRmb3JtRGlzcGxheUlEIENocm9t
ZTo6ZGlzcGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5SUQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWUuaAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2NjhkNDQ3MGVjNTEzNjFhZjQ5Li40
NjhjMTcwMDhhYWZhNDdmYWEyMzdjNzRmZjQ4ZjQwMjMwZGRiYWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1
cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KGJvb2wpIG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5n
QmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRp
b24oKSBvdmVycmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNv
bnN0IG92ZXJyaWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1
cHByZXNzZWQgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggNjI2MTdmNzhmM2Uy
ZjA0NzQ4YWE1OGFkYWViOGZhMzBiZDcxMmFkNC4uYzk5ZDM2YWZmYWE4NjVhOWU2YTk1ZGM1MzVi
NDg3NDhjN2VlM2UxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0
Myw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFi
bGVEb21haW4uaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUg
IlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBA
IC0zMDMsNiArMzA0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZy
ZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlE
KSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBo
aWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0
YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciop
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKaW5kZXggMGE0
NGMyZmExYTA5NDk3Y2ZkZjU1ODg4MzJmZmRmZjEwMjMzMzBlMS4uZTI0ZDkyZTZmM2U2MWQzOGE5
YjI0NDg1ZjRkMTNkZTUwZTUzM2EyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVNuYXBzaG90dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBz
aG90dGluZy5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IHNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZQog
ICAgIGlmIChvcHRpb25zICYgU25hcHNob3RPcHRpb25zUGFpbnRXaXRoSW50ZWdyYWxTY2FsZUZh
Y3RvcikKICAgICAgICAgc2NhbGVGYWN0b3IgPSBjZWlsZihzY2FsZUZhY3Rvcik7CiAKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
aW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFn
ZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7
CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJ1ZmZlci0+
Y29udGV4dCgpLnRyYW5zbGF0ZSgtaW1hZ2VSZWN0LngoKSwgLWltYWdlUmVjdC55KCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1MzMwOTE2MTlk
YzY0M2Y4NzI5MDljYjcxZjc4MjhlZjg1YmJjLi4yMTA3YTllMWU5OWNmMzUxZDllNjE2NjgwNWM0
YTU2MzNhZTQ3ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xl
Q2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNw
cApAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3Qo
SlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAgICAg
ICAgICAgYXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIElu
dFJlY3Qgc291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAg
ICAgICAgaW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNlUmVj
dCwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRh
LT5kYXRhKCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBk
YXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxv
cHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKaW5kZXggMmNmZWNhZGMyNGQ5
ODJhODYxNjM3NGI3NmEwZTRmYjBmZmY3YTlkNC4uZjVmMjE3Y2NkODQwNjA4MDAyNTVjMjAzZDIy
MTdjYWVjZTBjZTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdp
bmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE0
ICsyMywxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBIb3N0V2luZG93X2gK
LSNkZWZpbmUgSG9zdFdpbmRvd19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldpZGdldC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsKK2NsYXNzIFJlbmRlcmlu
Z0JhY2tlbmQ7CiAKIGNsYXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEhvc3RXaW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY0LDYgKzY0LDggQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zl
cyhib29sKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQoKSBjb25zdCA9IDA7CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxl
QW5pbWF0aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZkMWNhZWY4NTQxZGVlMDYyYmZlMDU0MTZjZGEyZjJhN2Y3OTI2ZTIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAgIFVucHJlbXVs
dGlwbGllZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFhYjQ2ODY3NjhmMWEy
ODJkNTg4MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIgOiBwdWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1
ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVy
PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOwor
ICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tl
bmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDog
QmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwg
RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1
cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNv
bnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNw
bGF5TGlzdChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1ODZkZDRiMmFmOTFmNDU2NTUzNWE3
MDI5MzkyM2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEyZmY4NGMwZTY2NDJmODE4MjcwOTljZTgzN2Uy
ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAjZW5kaWYKICAgICBib29sIGlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZDsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNv
bnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBl
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNw
cAppbmRleCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4NzlkYmQ0OTY5NjRiNDkxYjE4Li4wMGJlMGZl
YTA2MDU1Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMjgsNiArMjgsOCBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAorI2lu
Y2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFi
NzZmMTIuLjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3OGFhMmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgi
CiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIsMTcgKzEyMyw2IEBAIGVudW0gVGV4dEFsaWdu
IHsKICAgICBSaWdodFRleHRBbGlnbgogfTsKIAotZW51bSBSZW5kZXJpbmdNb2RlIHsKLSAgICBV
bmFjY2VsZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlciwgLy8gVXNl
IHBsYWluIG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIHBsYXRmb3JtIEFQSSB0byBhbGxv
Y2F0ZSBiYWNraW5nIHN0b3JlLgotICAgIEFjY2VsZXJhdGVkCi19OwotCi1lbnVtIGNsYXNzIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gewotICAgIFByZW11bHRpcGxpZWQsCi0gICAgVW5wcmVtdWx0
aXBsaWVkCi19OwotCiBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBv
c2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogU3RyaW5nIGJsZW5kTW9kZU5hbWUo
V2ViQ29yZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwg
V2ViQ29yZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMsNyArMTMzLDYgQEAgV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNv
bXBvc2l0ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CiBXRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOwot
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApp
bmRleCAxYTBmODE2ZmRhODAzMDI3OTZhYTNhM2U1OWI2ZGY5MTk5NWQwM2M3Li40ZTJiZTcxYzc0
MWM1NWY1NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENv
cHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzgg
KzI4LDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
IAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNr
ZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGZsb2F0IE1heENs
YW1wZWRMZW5ndGggPSA0MDk2Owotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0g
TWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVy
biBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNy
ZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJ
bWFnZUJ1ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1
Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBz
Y2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRl
eHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICgh
aW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEg
Y29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0
dXJuIGltYWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdl
dENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRv
dywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKHNp
emUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Up
OwogfQotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5
NjsKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGgg
KiBNYXhDbGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGlu
Zyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0xMDUsOTcgKzExMSwxMiBAQCBGbG9hdFJl
Y3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBy
ZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkp
KTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0j
aWYgIShVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6
c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2l6ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBp
ZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQK
LSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0Nv
bG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9y
U3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAg
ICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
LSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNv
bG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0g
ICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJn
YkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0Ip
IHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VS
Z2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsK
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAg
ICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xv
ciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBh
cnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAg
ICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQot
Ci0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0Nv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQ
b2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJh
eSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0
ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7
Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAz
KTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4
X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90
IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4
X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0g
ICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcy
MSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4
ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFy
cmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJl
Y3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNw
ZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJl
IGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAh
VVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBj
b25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0
Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQzNEZW51bSwgUGxhdGZvcm0z
RE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21w
YXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUg
YnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3
ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5p
dC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9y
KCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyAr
MTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlS
ZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUocmVjdC5zaXplKCksIGNvbnRl
eHQpOwogCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZl
cikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3
SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBidWZmZXI7
Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0g
ICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2Fs
ZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2Nh
bGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5n
IHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRl
eHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQot
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0j
aWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJp
bmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UK
LSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNpemUgSW1hZ2VCdWZmZXI6
OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlm
IHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hl
cgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJu
IGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICBpbWFn
ZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24o
KSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIEltYWdlQnVmZmVyOjppc0Nv
bXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIHJldHVybiBhcmVFc3Nl
bnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29udGV4dCgpLnNjYWxl
RmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgp
OwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3Qg
SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9y
eUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5k
IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5k
IGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2Ug
aXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJu
YWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBp
bWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXpl
X3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhj
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9Ci0jZW5kaWYKIAotfQorfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgKaW5kZXggNTMzM2NmNGVjMjI4ZjlkYjM3M2YyNThlNmI5YzdiOWVlNGZj
OGFjMC4uMDM4MmI3NDA0MjQwZjViZjQ4MTZlZDhhZTVmNjY2ZmM1M2UyNmMxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CkBAIC0yNywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlckRhdGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUg
IkludFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBH
cmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwot
Y2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51
bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUg
c3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNr
aW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQot
ZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07Citu
YW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNz
IEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1
ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVm
ZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwg
cmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29s
b3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7
Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2Rl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xv
clNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
LSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGgg
dGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcg
b25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihj
b25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAog
ICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0
LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFu
ZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAg
ICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfklt
YWdlQnVmZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tp
bmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVy
biBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9naWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25T
aXplKEZsb2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25z
dCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFy
ZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9y
IGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBp
bmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0
U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXpl
IGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0
YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0lu
dG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBHaXZlIGhpbnRzIG9uIHRoZSBmYXN0
ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZSBpZiBpdCBzdXBw
b3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZpb3IKLSAgICAvLyBvciByZXR1cm4g
Q29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0gICAgc3RhdGljIEJhY2tpbmdTdG9y
ZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAot
ICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNr
aW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAK
LSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBD
b29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OwotICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGlu
YXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OworICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBm
bHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENs
YW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJ
bnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0pOworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29u
dGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3aW5n
Q29udGV4dCgpIHsgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
SW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3Qo
KSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQot
I2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJl
Y3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIHNpemVfdCBt
ZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAt
MSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0g
ICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUg
dGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3aXRoIHRleHR1cmVz
IHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAg
ICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdD
M0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCk7CisgICAgc3Rh
dGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lu
a0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3Vt
aW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVj
dCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0g
ICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVm
ZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAg
c3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3Rh
dGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBz
Y2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUm
KTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZs
b2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9
IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBt
aWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBz
bWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0
aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENv
bnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkg
Y29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFn
ZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0
UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwot
ICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmly
dHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkg
PSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi0gICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0
dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSA9
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSBJbnRQb2ludCgpLCBDb29yZGlu
YXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgPSAwOwogCi0gICAgaW5saW5l
IHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAg
IGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3Mg
TmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdl
OwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwotCi1wcml2YXRlOgotICAgIElt
YWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBt
X2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhp
cyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12
YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0
dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBj
b25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNw
YWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7
Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Owot
I2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9z
dFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlm
Ci19OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtLCBQbGF0
Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOwogCi0jaWYgVVNF
KENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7Ci0jZW5kaWYKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNp
bmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3ODVjOGU3OGM0MWMzMjY1NWYxMmMyNzIwMjAx
YWVlMDhmMmFmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICBy
ZXR1cm4gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJ
bnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSk7CisgICAgYXV0byBzcmNQaXhlbEFycmF5
ID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
bHVtaW5hbmNlUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAgaWYgKCFzcmNQ
aXhlbEFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVu
Z3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9m
ZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0g
NCkgeworICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0
ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1
aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWlu
dDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1
aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisgICAgICAg
IAorICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAw
LjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0
KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXksIGx1bWlu
YW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lz
dGVtOjpMb2dpY2FsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jY2FlNDM1M2U5N2Q4N2JiMDUyOWE2ZWM0MjdhN2E3NWM5OWUzZTQ3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmgKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMzRC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOwor
CitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJh
bnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29w
eUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9
OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7CisgICAgTm8sCisgICAgWWVzLAor
fTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAgIFJHQkEsCisgICAg
QkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGluYXRlU3lzdGVtIDogdWludDhfdCB7CisgICAg
TG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2Vu
ZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0
OworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGludGVy
bmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9CisgICAgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBD
b2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKwor
ICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBj
b25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9Cisg
ICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1cm4gMDsgfQorCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFn
ZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSA9IDA7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0Nv
bnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KTsKKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2
aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmLCBj
b25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29yZGluYXRlU3lzdGVtKSB7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
QzNEZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICAgICAgOiBt
X2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICAgICAsIG1faW50ZXJuYWxTaXplKGludGVy
bmFsU2l6ZSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisg
ICAgICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworICAgIElu
dFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRTaXplIG1faW50ZXJuYWxTaXplOworICAgIGZs
b2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggZjg5ZWMwZDM2ZmVmYmQxMmFiZTU0M2MzZjIwMzRmNjE1OGIzZDJjZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVT
RShDRykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJE
KQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8p
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZkMTY3YTU3ZTA4NTNkNWUzZmMzODAyN2RkODY0NjgwMDdhMmFlN2QKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbElt
YWdlQnVmZmVyLmgKQEAgLTAsMCArMSwyMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRU
eXBlPgorY2xhc3MgUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7Citw
dWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gUGh5c2ljYWxJ
bWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzdGF0
aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxJbWFnZUJ1ZmZlciwgSW1hZ2VCdWZmZXJUeXBlPjo6
dmFsdWUpOworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICgh
YmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3Zl
KGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8
QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RGTW92ZShiYWNr
ZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcigpID0gZGVmYXVs
dDsKKworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICAg
ICAgcmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hD
b250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAg
ICAgICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYXNlVHJhbnNmb3JtKCkgOiBBZmZp
bmVUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmxvZ2ljYWxTaXpl
KCkgOiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+aW50ZXJuYWxT
aXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPnJlc29s
dXRpb25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPm1lbW9yeUNv
c3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5leHRlcm5hbE1l
bW9yeUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMp
LmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVz
aERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdl
KGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAg
ICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Cisg
ICAgICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
KCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdl
KFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBk
cmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4
dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdD
b250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBo
eXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7
CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50
OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBo
eXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3Qs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURh
dGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29y
ZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxh
dGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2Jq
ZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGJhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVy
ZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9i
YWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjIyNmMxZmFjZGMwZGQ0YjgzNWI3ODVmZTZmMzNiN2U5NTQyMWEzNDAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJF
Q1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNF
KENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjZW5kaWYKKwor
I2lmIFVTRShDRykgJiYgSEFWRShJT1NVUkZBQ0UpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNF
KENHKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZm
ZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8p
Cit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOworI2VuZGlmCisKKyNpZiBVU0UoQ0cpICYmIEhBVkUoSU9TVVJGQUNFKQordXNpbmcgQWNj
ZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDsKKyNlbHNlCit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZv
cm1JbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJ
bWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5n
IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0
ZjAwODYxODVjZjIyODViYmYyNTU4MmY5OTcyMzlmNmU5ZDdlZTcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApA
QCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgi
CisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tl
bmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlx
dWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdpbmRvdyAmJiBob3N0V2lu
ZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVy
aW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNj
ZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2lu
ZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0
ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAg
ICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42N2QzOTIwNDA0Y2Nh
NWNiNGJjMjIzMjc3NWM2NDkwMjliNWNjNTkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOwor
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAg
c3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9z
dFdpbmRvdyogPSBudWxscHRyKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5k
KCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBSZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmJjYzM5ODhmZDY0M2RhNzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2Rl
LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNs
YXNzIFJlbmRlcmluZ01vZGUgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQs
CisgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1v
dGVBY2NlbGVyYXRlZCwKKyAgICBSZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApp
bmRleCA0MDQxYjNmODEwNzY3OGM1NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIy
ZDY3MWY2OGQ1NjVmMTI0NDk0ZWMzMzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6
CiAgICAgICAgIGNsZWFyU2NyYXRjaEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIg
aXMgbm90IHVzZWQgd2l0aCBhY2NlbGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2Ug
YW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwg
MSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRT
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXIuZ2V0KCk7CiAgICAgfQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dC
bHVyOjpkcmF3SW5zZXRTaGFkb3coY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnN0IEludFJlY3QKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxp
bmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93
ZWRSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMs
IGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVy
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJv
cGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1h
Z2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVy
dGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAo
IWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQg
U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYsIGNvbnN0IEZsb2F0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0
aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxS
ZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVBy
b3BlcnRpZXMmIGxheWVySW1hZ2VQcm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2sm
IGRyYXdCdWZmZXIpCiB7Ci0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2Nl
bGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShl
eHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1
cm47CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93
V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1
dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVm
ZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJv
cGVydGllcyk7Ci0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5n
ZXQoKTsKICNlbmRpZgogCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
SW5zZXRTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b24KICNpZiBVU0UoQ0cpCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNp
bmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0
byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVu
YWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAg
ICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBA
IC04ODQsMTIgKzg4NCwxMiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1h
Z2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1
cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0g
ICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShi
bHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBp
ZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5
ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwot
ICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsK
KyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQog
CiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYg
bGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3
IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5z
Zm9ybSk7CiAKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFu
ZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRl
ZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRl
ZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKaW5kZXggNDk2ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVl
NzNkMjA5YS4uNzIyZWVmZmU2YzllNWZkMjg2NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxv
YXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25T
aXplKGRlc3RSZWN0LnNpemUoKSk7CisgICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6
ZSA9IGRlc3RSZWN0LnNpemUoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBi
dWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAzNTZmMTk2NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZi
NzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgot
I2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRl
IDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRl
IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRl
ICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2Nv
Y29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0
dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZp
bmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsK
LURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1z
dGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSkKLXsKLSAgICBmbG9hdCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0
PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7
Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0
b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRlcm5hbFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZs
b2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0aCgpICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXpl
LmhlaWdodCgpICogeU1hZ25pZmljYXRpb24pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXpl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dD
b2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRj
aCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlw
ZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3Bh
Y2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAg
Y2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9T
dXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRl
eHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNv
bG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vs
c2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAg
IEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShz
aXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwg
Y29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0g
ICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1
cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0Lgot
ICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1
cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jl
c29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAv
LyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGgg
PSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxl
ZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAg
Ly8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/
Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNz
aWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXpl
KHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
ID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9k
ZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUu
aGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRo
ID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWln
aHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBv
dmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENo
ZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVk
LCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9k
YXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3
aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkg
PiBtYXhTaXplLmhlaWdodCgpKQotICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7
Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2Vu
ZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcp
IHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9h
dFNpemUgdXNlckJvdW5kcyA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRo
LnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZh
Y2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1
c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewot
ICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29u
dGV4dChob3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAg
ICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5V
U0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQot
ICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9u
IGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAg
aWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VC
dWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9k
YXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIK
LSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZp
cnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJp
dG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAg
ICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEs
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xv
clNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJ
bWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAg
ICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwot
ICAgICAgICB9OwotICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhl
IGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEs
IG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0
ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29u
dGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1h
a2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAg
IGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNs
YXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgp
LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2Vz
cyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhv
c3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6
ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXplKSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNp
emVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNpemUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBp
bnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBt
ZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQs
IGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJl
IGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNh
dXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUg
dG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUg
YXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8v
IEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNl
IHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3Vy
ZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAg
cmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0
KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QK
LXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50
bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0
IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNz
IG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQg
ZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2Fm
ZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0
ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNv
bnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAo
bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3Jh
cGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4
dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBp
bWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFn
ZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8
fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5o
ZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdl
SW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVp
Z2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBj
cmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVm
PiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50
U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9
PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAg
ICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwg
aW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNp
emUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0
U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6
ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJT
cGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNwYWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXpl
LCBpbnRlcm5hbFNpemUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQo
KSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBp
bWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZN
b3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0g
ICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShj
b3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2Fs
U2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXpl
ID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVT
aXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJl
c29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJl
dHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZl
SW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBi
YWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19
Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsK
LSAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdl
UmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAg
IHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVh
dGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0
dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
I2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNh
c2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQo
KSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwot
I2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1h
Z2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jl
c29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZl
ci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1h
Z2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRq
dXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1
dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCks
IGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwot
I2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4
dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3
aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0g
ICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0
UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBk
ZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVm
UHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5n
IGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAg
IGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9
IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VG
b3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29w
eUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4o
ZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNy
Y1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQot
ICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNp
b25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUo
KSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJl
Y3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENv
b3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNp
emUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAg
SW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxl
ZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExv
Z2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJj
ZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBp
bnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAot
ICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQg
aXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAg
ICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBm
b3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRS
ZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJ
KCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7
Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3Jl
U2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21N
SU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgot
Ci0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVk
IFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5
IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBH
SUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3Ry
aW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25z
dCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwot
Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2Uv
cG5nIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJu
IGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5
cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1z
dGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGks
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAg
IGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0
aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9w
ZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpx
dWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhl
IGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAg
ICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAg
ICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25R
dWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5n
ZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVh
dGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGlu
ZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGlt
YWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0
aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAg
IENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1h
Z2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxp
emUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRh
UmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJh
c2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0
YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1p
bWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWlu
dDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRh
R2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17
Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2
ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlw
ZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3Rv
cihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRp
ID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkp
OwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0
KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBj
aGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2su
Ci0gICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJ
bnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0
aXBsaWVkRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVf
dCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhl
aWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxp
ZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGll
ZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJv
dmlkZXIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCku
aGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lw
TGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOwotICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2
ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3Jl
YXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQo
KSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1h
Z2VTaXplSW5Vc2VyU3BhY2UgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkp
OwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgw
LCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5o
ZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNm
RGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAw
KSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5
LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBX
VEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEo
Y29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRp
ID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkp
OwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxh
c3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAg
ICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1
dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBh
bHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2Yg
YmxhY2suCi0gICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNl
LmhlaWdodCgpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBh
Y2l0eShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11
bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9
IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsg
M107Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
YnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsK
LSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7
IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxp
ZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdo
KGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBk
YXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0
YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFk
YXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4
LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBC
eXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBm
YWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBh
ZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAg
IGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRh
LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShj
ZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlm
IChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAg
IHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6
LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAg
ICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAg
ICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQot
Ci1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAg
IGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250
ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44YTNkYzhkMzA3ZDg3NTZjY2ZkMTExNDQwNGUzNWI3ZGRiM2IwNTlmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFw
SW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxl
cmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRT
aXplIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNj
YWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxm
KHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUu
aXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShzY2Fs
ZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1Bl
clJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXpl
LndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5
dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5oZWln
aHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBj
b250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRl
eHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJ
bWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQoreworICAgIGlmIChp
bWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGlu
dGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAs
IGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0
dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJ
bnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7
CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9n
aWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0
KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAg
IEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Cisg
ICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNv
cHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QK
K3sKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdU
Rk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2Nh
bGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVy
bmFsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAg
IGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8g
Q29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2Ut
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1JldGFpblB0cjxD
RkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAg
YXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNT
RVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFs
KHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFu
IGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBv
ZiBibGFjay4KKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dp
Y2FsU2l6ZSgpKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAgICAgIGlmICghcHJl
bXVsdGlwbGllZERhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBz
aXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUo
KS5oZWlnaHQoKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0
aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRp
cGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7CisgICAgICAgIGlmICghZGF0
YVByb3ZpZGVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25l
U2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CisgICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBpbWFnZSA9
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRC
bGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6
ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53
aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkp
OworICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdl
dCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0
b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAg
ICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisK
K1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWlt
ZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRh
VVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKwor
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlR2V0
SW1hZ2VEYXRhQXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENs
aXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsK
KyAgICBhcmVhICo9IHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5h
bFNpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBz
cmNSZWN0KTsKKyAgICBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBw
ZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRYKC1zcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAg
ICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgp
ICE9IHNyY1JlY3Quc2l6ZSgpKQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0
ZVB1dEltYWdlRGF0YVJlY3RzKGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEludFJlY3QmIHNyY1JlY3RDbGlw
cGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGRhdGFSZWN0ID0g
eyBJbnRQb2ludDo6emVybygpLCBzcmNTaXplIH07CisgICAgc3JjUmVjdENsaXBwZWQgPSBpbnRl
cnNlY3Rpb24oZGF0YVJlY3QsIHNyY1JlY3QpOworICAgIAorICAgIGRlc3RSZWN0ID0gc3JjUmVj
dENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludCk7CisgICAgCisgICAgaWYg
KHNyY1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0UmVjdC54KCkgLSBz
cmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRZKGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpKTsKKworICAgIEludFJlY3QgYnVmZmVy
UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAgICBkZXN0UmVj
dC5pbnRlcnNlY3QoYnVmZmVyUmVjdCk7CisKKyAgICBzcmNSZWN0Q2xpcHBlZC5zZXRTaXplKGRl
c3RSZWN0LnNpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGll
ZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhf
dCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBp
eGVsKQoreworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
IGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9IHNyY1BpeGVs
WzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQaXhlbFszXSA9
IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRU
b1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhf
dCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBp
eGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhh
KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9y
bWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkg
eworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Cisg
ICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAg
ICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgICAgICBk
ZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAv
LyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0g
KHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhl
bFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiAy
NTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1BpeGVsWzNdOworICAgIGlmIChhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhl
bFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBp
eGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0
UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBT
d2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNy
Y1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQ
aXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4
ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNTbG93KAorICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0
LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDb2xvckZvcm1hdCwgY29u
c3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+IGNvcHlGdW5jdG9yOworICAgIAor
ICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNT
RVJUKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOworICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkOworICAgIH0gZWxzZSBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgY29weUZ1bmN0b3IgPSBjb3B5UHJl
bXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkOworICAgIGVsc2UKKyAgICAgICAgY29weUZ1bmN0
b3IgPSBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkOworICAgICAgICAKKyAgICBz
aXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4
IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9y
Rm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAg
ICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7CisgICAgfQorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCitzdGF0aWMgaW5s
aW5lIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcih1bnNpZ25lZCBieXRlc1BlclJvdywg
dWludDhfdCogcm93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB2SW1hZ2VfQnVmZmVy
IHZJbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVmZmVyLndp
ZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2
SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0
YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVm
ZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sKKyAgICBp
ZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChz
cmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQoZGVzdEFs
cGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworCisg
ICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3Jj
Q29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChz
cmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3Jt
YXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMg
QkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAs
IDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVz
dCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1h
dCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzU2xvdyhzcmNB
bHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0
QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
c2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9
IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0
Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZv
cm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3QpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBjb3B5SW1hZ2VQaXhl
bHNTbG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3cs
IGRlc3RSb3dzLCBzaXplKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OGZlMGVh
NmFhMGE5NzEyNzEyMWUzYjNhOTQyMWUxNTllZjViZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2xvZ2ljYWxTaXpl
LmhlaWdodCgpKTsgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisK
KyAgICB2b2lkIHNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQmKTsKKworICAgIHZpcnR1YWwg
UmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisgICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJl
Y3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25z
dDsKKworICAgIHN0YXRpYyB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQs
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25z
dCBJbnRTaXplJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQ4
OTVhNDllZTgxNmU4YjdiYTIzZDVmZWFmMGE0OWU4M2Q1OGRhOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENB
IHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5n
IGlzIG9wdGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQor
CisjaWYgVVNFX0FSR0IzMgorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0
bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkhvc3Q7Citjb25zdGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9y
bWF0ID0gQ29sb3JGb3JtYXQ6OkJHUkE7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFw
SW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsK
K2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZv
cm1hdDo6UkdCQTsKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxj
dWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJu
YWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBk
YXRhOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAqIGludGVybmFsU2l6ZS53aWR0aCgp
OworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQ
ZXJSb3cpLmdldFZhbHVlKGRhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGRhdGEpICYgMykpOworCisgICAgc2l6
ZV90IG51bUJ5dGVzID0gaW50ZXJuYWxTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAg
dmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRv
IGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFs
U2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNo
ZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYg
KCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBj
b25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEs
IHNpemVfdCkgeworICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Cisg
ICAgfTsKKworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIG51bUJ5dGVzLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcg
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShj
b250ZXh0KSkpOworfQorCitJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92
aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92
aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250
ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIp
OworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCh0aGlzLT5jb250ZXh0
KCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlv
cikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7
CisgICAgCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAgICAgICAgIG1faW50ZXJuYWxTaXplLndpZHRoKCks
IG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAg
ICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywg
bV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBy
ZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3Qg
ZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qg
c3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhfdCogc3JjUm93cyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhl
bHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9y
Rm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5
dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jl
c29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBk
ZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3JjUmVj
dFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8ICFh
cnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCog
ZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KG1fZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyAr
IHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZvcm1h
dCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JG
b3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7
CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBz
cmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNv
b3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRp
b25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJl
Y3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVj
dFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIAorICAg
IHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCog
ZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgZGVzdFJlY3Qu
eSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93ID0gNCAqIHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90
KiBzcmNSb3dzID0gYXJyYXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQ
ZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAor
ICAgICAgICBpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBz
cmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBC
YWNrZW5kQ29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNp
emUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3YzgwMDMwMDcyNzMw
ZmEwODdiZjM1NDEzZDYzOWE4MDg3ZmZjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
TWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCisgICAgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgTmF0aXZlSW1hZ2VQdHIg
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29y
ZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYs
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYpOworCisgICAgdW5zaWduZWQgYnl0
ZXNQZXJSb3coKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQor
CisgICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9k
YXRhUHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250
ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZjMDMxY2Mw
NjY0ZGU3YTU3N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNp
bmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNs
dWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJm
YWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBB
UkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJH
QjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJ
bWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NF
UlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VO
b0Vycm9yICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMg
MSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1h
Z2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwg
MCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3Qs
IG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0
KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAg
ICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3
YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBh
cmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0
XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
ZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZv
aWQqIGlucHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93
KQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJU
KG91dHB1dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0
aDsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0
ZXNQZXJSb3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0g
ICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0K
LSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURf
UEFSQU0oaW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhlaWdodCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQo
NCAqIHdpZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewot
ICAgICAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwg
NCAqIGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRh
KCksIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5
dGVzUGVyUm93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVS
ZW5kZXJpbmcpIGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5o
ZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRh
ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0
YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJl
Y3QubWF4WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYg
KHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUu
d2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVz
dWx0LT56ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAg
aW50IGRlc3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0g
ICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAg
IGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0
dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdp
bngpOwotICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmln
aW54OwotICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0g
MDsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmln
aW55IDwgMCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1v
cmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1p
bjxpbnQ+KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAg
aWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6
ZS5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0g
ICAgCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgp
IDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHJl
c3VsdERhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAot
ICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9
IHNyY1Jvd3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAg
IGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0
ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0Vf
QVJHQjMyCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
I2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAo
KHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsg
eCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9B
UkdCMzIKLSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMg
d2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChh
bHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jh
c2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4
ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3Jj
Um93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJv
d3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93
cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNp
ZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsg
Ml07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jh
c2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNS
b3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkK
LSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgeClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAg
ICBzcmNCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jv
d3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lk
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7
Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0
YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0
LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAg
dW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAg
ICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAg
IHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
ICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAo
c3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgr
KykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAg
ICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVy
RGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChz
b3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNv
dXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAg
QVNTRVJUX1VOVVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0g
ICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngu
dW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50
PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgp
KTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAot
ICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2Vk
PGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9
IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0
KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChv
cmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVj
a2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0
Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhf
dCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsK
LSAgICB1aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAg
ICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhl
aWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3Qq
PihzcmNSb3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAg
ICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWln
aHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVT
RV9BUkdCMzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
I2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNF
X0FSR0IzMgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdl
IHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jh
c2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCAr
IDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwot
I2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tl
cjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3Vy
ZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAg
c3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3Rf
Y2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0Owot
ICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVp
Z2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQot
ICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdS
QS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0g
ICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1h
cCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWE1NGFkOTExNzk1
M2NhNWU2OTZkYTA3ZTZlMGRmNjgxNDNkNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJh
eS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFjZVJlZjsKLXR5
cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsKLXR5cGVkZWYg
dWludDMyX3QgQ0dCaXRtYXBJbmZvOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElP
U3VyZmFjZTsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgSW50U2l6ZSBiYWNraW5n
U3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1Bl
clJvdzsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZTsKLQotICAgIC8vIE9ubHkgZm9y
IHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICB2b2lkKiBkYXRhIHsgbnVsbHB0ciB9OwotICAg
IFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotICAgIENHQml0bWFw
SW5mbyBiaXRtYXBJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQ7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIC8v
IE9ubHkgZm9yIGFjY2VsZXJhdGVkIEltYWdlQnVmZmVycy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SU9TdXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIwZDE5YmY2ZGM4YjBlMjc1N2RlYThhNTk0MzUxMGEx
OWUyY2I1YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyMDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorCisj
aWYgUExBVEZPUk0oQ09DT0EpICYmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUo
KTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaW50
ZXJuYWxTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50
U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5h
bFNpemUsIGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAg
ICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRy
PENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0
KGhvc3RXaW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOworICAgIAorICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5k
UmlnaHQgc2VuZFJpZ2h0KQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGxvZ2lj
YWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92
ZShzZW5kUmlnaHQpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKKyAgICA6
IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQor
eworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dChjb250ZXh0KCkpOwor
fQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNo
U2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICA6IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIElP
U3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCksIGNhY2hlZENH
Q29sb3JTcGFjZShtX2NvbG9yU3BhY2UpKSkKK3sKK30KKworTWFjaFNlbmRSaWdodCBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1
c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Vy
ZmFjZS0+dG90YWxCeXRlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRl
c1BlclJvdygpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVy
biBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJu
IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lk
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0
aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1f
bG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVy
Um93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJS
b3cgPSBieXRlc1BlclJvdygpOworCisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJm
YWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
bG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpC
R1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93
LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29u
c3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29y
ZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9u
U2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7
CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQs
IHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRh
dGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dz
ID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93
KCk7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90
KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RD
bGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVyUm93LCBz
cmNSb3dzLCBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3cs
IGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2
b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwg
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQorewor
ICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVjdCBzcmNSZWN0
U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRl
U3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAgICAgICAgc3Jj
U2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNyY1JlY3RTY2Fs
ZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJlY3Qgc3JjUmVj
dENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJbWFnZURh
dGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQsIHNyY1JlY3RD
bGlwcGVkLCBkZXN0UmVjdCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJm
YWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgdWludDhfdCogZGVzdFJv
d3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygp
KSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisK
KyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplLndpZHRoKCk7CisgICAg
dWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBp
eGVscyhpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNS
b3dzLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6
QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAg
IC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4
cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChG
bG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBQTEFURk9STShDT0NPQSkgJiYgSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1NjdjNmRkNTdhYzU1YjY5Y2MwMDhjZTUw
NDQ2YzM3YmRjMzk2ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgUExBVEZPUk0oQ09DT0EpICYmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJT1N1cmZhY2U7CisKK2NsYXNzIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6
IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRF
RChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KTsKKworICAgIFdFQkNPUkVf
RVhQT1JUIE1hY2hTZW5kUmlnaHQgY3JlYXRlU2VuZFJpZ2h0KCkgY29uc3Q7CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29u
dGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbWVt
b3J5Q29zdCgpOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2
ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVy
cmlkZTsgICAgCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CisgICAgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBN
YWNoU2VuZFJpZ2h0KTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Q7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkgJiYgSEFWRShJT1NVUkZB
Q0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4IDg5ZDA0MzljMjEwZGI1MDFhYzkz
OWViMTE0MTQ4ODFlZWVjNjViMjQuLjBhNDVlMTYxMzU5MGFkMWFmZWZlNTUwZjNiMzJjOTEzZjc4
YjhmOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCkBAIC0yNiw3ICsyNiwxNiBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIK
IAorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJ
Ty5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiVVRJVXRpbGl0
aWVzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs1MCwxMzgg
QEAgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9
CiAKK0NGU3RyaW5nUmVmIGpwZWdVVEkoKQoreworI2lmICFQTEFURk9STShDT0NPQSkKKyAgICBz
dGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWci
KTsKKyNlbmRpZgorICAgIHJldHVybiBrVVRUeXBlSlBFRzsKK30KKworUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBVVElGcm9tTUlNRVR5cGUobWlt
ZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KKworICAgIC8vIEZJ
WE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4g
YSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4K
KyAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJk
YXI6Ly9wcm9ibGVtLzYwOTUyODY+LgorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRU
eXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdS
ZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKKworICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQorICAg
ICAgICByZXR1cm4ga1VUVHlwZVBORzsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCisgICAgICAgIHJldHVybiBqcGVnVVRJKCk7
CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2Uv
Z2lmIikpCisgICAgICAgIHJldHVybiBrVVRUeXBlR0lGOworCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGtVVFR5cGVQTkc7CisjZW5kaWYKK30KKworYm9vbCBlbmNvZGVJ
bWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0
aSB8fCAhZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlv
biA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAx
LCAwKSk7CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChD
RkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAq
cXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxp
dHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgIGF1dG8gY29tcHJlc3Np
b25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBr
Q0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5
ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBj
b25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1h
Z2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVl
LCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZh
bHVlQ2FsbEJhY2tzKSk7CisgICAgfQorCisgICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0
aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3Bl
cnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlv
bnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKyAgICBDR0ltYWdlRGVzdGluYXRpb25B
ZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7
CisgICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgp
KTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURh
dGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0lt
YWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50
OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBl
Z1VUSSgpKSkgeworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWws
IHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAg
ICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Cisg
ICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEu
Z3JvdyhzaXplKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGll
ZERhdGEuZGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0g
NCkgeworICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKKyAgICAgICAg
ICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0g
ZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFd
ID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOworICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKKyAgICAgICAgICAgICAgICBidWZmZXJb
aSArIDJdID0gZGF0YVtpICsgMl07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRo
ZSBhbHBoYSBjaGFubmVsLgorICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgp
OworICAgIH0KKworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNv
dXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNl
LndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICBpZiAoIWRhdGFQcm92aWRlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0lt
YWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291
cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1
bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJ
bWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisK
K1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShDRkRhdGFH
ZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOworICAg
IHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30K
KworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRh
ID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0
YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRh
dGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0
YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRh
dGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oCmluZGV4IDE2MTI4YTE5YWJkMWZiODNhYjMxYTExNWM2ODk1MDQ5MWQ0MTk1
NTIuLjQzNTI5MWJlOTFlY2FjNWY0OTFkZmE4YjQ4ZWZkY2RjNmZmYTM1NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmgKQEAgLTI1LDggKzI1LDI2IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKKwogV0VCQ09SRV9FWFBPUlQgdWlu
dDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUpOwogCi19CitDRlN0cmluZ1JlZiBqcGVnVVRJKCk7CitSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOwor
Citib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKKworU3RyaW5nIGRhdGFVUkwoQ0ZE
YXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKGNvbnN0IElt
YWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7CitWZWN0b3I8dWlu
dDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1h
Z2UuY3BwCmluZGV4IDgwZjZiMTg3MjUyMjk2OGVhN2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2MuLjI4
MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3Bw
CkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkRv
Y3VtZW50Lmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UuaAppbmRleCAyNDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2NGM5
YTA0ZmY5NjljZGIzLi40Y2MwZmEzZjc5NzI3ZWI5ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UuaApAQCAtMTAwLDEwICsxMDAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNw
YWNlUmVmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3Vy
ZmFjZT4gY3JlYXRlRnJvbUltYWdlKENHSW1hZ2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IGNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
KTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9FWFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29h
L0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJj
ZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBA
IC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZh
Y2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJE
YXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgi
CiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDks
NiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2Uo
V1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9t
SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsK
LSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2Vu
ZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50
U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1Bl
clBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0
aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVk
YjUwZDAyNWRlYWU1NDNhMTE0OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0
NzZkNDUwODQyNDM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAot
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAg
dm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBP
cHRpb25hbDxEaXNwbGF5TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVy
KQogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwogCiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWYxY2UyNzM1NDUwYmRhYzNiYmRm
MTFhMzA4NWQ5YTdmM2M5ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2Ns
YXNzIERyYXdpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3ND
b250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNz
Q29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNm
b3JtKCkpOworICAgICAgICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRo
aXMpLm1fY29udGV4dDsgIH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVy
biBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiBy
ZXBsYXlEaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0
KCk7IH0KKworICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NE
aXNwbGF5TGlzdFJlcGxheSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlz
dC5yZXNldCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxp
c3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIg
cmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSBy
ZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxp
c3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29u
dGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0
cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1
ZDAzNDI1YTQ3ZmM1OTc1Li5hZjNhYWRlMmEzMzJjYzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4YjU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xv
ck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dElt
YWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJ
bnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhl
bEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsK
KyAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBp
eGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0g
bm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CiAKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1l
bnNpb25zID0gcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgcGl4ZWxBcnJheURpbWVu
c2lvbnMuc2NhbGUocmVzdWx0SW1hZ2UtPnJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgIHN3aXRj
aCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAg
ICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFn
ZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7Cisg
ICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsICpwaXhlbEFycmF5LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QpOwog
fQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1
MzUzMjE0OTNjOWVhMmQ1NjE4ZThmZGRkODRlY2IuLjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0N2Q0
MDU4MDA0ZWE3MTcyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBA
IHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgLy8gVE9E
TzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5n
IHRoZSBJbWFnZURhdGEuCiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1h
Z2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gc3JjUGl4
ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0
b3JlKTsKICAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNv
bnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dB
cmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0
SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50
KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICByZXN1
bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsICpzcmNQaXhlbEFycmF5LCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9p
bnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKIAogICAgIHJlc3VsdENvbnRl
eHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAg
ICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3
MWM0MjQ5Njc4MTk1MjdhNTYyNzM1M2RmNDQ5Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJk
MjQ5MDA0YmYyYTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2Zp
bHRlclJlc29sdXRpb247CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07
Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07Cisg
ICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkIH07CiAgICAgZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi41
YzhiM2I0ZGUwYWZhNzE0NThjZGNmNmM2YmMwZmZkMmNjYmQxNDMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VC
dWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgp
KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwg
ZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAg
ICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5h
dGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25S
ZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKTsKIH0KIApAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpj
b3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29u
c3QKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2Ug
cHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmICht
X2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAo
IW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9IGVsc2UgewpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5
UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0
CiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBw
cmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1f
aW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRS
ZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggMWM2NmFkNzljZTQwYzE0NTU4ZjY2
NTI1MmIyNWUzYmI3ZGVkMTZiZC4uODk3Y2U0MGQwNGM3ZTBhZDFlYTE5MmNiOTEwNjE5ZjhmOTIy
MjRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBJbWFnZUJ1ZmZlciog
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAobV9p
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBt
X2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJl
U2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1faW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCBkNWI5MWIyNjg2YWUyNjFlYjUzYzA2ODliZWVjNjJmNTVl
M2ZiNDU4Li44ZjUwZTU3NTcxZDdiMzg1MDBlZWQ3YmNkYTZiM2E2NDJhYmY3OTUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTY5MDUsNyArNjkwNSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0K
ICAgICAKICAgICBlbnN1cmVMYXllckZpbHRlcnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmls
dGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFj
Y2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2Uo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRG
aWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNS
ZXBhaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXgg
OTE0MjAyOWEyZDQ0NjRkZjVjYjdiM2E0NDE5M2JlMjg2M2MxZWQyYS4uOTM1YTZlZTllNzZmZjQ0
MDJmOTg0YjVkMmI1MjFhNjk5MWM2MTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAKQEAgLTE4MSwxNCArMTgxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xk
LCBjCiAgICAgSW50UmVjdCBtYXJnaW5SZWN0ID0gc25hcHBlZEludFJlY3QobWFyZ2luUik7CiAg
ICAgYXV0byBpbnRlcnZhbHMgPSBtYWtlVW5pcXVlPFJhc3RlclNoYXBlSW50ZXJ2YWxzPihtYXJn
aW5SZWN0LmhlaWdodCgpLCAtbWFyZ2luUmVjdC55KCkpOwogICAgIC8vIEZJWE1FICgxNDk0MjAp
OiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAg
aWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQo
KSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCks
IGltYWdlUmVjdC5zaXplKCkpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJheSk7
CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgo
KTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwg
aXMgZm91ciBieXRlczogUkdCQS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAwOGU0OTI4MmFkOTNi
Y2FjZDI5Nzc1Yjg0NmYwNTlkNWEyY2E3MTNlLi4xZDc3YjYzYzZmZTI4MzEyYWUxMWVkODI1YjUy
M2FhY2U3MTdlYzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGMKIAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0lt
YWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2
OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNj
ZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBw
aW5nLCB0aG91Z2guCi0gICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENv
bG9yU3BhY2U6OlNSR0IsIFVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKKyAgICAgICAgY2xpcHBl
ck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwogICAgICAgICBpZiAoIWNsaXBwZXJNYXNrSW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNzVi
NTliNjNjM2U0OTYwYmQ0ZTNiZGJkODc0OTJhOTMyZjQzMTYxYi4uMTJlN2YxNWQ2MzJkNzZkOTlm
NmJhYmE5MzhkMGQ5ZTI2MzRkOGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTE5MSw3ICsxOTEs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2Fs
ZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3Jt
Lm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdp
b24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdN
b2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJU
KCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKQEAgLTI4Niw3
ICsyODYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICAgICAgY29udGV4dC0+
Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgICAg
ICB9CiAgICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5yZXNldCgpOwor
ICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7CiAKICAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAi
IDw8IHRoaXMgPDwgIiBwb3N0QXBwbHlSZXNvdXJjZSBkb25lXG4iKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHAKaW5kZXggMTc4N2UxOGMyZGNlZjViZGY5OTI0NzRjZmMwMjJiNTE2NmFkNTg0OC4uMTIwYzU3
YjU2OTc4NzIyMDQ2NWJjNmFlYzBiNTgwNGM0NTVjZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xv
ckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9y
U3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZl
ciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQg
bWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAg
bWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2Vs
ZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJh
bnNmb3JtLCBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0
KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4
IGI4MjE0MTFhZGU3NzUwODU2MTY4ODU2ZWQyMmI2MmVhNmI1Y2QzZDkuLjk3ODY3YWFkM2MyN2I1
YjUzOGQzYTc5ZmI0OTVkZGQ0ZjBmNDNkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcApAQCAtMjE4LDcgKzIxOCw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNj
ZWxlcmF0ZWQgZHJhd2luZyBmbGFnLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVm
ZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
S2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IGZmNTJkMjUzNmY1NjVmYTI5NWJlYjYyMDEyNjhhMGYz
MzMxNzBmZjMuLjNlNGY3NThiMjI0NmU2ZGM4NDU2ZmRhNWQwZWJhODgzNGM0NjViMjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9D
TWFrZUxpc3RzLnR4dApAQCAtMTcsNiArMTcsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5jbHVkZSIKICAgICAi
JHtXRUJLSVRfRElSfSIKICAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzIgorICAgICIke1dF
QktJVF9ESVJ9L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCIKICAgICAiJHtXRUJLSVRfRElS
fS9OZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggNzk5NGUz
Y2E3Nzc2MzI5ZDZmNzVkN2FhZjBjOTNmZDlhYTA1OWUxMC4uYzk2OGQzNDc4YTYzZDVhZmFkNzQ3
ZTljMmIzMTk5ZDNmYjcwNzQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZB
VEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURF
UlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9j
ZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5H
UFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDAs
NiArMTAyLDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3Jh
Z2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1v
dGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDBjZDIzZTAxYmJhY2QyZWM0YTBiZGMzYmRmZjJiZTBkN2I2
MGIwMWIuLjcxZGE2NTNiN2ViNzNiNjJmMTAwNDNlNGFkNDJlMzcxYjk1Yzk2MTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYg
KzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9Q
bHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1l
c3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Bs
dWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZm
ZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxp
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgK
QEAgLTEzNSw2ICsxNDEsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNz
YWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBs
aWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IDlkM2UyYTkwYzdiNGQ5MGE0MjZjNzZhNGUwNWU2YjJmODFjYzBlOWUuLjFmNGE0NDdiMTQ4Y2Iz
MjBhY2Y2NzkwN2U2YmQwN2NlYTRlYmI4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UK
QEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwK
ICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nl
c3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwK
ICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdv
cmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAt
NTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9j
YXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0MCwxMSArMTQyLDE0IEBAIE1FU1NBR0VfUkVD
RUlWRVJTID0gXAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciBcCiAgICAgUGx1
Z2luUHJvY2Vzc1Byb3h5IFwKICAgICBQbHVnaW5Qcm94eSBcCisgICAgUmVtb3RlSW1hZ2VCdWZm
ZXIgXAorICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgXAogICAgIFJlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyIFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3Rl
V2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cAppbmRleCA1MmE5NWNlMGRlZDcwM2Q2MWQzNGE5ZDE3ZjBjOGI0MmU2NjRmZGRhLi5kOTRlNTFj
ZGQ3Zjg5YWNmYWQxOGE3OWYzNzlmNGJmY2FhZjRmNzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0xNDks
NDQgKzE0OSw2MCBAQCBMaWJXZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6bGliV2ViUlRDQ29kZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6
RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5k
aWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291
cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2Vp
dmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0o
Q09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJl
Y2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi12
b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4m
IHJlcGx5RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRS
ZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBs
eUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94
eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29k
ZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5k
ZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7
CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgKaW5kZXggYWM3MTI1ZDczOGQ4Njg4OGVlYThiNGE5MjUxNWY5ZGU0ZDFm
NmIwNC4uNDVlMGI1MWUzYzU2NjI3NDQxNGExNTRkMGNlODY3ZmU2NjY2YWYwNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
CkBAIC0yOCwxMyArMjgsMTUgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRl
ICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3Nh
Z2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2lu
Y2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8
V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4K
ICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ2LDE4ICs0OCwyMCBAQCBjbGFzcyBSZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlcjsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDog
cHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpD
b25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBQQUw6OlNlc3Npb25JRCk7CiAgICAg
dmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogCiAgICAgSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVz
c2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2VzcyYgZ3B1UHJvY2VzcygpIHsgcmV0dXJu
IG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdl
YlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmll
cjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVuc2lvbihGdW5jdGlvbjx2b2lkKCk+JiYp
OwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0gICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXImIHJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXImIGxvZ2dlcigpOwpAQCAtNzUsMTQgKzc5
LDIxIEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZv
aWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFs
OwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5h
bDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICAgICBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsK
IAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICBSZWY8R1BVUHJv
Y2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2Fn
ZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2Vi
UHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eT4gbV9yZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eTsKQEAgLTkzLDYgKzEwNCw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09D
T0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVj
c1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMy
YzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
IAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lk
IENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdC
YWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1ZjI3YzhmYTNlN2I4
NTBlMTM3YmFlMzJlZGRiOGE3MTVlODQ2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VC
dWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpCit7CisgICAgaWYg
KGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
ci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0
KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlv
bigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJp
Z2h0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVJbWFn
ZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdodCkpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KGNvbnN0
IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBsb2NhbEZsdXNoQ29udGV4dChkaXNw
bGF5TGlzdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNo
SWRlbnRpZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMTZhMTQz
ZTc3YjIyMmMzNTUxOGQzZDU2NmZmM2E5ZTVhMjFiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4K
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIEltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgflJl
bW90ZUltYWdlQnVmZmVyUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAgIC8vIElQQzo6TWVzc2Fn
ZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVy
cmlkZTsKKworICAgIHZvaWQgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBN
YWNoU2VuZFJpZ2h0KTsKKworICAgIHZvaWQgZmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0JikgPSAwOworCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwYWU3OGUyY2U0
YWI5NTE5YjY1YWI4NGI0ZDcyZGRlYjVlYzk1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIEZsdXNoQ29udGV4
dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktpdDo6
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODEwMzcxZGUzYWU5MDY0MTcxNWVkMWM4OTE2
YzI0NDVkN2NlOGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAs
MCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkgOiBw
dWJsaWMgV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZl
ciA9IFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5n
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJldHVy
biBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPFJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXJQcm94eT4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBudWxs
cHRyLCBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIH0KKworICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eShzdGQ6OnVuaXF1ZV9w
dHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVy
SWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJh
Y2tlbmQpKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyUHJveHkoZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmVtb3Rl
Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2VuZC0+bG9naWNhbFNpemUoKSwgbV9iYWNr
ZW5kLT5pbnRlcm5hbFNpemUoKSwgbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKSwgbV9iYWNr
ZW5kLT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+Y3JlYXRlU2VuZFJpZ2h0KCkpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoIWRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllciByZXBsYXllcihCYXNlUGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpLCBkaXNwbGF5TGlzdCk7CisgICAgICAgIHJlcGxh
eWVyLnJlcGxheSgpOworICAgICAgICBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250
ZXh0KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2Nzg3ZWVmYTIyZjBjNDYwOTEwOGI1YmZiNGQ3N2U5
Nzc0MGI2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUlt
YWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBSZW1vdGVBY2NlbGVy
YXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQ
cm94eTxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZjQwZmZj
ZTliMTk2OTkxZmRmOTk0ZjgyNGVkNjkyM2EwODg0ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXJQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2Vz
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisK
K1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAg
IDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMp
OworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0g
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6
OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4g
JmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50
aWZpZXIpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAgaWYgKCFncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewor
ICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHk6OmNyZWF0
ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlQnVmZmVy
TWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKK30K
Kwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIENy
ZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGlz
IG9uZS4KKyAgICBpZiAoIW1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX2ltYWdlQnVmZmVyTWFwLnJlbW92ZShpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzk5MzhiZWU1MTFlNjlkZmVmZmRlNTQ5ZDA4MjIyNzg5ZTQ4MDgxMwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9y
U3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQorICAgIDog
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoKTsKKworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcjsgfQorCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisg
ICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdl
UmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgICAgICAKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1h
Z2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworCisgICAgdXNpbmcgSW1hZ2VCdWZmZXJNYXAgPSBIYXNoTWFwPElt
YWdlQnVmZmVySWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVy
Pj47CisgICAgSW1hZ2VCdWZmZXJNYXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAgICBXZWFrUHRyPEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAg
ICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRkY2Y3ZjMyYjQ1MjZkZGZiZWJiNzg3ZjgwMmMz
NmZkOTU3YmM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpA
QCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyKFdl
YkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29s
b3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKQorICAgIHZvaWQgUmVsZWFzZUltYWdlQnVmZmVyKFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVu
dGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDVk
ODQ0NzEzMjViYmE3YTQzNWVkOTMzYzA5MDkwOTQ1M2I5ZDQwMjUuLjUzYjc5MmVkYjZiNjIzNzdj
OGVjOWMzM2E5OWE1NTQ5YjlhNTU1ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0
cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQpAQCAtMjcsNiArMjcsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdCBpbXBv
cnQgcGFyc2VyCiAKIFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFID0gJ1dhbnRzQ29ubmVjdGlv
bicKK1dBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFID0gJ1dhbnRzRGlzcGF0Y2hNZXNz
YWdlJwogTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIE5PVF9S
RUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVkJwogU1lOQ0hST05P
VVNfQVRUUklCVVRFID0gJ1N5bmNocm9ub3VzJwpAQCAtMjA0LDYgKzIwNSw4IEBAIGRlZiB0eXBl
c190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgcmV0dXJuIGZyb3plbnNl
dChbCiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JywKICAgICAgICAgJ1N0cmluZycsCisgICAgICAg
ICdXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uJywKKyAgICAgICAgJ1dlYkNvcmU6OkNv
bG9yU3BhY2UnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OkZldGNoSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGcmFtZUlk
ZW50aWZpZXInLApAQCAtMjExLDYgKzIxNCw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9m
b3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJDb3JlOjpQb2ludGVySUQnLAogICAgICAgICAnV2ViQ29yZTo6UHJvY2Vzc0lk
ZW50aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6UmVuZGVyaW5nTW9kZScsCiAgICAgICAgICdX
ZWJDb3JlOjpTZXJ2aWNlV29ya2VySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2
aWNlV29ya2VySm9iSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2Vy
T3JDbGllbnREYXRhJywKQEAgLTIxOCw5ICsyMjIsMTIgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90
X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNXU2VydmVyQ29ubmVj
dGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQn
LAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisgICAgICAg
ICdXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkxheWVy
SG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJl
bW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVNZWRpYVJlc291cmNlSWRl
bnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6UlRDRGVjb2RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0
OjpSVENFbmNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRl
bnRpZmllcicsCkBAIC03NjEsMTMgKzc2OCwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5k
bGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzeW5jX21lc3NhZ2Vz
LmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6CisgICAgaWYgYXN5bmNf
bWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdF
X0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmUl
c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0
dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVz
dWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUo
Tk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAKICAg
ICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2Fn
ZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhh
c19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4n
KQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpO1xu
JyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAgLTc3NiwxMyArNzg2
LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVzc2FnZXM6CisgICAgaWYgc3lu
Y19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NB
R0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIu
bmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUp
IGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3Qg
cmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUp
OgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21lc3NhZ2Vfc3RhdGVt
ZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21lc3NhZ2VzXQorICAg
ICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRU
UklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hTeW5j
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxuJykKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCAxZGUzMDQyYzA3OTE2NWExZDI1
YTZmNGI1OGQ2NjA5YTY1NjYwMmY4Li5hYTg5ZjY1YWJiNDY0Njg2OWM4MzBiOTVmZGY3NTY0Y2Mw
ZTI0M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcmd1bWVudENv
ZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JT
cGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaD4KQEAg
LTc4OSw2ICs3OTAsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsKIAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4g
eworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwKKyAg
ICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0LAorICAgIFdlYkNvcmU6OlJlbmRlcmlu
Z01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJl
bW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6
OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgIFdlYkNv
cmU6OkNvbG9yU3BhY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCBkMDM5M2JiMDYyZDk3YWU5NmE3MjI1YTZk
NjA3YjA3NGIzOGUwYzk4Li5mNzIyNTI3ZTg2ZTQ3M2E0MGQxMzkzMDZlM2YwOWNmZWQ5MzY3YmEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKQEAgLTI5LDYgKzI5LDggQEAgR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVN
ZWRpYVBsYXllclByb3h5LmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNl
LmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTG9hZGVyLmNwcAogR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlci5jcHAKK0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcAorR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKIAogTmV0d29y
a1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MTIsNiArNTE0LDggQEAgV2ViUHJvY2Vzcy9H
UFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVt
b3RlTWVkaWFQbGF5ZXJNSU1FVHlwZUNhY2hlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvR1BV
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VQcm94eS5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJy
dGMvTGliV2ViUlRDQ29kZWNzLmNwcAogCiBXZWJQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGZlNzU3OTUzNzYxYjk5
ZjY5YjgyOGMxMWJiYzBmMzMxYWVlZmMxOTEuLmZhODNmZGM5MmExZmQ1NTdkMmQ5Y2E2MDJlNjRh
NjFiOTMyYTMxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTYzMSw5ICs2MzEsMTMgQEAg
V2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2VzCiBFZGl0YWJsZUltYWdlQ29udHJvbGxlck1lc3Nh
Z2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCiBM
aWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc01l
c3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAor
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2tN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCA1Nzc4YmE1ODcyMzJjNmU2YTc4MjI0NmI5YzdjYjMyMGFlOGZjY2VhLi5kMzFi
MzNkN2MyOTFlNTJjZjg3Njc0OGZhZTFhMTQyNzQwZTBlZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5NDMsOCArMzk0MywyNiBA
QAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25H
ZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2du
aXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3
RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
Lm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNp
dGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZG
NyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHku
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUEyM0FE
MkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYx
RUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2MDIzQzE4Mjg3
MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBX
ZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJD
b2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdl
QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJl
bW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTQyM0FC
MEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTgyM0IzODQyMTAwRjY3
RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQjIz
QjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUMyM0I0QzgyMzAw
RjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMg
LyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQy
QzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0
ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdE
MUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzcyLDYgKzYzOTAsNyBAQAogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEyRjIzOUIzQjBDMDA5NTk4RTIgLyog
bWVkaWEgKi8sCisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tl
bmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQky
RDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAog
CQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5oICov
LApAQCAtNjM4OCw2ICs2NDA3LDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5MzYgLyog
aW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdD
NzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMUYxRTk3MjNBRDJGNUMw
MEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOThFMjNCNjMzQ0EwMEFF
NTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQwMDQ5Rjkz
NiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCkBAIC03NzQ5LDYgKzc3NjksMzgg
QEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3
MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFOUEyM0FEMkZENjAwQkRB
RkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAorCQkJCTcyMUYxRTk4MjNBRDJG
RDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFFOTky
M0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8s
CisJCQkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXJQcm94eS5oICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MkQ1QzJFRDIzQjRD
ODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzJE
NUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBS
ZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIuaCAqLywKKwkJCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLmggKi8sCisJCQkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUlt
YWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3Rl
SW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3Rl
SW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMz
IC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIzQUIwNzYz
MDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyRDVDMkU3
MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAor
CQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNz
aWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNw
cAppbmRleCAxOGU5MzZkZTMyMzA3NzBmMjQzNjFiNmFiYWE4ZTE3ZTRkMmU1YWMwLi4xODhmYWMy
MGExZTkyM2RmNjJiYjFhMzgwNTUwYWFhNGY5NGQ4ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjAsMjkg
KzYwLDM1IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpT
dHJpbmdSZWZlcmVuY2UpCi17Ci19Ci0KLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRp
ZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBjYXB0dXJlTWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBjYXB0
dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjczo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgor
ICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5n
UmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmgKaW5kZXggMzFjNjEwNDY2OWYyZjAyZmZhNDQwZmViODgwOTI2Yzc0YWUyNmFj
Zi4uNmQxYjgzZGU1ODM2YWZhZTIxYWZjMzRmNThhMjJlNWQ2ZDMyM2M3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAt
MjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Niw2
ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAg
ICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0
KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkg
eyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogcHJpdmF0ZToKICAgICBHUFVQcm9j
ZXNzQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwpAQCAtNTMsMTAgKzU1
LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lk
IGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2
ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgdm9p
ZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkg
b3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKwog
ICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJv
Y2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3
YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1
OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBA
QAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29u
bmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNo
TWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmJiZGQ4NjM0MDUyMDVhZGE3ZWYzY2M3Mzg0NjAxOWZi
MTk5M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwz
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElk
ZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyID0g
T2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+OworCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
SW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdlYWY5
NDRiYTM4ZjBhOTk0YTViZTUyNDE5NTlmNGFjODhhNTkyMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklk
ZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworZW51bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVy
SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZT47
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRh
NTFiNGNlODBmN2IxYTZlY2JjODJiZTQ2NWQ5YTgxZmQxZDM5ZDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlci5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisj
aW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3Rl
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
Cit7CisgICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGluIHRoZSBH
UFVQcm9jZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2Fn
ZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAu
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7
CisKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVJbWFnZUJ1ZmZlcihz
aXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1faW1hZ2VC
dWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK1Jl
bW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIoKQoreworICAgIC8vIFVuLXJlZ2lz
dGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJl
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdl
UmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVh
c2UgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIobV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworSVBDOjpDb25u
ZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dAoreworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVm
ZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VC
dWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKQoreworICAgIFJlZjxJUEM6OkNv
bm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+
d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVy
OjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQ+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3Ms
IElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVz
KTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcigp
Cit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAg
IHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdl
czo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcj4obV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5j
TWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRh
dGVkQmFja2VuZCgpCit7CisgICAgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291
bnQgPSAzOworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7ICFp
c0JhY2tlbmRDcmVhdGVkKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRDcmVhdGVJ
bWFnZUJ1ZmZlckJhY2tlbmQoKTsKKworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1h
eFdhaXRzQ291bnQ7IGlzUGVuZGluZ0ZsdXNoKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAg
IHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6
c2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRp
ZmllcikKK3sKKyAgICBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyID0gZmx1c2hJZGVudGlmaWVy
OworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQoY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBt
X3NlbnRGbHVzaElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcjo6Z2VuZXJh
dGUoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpGbHVzaENv
bnRleHQoZGlzcGxheUxpc3QsIG1fc2VudEZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKKyAgICBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI1NmUzMWQwY2FmMjA2ZWU1MDZjOTc5
NjkwNWI3ODQwYTQ5YjhhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEs
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlcgorICAgIDog
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworcHVibGljOgorICAgIH5SZW1vdGVJbWFnZUJ1ZmZlcigpOworCitwcm90ZWN0ZWQ6
CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VT
ZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNv
bnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBCbG9ja2VycworICAgIGJvb2wgd2FpdENyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZCgpOworICAgIGJvb2wgd2FpdFNldEZsdXNoSWRlbnRpZmllcigpOwor
CisgICAgdm9pZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgIGJvb2wgaXNQZW5kaW5nRmx1
c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZs
dXNoSWRlbnRpZmllcjsgfQorCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJy
aWRlOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
TWFjaFNlbmRSaWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkg
Y29uc3QgPSAwOworCisgICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIpOyAgICAgICAgCisgICAgdm9pZCByZW1vdGVGbHVzaENvbnRleHQoY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6
OmdlbmVyYXRlKCkgfTsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVz
aElkZW50aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZs
dXNoSWRlbnRpZmllcjsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4Nzc1NTdjMGFhOGM4YTkwNTA0YTEz
NTgwZGE1OTFhYTViZmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpA
QCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVy
IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdlYkNv
cmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBN
YWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICB2b2lkIFNldEZsdXNoSWRlbnRpZmllcihXZWJL
aXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzFjN2FkODA0YzJjNDFmZWQxNmNiMTA2
YzY2ZDA5Zjc0MDM1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0w
LDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJS
ZW1vdGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2Vu
ZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVibGljIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXIgewor
ICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6
Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAg
IHsKKyAgICAgICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KG5l
dyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgICAgIDogQmFzZURpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIoc2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJp
bmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2Vu
ZFJpZ2h0IHNlbmRSaWdodCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9iYWNr
ZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShsb2dpY2FsU2l6
ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2Vu
ZFJpZ2h0KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2VuZFR5cGUq
IGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Jh
Y2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIm
PigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2Vu
ZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNo
Q29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3MzJhNTViMGIyZWI3ODQy
MzdlODJlYjg1MWIwYjk0YjkyNzc5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBSZW1v
dGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGM5NjQ5ZTdl
ZWEwYTFiMDY3NWNkYmY4MTg2N2U0Y2Y3YWMyZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUo
KQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4o
bmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJl
bGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsK
K30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWlu
dDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUlu
dDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmlu
Z01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAg
ICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVm
YXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFn
ZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IGhvc3RXaW5kb3cpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZi
ZTlkY2JkNjBmMzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNl
bmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVy
aW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5n
QmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVj
dGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50
NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ly8gUmVuZGVyaW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllcjo6Z2VuZXJhdGUoKSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0NjVmYjhjNmY3N2Y3ZmRlMzhmNjhjYmIw
NzUyNDZjOTk0ZGIxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAt
MCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
T2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZT47
CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
TGliV2ViUlRDQ29kZWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRj
L0xpYldlYlJUQ0NvZGVjcy5jcHAKaW5kZXggNDZkMTE5ODc3MmM1MWI4YWQ5MGVmOGExNzEzMjFm
ZmNlMjkwZmNmOS4uYjAyOTIxZTA2MWE2MGUzMzUwODg3ZTdiMDg5MzI0ZWFiOGVhM2Y1ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJS
VENDb2RlY3MuY3BwCkBAIC00Miw2ICs0Miw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogc3RhdGljIHdlYnJ0Yzo6V2ViS2l0VmlkZW9EZWNv
ZGVyIGNyZWF0ZVZpZGVvRGVjb2Rlcihjb25zdCB3ZWJydGM6OlNkcFZpZGVvRm9ybWF0JiBmb3Jt
YXQpCiB7CiAgICAgaWYgKGZvcm1hdC5uYW1lICE9ICJIMjY0IikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKaW5kZXggOGU0YzkzNzVkN2I4Y2MxMGZmYTAwODAzZDQ4MjE3M2JlNWEzNTU4YS4uNDgxZmFh
YWFjYWQyMGQyNjM5ZTg1ZDE2NTYzYmViMjg3MmUwMGRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5j
cHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCiAj
aW5jbHVkZSAiUGFnZUJhbm5lci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
aCIKICNpbmNsdWRlICJVc2VyRGF0YS5oIgogI2luY2x1ZGUgIldlYkNvbG9yQ2hvb3Nlci5oIgog
I2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtODgxLDE1ICs4ODIsMjIgQEAg
R3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhpY3NMYXllckZhY3Rv
cnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlf
TU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xpZW50
OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlE
KSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1fcGFnZS5kcmF3aW5nQXJl
YSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQorI2VuZGlmCiAKK3N0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICByZXR1
cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxzZQorICAgIHJldHVybiBS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2b2lkIFdlYkNocm9tZUNs
aWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXll
cikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1NWUxYzFkNjA4NTBlNDcx
ZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUxYjRmNTNiMmQxZGY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1v
bml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVu
ZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxh
Z3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51
Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29u
dGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNkMTlmMzU0ZDliY2MwMjkx
ZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFiMWVjYmJmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBAQCBSZXRhaW5QdHI8TlNJ
bWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNl
UGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gVGhpcyBpcyBlZmZlY3Rp
dmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFuIHVuYWNjZWxlcmF0ZWQg
ZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbmlsOwogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggZjVhNmIwOTY1M2MxZDQzYzMyNjIxMmM2MDQxOWJmZDRhZGI1YjNlOC4uYmQzYWE4YzhjZTY2
ZDFkZWVmNDk1ZTk0OGVjZDhjYjIxZWYxZDYxOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIw
LTAxLTA3ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAg
ICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0wNyAgVHJ1aXR0IFNhdmVsbCAgPHRz
YXZlbGxAYXBwbGUuY29tPgogCiAgICAgICAgIENvcnJlY3QgZXhwZWN0YXRpb25zIG1hZGUgaW4g
cjI1NDEzNCwgcjI1NDEzNSwgYW5kIHIyNTQxMzYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3
ZTc5MWI3MmFjY2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJm
MTE0MWM2YmZiMzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEg
QEAKICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdl
LWZsYWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1
MDkxMikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkK
KyAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQg
YXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387171</attachid>
            <date>2020-01-08 17:37:59 -0800</date>
            <delta_ts>2020-01-08 17:40:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200108173758.patch</filename>
            <type>text/plain</type>
            <size>454139</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MTM4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDkwMjhlY2U1ZGZlM2Zi
ODMwYmQwNWQ1OGI0NGIyNmRlZGVjZGU3YS4uODgyNWFkYWIyMDhjZDI0NDczM2NhZjI1ZDJlZTll
ODg1ODg4YzYyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzNSBAQAorMjAyMC0wMS0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5k
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRl
ZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJ
bWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250
ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJp
dG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVD
b21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRv
THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFs
U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29s
dXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNhbEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjbGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNl
QmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
bWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0
ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURh
dGFSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVt
dWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzU2xvdyk6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJ
bWFnZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0
ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VU
SSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxp
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAg
ICAgICAoTmljb3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9D
b250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0
QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisK
IDIwMjAtMDEtMDcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTQxMzIuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDU5Yjgz
NzJlMTk5OTA4YzRkZGRhNzIyZjFkYjhkOTYzZmE4NjZlZDQuLjE0NTAyMzdlZThjMjhiZmMwNjcy
ZTRkN2UyY2NlYTE1ZGRjMzRkZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTUgQEAKKzIwMjAtMDEt
MDggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
RGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAg
ICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01l
c3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVz
c2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om1l
c3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6OmZsdXNoQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oLgorICAgICAgICAqIEdQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOiBDb3Bp
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
UHJveHkpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4uCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6
CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNv
dXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5l
Y3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNz
Q29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6
R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2Vi
S2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3Rl
SW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2Vu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZp
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250
ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
LgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5o
LgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldl
YlJUQ0NvZGVjcy5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIwMjAtMDEtMDcgIENvbW1pdCBRdWV1ZSAgPGNv
bW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHIyNTQxMzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYzc0ZWZhOWY3NDAzZTk3
NjI4ZGUxNGE4MzlhZTMzODI1Y2FkZjNmNS4uZWUzZmQxZGI2ODNjNmNmZjI0M2YxNDYyNTI5ZTdh
NWE3ZTlkNTZiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTAxLTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+
CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dl
YkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6Omlt
YWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDcgIENv
bW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQsIHJvbGxpbmcgb3V0IHIyNTQxMzIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA0NjYxOWM2NWQ2
YjNjM2Q4MWZmNGMyZTUwMDUyMTZhYTQ5NjJlYzE0Li43ZGYyZTdmZGRjYjdhZTY4YTdhMzIzYThm
YzVjOWJjZmMwNjMwZDg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTMsNiArMTAxMyw3IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9nYW1l
cGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9y
bUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5oCkBAIC0xMDIyLDYgKzEwMjMsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9s
bGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApA
QCAtMTA3MSw3ICsxMDczLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZy
YW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDMsMTMgKzExMDUsMTcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1h
Z2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRp
YVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFj
ay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVv
U2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9S
b3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRl
bUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4
MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJv
YXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAg
LTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNs
aXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8g
Yml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdl
LT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRv
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBV
bmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVs
bFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBk
Li41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNv
dXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkx
OTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDYwYmJiZmQ0NmVlODc5NjhmZDJjMWVm
YTVmZjc3YjdlZjBhYzRkNjguLjVmZjFmYjViN2M1ZjdmOGIzMjU0MzhhNDI1ZDYyNDc2NjRmMWE2
YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY4LDYgKzE4NjgsNyBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg3LDYgKzE4ODgsNyBAQCBwbGF0
Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1l
UmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNr
ZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFkNjZl
ZTcxMjM0N2MxNjZiNS4uNGYwM2VjMjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2ZjZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVlNGJi
OTQzMWFlY2I0YmNjYzI4YmQyLi45N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFlNTJk
ZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9ndGsvQ29sb3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJlZnJl
c2hNb25pdG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVz
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsu
Y3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IGVjNDA4NGQ5ODQ1OGMzNTMyNDI1YmM5ZWVmNzUzN2Y1MDYzNWIzNTAuLjI0OTFlMmU4
YTZjMDhhYzI3ZDIxM2ZjN2MwMjkzYjRjZmU4OTFiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBAQAog
CQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEy
NTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIy
NUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1
IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4
NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJE
OUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50
LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRl
bUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAq
LzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5
OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIx
MzMsMTAgKzIxMzEsMjEgQEAKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZH
UHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYx
MkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlP
d25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2
MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIy
NjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJ
bWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1
Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJl
bmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3
OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRN
aW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcy
NEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIg
LyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hh
bmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5
RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0Mg
LyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNF
ODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tl
bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FD
QjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBG
NjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0
NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2Fn
ZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1
NDAsOSArNjU0OSw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJl
Z2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUg
LyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4
QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0
YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAw
OUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJC
RDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZl
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAv
KiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVm
RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU5OCw4ICs5NjA0
LDExIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1
c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlv
bkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3
MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhU
b3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQ
b2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5MzdC
MDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElt
YWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0
MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7
IHBhdGggPSAuLi9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAv
KiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRC
bGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3
RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MjAs
NyArOTYyOSwyMCBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNS
R0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JH
Qi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBo
eXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0Mg
LyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNBQUNF
ODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQw
QzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkzRTAw
QTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIzQUNC
MDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBK
U0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAv
KiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjg0LDcg
KzEyNzA2LDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBC
MzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIy
QTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTY2ODMsNiArMTY3MDQsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0Ex
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RE
NTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlCMDBB
NjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMz
REQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMz
REQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODgwLDYg
KzI0OTAyLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1MDA0
OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3
MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYg
LyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjQ4ODksOSArMjQ5MTIsMTIgQEAKIAkJCQk5MzQ5
MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIx
QzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJ
QTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cu
Y3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0
YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNE
NTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcy
QkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAq
LywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuY3BwICovLApAQCAtMjQ5ODcsNiArMjUwMTMsNyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1
NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhB
NTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUz
OCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTgg
LyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1
RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVE
MDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5
MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywKQEAg
LTI1MDc4LDcgKzI1MTA1LDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1h
Z2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1h
Z2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1
ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRh
dGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rl
ci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5o
ICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywK
QEAgLTI1MTM1LDYgKzI1MTYzLDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyog
UGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICov
LAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmgg
Ki8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICov
LAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VM
b2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0
VHJhY2suaCAqLywKQEAgLTI1MTQ0LDYgKzI1MTc0LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4
MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8q
IFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIg
LyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMg
LyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQz
IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3Rjkg
LyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBS
b3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5k
ZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIu
Y3BwICovLApAQCAtMjg5ODUsNiArMjkwMTgsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFE
REFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQw
NjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlF
MDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMz
RDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRV
SUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2NzksNiArMjk3MTMsOCBAQAogCQkJ
CTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5
MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29y
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI4Nyw4ICszMDMyMywxMCBA
QAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
LQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
Q0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5
NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZG
NTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5
NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9s
c1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzU3LDYgKzMxNzk1LDcgQEAKIAkJ
CQlBNTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3Bl
Y3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFDMjNB
QzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVyZUlu
UGljdHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5
M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzc2
LDYgKzMxODE1LDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhD
NkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUx
OTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAv
KiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBB
RjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTMsNiArMzE5
OTMsOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdl
UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAv
KiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJE
NUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRl
U2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBG
RjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMTgx
NzUxNWUxY2M3MDkwYzdlNTlhMGNiZDI1M2ZmNzI2MTc0NGM3My4uZjUwMWNhMjNhNzM5NWYxZTVi
MjFjODFiMDRkZGIwMTkzYjdhMmYzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IElu
dFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRv
IGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAs
IDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAg
IEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1
dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAg
ICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWln
aHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhl
aWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAg
ICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJy
YXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxX
aWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRh
LCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9n
aWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBi
aXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2Fz
dDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1h
cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTVi
OGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTcz
NTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJ
bWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVy
SW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6
CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhN
RSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUs
IFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQog
ICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRl
NGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMs
NyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBp
ZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0
ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBA
IC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgp
IGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
KTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1f
Y29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5m
YXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3Bp
ZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAy
M2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAz
M2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50
LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgi
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3Qg
U3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxp
c3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxh
eShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8g
TmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0
IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21w
b3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6
c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNw
bGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNh
c3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxp
c3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZh
c0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYm
IGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0Nv
bnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQo
RGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0
QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0Nv
bnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNw
bGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJp
bmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0
OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4
dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0
KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisg
ICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxp
c3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwx
MSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkg
Y29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUo
KSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cg
PSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1
bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAg
IC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBj
YW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxp
c3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2lu
Z0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciBy
ZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZh
bHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVt
b3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6
ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6
UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpE
aXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAg
ZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRl
cmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChi
dWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYm
IG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5n
IHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2
MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYx
LDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAg
ICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8
Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9J
bWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRl
eCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYy
ZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBS
ZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBS
ZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0g
VW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUg
PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1h
cD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggMDkxYTM2OTkyYTljMzVmMTMwZjg1ZGNjODE4Zjk1OTdl
MjcyZGVjZi4uNGVhYTU4ZGIxYjA1MzFjM2I3N2M4ZjhhYjk5NGM5OGU4MTFkMDFkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJU
b0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4g
eyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQot
ICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0
dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8g
YnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQz
LDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNv
bnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0
ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3
ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6
dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4u
NWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3Qg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAK
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsK
LSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2Nl
bGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIo
SW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRl
T3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2Fu
dmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4o
SAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6
Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRY
LCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4
dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOwor
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVt
ZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUo
KSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9v
bCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0
aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBp
ZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4g
bV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJp
bmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQo
RGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3Bs
YXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlz
cGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5h
c1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNr
KCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNy
ZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ks
IGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKElt
YWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAg
IHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBz
dywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewog
ICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52
YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcg
KzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAg
ICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwog
Ci0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVB
cnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFi
eXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAg
ICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRh
IGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEw
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGly
dHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dp
Y2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9
CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1h
Z2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZl
cikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50
U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5
KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwog
ICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVy
bmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChk
ZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJl
Y3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6
Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwg
ZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgp
KSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOwor
ICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVp
Z2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3Rl
bSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8g
aWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5k
ZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAw
ZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIy
LDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkg
Y29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RB
c1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5
RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAg
IHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94
eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWRE
cmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0
ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFn
ZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwg
ZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURh
dGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBm
bG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlI
ZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEo
Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gp
IGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0
IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRl
ZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3
ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNl
ZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9J
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmlu
Z01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmlu
Z01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwog
I2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2Vs
ZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5n
cyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFw
UmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRl
cmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFw
PiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMGMyZmM4NGJmYzA2YmRmNGQ4ZGMz
NmM3NWQ5Yjk5YjZkYmZkMjNlNS4uNjlkMzQxMTFlYmE1N2Y0MTQ4ZWFjOGU2YmI1MDcwZDcxNGMz
NDQ4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9y
PHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1h
Z2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGlt
YWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBp
ZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRl
eHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2Vw
dGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNECiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJ
bWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2
ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0lt
YWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAg
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwg
RG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAogICAg
ICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewog
ICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRl
cm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0
ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCpt
X2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+
b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5w
YWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhl
aWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
ICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludAog
ICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29w
eUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAg
ICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1h
dCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdl
LCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1
cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQKICAg
ICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4
dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkg
ewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigp
OwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRl
eHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJu
YWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJl
KHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1
cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRp
b25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cg
cGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZp
ZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENv
cHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3Vy
Y2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAt
NDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qg
c3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RS
ZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGlt
YWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0NCw3
ICs2MzQ0LDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUlt
YWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhN
RSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2Jk
MGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBi
ZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9z
aGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQ
dHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRl
eHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJ
bnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlz
IGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUo
cGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRl
dmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0
NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9t
ZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1v
dmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5V
bnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQor
ICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNr
ZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZv
cm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rp
c3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0
NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRk
ZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5k
KiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9p
ZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5
SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0
ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3Bv
cnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxl
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApp
bmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZh
YTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xp
ZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNp
bmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5
cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFy
Y2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBS
ZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisg
ICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVy
aW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVs
bHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAg
IHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5
ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXll
cihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0
aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5l
MjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJh
bWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdp
dGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxl
RmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZh
Y3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1h
Z2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xl
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmlu
ZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5
Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNs
aWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUo
KTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUp
OwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURh
dGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3Vy
Y2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1h
Z2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAg
ICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9w
bmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5k
ZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNmIwMGM1ZTY0MDEw
OTI4NzJiNDdiNWE0ZmM4ZTkyYmQzYTE5MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8u
Y21ha2UKQEAgLTEzLDcgKzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdp
bmRvdy5oCmluZGV4IDJjZmVjYWRjMjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQuLmY1
ZjIxN2NjZDg0MDYwODAwMjU1YzIwM2QyMjE3Y2FlY2UwY2UyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9Ib3N0V2luZG93LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDdXJzb3I7CitjbGFzcyBSZW5kZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93IHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBSZW5k
ZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwg
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBA
QCBwdWJsaWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0
V2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQy
MWRmYmQ5NTc1NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2QuLjlhNzQyNWUwMzM2OTJlMzRh
MzczNDhjNWJhOWU3M2U5YzQyNGFhOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NvdXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNl
c0NhaXJvLnR4dApAQCAtMzAsNyArMzAsMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
ZGllbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdM
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAK
LXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRp
dmVJbWFnZUNhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkMWNhZWY4NTQxZGVlMDYyYmZlMDU0MTZjZGEy
ZjJhN2Y3OTI2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNs
YXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVk
LAorICAgIFVucHJlbXVsdGlwbGllZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24p
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGFhYjQ2ODY3NjhmMWEyODJkNTg4MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIgOiBwdWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4gLCBwdWJsaWMgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNl
UGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+Owor
CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAg
ICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5
TGlzdEltYWdlQnVmZmVyPihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3csIHNpemUpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1
bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNp
emUpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2Vu
ZCkpCisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgewor
ICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQorICAgICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAg
ICB9CisKKyAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkg
b3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgp
KTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1ODZkZDRi
MmFmOTFmNDU2NTUzNWE3MDI5MzkyM2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEyZmY4NGMwZTY2NDJm
ODE4MjcwOTljZTgzN2UyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAjZW5k
aWYKICAgICBib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQo
KSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0K
IAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmNwcAppbmRleCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4NzlkYmQ0OTY5NjRi
NDkxYjE4Li4wMGJlMGZlYTA2MDU1Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4NDY4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApA
QCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
VHlwZXMuaCIKIAorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKwogI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFl
NzVlMTdiZmUwMDkyMDFiNzZmMTIuLjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3
OGFhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c1R5cGVzLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJS
ZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51
bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIsMTcgKzEyMyw2IEBA
IGVudW0gVGV4dEFsaWduIHsKICAgICBSaWdodFRleHRBbGlnbgogfTsKIAotZW51bSBSZW5kZXJp
bmdNb2RlIHsKLSAgICBVbmFjY2VsZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9y
bUJ1ZmZlciwgLy8gVXNlIHBsYWluIG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIHBsYXRm
b3JtIEFQSSB0byBhbGxvY2F0ZSBiYWNraW5nIHN0b3JlLgotICAgIEFjY2VsZXJhdGVkCi19Owot
Ci1lbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gewotICAgIFByZW11bHRpcGxpZWQs
Ci0gICAgVW5wcmVtdWx0aXBsaWVkCi19OwotCiBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1l
KFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogU3RyaW5n
IGJsZW5kTW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFyc2VCbGVuZE1vZGUo
Y29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMsNyArMTMzLDYgQEAg
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJDT1JFX0VYUE9SVCBX
VEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CiBX
RUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFt
JiwgTGluZUpvaW4pOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmNwcAppbmRleCAxYTBmODE2ZmRhODAzMDI3OTZhYTNhM2U1OWI2ZGY5MTk5NWQw
M2M3Li40ZTJiZTcxYzc0MWM1NWY1NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAx
MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjgsMzggKzI4LDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRl
ICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNv
bnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owotc3RhdGljIGNvbnN0IGZsb2F0IE1h
eENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KGhvc3RXaW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOworfQogCi1z
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9
IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFn
ZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUs
IGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOwor
CisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJT
aXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRl
eHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNz
IGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8g
c2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQot
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3
IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICBy
ZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFt
cGVkTGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1h
eENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0xMDUsOTcgKzEx
MSwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNp
emUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsK
LX0KLSNlbmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0KLUZsb2F0U2l6
ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JT
cGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVk
IGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwg
KGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xv
clNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAg
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0g
aSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29t
cG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENv
bG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhf
dCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7
IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAg
ICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAg
ICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9y
ICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAg
ICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxV
VCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1
ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVt
aW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhl
bEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlm
ICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBp
eGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhl
bE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0o
cGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwot
ICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7
Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAy
KTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43
MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhl
bEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFy
cmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8g
QWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVt
aW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQzNE
ZW51bSwgUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMg
c2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9u
ZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250
ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
IHsKQEAgLTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAgICBJ
bnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUocmVj
dC5zaXplKCksIGNvbnRleHQpOwogCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsK
LSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXIt
PmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwotICAg
IHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50
U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUs
IGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAo
IWJ1ZmZlcikKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAg
YSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAg
ICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJu
IGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwg
Y29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5n
TW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNp
emUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhl
IGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28g
d2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVu
aXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3Rv
cigpKTsKKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywg
LXJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIElt
YWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRp
dmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAg
IHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+
Y29udGV4dCgpLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0lu
dG9OYXRpdmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQog
ewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBh
IEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2Ug
YWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFs
U2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJl
dHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgp
OworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRp
b24pOwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0
Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZlci0+
ZHJhd0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9Ci0j
ZW5kaWYKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggNTMzM2NmNGVjMjI4ZjlkYjM3M2Yy
NThlNmI5YzdiOWVlNGZjOGFjMC4uYjVkMjFkODU4NjVmOTYyMDBlY2Y3OGExYTE5ZTc4ODIzNTk2
NWEwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yNywxNzAgKzI3LDgyIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxt
ZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0Nv
bnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xh
c3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9z
dFdpbmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3Jl
LCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0g
ICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRo
ZSBjb3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAot
ICAgIFllcywKLX07CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRl
eHQ7Cit9CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGlj
OgotICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVy
ZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5k
b3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
LCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRv
dyogPSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBj
b21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVy
IGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29w
eVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3
aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50
byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0
aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VC
Q09SRV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRp
b24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXpl
Rm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQotCi0gICAgV0VC
Q09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgLy8gVGhl
c2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNo
IGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJv
b2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wg
c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Cisg
ICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBz
dGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYg
c2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBHaXZlIGhp
bnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJhY2tpbmdT
dG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZpb3IKLSAg
ICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0gICAgc3Rh
dGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICBzdGF0aWMgSW50
U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgSW1hZ2VCdWZm
ZXIoKSA9IGRlZmF1bHQ7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXIo
KSA9IGRlZmF1bHQ7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBu
dWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0
OworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJh
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVy
Rm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0pOworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIHsgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvTHVt
aW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CiAKLSAgICBTdHJpbmcgdG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9
IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAg
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRl
cm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSNpZiBVU0UoQ0FJUk8pCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1
YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5
QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0jaWYgIVVTRShDRykK
LSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ug
c3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsK
LSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZl
cihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
IAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSkgPSAwOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRo
aXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAv
LyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVE
X0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRl
eHRHTE9wZW5HTCYsIEdDM0RlbnVtLCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwg
Ym9vbCk7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJl
ZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMg
dm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBp
bmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9y
IGNsaXBwZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJik7Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShj
b25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2Uo
Q29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSA9IDA7
CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdo
dCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFs
bGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZl
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRl
eHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNv
bnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVj
dCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAg
IHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVh
bCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRv
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBX
VEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3QgPSAwOwogCi0gICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwg
LTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSA9IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSBJbnRQb2ludCgpLCBDb29yZGluYXRl
U3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgPSAwOwogCi0gICAgaW5saW5lIHZv
aWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZy
aWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwot
ICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdl
QnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xv
Z2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBj
b25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJp
YWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJu
IGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNl
UmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0g
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2Vs
aWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCi19
OworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtLCBQbGF0Zm9y
bTNET2JqZWN0LCBHQzNEZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOwogCi0jaWYgVVNFKENH
KQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0
IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSk7Ci0jZW5kaWYKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNp
bmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSA9IDA7Cit9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3ODVjOGU3OGM0MWMzMjY1NWYxMmMyNzIwMjAxYWVl
MDhmMmFmMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1
cm4gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bnZlcnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQ
b2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSk7CisgICAgYXV0byBzcmNQaXhlbEFycmF5ID0g
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVt
aW5hbmNlUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAgaWYgKCFzcmNQaXhl
bEFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNl
dCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkg
eworICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsg
Myk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50
OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhf
dCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50
OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisgICAgICAgIAor
ICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3
MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBp
eGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXksIGx1bWluYW5j
ZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42NWJlNTA2ZjFkMWZlMzNlNjFlYWM0YWZmODE4NDZkOWIwYTI3MWRhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMzRC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworCitl
bnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRl
ZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJh
Y2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9Owor
CitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAorICAg
IFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JB
LAorICAgIEJHUkEKK307CisKK2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3Qg
eworICAgIExvZ2ljYWwsCisgICAgQmFja2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZl
ckJhY2tlbmQgeworcHVibGljOgorICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0g
ZGVmYXVsdDsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKworICAgIEludFNpemUg
bG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgSW50U2l6
ZSBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFsU2l6ZTsgfQorICAgIGZs
b2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9
CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNl
OyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLmFyZWEoKS51bnNhZmVHZXQo
KTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIHsgcmV0dXJuIDA7
IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQ
dHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwor
CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgPSAwOworCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2
ZUltYWdlKCk7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IHsgcmV0dXJu
IHsgfTsgfQorCisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBj
b25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQ29vcmRpbmF0
ZVN5c3RlbSkgeyB9CisgICAgCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR0MzRGVudW0sIFBsYXRmb3JtM0RPYmplY3QsIEdDM0RlbnVtLCBib29s
LCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VC
dWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCisgICAgICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAgICAgLCBtX2lu
dGVybmFsU2l6ZShpbnRlcm5hbFNpemUpCisgICAgICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVz
b2x1dGlvblNjYWxlKQorICAgICAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQorICAgIHsK
KyAgICB9CisKKyAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2ludGVy
bmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1f
Y29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVjMGQzNmZlZmJkMTJhYmU1NDNjM2YyMDM0ZjYxNThiM2Qy
Y2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0KLSNpZiBVU0UoQ0cpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNl
bGlmIFVTRShESVJFQ1QyRCkKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgot
I2VsaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNGZjZGQxZTkzZDY4MzI5YTA4OGJjMjlhMTUyNDg1
ZDA0NDI5NjEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMg
SW1hZ2VCdWZmZXIgeworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVy
VHlwZSA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29u
c3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZmZXIsIElt
YWdlQnVmZmVyVHlwZT46OnZhbHVlKTsKKyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5
cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cp
OworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1
ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1l
bnRzKS4uLikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIo
c3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNr
ZW5kKFdURk1vdmUoYmFja2VuZCkpCisgICAgeworICAgIH0KKworICAgIFBoeXNpY2FsSW1hZ2VC
dWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNr
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
YmFja2VuZCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+YmFzZVRy
YW5zZm9ybSgpIDogQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXpl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2Vu
ZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNp
emUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNr
ZW5kKCktPmludGVybmFsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJl
QmFja2VuZCgpLT5yZXNvbHV0aW9uU2NhbGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFj
a2VuZCgpLT5tZW1vcnlDb3N0KCkgOiAwOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tl
bmQoKS0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFn
ZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1
cm4gYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAg
ICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMp
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50
b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7
CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFn
ZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdD
b250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVz
ZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmco
ZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29udmVydFRv
THVtaW5hbmNlTWFzaygpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB0cmFuc2Zvcm1D
b2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JT
cGFjZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAg
ICAgICBiYWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xv
clNwYWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0
X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYWNrZW5kLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNl
cnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAg
IH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENv
bnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1
YWxpdHkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0
X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBiYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5
c3RlbTo6TG9naWNhbCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNp
Y2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1
cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgcmVjdCwgY29vcmRpbmF0ZVN5
c3RlbSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgp
KSB7CisgICAgICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnB1
dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIGRhdGFTaXplLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9CisgICAgfQorCisgICAgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNr
ZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0z
RE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBib29s
IHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCBkZXN0aW5hdGlvblRl
eHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+
IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yYTkwZWI5NTQ0MTEzNTRjN2E4ZWFmNWQ5YTNlOWI3N2IyMmUxMjdjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNF
KENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjZWxpZiBVU0Uo
RElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlm
IFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuaCIK
KyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5k
LmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNpbmcg
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsK
KyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8pCit1c2luZyBQbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOworI2VuZGlm
CisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxp
ZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBBY2Nl
bGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJHTFN1cmZhY2VC
YWNrZW5kOworI2Vsc2UKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQgPSBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRpZgorCit1c2luZyBQbGF0Zm9y
bUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbElt
YWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcg
UGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRm
MDA4NjE4NWNmMjI4NWJiZjI1NTgyZjk5NzIzOWY2ZTlkN2VlNwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmlu
Z0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJp
bmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2Vu
ZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5k
b3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJp
bmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5k
b3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2Nl
bGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICgh
aW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6
RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRl
ZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAg
IGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRv
dyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3ZDM5MjA0MDRjY2E1
Y2I0YmMyMjMyNzc1YzY0OTAyOWI1Y2M1OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEludFNpemU7CisK
K2NsYXNzIFdFQkNPUkVfRVhQT1JUIFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGljOgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICBz
dGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0
V2luZG93KiA9IG51bGxwdHIpOworICAgIAorICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQo
KSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIAorcHJv
dGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cit9OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmNjMzk4OGZkNjQzZGE3MDQ0MWU1MzM4YjE2YTExYjA1NDYzMTM4NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUu
aApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xh
c3MgUmVuZGVyaW5nTW9kZSB7CisgICAgQWNjZWxlcmF0ZWQsCisgICAgVW5hY2NlbGVyYXRlZCwK
KyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAorICAgIFJlbW90
ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmlu
ZGV4IDQwNDFiM2Y4MTA3Njc4YzU2YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjYxMmY5ZTlkMjJk
NjcxZjY4ZDU2NWYxMjQ0OTRlYzMzMmQ1Zjk0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICAgICAgY2xlYXJTY3JhdGNoQnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hhZG93Qmx1ciBp
cyBub3QgdXNlZCB3aXRoIGFjY2VsZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sgdG8gbWFrZSBh
biB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2VsZXJhdGVkLCAx
KTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNp
emUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdJbnNldFNoYWRvdyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgSW50UmVjdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGlu
Zyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dl
ZFJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywg
Y29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJ
bWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9w
ZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFn
ZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0
aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICgh
bGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRo
b3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVjdCYgZnVsbFJl
Y3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXllckltYWdlUHJv
cGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYg
ZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2Vs
ZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4
cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zCiAgICAgYXV0
byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZm
ZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVySW1hZ2VQcm9w
ZXJ0aWVzKTsKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdl
dCgpOwogI2VuZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJ
bnNldFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bgogI2lmIFVTRShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2lu
Z2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRv
IGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5h
Y2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAg
LTg4NCwxMiArODg0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFn
ZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAgICAgIHJldHVy
bjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAg
ICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJs
dXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlm
ICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJbWFnZShsYXll
ckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7Ci0g
ICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCB7IH0pOwor
ICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCk7CiB9CiAK
IHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBs
YXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCkBAIC05MTIsNyArOTEyLDcg
QEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIoY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogICAgIGFkanVzdEJsdXJSYWRpdXModHJhbnNm
b3JtKTsKIAotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5k
ZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVk
LCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVk
SW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZTkw
NDQ4MDdiOTE3NjllNGYzNGQzNWNiMTZlNjM0NTNlNmJkMjAuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODAgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJD
b2xvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lu
Y2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYg
VVNFKEVHTCkKLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNl
Ci0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1n
bC5oPgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBV
U0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJP
cGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0j
aW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9w
bGF0Zm9ybUNvbnRleHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdN
b2RlKHJlbmRlcmluZ01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDAp
Ci0jZW5kaWYKLSAgICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmICht
X3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6
OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFj
dG9yeSgqdGhpcykpOwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9w
dFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9
Ci0jZW5kaWYKLX0KLQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAg
ICBpZiAobV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVD
bGllbnQoKTsKLSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0KLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2Nv
bXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAg
ICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRp
ZgotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1
ZmZlcigpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlz
cGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9y
VGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JU
ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJh
bWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsK
LSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVS
LCBHTF9MSU5FQVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7
Ci0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
LQotICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NP
TE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSk7Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9j
b21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21w
b3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklD
T1NJQSkKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZl
ckRhdGE6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHku
Y29weVJlZigpOwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVy
c0lmTmVlZGVkKCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdM
Q29udGV4dDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0g
ICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3Bl
cmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhv
bGRlcihwcm94eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVy
KG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRv
clRleHR1cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkp
OwotICAgICAgICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRp
b24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdv
dWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdl
IGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBv
bmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91
cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29t
cG9zaXRvciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRv
ckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRv
cihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWly
b19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVD
b250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotfQotI2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBj
ciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJh
dG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3Iu
Z2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2Uo
KQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlG
b3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vy
c2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAot
ICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJl
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotCi0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQot
ICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBt
X3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29u
dGV4dC0+Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdl
IHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZp
Y2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9f
Q09OVEVOVF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpKSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYK
LQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCks
IENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNy
LmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAg
ICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWly
b1N1cmZhY2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBD
QUlST19DT05URU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAg
IHJldHVybiBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNh
aXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fp
cm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQot
ICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQo
cGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgot
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwot
Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6
Om5hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQo
KTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKElu
dFNpemUoc2l6ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0g
ICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9
IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNj
YWxlZFdpZHRoID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAg
IGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWln
aHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93
ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVp
Z2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1f
c2l6ZSA9IG1fc2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEu
bV9yZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVD
YWlyb0dMU3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9f
c3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MpCi0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRl
ZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBw
YXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJh
dGVkKQotI2Vsc2UKLSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVy
YXRlZCk7Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5
X3Qgc19zdXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0
X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwot
ICAgICAgICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFs
bG9jKG1fc2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNl
cl9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNl
RGF0YSwgW10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAg
aWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJP
X1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ug
d2UgZGlkbid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNl
U2V0RGV2aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxh
dGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsK
LX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsK
LSAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdC
LCBjb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17
Ci0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNl
J3MgZGV2aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNr
aW5nU3RvcmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0lt
YWdlU3VyZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFn
ZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAg
cmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRh
Lm1fc3VyZmFjZSkpOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGlu
Z0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBu
YXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250
ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdl
dCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xh
dGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRl
eHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZl
SW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQo
KSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUu
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBo
YSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7
Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFn
ZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1Vw
VGFibGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBv
biBhY2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7
Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAg
ICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3Jj
ICsgc3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRo
KCk7IHgrKykgewotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAg
ICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4
ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29s
b3IucmVkKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3Bp
eGVsQ29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1Vw
VGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBpeGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVk
QVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19z
dXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAs
IG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZh
Y2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsK
LQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkg
dG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVt
cG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNl
dFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVs
dGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZl
ckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJm
bG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3Jk
T3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEg
Kj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdl
IGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2Fm
ZUFkZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAg
IGludCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWln
aHQoKSwgZW5keSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgp
IDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6
ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdp
bnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkg
ewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9
Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lk
dGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9y
aWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwg
MCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAg
ICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXpl
LmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBO
b3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlm
IChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0
OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5n
U3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ug
c2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAg
IEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3Mp
OwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNl
VG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0g
ICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0
aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7
Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBk
YXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3Bl
cmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJl
Y3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwg
bG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29w
eVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VT
dXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkp
LCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSwgQ0FJ
Uk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3Jj
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAg
IHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRl
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0g
ICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVu
c2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdHggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0g
ICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRh
dGFTcmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owot
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAg
ICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdC
KCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlz
IHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAw
eEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAw
eDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAm
IDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAm
IDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAq
IDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVu
OwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0
JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9m
VmFsdWUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29s
dXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3Vs
dCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0
IGJhY2tpbmdTdG9yZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
Ci17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNr
aW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAg
ICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNj
YWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2Fs
UmVjdCA9IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxB
cnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdT
dG9yZVJlY3Quc2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwg
bV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJl
Y3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0
b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
aWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2lj
YWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0
IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsK
LSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNj
YWxlZFNvdXJjZVNpemUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVT
eXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQg
PSBiYWNraW5nU3RvcmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChz
b3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50
UG9pbnQgbG9naWNhbERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0
ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJl
Y3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4g
MCk7Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBk
ZXN0eCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBp
bnQgbG9naWNhbERlc3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVj
dC54KCk7Ci0gICAgQVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6
ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lu
eCA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERl
c3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVu
ZHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAg
ICBBU1NFUlQoZW5keCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9
IGVuZHggLSBkZXN0eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAt
IGxvZ2ljYWxEZXN0eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7
Ci0gICAgaW50IGRlc3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3Qu
eSgpOwotICAgIGludCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2lj
YWxTb3VyY2VSZWN0LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRl
c3R5IDwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBB
U1NFUlQob3JpZ2lueSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5k
eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBp
bnQgbG9naWNhbEVuZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0
Lm1heFkoKTsKLSAgICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBu
dW1Sb3dzID0gZW5keSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxF
bmR5IC0gbG9naWNhbERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3Vy
ZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQg
dG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlz
IEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29s
dW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNl
ID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgp
LCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFj
ZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0
eCA9IGltYWdlUmVjdC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWlu
dDhfdCogcGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZh
Y2UuZ2V0KCkpOwotCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291
cmNlU2l6ZS53aWR0aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jv
d3MgPSBzb3VyY2UuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAq
IDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5z
aWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsg
c3RyaWRlICogKHkgKyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNv
bHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2
b2lkIGNhbGxpbmcgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBv
bmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNp
dmUuCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5z
aWduZWQgYmx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAg
ICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJl
ZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3Jl
ZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1
ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3Jl
ZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQ
ZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBk
b25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19k
aXJ0eV9yZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxE
ZXN0eSwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFn
ZVN1cmZhY2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNh
aXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0u
Ci0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdl
dCgpLCBtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9n
aWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50
LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dp
Y2FsU291cmNlUmVjdC55KCkpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLX0KLQot
I2lmICFQTEFURk9STShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2
b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5n
dGgpCi17Ci0gICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1
dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVT
X1dSSVRFX0VSUk9SOwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3Rh
dGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNF
RChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQg
aXMgc3VwcG9ydGVkIGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90
b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRV
U19TVUNDRVNTOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1p
bWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAg
YmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJh
c2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAotewotICAgIEFT
U0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyhtaW1lVHlwZSkpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90
YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1
aW50OF90PiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1h
Z2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IHJldHVybiBlbmNvZGVkSW1hZ2U7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFw
cGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0K
LSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBz
dXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJl
dmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wm
Pih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6
U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNl
bmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0
Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkK
LSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNl
Ci0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PElt
YWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsK
LX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiwgR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGRlc3RpbmF0
aW9uVGV4dHVyZSwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhl
IEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBo
ZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAg
IHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5k
VGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Z
OgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VC
RV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0
KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4
dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgdWludDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJl
VGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0
LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xC
aW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBn
bERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0g
ICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4
dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFS
QU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1
cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVmOWQ3YmQyNzMxNzk0OTYyNTA5MDJiNDE1MzA3YWM2NWJkZDQ5MDIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKwor
I2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNl
KQorICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZh
Y2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX3N1cmZhY2UpID09IENB
SVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5z
ZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29u
dGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpj
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikg
eworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZTogeworICAgICAgICBhdXRvIGNvcHkgPSBhZG9w
dFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAorICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX3N1cmZhY2UuZ2V0KCkpLAorICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9zdXJmYWNlLmdldCgpKSkpOwor
CisgICAgICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwor
ICAgICAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJD
RSk7CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNl
LmdldCgpLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworCisgICAgICAg
IHJldHVybiBjb3B5OworICAgICAgICB9CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3Jl
OgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAor
eworICAgIEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yOworICAgIGlmIChjYWlyb19zdXJm
YWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSAmJiBjYWly
b19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQ
SEEpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVs
c2UKKyAgICAgICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4g
Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
ciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwg
cmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisK
K1JlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJw
b2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xh
dGlvblF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdENvbnRleHRTdGF0ZSA9IGRlc3RD
b250ZXh0U3RhdGUuc3RhdGUoKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0Q29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlv
bnMsIGRlc3RDb250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sK
KyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQo
KSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENh
aXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdl
dCgpLCBtX3NpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
b3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNw
YWNlKQoreworICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVk
IGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwg
KGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RD
b2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9
PSBDb2xvclNwYWNlOjpTUkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Cisg
ICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7
CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChj
b2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5Owor
ICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VS
Z2JMVVQpOworICAgIH0KK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJ
bWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBi
YXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVk
SW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5
cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNh
aXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9y
bUNvbnRleHQoKS0+Y3IoKSk7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFs
aXR5KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JH
UkFEYXRhKCkgY29uc3QKK3sKKyAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VU
b0ltYWdlKCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKKworICAg
IFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KHN1cmZhY2UuZ2V0KCkpKQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBw
aXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAg
IGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
c3VyZmFjZS5nZXQoKSkgKgorICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQo
c3VyZmFjZS5nZXQoKSkpOworCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24s
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYsIGNvbnN0IEludFJlY3Qm
LCBjb25zdCBJbnRQb2ludCYsIENvb3JkaW5hdGVTeXN0ZW0pCit7CisKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTRmYTZmMjNhYzQzNmRkY2RlYTgzZWM5YjYzNjk0ZTE4
ODc2MTA1NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJP
KQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0Q2Fpcm8uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAg
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZl
SW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFj
ZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRl
U3lzdGVtKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYmKTsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9CisgICAgTmF0aXZlSW1hZ2VQ
dHIgY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0OworCisgICAgbXV0YWJsZSBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8g
bV9wbGF0Zm9ybUNvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4g
bV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlmNzY5YzQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorKysgL2Rldi9udWxs
CkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2RlZmluZSBJbWFnZUJ1
ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKE5JQ09T
SUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotY2xhc3MgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRhCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICA6
IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50Ci0j
ZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlmCi17Ci1wdWJs
aWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5kZXJpbmdNb2RlKTsK
LSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29u
dGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0g
ICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Ci0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQgY3JlYXRlQ2Fpcm9H
TFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZW5k
aWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMyX3QgbV9jb21wb3Np
dG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7Ci0KLSNpZiBV
U0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFM
YXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZpcnR1YWwgdm9pZCBw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0jZW5kaWYK
LSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIEltYWdlQnVmZmVyRGF0
YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmQwMzJkYWI4NzU5MTc2NjY2MGUyMjk5ZjE2ZmUzNGQ0YWY2MmVhODQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckdMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxm
aXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcp
IENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyR0xTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENv
bnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5j
bHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisj
ZW5kaWYKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1
ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Lmgi
CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyR0xTdXJm
YWNlQmFja2VuZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlKQoreworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShzdXJmYWNlKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBD
QUlST19PUEVSQVRPUl9DTEVBUik7CisgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckdM
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sK
KyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29t
cG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisKKyAgICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZl
cywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3RpbmcgaXQKKyAgICAv
LyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90
ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9D
TEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFS
KTsKKworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisKKyAgICBn
bFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdCQSwgbV9pbnRl
cm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICov
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90KiBk
ZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJlbmVz
cyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAgIGNh
aXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAgc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmlj
ZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX2ludGVybmFsU2l6ZS53
aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBjbGVhclN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZD4obmV3IEltYWdl
QnVmZmVyR0xTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlckdMU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYm
IHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50
ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkp
Cit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAg
IG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKKyNl
bHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgorfQorCitJbWFnZUJ1ZmZlckdM
U3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQoKQoreworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCisgICAgZG93bmNhc3Q8Tmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBs
KCkpLmludmFsaWRhdGVDbGllbnQoKTsKKyNlbmRpZgorCisgICAgR0xDb250ZXh0KiBwcmV2aW91
c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbERlbGV0
ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQorICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVz
KDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgaWYgKHByZXZpb3VzQWN0
aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKK30KKworUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIo
KSBjb25zdAoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25pY29zaWFMYXllci5n
ZXQoKTsKKyNlbHNlCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisj
ZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tl
bmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVt
dWx0aXBseUFscGhhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9y
ZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlz
IHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAg
IGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVu
dW0gYmluZFRleHR1cmVUYXJnZXQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdM
X1RFWFRVUkVfMkQ6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Cisg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0
dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2Vf
Zmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+
IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIHVpbnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVy
cygxLCAmZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsK
KyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJl
KGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleElt
YWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9pbnRlcm5hbFNpemUud2lk
dGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCksIDApOworICAgIGdsQmluZFRleHR1cmUoYmlu
ZFRleHR1cmVUYXJnZXQsIDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVS
LCAwKTsKKyAgICBnbEZsdXNoKCk7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2
b2lkIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigp
Cit7CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAg
Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2ludGVybmFsU2l6ZS53
aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCk7CisKKyAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xf
c3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9f
Q09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9pbnRlcm5hbFNpemUu
d2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NvbXBvc2l0b3JDciA9
IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7CisgICAg
Y2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFT
X05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpCit7CisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBH
TENvbnRleHQ6OmN1cnJlbnQoKTsKKworICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgewor
ICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisKKyAgICAgICAgYXV0byBwcm94eU9w
ZXJhdGlvbiA9CisgICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSYgcHJveHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBo
b2xkZXIocHJveHkubG9jaygpKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZl
cihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0
b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwg
R0xfUkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgcHJv
eHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAgcHJv
eHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKworICAg
IC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBo
ZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAgICAv
LyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRo
ZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8gaW50
byB0aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1f
Y29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX3Nl
dF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsK
KyAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJldmlv
dXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworfQorCisjZWxzZQorCit2b2lkIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFj
a2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VSVChtX3RleHR1cmUpOworCisgICAg
Ly8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0
byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KKyAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIGNhaXJvX3N1cmZhY2Vf
Zmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKyAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworCisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4
dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZEJsZW5kLCBtX2ludGVybmFsU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKK30K
KyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xT
dXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1YWQ2N2Q5YmFjZWQ3MDkwM2Q2MDQzMmE5MWZl
YTM5ZmM4ZDkyZTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKwor
I2lmIFVTRShOSUNPU0lBKQorI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbC5oIgorI2Vsc2UKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQK
KyNpZiBVU0UoTklDT1NJQSkKKyAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxzZQorICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIK
KyNlbmRpZgorICAgICwgcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIHsKKyAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopOworCisgICAgfkltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2Vu
ZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRl
OworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQor
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2Vu
ZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYs
IGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZs
b2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisj
aWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNv
c2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9z
aXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisjZW5kaWYK
KyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xNjgzZjQyNzQ5N2YyMDY4NjI2MGI4NjEzYTcwYzI1NzIzZDNmZTg0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxm
aXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcp
IENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckltYWdl
U3VyZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJbWFnZVN1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tl
eV90IHNfc3VyZmFjZURhdGFLZXk7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0
cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOworICAg
IHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFzdFplcm9lZE1hbGxvYyhtX3NpemUu
aGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwg
Q0FJUk9fRk9STUFUX0FSR0IzMiwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBzdHJpZGUp
KTsKKyAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3Vy
ZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RG
cmVlKGRhdGEpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tl
bmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1v
dmUoc3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFn
ZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAg
IDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VS
VChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ6
OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mIGxvb2tVcFRhYmxlKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaW50IHN0cmlkZSA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWdu
ZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlk
ZSAqIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4Kysp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBD
b2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAg
ICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgp
XSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xv
ci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAs
IDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1h
Z2VTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2JkNjQwZDJj
NzAyZWU1MmNmMDFkYmUwNTE2MWMzNzRiYzAzYTI4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNl
QmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1Ymxp
YyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliYTI1NTRjZGE2OGEzOTg0
MDE0MzhiZWRkOTY4ZjBjM2M2MjlhZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcApA
QCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUg
Ikdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShHVEspCisKK3N0YXRpYyBjYWlyb19z
dGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciog
ZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0
b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKKyAgICAgICAg
cmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKKyAgICByZXR1cm4gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0KQor
eworICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsg
Ly8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgorCisgICAgcmV0dXJuIGNh
aXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0
cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEo
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7Cisg
ICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZElt
YWdlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQor
CisjZWxzZQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgR1Vu
aXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCit7CisgICAgLy8g
TGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUgR2Rr
UGl4YnVmIGRvY3VtZW50YXRpb24uCisgICAgLy8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcv
Z2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhidWYt
c2F2ZS10by1idWZmZXJ2CisKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmluZyhz
aXplb2YgImltYWdlIik7CisgICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBuZyIg
JiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOworICAg
IGlmICh0eXBlID09ICJqcGVnIikgeworICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9ydCBh
bHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwoKSBt
dXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCisgICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Utb3Zl
ciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KKyAgICAg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKKyAgICAgICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7
CisgICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAg
ICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCisgICAgICAgICAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsKKyAg
ICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAg
ICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1
cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5n
ZXQoKSwgc3VyZmFjZSwgMCwgMCk7CisgICAgICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2Rr
UGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGl4YnVmID0g
YWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKKyAgICBpZiAoIXBp
eGJ1ZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+
IGVycm9yOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49
IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcg
PSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUp
KTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZm
ZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQ
dHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworICAg
IH0gZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwg
JmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9y
Lm91dFB0cigpLCBOVUxMKTsKKworICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1ZlY3Rvcjx1aW50
OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBi
dWZmZXI7CisgICAgZ3NpemUgYnVmZmVyU2l6ZTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdl
LCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBidWZmZXJTaXplKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgaW1hZ2VEYXRhLmFw
cGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9
CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oR1RLKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uM2RlMzNjN2NhMDk2Y2FkODkyMjYzNzM5Yzc1Zjk1YjIwZmVkYzAzNwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxm
aXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcp
IENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJm
YWNlX3QqLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5jcHAKaW5kZXggNDk2ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5
YS4uNzIyZWVmZmU2YzllNWZkMjg2NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9J
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXpl
IGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRl
c3RSZWN0LnNpemUoKSk7CisgICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRl
c3RSZWN0LnNpemUoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIu
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJl
ZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAzNTZmMTk2NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9y
Y2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0j
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1
ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYv
RGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElV
dGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBh
bmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNF
X0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURF
Q0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklO
RV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMg
RmxvYXRTaXplIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSkKLXsKLSAgICBmbG9hdCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0
PihiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAg
ZmxvYXQgeU1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSkgLyBpbnRlcm5hbFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6
ZShsb2dpY2FsU2l6ZS53aWR0aCgpICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdo
dCgpICogeU1hZ25pZmljYXRpb24pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNw
YWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJl
ZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dD
b250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1h
cDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dD
b250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBr
Q0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNl
Q29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYK
LSAgICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5
RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3Bh
Y2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAg
ICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBj
b250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JT
cGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNv
cnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1
ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVm
ZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJv
b2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRp
b25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtl
IGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWls
ZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdo
dCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAg
aWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFz
SW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9z
aXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBB
Y2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0
KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9z
aXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBt
X3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxv
d3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3Jk
T3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8
c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5
dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50
U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51
bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhT
aXplLmhlaWdodCgpKQotICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxz
ZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0K
LSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dD
b250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUg
dXNlckJvdW5kcyA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2Fm
ZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJ
T1N1cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91
bmRzKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAg
ICAgICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dCho
b3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAg
Q0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgdXNlckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0
YS5zdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BB
UkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAg
ICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxz
LCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFh
Y2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJN
YWxsb2M6OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAq
IG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRh
dGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAg
ICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwg
a0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcElu
Zm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dD
b250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpLCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNl
LCBtX2RhdGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURh
dGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAg
SW1hZ2VCdWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAg
ICB9OwotICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEu
Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5
dGVzLnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5z
YWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlx
dWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRl
eHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAs
IC1tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRy
dWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9v
bCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2Fj
aGVkQ0dDb2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5k
b3csIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1
bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9h
dFNpemUgZGVzdGluYXRpb25TaXplKSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1Vz
ZXJTcGFjZShkZXN0aW5hdGlvblNpemUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5h
bFNpemUoKSk7Ci19Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
c2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlD
b3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3
ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBo
b3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0
IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNj
ZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWdu
ZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFs
Qnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkK
LSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJu
IDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19
Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAg
ICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJv
bSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEg
d2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0
YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5n
IGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBh
Y2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBk
b2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0j
ZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRh
LnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3ND
b250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNo
KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwg
Y29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0lt
YWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQo
KSkpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0
KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkp
KSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGlt
YWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBi
YWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8
IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAg
aW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJu
YWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVp
Z2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0Qmxl
bmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRl
eHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCks
IGxvZ2ljYWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9
IHNjYWxlU2l6ZVRvVXNlclNwYWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRl
cm5hbFNpemUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5n
ZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGlt
YWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYg
KG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVo
YXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgp
LCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGlt
YWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1h
Z2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0g
aW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRp
b25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBj
cmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
V1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5n
U3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJh
Y2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICBy
ZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVy
biBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQot
ICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9t
SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGlt
YWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlm
Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9u
dENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9k
YXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdl
dCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxz
ZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlm
Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1p
bmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZm
ZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwot
ICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRp
b25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9k
YXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2Ug
PSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZm
ZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNj
YWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tp
bmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UK
LSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAm
Y29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGlu
dG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2Uo
aW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29u
dGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPElt
YWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8g
b3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHkt
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5k
ZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdl
KENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENv
bnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiBy
ZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3Qg
PSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlm
IChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0g
c3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3Jj
UmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwg
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNv
bnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVj
dCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJj
ZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxD
b29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1h
dCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5h
bFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8v
IEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVx
dWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhw
bGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEs
IDEsIDAsIDApKTsKLX0KLQotc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNv
bnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5k
aWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2Vydmlj
ZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlw
ZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAg
Ly8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMg
d2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZv
dW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNl
ZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikp
Ci0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdV
VEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJp
bWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMg
Ym9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICgh
aW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0
byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEo
ZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVz
OwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5
ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXBy
ZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1
dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0
b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29u
c3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5
OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsK
LSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwg
JmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBl
RGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJ
bWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBp
biBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2Fs
bGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9w
ZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVz
dGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRh
dGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERh
dGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExl
bmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBl
ICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4g
ZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6
OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAg
aWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29s
dXRpb24pKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0g
ICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFn
ZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAot
ewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRp
RnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0g
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAg
ICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVk
RGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRh
U2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgp
OwotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRh
LT5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENG
KENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEt
PmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0
KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigp
LCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwg
ZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkp
OwotICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwg
NCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShj
b250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRv
UmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXpl
SW5Vc2VyU3BhY2UgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAg
ICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBp
bWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQo
KSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9
IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0g
ICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRh
dGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3Zl
KGNmRGF0YSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3Qg
SW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRp
RnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0g
ICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0g
ICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0
b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0
KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBj
aGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2su
Ci0gICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdo
dCgpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShz
aXplKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxp
ZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11
bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXpl
OyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0g
ICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAg
ICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAg
YnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIEln
bm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRh
LmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEs
IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJv
dmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAq
IHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJv
dmlkZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwg
NCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICgh
ZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEp
OwotfQotCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRv
IGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVy
biBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsK
LX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAo
YXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICBy
ZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7
Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNDNlYTI1ZGEwNWNkZjA3YTEwZjM2NDNkN2Y4NGEwZGE3OGM0MTkxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMzg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9B
Y2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbnRTaXplIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNp
emUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29s
dXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0
eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShzY2FsZWRTaXpl
KTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9
IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLndpZHRo
KCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0g
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkg
KiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCit7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0
LnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQuYXBw
bHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJl
ZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQoreworICAgIGlmIChpbWFnZSAm
JiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFs
U2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGludGVy
bmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGlt
YWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2Nh
bGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAg
aWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNp
emUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Qp
KTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZs
b2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0
U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwg
aW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQor
CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAg
ICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSks
IG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQorewor
ICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlv
blNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0
OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYg
KGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkg
PyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0
UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1
c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1h
Z2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0
b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4o
ZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworUmV0YWluUHRyPENGRGF0YVJlZj4gSW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAKKyAgICBhdXRvIHV0aSA9IHV0
aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKwor
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBq
cGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5l
bCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAg
ICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpLCBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0
YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBkYXRhU2l6
ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwor
ICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5k
YXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRh
dGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCks
IDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0
YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwor
ICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRp
b24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAq
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250
ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwg
bG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29u
dGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2lj
YWxTaXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisg
ICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQo
KSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVU
eXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRh
dGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQo
KSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJh
eShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVj
dCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVjdC53aWR0aCgpOworICAgIGFyZWEgKj0g
c3JjUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0
cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOworICAgIGlmICghYXJyYXkg
fHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVj
dCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAg
IHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1ZmZlclJlY3QsIHNyY1JlY3QpOworICAg
IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsK
KworICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1Jl
Y3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNl
dFkoLXNyY1JlY3QueSgpKTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5z
aXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgpOworICAgIAorICAgIHJldHVybiBhcnJh
eTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRh
UmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3Qm
IGRlc3RSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgZGF0YVJlY3QgPSB7IEludFBvaW50Ojp6
ZXJvKCksIHNyY1NpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihkYXRh
UmVjdCwgc3JjUmVjdCk7CisgICAgCisgICAgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAg
ICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsKKyAgICAKKyAgICBpZiAoc3JjUmVjdC54KCkg
PCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpKTsK
KworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJl
Y3QueSgpIC0gc3JjUmVjdC55KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQ
b2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVyc2VjdChi
dWZmZXJSZWN0KTsKKworICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgp
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwg
Q29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAg
aWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBd
ID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVz
dFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBs
aWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwg
Q29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAg
dWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAg
Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVs
LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRl
c3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBp
eGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9
IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwg
Y2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0g
KiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAv
IGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsK
KyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQs
IGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVp
bnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107Cisg
ICAgaWYgKGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVs
dGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBp
eGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3Jt
YXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhl
bFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1Bp
eGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3Jj
UGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFs
cGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxw
aGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90Kiwg
Q29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4gY29weUZ1bmN0b3I7CisgICAgCisgICAgaWYgKHNyY0Fs
cGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAmJiBkZXN0QWxw
aGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisgICAg
ICAgIGNvcHlGdW5jdG9yID0gY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAg
fSBlbHNlIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9V
bnByZW11bHRpcGxpZWQ7CisgICAgZWxzZQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlVbnBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgICAgIAorICAgIHNpemVfdCBieXRlc1Bl
clJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhl
aWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJv
dzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNS
b3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3Mg
Kz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
KyAgICB9Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1
ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dz
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVy
OworICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhl
bENvdW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNf
Y2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5y
b3dCeXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAg
ICByZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdl
UGl4ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZv
cm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0
ICE9IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dh
cCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1h
cFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9
PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0
ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29s
b3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JB
LgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAg
ICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJ
bWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQs
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1
aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3JjQWxw
aGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xv
ckZvcm1hdCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNTbG93KHNyY0FscGhhRm9ybWF0LCBz
cmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwg
ZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1
ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBk
ZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsK
KworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xv
ckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9
CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0Nv
bG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dz
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3coc3JjQWxw
aGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFs
cGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNp
emUpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZmUwZWE2YWEwYTk3MTI3MTIx
ZTNiM2E5NDIxZTE1OWVmNWJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1
YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lu
a0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBB
ZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOyB9
CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2lu
ZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZvaWQgc2V0
dXBDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7Cisg
ICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRS
ZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0OworCisgICAgc3Rh
dGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDg5NWE0OWVlODE2ZThi
N2JhMjNkNWZlYWYwYTQ5ZTgzZDU4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ0EgdXNlcyBBUkdCMzIg
Zm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVk
LgorI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpZiBVU0VfQVJH
QjMyCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsK
K2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZv
cm1hdDo6QkdSQTsKKyNlbHNlCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRC
aXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworY29uc3RleHByIGNv
bnN0IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpSR0JBOwor
I2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4g
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0
V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFs
U2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRhdGE7CisgICAgdW5z
aWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7CisKKyAgICBpZiAo
IXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFs
dWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMg
PSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2ZXJpZnlJbWFnZUJ1
ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8gY2dDb250ZXh0ID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxTaXplLndpZHRoKCks
IGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hlZENHQ29sb3JTcGFj
ZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVs
ZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Cisg
ICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAg
YXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEo
MCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9
CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCB2b2lkKiBk
YXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJbWFnZUJ1ZmZlckNH
QmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUo
ZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAg
IEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJU
KG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KHRoaXMtPmNvbnRleHQoKSk7Cit9CisKK0dy
YXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25z
dAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2Fz
ZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAKKyAgICBj
YXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKAorICAgICAgICAgICAgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNp
emUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dD
b2xvclNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRl
ci5nZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
KTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9s
b2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJS
b3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEs
IHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJl
c3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7
CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxl
ICE9IDEpCisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
CisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAg
IGF1dG8gYXJyYXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNS
ZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFy
cmF5LT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54
KCkgKiA0OworICAgIAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3co
KTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9k
YXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBw
ZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVy
biBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAg
SW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEp
IHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAg
ICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAg
IEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxj
dWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0
UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0
ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSA0ICogc3JjU2l6ZVNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBh
cnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1Jl
Y3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIGlucHV0
Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjODAwMzAwNzI3MzBmYTA4N2JmMzU0MTNk
NjM5YTgwODdmZmMxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgi
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19B
TExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICAK
KyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6
ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2b2lkKiBt
X2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFi
Y2I1YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lu
bGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2Vs
ZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNo
L2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNl
bmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdC
MzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUp
ICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQot
c3RhdGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYg
c3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7
Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdklt
YWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBj
b252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0
cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAg
dkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2
SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNT
RVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdl
Tm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAx
IGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFn
ZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAw
LCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwg
bWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChV
U0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0
aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQot
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5o
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAg
ICBzcmMuZGF0YSA9IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qu
d2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5
dGVzID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVu
cHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0j
ZWxzZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRh
dGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBo
ZWlnaHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5z
ZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0
b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBs
b2NrKCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJm
YWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7
Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6Omdl
dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29u
c3QKLXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0g
ICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAg
IGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVk
KGFyZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyBy
ZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAw
IHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVu
ZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxs
KCk7Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAw
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lu
eCA8IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3Jp
Z2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48
aW50PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYg
KGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndp
ZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0g
ICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNr
ZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0g
ICAgICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAg
ICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgu
dW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNh
ZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwot
ICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAo
d2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0
ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRl
c3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2Nl
bGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVH
ZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEp
ICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7
Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0
ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQot
ICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9
IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAg
ICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAg
ICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5o
YXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVp
bnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAg
ICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2Ug
YnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJd
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhh
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1ti
YXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJd
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBd
OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIK
LSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCAr
IDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAg
ICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAg
ICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVy
Um93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19j
YXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNC
eXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAg
IHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQo
KTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3Jj
LnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsK
LQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0
dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5k
YXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5
QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1
aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAg
ICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkK
LSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4
X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhh
ID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4
ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyAr
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50
OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAv
LyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
I2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAg
IAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRh
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXpl
LCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lk
dGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0g
ICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGlu
dD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkp
OwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VE
KHNpemUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3Jp
Z2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8
PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hl
Y2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VS
VChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxp
bnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9
IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55
KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgp
KSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNT
RVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZl
R2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5
ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAg
ICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNr
ZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0g
c291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCku
dW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAg
ICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVy
Um93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlm
IChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndp
ZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0
LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwot
Ci0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRo
ID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVu
c2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAg
ICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAg
ICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlm
Ci0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkg
ewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsr
KSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAg
ICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1
ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
KHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3Vy
ZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2Rl
OjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1Bl
clJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1
cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICog
NCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAg
ICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMg
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3Qq
PihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qu
d2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51
bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBw
cmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAg
ICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJ
bWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9G
bGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHgg
KiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAg
ICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdl
NmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVk
ZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3Qg
Q0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0Jp
dG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1z
dHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0g
ICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENH
Q29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1h
Z2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENH
RGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcElu
Zm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNj
ZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1
cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29u
c3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNv
bnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zZDIyYzI0NjM4ZTdiZTIxODQ5YmYyYWU0ZTU2NzU4YmQ2YzQ0YmVhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYm
IChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVk
ZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQ
SS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxh
dGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGlu
dGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXpl
IG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7CisgICAgaWYgKGludGVybmFsU2l6
ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGludGVybmFsU2l6ZS5oZWlnaHQoKSA+IG1h
eFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gaW50ZXJu
YWxTaXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVy
bmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBz
dXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNh
Y2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4
dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAo
IWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVh
clJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRl
cm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChzaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNl
KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKK3sKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSkpOworfQorCitJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisg
ICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNl
KTsKKyAgICBzZXR1cENvbnRleHQoY29udGV4dCgpKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCisg
ICAgOiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5k
UmlnaHQoV1RGTW92ZShzZW5kUmlnaHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNl
KSkpCit7Cit9CisKK01hY2hTZW5kUmlnaHQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
cmVhdGVTZW5kUmlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZVNl
bmRSaWdodCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3Jh
cGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpm
bHVzaENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9y
eUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30K
KwordW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFn
ZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1h
Z2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAg
ICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNp
emUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sK
KyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNh
ZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lk
dGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKwor
ICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3Jj
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpOworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
Q29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dp
Y2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNS
ZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgIHNy
Y1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50UmVjdCBzcmNS
ZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkgPSBjcmVh
dGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJl
Y3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2Fs
ZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0
UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9j
a2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgc3JjUmVjdENsaXBw
ZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAg
Y29weUltYWdlUGl4ZWxzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENv
bG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgb3V0cHV0Rm9ybWF0LCBD
b2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6
ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2Fs
ZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jl
c29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3Qg
ZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwg
c3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworCisg
ICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICBJT1N1cmZh
Y2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2Rl
OjpSZWFkV3JpdGUpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0
Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQ
ZXJSb3cgPSA0ICogc3JjU2l6ZS53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJh
eS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RD
bGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoaW5wdXRGb3JtYXQsIENvbG9y
Rm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywg
ZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRo
ZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5l
Y2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1
MTI3MDJmYmVjOGFmMTcxMGE2NDdhOWQyMmIyNWI1N2NjZWU3OWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKSAmJiAoVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFL
RV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAK
KyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOwor
CisgICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25z
dDsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgp
IGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVycmlk
ZSB7IHJldHVybiBtZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRp
dmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOwor
ICAgIAorICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsK
KyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3co
KSBjb25zdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAppbmRleCA4OWQwNDM5YzIxMGRiNTAx
YWM5MzllYjExNDE0ODgxZWVlYzY1YjI0Li5kMDkxMzlmMDFiZDMzNmYyODQ4YWVhNTI2YTRmOWY4
MDBlZTc4NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcApAQCAtMjYsNyArMjYsMTgg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmgiCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNs
dWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQor
I2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNDEsNCArNTIsMTQwIEBAIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQogICAgIHJldHVybiAqKHVp
bnQ4X3QqKWxhc3RCeXRlOwogfQogCitDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sKKyNpZiAhUExB
VEZPUk0oQ09DT0EpCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0g
Q0ZTVFIoInB1YmxpYy5qcGVnIik7CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQRUc7CiB9
CisKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4g
VVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOworI2Vsc2UKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVh
ZHNhZmUuCisKKyAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBz
dXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkg
cmVsaWFibHkgaXMgZm91bmQuCisgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBF
RywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KKyAgICBzdGF0aWMgY29u
c3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7CisgICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUu
Z2lmIik7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUs
ICJpbWFnZS9wbmciKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7CisgICAgaWYgKGVxdWFs
TGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQorICAgICAg
ICByZXR1cm4ganBlZ1VUSSgpOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQorICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKKwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrVVRUeXBlUE5HOworI2VuZGlm
Cit9CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRp
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAg
ICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdp
dGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJv
cGVydGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIC8vIEFwcGx5IHRo
ZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgorICAg
ICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7CisgICAg
ICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9u
UXVhbGl0eTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHku
Z2V0KCk7CisgICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3Jl
YXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAm
a0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIH0KKworICAgIC8vIFNldHRp
bmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBp
bWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCisgICAgLy8gaW4g
dGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisgICAg
Q0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFn
ZVByb3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBj
ZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1
dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VS
VCh1dGkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VB
bHBoYUxhc3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEo
KTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZF
cXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2
ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0
b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICog
c291cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2Vy
dmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1
ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0
YVtpICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAg
ICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAg
ICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kg
KyAwXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAg
ICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tp
cExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11
bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmln
RW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAg
YXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEo
MCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAg
aWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBp
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdo
dCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dC
aXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRh
dGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkp
OworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwg
Y2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RG
TW92ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBi
YXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEp
LCBiYXNlNjREYXRhKTsKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQs
IiArIGJhc2U2NERhdGE7Cit9CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291
cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7
CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkK
KyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVy
biAiZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYg
Y2ZEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENG
RGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJl
dHVybiBkYXRhOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQor
eworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkp
CisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFk
NDE5NTUyLi44NGM1N2QyZmVlOTMzOGVkNWUwZWZjNGE4ZTMzNjVhMTlhODAyMDRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oCkBAIC0yNSw4ICsyNSwzMSBAQAogCiAjcHJhZ21hIG9uY2UKIAor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5
SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplKTsKIAotfQorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpOworUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKKworYm9vbCBlbmNv
ZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0
b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEo
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENH
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAppbmRleCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMy
NTg4MjNjLi4yODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIy
NGJhYzUzNjRjOWEwNGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRh
YjIxNGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLmgKQEAgLTEwMCwxMCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYs
IENHQ29sb3JTcGFjZVJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAgICAKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5
MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJm
YWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3Vy
ZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9y
dCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIklt
YWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9y
bVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTEx
MCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5h
ZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6
Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNl
KTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJT
dXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBs
YW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAg
ICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4
ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0
MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcs
NyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsK
ICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVh
cigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVf
dCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiAr
MjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVz
aW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlmMWNlMjczNTQ1
MGJkYWMzYmJkZjExYTMwODVkOWE3ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29y
ZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxp
c3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRl
eHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZd
KEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0
LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFm
ZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29u
dGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0
KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNw
bGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNw
bGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3Bs
YXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJv
b2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5
RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBsYXlEaXNwbGF5
TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAg
aWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3Bs
YXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBt
X2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29u
dGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBt
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxp
c3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3
N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3
ZGQxZDg1OGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2
b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3Vs
dEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lv
bk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBp
bWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIElu
dFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGlt
ZW5zaW9ucyk7CisgICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAg
ICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+
IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50U2l6ZSBwaXhl
bEFycmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVs
QXJyYXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CisK
ICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05P
V046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
cmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBv
aW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1h
Z2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAy
MzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3
OGE3ZmI5NDdkNDA1ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMg
KzEwMCwxMyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAog
ICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZv
aWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51
bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBh
dXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06
OkJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47
CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEo
KSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAot
ICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVh
LCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7
CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0Fy
ZWEsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAKICAgICBy
ZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291
cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQo
KSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5
ZThjNWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJj
NzAxNTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9h
dFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRl
VHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVy
YXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3
MmI1OTBmYS4uNWM4YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmNwcApAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVB
cnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwg
SW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAg
ZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsK
KyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRl
c3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1h
Z2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRl
ckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGlu
YXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAg
ICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0
aW9uLCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAg
ICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAg
ICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwor
ICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
SW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAg
ICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYWI1YTBkNTBmOGNlMWFhZjY1MzVkZWVjOTQwYjg1ZGM1NTE3ZTRiMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0j
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVk
ZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3Rh
dGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2No
YXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQotewotICAgIC8vIExpc3Qgb2Ygc3VwcG9y
dGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVu
dGF0aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3Rh
YmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVy
dgotCi0gICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIp
OwotICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRp
ZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAi
anBlZyIpIHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4g
VGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQ
b3J0ZXItRHVmZgotICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGlt
YWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7Ci0gICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90
eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAgICAgICAgICAg
bmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAg
Q0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIElu
dFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7Ci0gICAgICAgICAgICBuZXdT
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFU
X1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7
Ci0gICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2Us
IDAsIDApOwotICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICB9Ci0g
ICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJm
YWNlLmdldCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWly
b1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBp
ZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxp
dHkgPD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1i
ZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Ci0gICAgICAgIGdk
a19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAm
YnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5
IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRy
KCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVM
TCk7Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRh
ID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoaW1hZ2VEYXRhLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERh
dGE7Ci0gICAgYmFzZTY0RW5jb2RlKGltYWdlRGF0YS5kYXRhKCksIGltYWdlRGF0YS5zaXplKCks
IGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZm
ZXI7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5t
X3N1cmZhY2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQot
ICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAg
ICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJu
IGltYWdlRGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNw
cAppbmRleCA0YzRjNDI2OTYxMjcxYzdiN2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFlLi43NTcwMDNi
MWYxMWRmNGIyNzY2YjQwOWU4MjJjZDhiNDIwZmI0YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0MzRExheWVyLmNwcApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEdDM0RMYXllcjo6c3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpCiAgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9j
dXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOwogICAgIFRleHR1cmVNYXBw
ZXJHTDo6RmxhZ3MgZmxhZ3MgPSBtX2NvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/
IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwOwogI2lmIFVTRShBTkdMRSkKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSh0ZXh0dXJlU2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUs
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCmluZGV4IDdkMmNlZmQ2MjYxZGVlMmEz
OWE4OWQxMDE3MDJlYjUwMjUyZjRmNWUuLmYwMzkxMzgwNjBkMzQ0MzRlNmNkZGJmOTZlYTY0YzMw
MWE2MzU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9CaXRtYXBUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBCaXRt
YXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyJiwgR3JhcGhpY3NMYXllciog
c291cmNlTGF5ZXIsIGMKIHsKICAgICAvLyBNYWtpbmcgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNj
ZWxlcmF0ZWQgYnVmZmVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGlzIGNvZGUKICAgICAvLyBpc24n
dCB1c2VkIGJ5IGFueSBwbGF0Zm9ybXMgdGhhdCByZXNwZWN0IHRoZSBhY2NlbGVyYXRlZCBiaXQu
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHRhcmdldFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAg
IGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXgg
MWM2NmFkNzljZTQwYzE0NTU4ZjY2NTI1MmIyNWUzYmI3ZGVkMTZiZC4uODk3Y2U0MGQwNGM3ZTBh
ZDFlYTE5MmNiOTEwNjE5ZjhmOTIyMjRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTQ1OCw3ICs0
NTgsNyBAQCBJbWFnZUJ1ZmZlciogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVy
KCkgY29uc3QKICAgICBpZiAobV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXIuZ2V0KCk7CiAKLSAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
YXB0dXJlU2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBkNWI5MWIyNjg2YWUy
NjFlYjUzYzA2ODliZWVjNjJmNTVlM2ZiNDU4Li44ZjUwZTU3NTcxZDdiMzg1MDBlZWQ3YmNkYTZi
M2E2NDJhYmY3OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAK
QEAgLTY5MDUsNyArNjkwNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50
aW5nU3RyYXRlZ3koKQogICAgIH0KICAgICAKICAgICBlbnN1cmVMYXllckZpbHRlcnMoKTsKLSAg
ICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZh
Y3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgp
ID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmls
dGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5k
ZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAKaW5kZXggOTE0MjAyOWEyZDQ0NjRkZjVjYjdiM2E0NDE5M2JlMjg2M2Mx
ZWQyYS4uOTM1YTZlZTllNzZmZjQ0MDJmOTg0YjVkMmI1MjFhNjk5MWM2MTUyMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTE4MSwxNCArMTgxLDE0IEBA
IHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBp
bWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgSW50UmVjdCBtYXJnaW5SZWN0ID0gc25hcHBl
ZEludFJlY3QobWFyZ2luUik7CiAgICAgYXV0byBpbnRlcnZhbHMgPSBtYWtlVW5pcXVlPFJhc3Rl
clNoYXBlSW50ZXJ2YWxzPihtYXJnaW5SZWN0LmhlaWdodCgpLCAtbWFyZ2luUmVjdC55KCkpOwog
ICAgIC8vIEZJWE1FICgxNDk0MjApOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0
aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNj
ZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgIEdyYXBoaWNz
Q29udGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAgICAg
ICAgaWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1h
Z2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7
CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVm
ZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocGl4ZWxBcnJheSk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGgg
PSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNl
dCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cAppbmRleCAwOGU0OTI4MmFkOTNiY2FjZDI5Nzc1Yjg0NmYwNTlkNWEyY2E3MTNlLi4xZDc3YjYz
YzZmZTI4MzEyYWUxMWVkODI1YjUyM2FhY2U3MTdlYzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBA
IC0xNDIsNyArMTQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xp
cHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGMKIAogICAgIGlmIChzaG91
bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUg
dW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4
dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2guCi0gICAgICAgIGNsaXBwZXJNYXNrSW1h
Z2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFVuYWNjZWxlcmF0ZWQsICZjb250
ZXh0KTsKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFj
ZTo6U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwogICAgICAg
ICBpZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKaW5kZXggNzViNTliNjNjM2U0OTYwYmQ0ZTNiZGJkODc0OTJhOTMyZjQzMTYx
Yi4uMTJlN2YxNWQ2MzJkNzZkOTlmNmJhYmE5MzhkMGQ5ZTI2MzRkOGU4MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRl
ci5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjph
cHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGVm
ZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAg
ICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtKTsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRl
cmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQg
OiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRl
cmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogICAgIGF1dG8g
c291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZp
bHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6
TGluZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBo
aWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygm
cmVuZGVyZXIpKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwog
ICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1
dGVUcmFuc2Zvcm0pOwogICAgICAgICB9CiAgICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3Jh
cGhpY0J1ZmZlci5yZXNldCgpOworICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9
IG51bGxwdHI7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlciAiIDw8IHRoaXMgPDwgIiBwb3N0QXBwbHlSZXNvdXJjZSBkb25l
XG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKaW5kZXggMTc4N2UxOGMyZGNlZjViZGY5OTI0NzRjZmMw
MjJiNTE2NmFkNTg0OC4uMTIwYzU3YjU2OTc4NzIyMDQ2NWJjNmFlYzBiNTgwNGM0NTVjZDgyOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZU1hc2tlci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVu
ZGUKICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdT
dHlsZSgpOwogICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvcklu
dGVycG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0
NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tp
bmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3Jt
LCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0
YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVw
YWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGI4MjE0MTFhZGU3NzUwODU2MTY4ODU2ZWQyMmI2MmVhNmI1
Y2QzZDkuLjk3ODY3YWFkM2MyN2I1YjUzOGQzYTc5ZmI0OTVkZGQ0ZjBmNDNkOTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjE4LDcgKzIxOCw3IEBAIE5h
dGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBH
cmFwaGljc0NvbnRleHQqKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIENhaXJv
IGRvZXMgbm90IHVzZSB0aGUgYWNjZWxlcmF0ZWQgZHJhd2luZyBmbGFnLCBzbyBpdCdzIE9LIHRv
IG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgIGlmICghYnVmZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IGZmNTJkMjUzNmY1
NjVmYTI5NWJlYjYyMDEyNjhhMGYzMzMxNzBmZjMuLjNlNGY3NThiMjI0NmU2ZGM4NDU2ZmRhNWQw
ZWJhODgzNGM0NjViMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtMTcsNiArMTcsNyBAQCBzZXQo
V2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VT
X0RJUn0vaW5jbHVkZSIKICAgICAiJHtXRUJLSVRfRElSfSIKICAgICAiJHtXRUJLSVRfRElSfS9H
UFVQcm9jZXNzIgorICAgICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZCIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVRfRElS
fS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKaW5kZXggNzk5NGUzY2E3Nzc2MzI5ZDZmNzVkN2FhZjBjOTNmZDlhYTA1OWUxMC4u
Yzk2OGQzNDc4YTYzZDVhZmFkNzQ3ZTljMmIzMTk5ZDNmYjcwNzQ3ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUsOCBAQCAk
KEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NS
SVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5p
bgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9t
YWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2Vy
Lm1lc3NhZ2VzLmluCkBAIC0xMDAsNiArMTAyLDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vz
cy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2Vy
dmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2Vi
RnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1h
bmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9M
aWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BV
L3dlYnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDBjZDIzZTAxYmJhY2Qy
ZWM0YTBiZGMzYmRmZjJiZTBkN2I2MGIwMWIuLjcxZGE2NTNiN2ViNzNiNjJmMTAwNDNlNGFkNDJl
MzcxYjk1Yzk2MTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVz
c2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5o
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTEzNSw2ICsxNDEsOSBAQCAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1l
c3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVj
dFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2Vz
UmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy5tYWtlCmluZGV4IDlkM2UyYTkwYzdiNGQ5MGE0MjZjNzZhNGUwNWU2YjJmODFj
YzBlOWUuLjFmNGE0NDdiMTQ4Y2IzMjBhY2Y2NzkwN2U2YmQwN2NlYTRlYmI4NzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChX
ZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAg
ICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwK
ICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQ
cm9jZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktp
dDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9H
UFUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJh
c2UgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0MCwxMSAr
MTQyLDE0IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0
aW9uTWFuYWdlciBcCiAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5IFwKICAgICBQbHVnaW5Qcm94eSBc
CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIgXAorICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgXAog
ICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkgXAogICAgIFJl
bW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYklu
c3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA1MmE5NWNlMGRlZDcwM2Q2MWQzNGE5ZDE3ZjBj
OGI0MmU2NjRmZGRhLi5kOTRlNTFjZGQ3Zjg5YWNmYWQxOGE3OWYzNzlmNGJmY2FhZjRmNzJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCkBAIC0xNDksNDQgKzE0OSw2MCBAQCBMaWJXZWJSVENDb2RlY3NQcm94eSYg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bGliV2ViUlRDQ29kZWNzUHJveHkoKQogfQogI2Vu
ZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29s
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
CiAgICAgICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVz
c2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
I2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVjc1By
b3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
KyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJl
Y2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikK
K2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25u
ZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9j
ZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxwdHI7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggYWM3MTI1ZDczOGQ4Njg4
OGVlYThiNGE5MjUxNWY5ZGU0ZDFmNmIwNC4uNDVlMGI1MWUzYzU2NjI3NDQxNGExNTRkMGNlODY3
ZmU2NjY2YWYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlz
cGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1
ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ2LDE4ICs0OCwyMCBA
QCBjbGFzcyBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKIAogY2xhc3MgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcwogICAgIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcz4KKyAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzPgogICAgICwgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBQ
QUw6OlNlc3Npb25JRCk7CiAgICAgdmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcygp
OwogCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0
aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZl
ck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2VzcyYg
Z3B1UHJvY2VzcygpIHsgcmV0dXJuIG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNvcmU6
OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVuc2lv
bihGdW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0gICAg
V2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7
IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJj
ZU1hbmFnZXImIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXImIGxv
Z2dlcigpOwpAQCAtNzUsMTQgKzc5LDIxIEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmluYWw7
Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbWVzc2FnZU5hbWUpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRy
PElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CisKKyAgICBib29s
IGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBi
b29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVy
aW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNl
UmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICAgICBSZWZQ
dHI8TG9nZ2VyPiBtX2xvZ2dlcjsKIAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVj
dGlvbjsKICAgICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eT4g
bV9yZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKQEAgLTkzLDYgKzEwNCw3IEBAIHByaXZh
dGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgc3RkOjp1bmlx
dWVfcHRyPExpYldlYlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2Vu
ZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1
NmU0NDUzNDZjMDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5YmE0ZDcw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAKIAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0
Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB2
b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM1ZjI3YzhmYTNlN2I4NTBlMTM3YmFlMzJlZGRiOGE3MTVlODQ2ZjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIg
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdl
dCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJN
YXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQo
KSwgKnRoaXMpOworfQorCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9u
KiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0
Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50
NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7
Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUlt
YWdlQnVmZmVyOjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFs
U2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdodCkpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6Zmx1c2hDb250ZXh0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBs
b2NhbEZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
SW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdl
QnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlhMTZhMTQzZTc3YjIyMmMzNTUxOGQzZDU2NmZmM2E5ZTVhMjFiY2IKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2Vu
ZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3Mg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIK
KyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIFJlbW90
ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIEltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisgICAgflJlbW90ZUltYWdlQnVmZmVyUHJveHkoKTsKKworcHJvdGVjdGVk
OgorICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVz
c2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVtb3RlQ3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KTsKKworICAgIHZvaWQgZmx1c2hDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworCisgICAgV2Vha1B0
cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7
CisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmIwYWU3OGUyY2U0YWI5NTE5YjY1YWI4NGI0ZDcyZGRlYjVlYzk1OGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBOb3RSZWZDb3VudGVkIHsK
KyAgICB2b2lkIEZsdXNoQ29udGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qg
ZGlzcGxheUxpc3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVu
dGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODEwMzcx
ZGUzYWU5MDY0MTcxNWVkMWM4OTE2YzI0NDVkN2NlOGExCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxC
YWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHsKKyAgICB1c2luZyBC
YXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikK
KyAgICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUg
Y3JlYXRlPFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eT4oc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBudWxscHRyLCBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXJQcm94eShzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCwgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJ
bWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQor
ICAgIHsKKyAgICAgICAgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2VuZC0+
bG9naWNhbFNpemUoKSwgbV9iYWNrZW5kLT5pbnRlcm5hbFNpemUoKSwgbV9iYWNrZW5kLT5yZXNv
bHV0aW9uU2NhbGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+Y3JlYXRl
U2VuZFJpZ2h0KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGxvY2FsRmx1c2hDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBs
YXllciByZXBsYXllcihCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpLCBkaXNwbGF5
TGlzdCk7CisgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBCYXNlUGh5c2ljYWxJ
bWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2Nzg3ZWVmYTIy
ZjBjNDYwOTEwOGI1YmZiNGQ3N2U5Nzc0MGI2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyUHJveHkuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hZjQwZmZjZTliMTk2OTkxZmRmOTk0ZjgyNGVkNjkyM2EwODg0ZjcyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VX
ZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2Vp
dmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQor
ICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5y
ZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRv
VUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdl
dCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rp
b24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRp
ZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAu
Y29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAg
aWYgKCFncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRj
aCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxl
cmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUlt
YWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2ltYWdlQnVmZmVyTWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1v
dmUoaW1hZ2VCdWZmZXIpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQoreworICAgIC8vIENyZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVu
IHJlY2VpdmVkIGJlZm9yZSB0aGlzIG9uZS4KKyAgICBpZiAoIW1faW1hZ2VCdWZmZXJNYXAuY29u
dGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ltYWdlQnVmZmVyTWFwLnJlbW92
ZShpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk5MzhiZWU1MTFlNjlkZmVmZmRlNTQ5ZDA4
MjIyNzg5ZTQ4MDgxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNz
YWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVm
ZmVyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFs
IH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKKworICAgIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsgfQorCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6
Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgICAgICAKKyAg
ICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVh
c2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworCisgICAgdXNpbmcgSW1hZ2VC
dWZmZXJNYXAgPSBIYXNoTWFwPEltYWdlQnVmZmVySWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkltYWdlQnVmZmVyPj47CisgICAgSW1hZ2VCdWZmZXJNYXAgbV9pbWFnZUJ1ZmZl
ck1hcDsKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzczsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRkY2Y3ZjMy
YjQ1MjZkZGZiZWJiNzg3ZjgwMmMzNmZkOTU3YmM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2Vz
IC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lk
IENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdl
YkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZUltYWdlQnVmZmVyKFdl
YktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5CmluZGV4IDVkODQ0NzEzMjViYmE3YTQzNWVkOTMzYzA5MDkwOTQ1M2I5ZDQw
MjUuLjUzYjc5MmVkYjZiNjIzNzdjOGVjOWMzM2E5OWE1NTQ5YjlhNTU1ZWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dl
YktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjcsNiArMjcsNyBAQCBpbXBvcnQg
c3lzCiBmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyCiAKIFdBTlRTX0NPTk5FQ1RJT05fQVRUUklC
VVRFID0gJ1dhbnRzQ29ubmVjdGlvbicKK1dBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRF
ID0gJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJwogTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdM
ZWdhY3lSZWNlaXZlcicKIE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdOb3RS
ZWZDb3VudGVkJwogU1lOQ0hST05PVVNfQVRUUklCVVRFID0gJ1N5bmNocm9ub3VzJwpAQCAtMjA0
LDYgKzIwNSw4IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6
CiAgICAgcmV0dXJuIGZyb3plbnNldChbCiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JywKICAgICAg
ICAgJ1N0cmluZycsCisgICAgICAgICdXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uJywK
KyAgICAgICAgJ1dlYkNvcmU6OkNvbG9yU3BhY2UnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1l
bnRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZldGNoSWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXInLApAQCAtMjExLDYgKzIxNCw3IEBAIGRlZiB0
eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpQb2ludGVySUQnLAogICAgICAg
ICAnV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZScsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySm9iSWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJDb3JlOjpTZXJ2aWNlV29ya2VyT3JDbGllbnREYXRhJywKQEAgLTIxOCw5ICsyMjIsMTIgQEAg
ZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dl
YkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6OlNXU2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpB
Y3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6
Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpS
ZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRGVjb2RlcklkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpSVENFbmNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllcicsCkBAIC03NjEsMTMgKzc2OCwxNiBAQCBkZWYg
Z2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVz
c2FnZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShX
QU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J3ZvaWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5h
bWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBl
bHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRl
bWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisg
ICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9B
VFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAg
ZWxzZToKQEAgLTc3NiwxMyArNzg2LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIo
cmVjZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNf
bWVzc2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRl
KFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnXG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVj
ZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FD
WV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7
XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRF
RF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1
dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9
IFtzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBp
biBzeW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRT
X0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVu
Y29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xu
JykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtc
bicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4n
KQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7
XG4nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRl
eCAxZGUzMDQyYzA3OTE2NWExZDI1YTZmNGI1OGQ2NjA5YTY1NjYwMmY4Li5hYTg5ZjY1YWJiNDY0
Njg2OWM4MzBiOTVmZGY3NTY0Y2MwZTI0M2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuaD4KQEAgLTc4OSw2ICs3OTAsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsKIAogbmFt
ZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlz
dEFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0LAor
ICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAogICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCBkMDM5
M2JiMDYyZDk3YWU5NmE3MjI1YTZkNjA3YjA3NGIzOGUwYzk4Li5mNzIyNTI3ZTg2ZTQ3M2E0MGQx
MzkzMDZlM2YwOWNmZWQ5MzY3YmExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI5LDYgKzI5LDggQEAgR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAogR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVNZWRpYVJlc291cmNlLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJl
c291cmNlTG9hZGVyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlci5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5j
cHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MTIsNiAr
NTE0LDggQEAgV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNw
cAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNSU1FVHlwZUNhY2hlLmNwcCBAbm8t
dW5pZnkKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VQcm94eS5jcHAK
K1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCitX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAogCiBXZWJQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CmluZGV4IGZlNzU3OTUzNzYxYjk5ZjY5YjgyOGMxMWJiYzBmMzMxYWVlZmMxOTEuLmZhODNmZGM5
MmExZmQ1NTdkMmQ5Y2E2MDJlNjRhNjFiOTMyYTMxNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQK
QEAgLTYzMSw5ICs2MzEsMTMgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2VzCiBFZGl0YWJs
ZUltYWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNl
aXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAKIExpYldlYlJUQ0NvZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVy
TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNl
cnZpY2VXb3JrZXJGZXRjaFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250
cm9sbGVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA1Nzc4YmE1ODcyMzJjNmU2YTc4MjI0NmI5
YzdjYjMyMGFlOGZjY2VhLi5kMzFiMzNkN2MyOTFlNTJjZjg3Njc0OGZhZTFhMTQyNzQwZTBlZDk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTM5NDMsOCArMzk0MywyNiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tU
b3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLVG91
Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25p
emVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3VjaEFj
dGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJl
UmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYw
NjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3Vz
ZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlCMjNB
RDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE5MjNBRDdC
REYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVG
MTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tl
ck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAw
QTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90
ZUltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAy
M0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEx
MjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3Nh
Z2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBG
NjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1
QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3Rv
cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5
QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUlu
dGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFT
dG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzcyLDYgKzYz
OTAsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEy
RjIzOUIzQjBDMDA5NTk4RTIgLyogbWVkaWEgKi8sCisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYx
MjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2
IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQ
cm9jZXNzQ29ubmVjdGlvbi5oICovLApAQCAtNjM4OCw2ICs2NDA3LDcgQEAKIAkJCQkyRDlGQjIw
NDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5Rjkz
NiAvKiBtYWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAor
CQkJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJ
CTQxNzIxOThFMjNCNjMzQ0EwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1
MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJE
OUZCMjAwMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8s
CkBAIC03NzQ5LDYgKzc3NjksMzggQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwogCQl9OworCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5n
QmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJ
NzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICov
LAorCQkJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmggKi8sCisJCQkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMw
MEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1
QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAq
LywKKwkJCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmggKi8sCisJCQkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVy
aW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBF
MjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyog
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLywKKwkJCQk3MjFGMUU5QjIzQUQzNkQwMDBC
REFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8sCisJCQkJNzJCQkU0MEYyM0FCMDQ4
QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3MkJCRTQxMDIzQUIw
NDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxNDIzQUIw
QUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIz
NUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywK
KwkJCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oICovLAorCQkJCTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdC
YWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0
MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCAxOGU5MzZkZTMyMzA3NzBmMjQzNjFiNmFiYWE4
ZTE3ZTRkMmU1YWMwLi4xODhmYWMyMGExZTkyM2RmNjJiYjFhMzgwNTUwYWFhNGY5NGQ4ZTM2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLmNwcApAQCAtNjAsMjkgKzYwLDM1IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246
OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0
cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCi17Ci19Ci0KLXZvaWQgR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBN
ZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRp
YVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVj
dGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBjYXB0dXJlTWFuYWdlciA9IFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI+
KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BV
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9S
TShDT0NPQSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNw
YXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNo
U3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9p
ZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggMzFjNjEwNDY2OWYyZjAyZmZh
NDQwZmViODgwOTI2Yzc0YWUyNmFjZi4uNmQxYjgzZGU1ODM2YWZhZTIxYWZjMzRmNThhMjJlNWQ2
ZDMyM2M3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJN
YXAuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKTsKICAgICAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAog
cHJpdmF0ZToKICAgICBHUFVQcm9jZXNzQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIpOwpAQCAtNTMsMTAgKzU1LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDOjpDb25uZWN0
aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRy
PElQQzo6RW5jb2Rlcj4mKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBw
cm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nv
bm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJN
YXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmlu
CmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5
ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNz
YWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29u
bmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmJiZGQ4NjM0MDUy
MDVhZGE3ZWYzY2M3Mzg0NjAxOWZiMTk5M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDdlYWY5NDRiYTM4ZjBhOTk0YTViZTUyNDE5NTlmNGFjODhhNTkyMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsg
fTsKK3VzaW5nIEltYWdlQnVmZmVySWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VC
dWZmZXJJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjRhNTFiNGNlODBmN2IxYTZlY2JjODJiZTQ2NWQ5YTgxZmQxZDM5
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3Nh
Z2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1v
dGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcikKKyAgICA6IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVz
c2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAg
ICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
ci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpDcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIo
KQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4KKyAg
ICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2
ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKCp0
aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxlYXNlSW1hZ2VC
dWZmZXIobV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3Vp
bnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9
CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
KQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAg
ICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2Fn
ZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQ+KG1faW1hZ2VC
dWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGlu
Z0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2Fp
dFNldEZsdXNoSWRlbnRpZmllcigpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVj
dGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0
Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRp
Zmllcj4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJ
bnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJlbW90ZUlt
YWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2VuZCgpCit7CisgICAgY29uc3RleHByIGNvbnN0
IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3Vu
dCA9IE1heFdhaXRzQ291bnQ7ICFpc0JhY2tlbmRDcmVhdGVkKCkgJiYgd2FpdHNDb3VudC0tOyAp
CisgICAgICAgIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKworICAgIGZvciAodW5z
aWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7IGlzUGVuZGluZ0ZsdXNoKCkgJiYgd2Fp
dHNDb3VudC0tOyApCisgICAgICAgIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKK30KKwordm9p
ZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBtX3JlY2VpdmVkRmx1c2hJZGVudGlm
aWVyID0gZmx1c2hJZGVudGlmaWVyOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1v
dGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBk
aXNwbGF5TGlzdCkKK3sKKyAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpGbHVzaENvbnRleHQoZGlzcGxheUxpc3QsIG1fc2VudEZsdXNoSWRlbnRp
ZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICBlbnN1cmVVcGRhdGVkQmFja2Vu
ZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI1
NmUzMWQwY2FmMjA2ZWU1MDZjOTc5NjkwNWI3ODQwYTQ5YjhhYgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUg
PHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1v
dGVJbWFnZUJ1ZmZlcgorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIH5SZW1vdGVJbWFnZUJ1
ZmZlcigpOworCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisK
KyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBCbG9ja2Vycwor
ICAgIGJvb2wgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworICAgIGJvb2wgd2FpdFNl
dEZsdXNoSWRlbnRpZmllcigpOworCisgICAgdm9pZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOwor
ICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50
aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQorCisgICAgLy8gSVBDOjpNZXNz
YWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9v
bCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRGbHVzaElkZW50
aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOyAgICAgICAgCisgICAgdm9pZCByZW1v
dGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7
CisKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIgeyBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKKyAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4
Nzc1NTdjMGFhOGM4YTkwNTA0YTEzNTgwZGE1OTFhYTViZmM1ZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2Vz
IC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6
SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29s
b3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICB2b2lkIFNl
dEZsdXNoSWRlbnRpZmllcihXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNo
SWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzFj
N2FkODA0YzJjNDFmZWQxNmNiMTA2YzY2ZDA5Zjc0MDM1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyIDogcHVibGljIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMg
UmVtb3RlSW1hZ2VCdWZmZXIgeworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVy
ID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxjdWxh
dGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+KG5ldyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgICAg
IDogQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFn
ZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghbV9iYWNrZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5
cGU6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNC
YWNrZW5kQ3JlYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsg
fQorCisgICAgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKCFtX2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAg
ICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29u
dGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3Bs
YXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1h
Z2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3Bs
YXlMaXN0LmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4
dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE3MzJhNTViMGIyZWI3ODQyMzdlODJlYjg1MWIwYjk0YjkyNzc5ZjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kZGM5NjQ5ZTdlZWEwYTFiMDY3NWNkYmY4MTg2N2U0Y2Y3YWMyZGM3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisK
K1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAg
IC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVz
c2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisK
KyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJl
bW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZUFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAg
ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBmMzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0NGMw
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBw
dWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisK
KyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2Vu
ZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVyaW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kikgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0NjVm
YjhjNmY3N2Y3ZmRlMzhmNjhjYmIwNzUyNDZjOTk0ZGIxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyVHlwZT47CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKaW5kZXggNDZkMTE5ODc3
MmM1MWI4YWQ5MGVmOGExNzEzMjFmZmNlMjkwZmNmOS4uYjAyOTIxZTA2MWE2MGUzMzUwODg3ZTdi
MDg5MzI0ZWFiOGVhM2Y1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCkBAIC00Miw2ICs0Miw4IEBACiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogc3RhdGljIHdl
YnJ0Yzo6V2ViS2l0VmlkZW9EZWNvZGVyIGNyZWF0ZVZpZGVvRGVjb2Rlcihjb25zdCB3ZWJydGM6
OlNkcFZpZGVvRm9ybWF0JiBmb3JtYXQpCiB7CiAgICAgaWYgKGZvcm1hdC5uYW1lICE9ICJIMjY0
IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggOGU0YzkzNzVkN2I4Y2MxMGZmYTAwODAzZDQ4
MjE3M2JlNWEzNTU4YS4uNDgxZmFhYWFjYWQyMGQyNjM5ZTg1ZDE2NTYzYmViMjg3MmUwMGRkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNo
cm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAiUGFnZUJhbm5lci5oIgorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJVc2VyRGF0YS5oIgogI2luY2x1ZGUg
IldlYkNvbG9yQ2hvb3Nlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpA
QCAtODgxLDE1ICs4ODIsMjIgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVu
dDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZv
cm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJl
YSA9IG1fcGFnZS5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNy
ZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBudWxscHRy
OwogfQorI2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJv
bWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKyAgICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7
CisjZWxzZQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgor
fQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUm
LCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhl
Y2ZhNjg1NWUxYzFkNjA4NTBlNDcxZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQw
MzIzNTUxYjRmNTNiMmQxZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDgg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBj
cmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNv
bnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVy
aW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAg
Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25z
dCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJp
Z2dlckZsYWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4
MjI0NmNkMTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4
Y2U4ZmFiMWVjYmJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsy
MDIsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9y
Q3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmlsOwogCiAg
ICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVk
IGluIGFuIHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRp
bmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gbmlsOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjVhNmIwOTY1M2MxZDQzYzMyNjIxMmM2MDQxOWJmZDRh
ZGI1YjNlOC4uNGU5YWY5YTUzZmYzYjIzMzg1YjNlMDI2ZjU3OGVlYWJlMzdlNTYzZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTAxLTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVy
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRp
c3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0w
NyAgVHJ1aXR0IFNhdmVsbCAgPHRzYXZlbGxAYXBwbGUuY29tPgogCiAgICAgICAgIENvcnJlY3Qg
ZXhwZWN0YXRpb25zIG1hZGUgaW4gcjI1NDEzNCwgcjI1NDEzNSwgYW5kIHIyNTQxMzYKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4
cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3MmFjY2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3
Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2YmZiMzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0
ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQog
KHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkp
CisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAg
KGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAo
ZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAo
MTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387181</attachid>
            <date>2020-01-08 19:28:50 -0800</date>
            <delta_ts>2020-01-08 22:00:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200108192849.patch</filename>
            <type>text/plain</type>
            <size>455005</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MjQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzllYjI1MjY1YWNjMjk4
NGYzOWRjMDY1NzI2ZjliZDRlODdhODgxYy4uMmNhZjljZTZlNDJjMTkxZGY5YmU3ZGE0NGI0NDA4
Mzc1ZmMxMjczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzNSBAQAorMjAyMC0wMS0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5k
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRl
ZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJ
bWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250
ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJp
dG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVD
b21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRv
THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFs
U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29s
dXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNhbEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjbGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNl
QmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
bWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0
ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURh
dGFSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVt
dWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzU2xvdyk6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJ
bWFnZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0
ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VU
SSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxp
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAg
ICAgICAoTmljb3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9D
b250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0
QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisK
IDIwMjAtMDEtMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWR1Y2UgYmluYXJ5IHNpemUgYnkgcHVyZ2luZyBDKysgdHlwZSBpbmZvcm1hdGlvbiBpbiBP
YmplY3RpdmUtQyBmaWVsZHMgYW5kIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDEwMTE3ODk1OWM4
Zjk3ZThmNjgzZmUwN2E5MTQ4ZDU2Mjk1MjNiYi4uOGQzNGQ0NzA5MGVlYzJmYmZhMmY2YTI5ZjQ2
Y2Q2ZTljOTNlMWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAyMC0wMS0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJl
Y2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1
c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2Fn
ZXMuaW4uCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQ
VVByb2Nlc3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRp
bmdGbHVzaCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDoKKwogMjAyMC0wMS0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBiaW5hcnkgc2l6ZSBieSBwdXJnaW5nIEMrKyB0
eXBlIGluZm9ybWF0aW9uIGluIE9iamVjdGl2ZS1DIGZpZWxkcyBhbmQgcGFyYW1ldGVycwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDgxYjYwN2U0Yzc2OWEwZjE1OTRjYmE1YWE3ZjU0
ZGQzNWU3MGNjOGIuLjg4OTQxOGQ2ZGRjNTQyNzQ0ZWM2MjYxMDE2NTBhODcwNjQ0ZTAyYzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0wOCAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIElt
cGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRT
aGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA4ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIGJpbmFyeSBzaXplIGJ5IHB1cmdp
bmcgQysrIHR5cGUgaW5mb3JtYXRpb24gaW4gT2JqZWN0aXZlLUMgZmllbGRzIGFuZCBwYXJhbWV0
ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5
M2I5OTY0ZTc3Li45OTM3MGJiNGI3YjgzMTU1N2YzNjA4N2EyMmEzOGYxM2NkOWJhZDJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNs
aWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJh
Y2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0
LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9u
cy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1LDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVu
dGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24u
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
YWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJv
YXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQw
ZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVy
OjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVm
ZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VC
dWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEy
OTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0
NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2
LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
aW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzVi
NTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBv
aW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQxMTIxNTU3YWU2ZjM1ZGI5YWQ1ZjRjMWU4YWNjY2EwODY2M2U2ZmIuLjdh
MjA5YTg2N2QzZTFhMTQwZGIyMDM0NDVlZDNhZGVlMjc2ODhlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNS4uNGYwM2Vj
MjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2ZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
R1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVlNGJiOTQzMWFlY2I0YmNjYzI4YmQyLi45
N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFlNTJkZjJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RL
LnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJlZnJlc2hNb25pdG9yR3RrLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZlMjhiNTdkYzc0NGM5
ODJlYWU3MTAxYTYyMmJiMTc5MGJjOWZiNzIuLmRjMTUzNjBiZmE1ZDg1Mjc2YTA3NWM0NjFjZjZl
OGFkYTVmNjZkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAw
ODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5
NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4
NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8q
IFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdE
MTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0
RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2
MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NB
OTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyog
SlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzQsMTAgKzIxMzIsMjEgQEAKIAkJ
NzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJE
QUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQ
YWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVD
OTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEy
M0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMw
MDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0
RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEz
QyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUx
MURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIw
MEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5
Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUz
RkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAw
MjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEy
M0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJE
NUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxp
bmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJ
NzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMw
QUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDEsOSArNjU1MCw2IEBACiAJCTIy
NUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBF
IC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0Ix
MzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJC
QkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkw
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMSw4ICs5NjA3LDExIEBACiAJCTcxRUZDRURFMjAy
QjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0
cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4
NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAv
KiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRW
YWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0
MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Zh
bHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0Mx
RjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5n
TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0
OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHBhdGggPSAuLi9BbHBoYVByZW11
bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MjMsNyArOTYzMiwyMCBAQAogCQk3MjdB
RkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTA3
QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQy
M0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0Qjcw
MDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNjIz
QjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU5MjNC
NDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0
MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjg3LDcgKzEyNzA5LDYgQEAKIAkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVs
ZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2ODYsNiArMTY3MDcs
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODg1LDYgKzI0OTA3LDcgQEAKIAkJQjI3NTM1
MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNH
LmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNw
cCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICov
LApAQCAtMjQ4OTQsOSArMjQ5MTcsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAg
LyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIg
LyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQy
MEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBC
OTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQkU0
MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJ
CQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0
MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIx
REIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1
NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5
OTIsNiArMjUwMTgsNyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21Q
YWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJh
eS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMu
aCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1MDgzLDcgKzI1MTEwLDggQEAK
IAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywK
IAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJ
CUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5
RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MjAyODBE
MTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJC
RTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0Qx
OUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZF
QTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4
OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MTQwLDYgKzI1MTY4LDgg
QEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAog
CQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZB
NkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkJFM0ZFMjNBQUJG
QTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MjMyM0FD
NDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1
NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMz
REMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4
NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ5
LDYgKzI1MTc5LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmgg
Ki8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNw
cCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUu
aCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICov
LAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJ
CQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYz
REQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5OTAsNiAr
MjkwMjMsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6
ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyog
QWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1
QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4
dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8q
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIz
MTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjk2ODQsNiArMjk3MTgsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3
MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMy
Mjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAw
MDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDI5Miw4ICszMDMyOCwxMCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5
NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5
QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4
MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8q
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFGMUVB
NzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8q
IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAx
OTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTMxNzYzLDYgKzMxODAxLDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAx
RDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4
MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlz
aWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0QyMDBC
OTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
RDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0
dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzgyLDYgKzMxODIxLDcgQEAKIAkJCQlC
Q0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8q
IFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVBODAw
MjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0
NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2Nh
bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTksNiArMzE5OTksOCBAQAogCQkJCUJDRUE0ODc2
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhG
MkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNl
U3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQz
IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjNDMUY1
OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0
QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMTgxNzUxNWUxY2M3MDkwYzdlNTlhMGNi
ZDI1M2ZmNzI2MTc0NGM3My4uZjUwMWNhMjNhNzM5NWYxZTViMjFjODFiMDRkZGIwMTkzYjdhMmYz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRo
KCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUg
PSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwog
ICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0y
Nzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7
CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0
aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6
Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbikg
fSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2Qx
OTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2
LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0g
SW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZm
ZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRv
IHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAg
IGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdl
OjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21Q
YWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNw
cAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRm
ZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFp
bnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdo
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNS
R0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3BpZWRC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1h
Z2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9u
R3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGll
ZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgpLCBQ
cmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVm
ZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlk
YWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAxNDg2
YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFz
UGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYw
LDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1
ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAg
bV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3Vt
ZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBS
ZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52
YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4LDM5
ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25z
dCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2Vz
RGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBp
ZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYg
KHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NE
aXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29u
dGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBI
VE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAg
IGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFn
cyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6
OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykg
Y29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAo
YnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdp
bmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRo
KCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVu
YWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkg
JiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgp
LT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcg
c2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9j
dW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgCisg
ICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52
YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAg
cmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6
OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYg
KHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRB
Y2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJp
bmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+
ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAj
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7
CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2Nl
bGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEz
NGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxp
c3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVl
MTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMw
OTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
aXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMg
UmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0
ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5k
ZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUx
MTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAg
ICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAg
ICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsg
SW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdlQnVm
ZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgp
IHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29u
c3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVu
YWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBP
ZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0
MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4
MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyAr
MTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdC
dWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0
ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkw
LDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVm
UHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpj
cmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVh
bikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQo
KS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQo
KSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAgICAg
ICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0
OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4
dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5k
aXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERpc3Bs
YXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQotCiBj
b25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXplU2F2
ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIAog
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEo
Q29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9h
dCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgp
Lm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
Y29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1h
Z2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBi
eSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1h
Z2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1w
dHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkg
PSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRy
LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRh
UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAgICAg
U3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBw
ZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0
ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgs
IGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0
SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgs
IGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1dElt
YWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5WCwg
ZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNh
bnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRp
Y19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVz
dE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29v
cmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBi
dWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisg
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3Rl
bSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDog
YnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1
Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAg
ICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJy
YXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9p
bnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRhLmRh
dGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3KGRl
c3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hh
ZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODky
YmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIxNDFh
NzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoK
ICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlz
cGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENh
bnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0
b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRl
PGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNv
b3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBj
b25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRp
cnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBk
eSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRp
cnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1
MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7
CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJp
bmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFz
LCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjks
NyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNB
Y2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0g
QWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4u
MTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAg
IGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1h
Z2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAg
ICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFn
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAg
ICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2Us
IFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB2
aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8s
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1
MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlwZSA9PSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0
dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxl
dmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQp
IHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdl
dCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9y
bWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4LDcg
KzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1
ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0
NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8gdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIElt
YWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQo
KSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVm
ZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdo
dCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAg
ICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAg
ICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZl
cjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2
aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAg
ICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4SW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVm
UHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVy
KEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6
ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVj
dCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZm
ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdl
QnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRo
aXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1f
YnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMx
YTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQog
ICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6
ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwg
VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXpl
KCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3
ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50
aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNl
dEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQog
CitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25z
dAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0Jh
Y2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1f
cmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpk
aXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMx
NzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApA
QCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9v
bCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNr
ZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigp
IG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qg
b3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJl
c3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3
NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0
OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURv
bWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMw
Myw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NM
YXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJm
YTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0
ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
U25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0
aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAg
aWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9y
KQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFn
ZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVj
dC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250
ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQz
Zjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYz
M2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBA
IC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAg
ICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVj
dCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAg
ICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRh
dGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFV
UkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwg
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRh
NDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNmIwMGM1ZTY0MDEwOTI4NzJiNDdiNWE0ZmM4ZTkyYmQz
YTE5MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDkg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyR0xTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRy
Q2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRv
dy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCmluZGV4IDJjZmVjYWRj
MjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQuLmY1ZjIxN2NjZDg0MDYwODAwMjU1YzIw
M2QyMjE3Y2FlY2UwY2UyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hv
c3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRv
d19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRn
ZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBSZW5k
ZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNl
TW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworICAgIAogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5NTc1NGM0NjI3NTdiNzhk
YmZhNDEwMjU0MzJhZjBiN2QuLjlhNzQyNWUwMzM2OTJlMzRhMzczNDhjNWJhOWU3M2U5YzQyNGFh
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyAr
MzAsMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
R0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
SW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZkMWNhZWY4NTQxZGVlMDYyYmZlMDU0MTZjZGEyZjJhN2Y3OTI2ZTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRp
cGxpY2F0aW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAgIFVucHJlbXVsdGlwbGll
ZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFhYjQ2ODY3NjhmMWEyODJkNTg4
MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgOiBw
dWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9
IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2Fs
SW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOworICAgIH0K
KworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBl
PiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IERpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhp
czsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlz
dChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1ODZkZDRiMmFmOTFmNDU2NTUzNWE3MDI5Mzky
M2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEyZmY4NGMwZTY2NDJmODE4MjcwOTljZTgzN2UyODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAjZW5kaWYKICAgICBib29sIGlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5h
Y2NlbGVyYXRlZDsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRl
eCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4NzlkYmQ0OTY5NjRiNDkxYjE4Li4wMGJlMGZlYTA2MDU1
Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAorI2luY2x1ZGUg
IkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFiNzZmMTIu
LjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3OGFhMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5j
bHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIsMTcgKzEyMyw2IEBAIGVudW0gVGV4dEFsaWduIHsKICAg
ICBSaWdodFRleHRBbGlnbgogfTsKIAotZW51bSBSZW5kZXJpbmdNb2RlIHsKLSAgICBVbmFjY2Vs
ZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlciwgLy8gVXNlIHBsYWlu
IG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIHBsYXRmb3JtIEFQSSB0byBhbGxvY2F0ZSBi
YWNraW5nIHN0b3JlLgotICAgIEFjY2VsZXJhdGVkCi19OwotCi1lbnVtIGNsYXNzIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gewotICAgIFByZW11bHRpcGxpZWQsCi0gICAgVW5wcmVtdWx0aXBsaWVk
Ci19OwotCiBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBvc2l0ZU9w
ZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogU3RyaW5nIGJsZW5kTW9kZU5hbWUoV2ViQ29y
ZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgV2ViQ29y
ZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMsNyArMTMzLDYgQEAgV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOwotV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBj
MDEyNjM3MGNiODY1OTI3YTMyYmYxMWY2MTQ4NmQ3MWFmN2I0NzU4Li40ZTJiZTcxYzc0MWM1NWY1
NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzggKzI4LDQ0
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRM
ZW5ndGggPSA0MDk2Owotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xh
bXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBSZW5k
ZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUlt
YWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUs
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3Mp
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRl
eHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFy
Z2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQot
I2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0
YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhD
bGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0xMDUsOTcgKzExMSwxMiBAQCBGbG9hdFJlY3QgSW1h
Z2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4g
RmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0K
IAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBm
b3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZv
ckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6
ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3Jj
Q29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBv
bmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBp
ZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6
OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkr
KykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAg
ICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICog
MjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAg
IH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7
Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9
IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxp
bmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5k
aWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRU
b0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgp
LCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQ
aXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAg
ICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAg
ICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBz
cmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAg
IGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAo
KGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZz
ZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6
ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmlj
IGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVy
LgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENB
SVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAot
ewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVj
dCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVy
IHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVk
IGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAg
ICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwog
fQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNv
cHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9C
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUocmVjdC5zaXplKCksIGNvbnRleHQpOwog
Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihz
Y2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0
byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXpl
LCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxl
IGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5z
Y2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBy
ZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBj
b250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAg
IC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFu
ZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7Cisg
ICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGli
bGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIHJldHVybiBhcmVFc3NlbnRpYWxs
eUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29udGV4dCgpLnNjYWxlRmFjdG9y
KCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQog
Ci0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VC
dWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9yeUNvc3Qo
KSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5l
ZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4K
LSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9l
c24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXpl
KCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBpbWFnZUJ1
ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXplX3QgSW1h
Z2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9Ci0jZW5kaWYKIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggM2JkZWU0ZWUwMGVkMTdhZTM0M2IyZjZhOGRkZDAwOTM4OWMyZTZiZi4u
YzYwYjc1ZDRmYmZiYTVkMmJkNDUwYjEzYTc1MzEzMGZjNmJjY2FmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
NywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3Mg
SW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNr
aW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2Vx
dWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3Rv
cmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBj
bGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdl
QnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwg
V0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsK
LSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJu
IGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNl
ID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRp
ZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNv
bnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIC8v
IENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRo
IHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVu
IGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVm
ZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3Rv
cmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZs
b2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNl
ZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0
ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5n
KGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNv
bnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUg
Y2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMg
RmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgc3RhdGljIEludFNp
emUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBH
aXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZp
b3IKLSAgICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0g
ICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIGVudW0g
Q29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3Jk
aW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVT
eXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CisgICAgdmlydHVhbCBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAKLSAgICB2
b2lkIHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRl
U3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pOworICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxv
Z2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9
IDA7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVh
bCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNp
emVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0
OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CiAKLSNpZiBVU0UoQ0FJUk8pCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
LCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotI2lmICFVU0UoQ0cpCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNy
Y0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0j
ZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsK
IAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0OworICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2
ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Cisg
ICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0
aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3
b3JrCi0gICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFu
ZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVu
dW0sIGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ug
c3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgPSAwOwogCi0gICAgLy8g
VGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdo
aWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJv
b2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7
Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAg
ICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6
ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
VmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi1wcml2YXRlOgotI2lmIFVT
RShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhl
IGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8vIGltYWdlLCBj
cm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGlj
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZWxpZiBV
U0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01Q
dHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgotICAgIAot
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCA9IEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRl
U3lzdGVtOjpMb2dpY2FsKSA9IDA7CiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAgIElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRU
b0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBD
dXN0b21QYWludEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7
Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZs
b2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBs
YWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRo
YXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9v
bCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2Rl
LCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQot
ICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJ
bWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogfTsKIAotI2lmIFVTRShDRykKLVN0
cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTc4NWM4ZTc4YzQxYzMyNjU1ZjEyYzI3MjAyMDFhZWUwOGYyYWYxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFj
a2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFz
aygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW50
ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5s
ZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQg
PCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3Qg
YSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFh
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsdW1h
ID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8g
MjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1h
KTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWlu
YW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwYjJjMzMwNjcyMTJk
MTNhOWVmNjI2ZTk5NGVkMDEyNTdlNWM5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDEx
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAi
TmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0b3JlQ29w
eSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3Mg
ZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNl
cXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2Vy
dmVSZXNvbHV0aW9uIDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBj
bGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKwor
ZW51bSBjbGFzcyBDb29yZGluYXRlU3lzdGVtIDogdWludDhfdCB7CisgICAgTG9naWNhbCwKKyAg
ICBCYWNraW5nU3RvcmUKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworCisgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNv
bG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVy
biA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmlydHVhbCBz
aXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB2aXJ0
dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7IH0K
KworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0
dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29yZGluYXRlU3lzdGVtKSB7IH0KKyAgICAK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dM
ZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICAgICAgOiBtX2xv
Z2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFs
U2l6ZSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAg
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworICAgIEludFNp
emUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRTaXplIG1faW50ZXJuYWxTaXplOworICAgIGZsb2F0
IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Zjg5ZWMwZDM2ZmVmYmQxMmFiZTU0M2MzZjIwMzRmNjE1OGIzZDJjZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShD
RykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8pCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ3NzJjNjk0ZDM4MWFjYmM5MjYwZGJiNDdlOWZlMjcwMWU0Mjc2NWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdl
QnVmZmVyLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgorY2xhc3MgUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJs
aWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gUGh5c2ljYWxJbWFn
ZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxJbWFnZUJ1ZmZlciwgSW1hZ2VCdWZmZXJUeXBlPjo6dmFs
dWUpOworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICghYmFj
a2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJh
Y2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFj
a2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RGTW92ZShiYWNrZW5k
KSkKKyAgICB7CisgICAgfQorCisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
KworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICAgICAg
cmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250
ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAg
ICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYXNlVHJhbnNmb3JtKCkgOiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmxvZ2ljYWxTaXplKCkg
OiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+aW50ZXJuYWxTaXpl
KCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPnJlc29sdXRp
b25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPm1lbW9yeUNvc3Qo
KSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5leHRlcm5hbE1lbW9y
eUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkg
eworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdlKGNv
cHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAg
ICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnRyYW5z
Zm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENvbG9yU3BhY2UpOworICAgICAgICB9
CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2Fz
dDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5nZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgYXJyYXksIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9y
bWF0LCBhcnJheSwgZGF0YVNpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3Rl
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5ZXIo
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0
Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9u
VGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlU
b1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3Jt
YXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9iYWNrZW5kOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0MGM3NTI4NzMy
OTVlMjBkZjVhZWE2ZmE1MDc3MTY3NmIzY2UxZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1
ZGUgIkltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJE
KQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ7CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYg
KFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpKQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNp
bmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IFBsYXRmb3JtSW1hZ2VC
dWZmZXJCYWNrZW5kOworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlz
aWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIEFjY2Vs
ZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0
ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kPjsKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVy
ID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
NGYwMDg2MTg1Y2YyMjg1YmJmMjU1ODJmOTk3MjM5ZjZlOWQ3ZWU3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5o
IgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVuZGVy
aW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+KG5ldyBSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW5kZXJpbmdCYWNr
ZW5kJiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGNvbnN0IEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPj4gc2hhcmVkUmVuZGVyaW5nQmFja2VuZCB7IFJlbmRl
cmluZ0JhY2tlbmQ6OmNyZWF0ZSgpIH07CisgICAgcmV0dXJuIGhvc3RXaW5kb3cgJiYgaG9zdFdp
bmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpID8gKmhvc3RXaW5kb3ctPnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQoKSA6ICpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kLmdldCgpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFj
Y2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdp
bmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1JbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRv
dyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJh
dGVkUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2lu
ZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjdkMzkyMDQwNGNj
YTVjYjRiYzIyMzI3NzVjNjQ5MDI5YjVjYzU5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDQ5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW50U2l6ZTsK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAg
IHN0YXRpYyBSZW5kZXJpbmdCYWNrZW5kJiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGNvbnN0IEhv
c3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgCisgICAgdmlydHVhbCB+UmVuZGVyaW5nQmFja2Vu
ZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgCitw
cm90ZWN0ZWQ6CisgICAgUmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iY2MzOTg4ZmQ2NDNkYTcwNDQxZTUzMzhiMTZhMTFiMDU0NjMxMzg0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9k
ZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBj
bGFzcyBSZW5kZXJpbmdNb2RlIHsKKyAgICBBY2NlbGVyYXRlZCwKKyAgICBVbmFjY2VsZXJhdGVk
LAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3QsCisgICAgUmVt
b3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
aW5kZXggNDA0MWIzZjgxMDc2NzhjNTZhY2RiMGM1MzNhMDk4NmY3ZTY0NTU5Ni4uNjEyZjllOWQy
MmQ2NzFmNjhkNTY1ZjEyNDQ5NGVjMzMyZDVmOTQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGlj
OgogICAgICAgICBjbGVhclNjcmF0Y2hCdWZmZXIoKTsKIAogICAgICAgICAvLyBTaGFkb3dCbHVy
IGlzIG5vdCB1c2VkIHdpdGggYWNjZWxlcmF0ZWQgZHJhd2luZywgc28gaXQncyBPSyB0byBtYWtl
IGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICAgICAgbV9pbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFVuYWNjZWxlcmF0ZWQs
IDEpOworICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVk
U2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyLmdldCgpOwogICAgIH0KIApAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGls
aW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIHNoYWRv
d2VkUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQcm9wZXJ0aWVz
LCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllcklt
YWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3Bl
cnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYg
KCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBGbG9hdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dp
dGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiBmdWxs
UmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaG9sZVJlY3QsIGNvbnN0IExheWVySW1hZ2VQ
cm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNr
JiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
ZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0
dXJuOwogCkBAIC02ODUsNyArNjg1LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRv
d1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnMKICAgICBh
dXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1
ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obGF5ZXJJbWFnZVBy
b3BlcnRpZXMpOwotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUodGVtcGxhdGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1hZ2VCdWZmZXIu
Z2V0KCk7CiAjZW5kaWYKIApAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJh
d0luc2V0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uCiAjaWYgVVNFKENHKQogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpz
aW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxzZQotICAgIGF1
dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBV
bmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAg
ICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1hZ2VCdWZmZXIuZ2V0KCk7CiAjZW5kaWYKIApA
QCAtODg0LDEyICs4ODQsMTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKElt
YWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGEKICAgICAgICAgcmV0
dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0ZVNpemUpOwot
ICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Ymx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdCk7CiAgICAg
aWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJsdXJMYXllckltYWdlKGxh
eWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsK
LSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QsIHsgfSk7
CisgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0KTsKIH0K
IAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXIm
IGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKQEAgLTkxMiw3ICs5MTIs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiAgICAgYWRqdXN0Qmx1clJhZGl1cyh0cmFu
c2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBh
bmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0
ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5k
ZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5
NjU3ZTNiMjk5ZWQ2ZWI0YzVjYzM1ZGI5NTMyNDU3ODc3NzViOS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4MSAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRl
ICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0j
aW5jbHVkZSAiUGF0dGVybi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0j
aW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNp
bmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5j
bHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lmIFVTRShMSUJFUE9Y
WSkKLSNpbmNsdWRlICJFcG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0j
ZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBVU0UoTElCRVBPWFkp
Ci0jaW5jbHVkZSA8ZXBveHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+Ci0jZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQot
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHkuaCIKLSNlbmRpZgotI2VuZGlmCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFn
ZUJ1ZmZlckRhdGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUpCi0gICAgOiBtX3BsYXRmb3JtQ29udGV4dCgwKQotICAgICwg
bV9zaXplKHNpemUpCi0gICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKLSAgICAsIG1fY29tcG9zaXRvclRleHR1cmUoMCkKLSNlbmRpZgotICAgICwgbV90ZXh0dXJl
KDApCi0jZW5kaWYKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCkgewotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBtX25pY29z
aWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAg
ICAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZl
ckRhdGE6On5JbWFnZUJ1ZmZlckRhdGEoKQotewotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0g
QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkK
LSAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9u
aWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBH
TENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwot
ICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmlu
Z0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3RleHR1cmUp
Ci0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAg
IGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAg
ICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1h
Z2VCdWZmZXJEYXRhOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRvKiBjb250
ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFy
aW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAs
IEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9yU3VyZmFj
ZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQt
PmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRl
eHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0
b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7
Ci0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5U
SUFMSUFTX05PTkUpOwotfQotCi0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25zdAotewot
ICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAgIEdMQ29u
dGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0KLSAg
ICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1
ZmZlcigpOwotCi0gICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAgICAgW3Ro
aXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAg
ICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBUZXh0dXJl
TWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVT
RShOSUNPU0lBKQotICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHko
KSk7Ci0jZWxzZQotICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkp
OwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQg
anVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQg
YnJlYWtzIHRoZSBjYXNlcwotICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50
IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkg
dGhlIGNvbnRlbnQKLSAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAgICBjYWly
b19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQo
KSwgMCwgMCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBD
QUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdl
dCgpKTsKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3Vz
QWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBj
bGVhclN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19z
dXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KHN1cmZhY2UpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX0NMRUFSKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpjcmVhdGVDYWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29udGV4dCA9
IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dM
Q29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8g
V2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMg
bm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1leGlzdGlu
ZyBzdXJmYWNlLgotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBpeGVsU3Rv
cmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRV
UkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVp
Z2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQot
ICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwotCi0g
ICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1J
bnRlbCBkcml2ZXJzLgotICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmlj
ZSwgRkFMU0UpOwotCi0gICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9j
cmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3Rl
eHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVhclN1cmZh
Y2UobV9zdXJmYWNlLmdldCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewot
ICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJP
X0ZPUk1BVF9BUkdCMzIsCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1
cmZhY2UpLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkp
KTsKLQotICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwot
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsK
LSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwot
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0
aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBl
KHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBjYWlyb19z
dXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEp
Ci0gICAgICAgIHJldHVybiBzdXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZUNvcHko
c3VyZmFjZSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgp
IGNvbnN0Ci17Ci0gICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2Uu
Z2V0KCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9f
c3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7
Ci0KLSAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFj
ZS5nZXQoKSk7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwot
fQotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2RhdGEubV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyos
IGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9k
ZSkKLSAgICAsIG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJl
c29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJl
dHVybiBtZWFuIGVycm9yLgotCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihtX3Jlc29s
dXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2Vp
bGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBT
aG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICgh
RmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNp
emUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0gICAgaWYg
KG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gQWNjZWxl
cmF0ZWQpIHsKLSAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAgICAg
IGlmICghbV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9z
dXJmYWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0
YS5tX3JlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxz
LCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotICAgIGlmIChtX2Rh
dGEubV9yZW5kZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVCht
X2RhdGEubV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAg
ICAgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0g
ICAgICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19G
T1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRh
OwotICAgICAgICBpZiAoIXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdodCgpICogc3Ry
aWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgbV9kYXRhLm1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJP
X0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkp
OwotICAgICAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZh
c3RGcmVlKGRhdGEpOyB9KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMo
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAg
IHJldHVybjsgIC8vIGNyZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6
ZWQgYW5kIGZhaWwuCi0KLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9z
dXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1
cmZhY2UuZ2V0KCkpKTsKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0
KCkpOwotICAgIG1fZGF0YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4o
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3Jt
Q29udGV4dCkpOwotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdl
QnVmZmVyKCkgPSBkZWZhdWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGlj
c0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1f
ZGF0YS5tX2NvbnRleHQ7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXIt
PmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0K
LQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNh
aXJvSW1hZ2VTdXJmYWNlIGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgot
ICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJu
IEJpdG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpKTsKLQotICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2Vk
IGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0
ZShSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19Ci0KLUJhY2tp
bmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1
cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25z
dW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVz
dGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsICBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBpZiAoZGVzdGluYXRpb25Db250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAgICAgICAg
aWYgKCZkZXN0aW5hdGlvbkNvbnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAgICAgICAgIHN1cmZh
Y2UgPSBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgICAgIEludGVycG9s
YXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShk
ZXN0aW5hdGlvbkNvbnRleHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAg
ICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdGluYXRpb25Db250
ZXh0LnN0YXRlKCk7Ci0gICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGluYXRpb25Db250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBv
cHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5
IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93
U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewot
ICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAgIENhaXJvOjpkcmF3
UGF0dGVybigqY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgbV9zaXpl
LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKLXsKLSAgICAvLyBGSVhNRTog
RW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgot
ICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9
IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWdu
ZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3N0cmlkZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG1fc2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVy
cHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5KTsKLSAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCBtX3NpemUud2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICB1
bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OwotICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9
IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci0gICAgICAgICAgICBwaXhlbENv
bG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxDb2xvci5hbHBoYSgpKTsKLSAg
ICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3Ip
OwotICAgICAgICB9Ci0gICAgfQotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5n
bGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBt
X2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKLX0KLQotUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29w
eVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90eXBlX3Qgc3VyZmFjZVR5cGUgPSBj
YWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpOwotCi0gICAgLy8gSWYgd2UgYWxyZWFkeSBo
YXZlIGFuIGltYWdlLCB3ZSB3cml0ZSBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBkYXRhOwot
ICAgIC8vIG90aGVyd2lzZSB3ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3VyZmFjZSBpbWFnZQotICAg
IGlmIChzdXJmYWNlVHlwZSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJl
dHVybiBzdXJmYWNlOwotICAgIAotICAgIHJlY3Quc2V0WCgwKTsKLSAgICByZWN0LnNldFkoMCk7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZP
Uk1BVF9BUkdCMzIsIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotfQotCi10ZW1wbGF0
ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBwcmVtdWx0aXBsaWVkPgotUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVj
dCYgbG9naWNhbFJlY3QsIGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSkKLXsKLSAgICAvLyBUaGUgYXJlYSBjYW4gb3ZlcmZsb3cgaWYgdGhlIHJlY3QgaXMgdG9vIGJp
Zy4KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAg
YXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlm
IChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBh
dXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFy
ZWEudW5zYWZlR2V0KCkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAg
aW50IGVuZHggPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueCgpLCByZWN0LndpZHRo
KCksIGVuZHgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxv
dywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHkgPSAwOwotICAgIGlmICgh
V1RGOjpzYWZlQWRkKHJlY3QueSgpLCByZWN0LmhlaWdodCgpLCBlbmR5KSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBl
bmR4ID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1
bHQtPnplcm9GaWxsKCk7Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBk
ZXN0eCA9IDA7Ci0gICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdp
bng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR4ID4gc2l6ZS53
aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIGludCBudW1Db2x1bW5z
ID0gZW5keCAtIG9yaWdpbng7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGlu
dCBkZXN0eSA9IDA7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3R5ID0gLW9y
aWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR5ID4gc2l6
ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgaW50IG51bVJv
d3MgPSBlbmR5IC0gb3JpZ2lueTsKLQotICAgIC8vIE5vdGhpbmcgd2lsbCBiZSBjb3BpZWQsIHNv
IGp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgaWYgKG51bUNvbHVtbnMgPD0gMCB8fCBudW1S
b3dzIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0
aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0g
ICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3Vy
ZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3Qob3JpZ2lu
eCwgb3JpZ2lueSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChkYXRh
Lm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VT
Y2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIHJlc29sdXRpb25TY2FsZSwgcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBvcmlnaW54ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBvcmlnaW55ID0gaW1hZ2VSZWN0
LnkoKTsKLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IGRhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0g
ICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAgSW50UmVjdCBsb2dpY2FsQXJlYSA9IGludGVyc2Vj
dGlvbihsb2dpY2FsUmVjdCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90
aGVyKGRhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVN1cmZhY2UuZ2V0KCksIEludFNpemUoLWxv
Z2ljYWxBcmVhLngoKSwgLWxvZ2ljYWxBcmVhLnkoKSksIEludFJlY3QoSW50UG9pbnQoKSwgbG9n
aWNhbEFyZWEuc2l6ZSgpKSwgSW50U2l6ZSgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9
IHJlc3VsdC0+ZGF0YSgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3cgPSA0ICogcmVjdC53aWR0aCgpOwotCi0gICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBk
YXRhRHN0ICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3Jp
Z2lueSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewot
ICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4
ZWwgPSByb3cgKyB4ICsgb3JpZ2lueDsKLQotICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBD
b2xvcjo6Y29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKSBiZWNhdXNlIG9uZQotICAgICAgICAg
ICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhID0gKCpwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAg
ICAgICAgdW5zaWduZWQgcmVkID0gKCpwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAgICAg
ICAgICAgdW5zaWduZWQgZ3JlZW4gPSAoKnBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAg
ICAgIGlmIChwcmVtdWx0aXBsaWVkID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAgPSByZWQ7Ci0gICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gZ3JlZW47Ci0gICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gYmx1ZTsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgfQotICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlu
bGluZSBVbml0IGxvZ2ljYWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6
TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAg
ICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2Nh
bGUoMS4wIC8gcmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1w
bGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgYmFja2luZ1N0b3JlVW5pdChjb25zdCBV
bml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bU9mVmFsdWUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0g
fHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVu
aXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVm
ZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6
ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwg
Y29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2lu
Z1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAg
KnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0
dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+
KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2Fs
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3Jk
aW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxV
bml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRS
ZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVT
eXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMp
Ci0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgp
OwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBt
X2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIEludFJlY3Qgc2NhbGVkU291cmNl
UmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGJhY2tpbmdT
dG9yZVVuaXQoc291cmNlU2l6ZSwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIEludFBvaW50IHNjYWxlZERlc3RQb2ludCA9IGJhY2tpbmdTdG9yZVVuaXQoZGVzdFBv
aW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBs
b2dpY2FsU291cmNlUmVjdCA9IGxvZ2ljYWxVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0
ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBsb2dpY2FsRGVzdFBvaW50ID0g
bG9naWNhbFVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0KLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNT
RVJUKHNjYWxlZFNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLQotICAgIGludCBvcmlnaW54ID0g
c2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gc2NhbGVkRGVzdFBvaW50Lngo
KSArIHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBsb2dpY2FsRGVzdHggPSBsb2dpY2Fs
RGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKTsKLSAgICBBU1NFUlQoZGVzdHgg
Pj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4IDwgbV9zaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChv
cmlnaW54ID49IDApOwotICAgIEFTU0VSVChvcmlnaW54IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4
WCgpKTsKLQotICAgIGludCBlbmR4ID0gc2NhbGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJj
ZVJlY3QubWF4WCgpOwotICAgIGludCBsb2dpY2FsRW5keCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgp
ICsgbG9naWNhbFNvdXJjZVJlY3QubWF4WCgpOwotICAgIEFTU0VSVChlbmR4IDw9IG1fc2l6ZS53
aWR0aCgpKTsKLQotICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwotICAgIGludCBs
b2dpY2FsTnVtQ29sdW1ucyA9IGxvZ2ljYWxFbmR4IC0gbG9naWNhbERlc3R4OwotCi0gICAgaW50
IG9yaWdpbnkgPSBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSBzY2FsZWRE
ZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0
eSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpOwotICAgIEFT
U0VSVChkZXN0eSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkgPCBtX3NpemUuaGVpZ2h0KCkpOwot
ICAgIEFTU0VSVChvcmlnaW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNjYWxlZFNv
dXJjZVJlY3QubWF4WSgpKTsKLQotICAgIGludCBlbmR5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSAr
IHNjYWxlZFNvdXJjZVJlY3QubWF4WSgpOwotICAgIGludCBsb2dpY2FsRW5keSA9IGxvZ2ljYWxE
ZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QubWF4WSgpOwotICAgIEFTU0VSVChlbmR5
IDw9IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7Ci0g
ICAgaW50IGxvZ2ljYWxOdW1Sb3dzID0gbG9naWNhbEVuZHkgLSBsb2dpY2FsRGVzdHk7Ci0KLSAg
ICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9yZUNv
b3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBm
b3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgSW50UmVj
dCBpbWFnZVJlY3QoZGVzdHgsIGRlc3R5LCBudW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRB
ZGp1c3RSZWN0KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9T
dXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2Fs
ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3R4ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBk
ZXN0eSA9IGltYWdlUmVjdC55KCk7Ci0KLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzY2FsZWRTb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgaW50
IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0
KCkpOwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyBvcmln
aW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsg
eSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8dW5zaWduZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7Ci0g
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyAr
IHggKyBkZXN0eDsKLQotICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBDb2xvcjo6cHJlbXVs
dGlwbGllZEFSR0JGcm9tQ29sb3IoKSBiZWNhdXNlIG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rp
b24gY2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVk
IHJlZCA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBzcmNS
b3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gc3JjUm93c1tiYXNl
eCArIDJdOwotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107
Ci0KLSAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkg
ewotICAgICAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBpeGVsID0g
KGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgICAg
IH0KLSAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBU
aGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0uCi0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShpbWFnZVN1cmZh
Y2UuZ2V0KCksIGxvZ2ljYWxEZXN0eCwgbG9naWNhbERlc3R5LCBsb2dpY2FsTnVtQ29sdW1ucywg
bG9naWNhbE51bVJvd3MpOwotCi0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMg
ZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihpbWFnZVN1cmZhY2UuZ2V0KCksIG1fZGF0YS5tX3N1cmZhY2UuZ2V0
KCksIEludFNpemUoKSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsTnVtQ29sdW1ucywgbG9naWNhbE51
bVJvd3MpLCBJbnRTaXplKGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3Qu
eCgpLCBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKSksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgfQotfQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLXN0YXRp
YyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWdu
ZWQgY2hhciogZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIXJlaW50ZXJw
cmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0
aCkpCi0gICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7Ci0gICAgcmV0dXJu
IENBSVJPX1NUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWly
b19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhf
dD4qIG91dHB1dCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAi
aW1hZ2UvcG5nIik7IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KLQot
ICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRl
RnVuY3Rpb24sIG91dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLVN0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1
aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlm
IChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAg
ICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdl
LmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4g
ImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rv
cjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBjYWly
b19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPmNyKCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKLSAg
ICBpZiAoIWltYWdlIHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1h
Z2UpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGVuY29kZWRJbWFnZTsKLX0K
LQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJl
TWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0
eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENhaXJvIG1heSBjaGFuZ2Ug
dGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0
ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENv
bnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQo
KSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQot
ICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0
dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9zaXplLCB0YXJn
ZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBsYXRmb3JtTGF5ZXIqIElt
YWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJp
bmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm4gbV9k
YXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAobV9kYXRhLm1fdGV4dHVy
ZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJEYXRhKj4oJm1fZGF0YSk7
Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpj
b3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSB0
YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRl
cm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewotI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jl
c29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMg
cmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7Ci0gICAg
aWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
R0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVS
RV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGJp
bmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNhaXJvX3N1
cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0
KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICBj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJfdCBmYm87Ci0gICAgZ2xH
ZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVC
VUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwg
R0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0YS5tX3RleHR1cmUsIDAp
OwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVy
ZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAw
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJl
KGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZm
Ym8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsK
LSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0o
aW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAg
ICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWY5ZDdiZDI3MzE3OTQ5NjI1MDkw
MmI0MTUzMDdhYzY1YmRkNDkwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMCww
ICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckJhY2tl
bmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
KQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJv
X3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOworCisg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5n
ZXQoKSkpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKKyAgICBtX2Nv
bnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7Cit9CisKK0dyYXBoaWNzQ29u
dGV4dCYgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25z
dAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0
b3JlOiB7CisgICAgICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Y3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKSk7CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRv
cihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3Nv
dXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBj
YWlyb19wYWludChjci5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAgIH0K
KworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBtX3N1cmZh
Y2U7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y2Fp
cm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBj
b3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0g
Q0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3Vy
ZmFjZSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9y
ID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3Ig
PSBDb3B5QmFja2luZ1N0b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2
aW9yKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3Vy
ZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlO
YXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKworUmVmUHRyPEltYWdlPiBzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJu
IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVy
cG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29w
ZShkZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25z
dCBhdXRvJiBkZXN0Q29udGV4dFN0YXRlID0gZGVzdENvbnRleHRTdGF0ZS5zdGF0ZSgpOworCisg
ICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAg
ICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5n
ZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdENvbnRleHRTdGF0ZS5pbWFn
ZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBX
ZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29w
eUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0Nv
bG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9y
U3BhY2UgPT0gZGVzdENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkg
c1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgo
c3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAh
PSBDb2xvclNwYWNlOjpTUkdCKQorICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZTo6TGluZWFyUkdCICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4gbGluZWFyUmdiTFVUID0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGFycmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsr
KSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAg
ICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAg
ICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAy
NTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAg
fSgpOworICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsK
KyAgICB9IGVsc2UgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9
IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxp
bmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJp
bmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QK
K3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBx
dWFsaXR5KTsKKyAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
ICJkYXRhOiwiOworCisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5j
b2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEp
OworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjRE
YXRhOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNh
aXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICBy
ZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQorCitWZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1
dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJm
YWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0
YTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAg
IHJldHVybiBpbWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMs
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAg
IHJldHVybiBudWxscHRyOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
LCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQ29vcmRp
bmF0ZVN5c3RlbSkKK3sKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NGZhNmYyM2FjNDM2ZGRjZGVhODNlYzliNjM2OTRlMTg4NzYxMDU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIElt
YWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVm
UHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYp
IG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZTsKKworICAgIFN0cmlu
ZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50
OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBD
b29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90
ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4mKSB7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1cmZhY2VDb2VyY2VUb0lt
YWdlKCkgY29uc3Q7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3Vy
ZmFjZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2
OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1
ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVT
RShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5j
bHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZv
cm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVy
RGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBs
YXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBS
ZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9z
aXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9y
U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxj
YWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxO
aWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0j
ZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsK
LSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENB
SVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAxZjI2OTM2ZWU1YjVlMmQ4
MzIxYjYxMzAyODVhMzI0OTc0YWVmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5jcHAK
QEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmgiCisK
KyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBV
U0UoRUdMKQorI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UK
KyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWds
Lmg+CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVT
RShPUEVOR0xfRVMpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlu
bGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAg
UmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAg
ICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckdMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRl
eHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11
c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENh
aXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3Vy
ZmFjZS4KKyAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3JlaShH
TF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVy
bmFsU2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2
aWNlKCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBo
aXQgb24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRf
YXdhcmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xf
c3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FM
UEhBLCBtX3RleHR1cmUsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhl
aWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJP
X1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3Vy
ZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJHTFN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKHNp
emUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1
cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJH
TFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lh
OjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5ZXJQ
cm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKKyNl
bmRpZgorI2VuZGlmCit9CisKK0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVm
ZmVyR0xTdXJmYWNlQmFja2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwor
I2VuZGlmCisKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRl
eHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUp
OworI2VuZGlmCisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxh
eWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09T
SUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90
ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQor
Citib29sIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkp
Cit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJT
aW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24g
ZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwg
ZmxpcFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV90ZXh0dXJlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdldDsKKyAg
ICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgYmlu
ZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFX0NV
QkVfTUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3Jl
YXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29t
cG9zaXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdWlu
dDMyX3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBt
X3RleHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3Rp
bmF0aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFs
Zm9ybWF0LCAwLCAwLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWln
aHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAg
ICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJHTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0g
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xD
b250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBnbEdl
blRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdM
X1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFN
UF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8y
RCwgMCAsIEdMX1JHQkEsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhl
aWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9z
aXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVy
ZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2Nv
bXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5o
ZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1f
Y29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29t
cG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENv
bnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisg
ICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JC
dWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0
aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAg
ICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXpl
LCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAgICAgICB9
OworI2lmIFVTRShOSUNPU0lBKQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkucHJveHkoKSk7CisjZWxzZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxh
eWVyUHJveHkpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYg
d2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwg
YnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRo
ZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBq
dXN0IGNvcHkgdGhlIGNvbnRlbnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4K
KyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3Vy
ZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNy
LmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1fY29tcG9z
aXRvckNyLmdldCgpKTsKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAg
IHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKKyNlbHNl
CisKK3ZvaWQgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJl
Y3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7
CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBh
Y3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZs
dXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0
OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwor
ICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBz
dGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZSht
X3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1faW50ZXJuYWxTaXplLCB0
YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzQwNDQ0NjM2MmM1MTBkN2U4NzdjZWQ0MGQ0ZjMzMjNhYWI1MDM3OAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
R0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgi
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVk
ZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZAorI2lmIFVTRShOSUNPU0lBKQorICAgIDog
cHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKKyNl
bHNlCisgICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgorI2VuZGlmCisgICAgLCBwdWJsaWMgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VC
dWZmZXJHTFN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1
ZmZlckdMU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisK
KyAgICB+SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9y
bVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4
dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJHTFN1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lk
IGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0
Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5
OworI2VuZGlmCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFj
ZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9j
b21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7
IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIFVTRShDQUlSTykg
JiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2ODNmNDI3NDk3ZjIwNjg2MjYw
Yjg2MTNhNzBjMjU3MjNkM2ZlODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgi
CisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySW1h
Z2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQor
eworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKKwor
ICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JN
QVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSk7CisgICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAg
aWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFs
dWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHN1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBzaXpl
LndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0
X3VzZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEs
IFtdKHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZD4o
bmV3IEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFn
ZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUo
bV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lk
IEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAg
dW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUu
aGVpZ2h0KCk7ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQq
IHBpeGVsID0gcm93ICsgeDsKKyAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZy
b21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENv
bG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9y
LmdyZWVuKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0sIHBpeGVsQ29sb3IuYWxw
aGEoKSk7CisgICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihw
aXhlbENvbG9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGly
dHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgp
LCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckltYWdlU3VyZmFj
ZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmQ2NDBkMmM3MDJlZTUyY2YwMWRiZTA1MTYxYzM3NGJj
MDNhMjgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFj
a2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VC
YWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
SW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCitwcml2YXRlOgor
ICAgIEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAgICB2b2lkIHBs
YXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4m
IGxvb2tVcFRhYmxlKSBvdmVycmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWJhMjU1NGNkYTY4YTM5ODQwMTQzOGJlZGQ5NjhmMGMzYzYyOWFmMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWly
by5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRl
IDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYg
IVBMQVRGT1JNKEdUSykKKworc3RhdGljIGNhaXJvX3N0YXR1c190IHdyaXRlRnVuY3Rpb24odm9p
ZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7
CisgICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRy
eUFwcGVuZChkYXRhLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRF
X0VSUk9SOworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGJv
b2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCit7CisgICAgQVNTRVJUX1VOVVNFRChtaW1l
VHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3Vw
cG9ydGVkIGZvciBub3cuCisKKyAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdf
c3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUND
RVNTOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKKyAgICBpZiAoIWltYWdlIHx8ICFlbmNvZGVJ
bWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1hZ2UpKQorICAgICAgICByZXR1cm4geyB9
OworICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBib29sIGVu
Y29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdjaGFyPiYgYnVmZmVy
LCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBl
bmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlvbi4KKyAg
ICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4
YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKKworICAgIFN0
cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKTsKKyAgICBpZiAo
dHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBl
ICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYgKHR5cGUgPT0gImpwZWciKSB7Cisg
ICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFz
PiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYK
KyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0
aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNl
KSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAgICAgICAgIG5ld1N1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1B
VF9SR0IyNCwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChz
dXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQo
c3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJbnRTaXplIHNpemUg
PSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOworICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9SR0IyNCwgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOworICAgICAgICAg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKKyAg
ICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgfQorICAgICAgICBwaXhi
dWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkp
OworICAgIH0gZWxzZQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9H
ZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgaWYgKHR5cGUgPT0g
ImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkg
eworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHN0YXRpY19j
YXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOworICAgICAgICBnZGtfcGl4YnVmX3Nh
dmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUs
IHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0eSIsIHF1YWxpdHlT
dHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNlCisgICAgICAgIGdka19waXhi
dWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVy
U2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5VTEwpOworCisgICAg
cmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90
KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KQoreworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKKyAgICBnc2l6ZSBidWZmZXJT
aXplOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZm
ZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGltYWdlRGF0YTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVmZmVy
U2l6ZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShH
VEspCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZGUzM2M3Y2EwOTZj
YWQ4OTIyNjM3MzljNzVmOTViMjBmZWRjMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5o
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJP
KQorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCosIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCA0OTZlY2Ez
MjRkM2U0ZGEyMmZjYTU5OTk4ZWI1ZWY1ZWU3M2QyMDlhLi43MjJlZWZmZTZjOWU1ZmQyODY2YmUy
NzI4N2E0NzAyMTAwY2JmYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01MDAsNyArNTAwLDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBi
dWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0g
YnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKKyAgICBGbG9h
dFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gZGVzdFJlY3Quc2l6ZSgpOwogICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRl
eHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NmYxOTY0ZDA5
NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1
ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5j
bHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhp
Y3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVj
a2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lm
IFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgotI2VuZGlmCi0KLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFj
ZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQot
Ly8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2Ft
cGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0YXRpYyBGbG9hdFNpemUgc2NhbGVTaXplVG9Vc2Vy
U3BhY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2lu
Z1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQotewotICAgIGZsb2F0IHhN
YWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdTdG9yZVNpemUud2lkdGgo
KSkgLyBpbnRlcm5hbFNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB5TWFnbmlmaWNhdGlvbiA9IHN0
YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAvIGludGVybmFsU2l6
ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxTaXplLndpZHRoKCkgKiB4
TWFnbmlmaWNhdGlvbiwgbG9naWNhbFNpemUuaGVpZ2h0KCkgKiB5TWFnbmlmaWNhdGlvbik7Ci19
Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYg
UExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkp
IHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0g
Q0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsK
LSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgot
ICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0Nv
bnRleHQpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNv
bG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4
dCkpOwotICAgIH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9
IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JT
cGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29u
dGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZm
ZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2Vz
cyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJ
bWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2Rl
LCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Ig
b24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2Nh
bGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9n
aWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkK
LXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVy
ZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUu
d2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxl
ICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2Fs
bHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0g
ICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJh
dGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOwotICAgIGlmIChtX3Np
emUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47
Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8
aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2Vk
PGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgot
Ci0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJv
dyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBu
dW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6
Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0
aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFj
Y2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01v
ZGUgPT0gVW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5jb2xvclNwYWNlID0g
Y29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsKLSAg
ICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0gc2l6ZUZvckRlc3Rp
bmF0aW9uU2l6ZShGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQo
KSkpOwotICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAg
ICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEu
c3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAg
aWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250
ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAg
ICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYK
LSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5n
ID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxl
cmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAg
ICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2Fm
ZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEp
ICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7
Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgo
KSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJv
dy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0g
ICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShj
b25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBh
IGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZm
ZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAg
ICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhE
YXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0
YSkpOwotCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29u
dGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29s
dXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6Oklt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBj
b25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VC
dWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xv
clNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1h
Z2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotRmxvYXRTaXplIEltYWdlQnVm
ZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBkZXN0aW5hdGlvblNpemUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGRlc3RpbmF0aW9uU2l6ZSwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSgpKTsKLX0KLQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QoKSBjb25zdAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25j
dXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91
dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8g
YWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBj
aGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVz
ZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9m
IHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3Vy
ZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9p
bnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1
cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRo
KCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpl
eHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgp
IG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVl
ZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93Lgot
ICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3Vy
ZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1h
Z2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90
YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0g
ICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRv
dGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJu
IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJl
dHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4
dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4
dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17
Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0
PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0
YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9w
dENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwg
Ym91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19
Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXpl
LCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsK
LSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFn
ZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAg
ICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dp
Y2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXpl
LndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NH
QmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQo
KSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAg
RmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2NhbGVTaXplVG9Vc2VyU3BhY2UobG9n
aWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSk7Ci0gICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBy
ZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdl
KSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQot
ewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgp
OwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsK
LSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tp
bmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1f
cmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGlu
dGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZl
cjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9y
ZTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2
ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVy
LT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIElPU3VyZmFjZTo6c2lu
a0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdl
QnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVo
YXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlm
ICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChj
b3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCAzMiwgbV9k
YXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJp
dG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmlu
Z0ludGVudERlZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlC
YWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRh
LnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpIHsKLSAg
ICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBv
cHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZGVzdENv
bnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgZmxvYXQgcmVzb2x1dGlv
blNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotICAgIEludFNpemUgYmFj
a2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLQot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6c2lua0ludG9JbWFn
ZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkp
OwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRy
YXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5kaWYKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQu
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
Q29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0
byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0g
c3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYg
cGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7
Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlm
ICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0
Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29w
eUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBk
ZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFj
aW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8
SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENv
bnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAg
ICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAg
IH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0g
ICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENv
bnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5h
dGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQot
ICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJl
dHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFBy
ZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0g
ICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1h
dCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKQotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAg
ICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3Vy
Y2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAg
ICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNj
YWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIH0KLQotICAgIG1f
ZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlRm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2Fs
ZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9T
dXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFj
ZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vz
c2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwotfQotCi1zdGF0aWMg
aW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
IHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQ
RUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJldHVybiBrVVRUeXBlSlBF
RzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1
ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgLy8gRklYTUU6IFdo
eSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9uPwotI2lmIFBMQVRGT1JN
KE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmlu
ZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFy
IGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3Vw
cG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJv
bSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAgLy8gRm9yIG5vdywgb25s
eSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2
Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJs
aWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNU
UigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVQ
Tkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1h
Z2UvanBlZyIpKQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQotICAgICAgICByZXR1
cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBr
VVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKENHSW1hZ2VS
ZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11
dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihD
R0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKLSAgICBp
ZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8
Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYgKENGRXF1YWwodXRpLCBq
cGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEu
MCkgewotICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBF
RyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBh
ZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJs
ZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURl
c3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZh
bHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAgICBpbWFnZVByb3BlcnRpZXMg
PSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBl
RGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3Mp
KTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5k
Q29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBz
YXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRv
ZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVz
dGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwotICAgIHJldHVy
biBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7Ci19Ci0KLXN0
YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZE
YXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsK
LQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0
YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRh
dGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRh
R2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJu
IGRhdGE7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEo
bWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBk
YXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIGlmIChhdXRvIGRh
dGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykp
Ci0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07
Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVn
aXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0K
LSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNo
Q29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSht
aW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsK
LQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBK
UEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkg
Y29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBn
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUo
KSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVm
ZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAg
ICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0
cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6
ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1
bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0
b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFn
ZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250
ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0
aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgp
LCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsK
LSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9k
ZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVj
dE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgp
KSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNpemVGb3JEZXN0
aW5hdGlvblNpemUobG9naWNhbFNpemUoKSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRo
KCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQo
KSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRh
YmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdl
LmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotc3RhdGljIFJl
dGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIEFTU0VS
VChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyht
aW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSht
aW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFB
bHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0g
c291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVk
RGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAg
ICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFu
dWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgc2l6ZV90IHNpemUgPSA0
ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAgICAgIGlmICghcHJlbXVs
dGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXplKTsKLSAgICAg
ICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAg
dW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAy
NTUpIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBo
YSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBh
bHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0g
KiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0g
PSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsg
Ml07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRhQWxwaGFJbmZvID0g
a0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgot
ICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgIH0KLQotICAgIHZl
cmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291
cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJv
dmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2Uu
aGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53
aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZv
LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZB
bGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwg
dXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0cmluZyBkYXRhVVJMKGNv
bnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1p
bWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWlt
ZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gZGF0
YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNl
LCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0
KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6
dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICByZXR1cm4gbV9kYXRhLnRvQkdS
QURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG1fc2l6ZS53aWR0aCgpLCBt
X3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0M2VhMjVkYTA1Y2RmMDdhMTBmMzY0
M2Q3Zjg0YTBkYTc4YzQxOTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzODUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisKKyNpZiBV
U0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisKKyNpZiBVU0UoQUND
RUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1
bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSkKK3sKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZSA9IHsgY2VpbGYocmVzb2x1dGlvblNj
YWxlICogc2l6ZS53aWR0aCgpKSwgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQo
KSkgfTsKKyAgICBpZiAoc2NhbGVkU2l6ZS5pc0VtcHR5KCkgfHwgIXNjYWxlZFNpemUuaXNFeHBy
ZXNzaWJsZUFzSW50U2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBp
bnRlcm5hbFNpemUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PihpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAgaWYgKGJ5dGVzUGVyUm93
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4oaW50ZXJuYWxTaXplLmhlaWdodCgpKSAqIGJ5dGVzUGVyUm93OworICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAg
cmV0dXJuIGludGVybmFsU2l6ZTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0
dXBDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBjb250ZXh0LnNjYWxl
KEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIC1tX2ludGVybmFs
U2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dC5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVz
b2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBp
bnRlcm5hbFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
ICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRoKCkpIHx8IENHSW1hZ2VH
ZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLmhlaWdo
dCgpKSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJl
Y3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFs
U2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8
SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENH
SW1hZ2VSZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEg
fHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAg
ICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRl
cm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5o
ZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRC
bGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNl
ID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgp
LCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGlt
YWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1v
dmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOwor
ICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQ
cmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
Y29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRl
clNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5h
bFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCBtX2xvZ2ljYWxT
aXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlv
bik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBG
bG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250
Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShp
bWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRp
b25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRl
eHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9y
ZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OworfQorCitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOworICAgIAorICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUo
bWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7
CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8g
SlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5
IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhID0g
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJl
Y3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwp
OworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVy
SXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAg
ICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0
YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikp
OworICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgp
LndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQg
fCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNl
LCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRp
b25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246
OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5n
ZXQoKSwgaW50ZXJuYWxTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgp
LCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAg
ICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNv
cHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7
CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSksIGltYWdl
LmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUlt
YWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0Yo
Q0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFl
bmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAg
ICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8g
ZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQor
ICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJu
ICJkYXRhOiwiX3M7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAg
ICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7CisgICAgYXJlYSAq
PSBzcmNSZWN0LndpZHRoKCk7CisgICAgYXJlYSAqPSBzcmNSZWN0LmhlaWdodCgpOworICAgIGlm
IChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJl
YS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50
Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNl
Y3Rpb24oYnVmZmVyUmVjdCwgc3JjUmVjdCk7CisgICAgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6
ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9OworCisgICAgaWYgKHNyY1JlY3QueCgpIDwg
MCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WCgtc3JjUmVjdC54KCkpOworCisgICAgaWYgKHNyY1Jl
Y3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdC55KCkpOworCisgICAg
aWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKKyAgICAgICAgYXJyYXktPnpl
cm9GaWxsKCk7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNT
aXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJ
bnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAg
SW50UmVjdCBkYXRhUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjU2l6ZSB9OworICAgIHNy
Y1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBzcmNSZWN0KTsKKyAgICAKKyAg
ICBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9p
bnQpOworICAgIAorICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNl
dFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwg
MCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSk7CisK
KyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxT
aXplIH07CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJ1ZmZlclJlY3QpOworCisgICAgc3JjUmVj
dENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVz
dENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVsw
XTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMg
QkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0
UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsK
KyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGluZSB2b2lk
IGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JG
b3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxb
M107CisgICAgaWYgKCFhbHBoYSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVs
dGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBp
eGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9
PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBd
ICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAy
NTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgor
ICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0
UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzJd
ID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFszXSA9IGFscGhh
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3JjUGl4ZWws
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQoreworICAg
IHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoYWxwaGEgPT0gMjU1KSB7Cisg
ICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBz
cmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsK
KyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1
OworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
IGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBk
ZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVz
dFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxz
U2xvdygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZv
cm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNy
Y1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90
KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzdGQ6OmZ1bmN0aW9uPHZv
aWQoQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPiBj
b3B5RnVuY3RvcjsKKyAgICAKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9y
bWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgY29weUZ1bmN0b3IgPSBjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZDsKKyAgICB9IGVsc2UgaWYgKGRlc3RBbHBoYUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIGNv
cHlGdW5jdG9yID0gY29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZDsKKyAgICBlbHNl
CisgICAgICAgIGNvcHlGdW5jdG9yID0gY29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZDsKKyAgICAgICAgCisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsK
KyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBm
b3IgKHNpemVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBj
b3B5RnVuY3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwg
JmRlc3RSb3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30KKworI2lmIFVTRShBQ0NF
TEVSQVRFKQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5z
aWduZWQgYnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgdkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisgICAgCisgICAgdkltYWdlQnVmZmVy
LmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOwor
ICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNp
emUud2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7Cisg
ICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZm
ZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkg
eworICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAg
ICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+
IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Cisg
ICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBr
dkltYWdlTm9GbGFncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRl
c3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
IHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAg
ICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0
aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisg
ICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlw
bHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorCisg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICAvLyBT
d2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3Qg
bWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19B
UkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0
LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3Jt
YXQgJiYgc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGNvcHlJ
bWFnZVBpeGVsc1Nsb3coc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
dkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNS
b3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRl
c3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNj
ZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZv
cm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
cmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgY29weUltYWdlUGl4ZWxzU2xvdyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQs
IHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjhmZTBlYTZhYTBhOTcxMjcxMjFlM2IzYTk0MjFlMTU5ZWY1YmQwOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEltYWdlQnVmZmVyQ0dCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7
CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50
ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1
dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5z
Zm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAt
MSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7IH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBv
dmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1h
Z2VCdWZmZXJCYWNrZW5kOworCisgICAgdm9pZCBzZXR1cENvbnRleHQoR3JhcGhpY3NDb250ZXh0
Jik7CisKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdDsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gY3JlYXRlR2V0SW1h
Z2VEYXRhQXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENsaXBw
ZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdDsKKyAgICB2b2lkIGNhbGN1bGF0ZVB1dEltYWdl
RGF0YVJlY3RzKGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRS
ZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3Jj
Um93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc0ODk1YTQ5ZWU4MTZlOGI3YmEyM2Q1ZmVhZjBhNDllODNkNThkYTkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cp
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAt
PiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCisjZGVmaW5lIFVTRV9BUkdCMzIgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKworI2lmIFVTRV9BUkdCMzIKK2NvbnN0ZXhwciBjb25zdCBDR0Jp
dG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZp
cnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9y
bWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpCR1JBOworI2Vsc2UKK2NvbnN0
ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3Q7Citjb25zdGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENv
bG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQ6OlJHQkE7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUg
aW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBp
bnRlcm5hbFNpemUud2lkdGgoKTsKKworICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbnRlcm5hbFNp
emUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRh
KSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGludGVybmFsU2l6ZS5oZWlnaHQoKSAq
IGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVt
Qnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZShkYXRhLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCA4
LCBieXRlc1BlclJvdywgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBEZWZhdWx0Qml0
bWFwSW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRl
eHQuZ2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQq
LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2Fz
dDx2b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFz
ZUltYWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQ
cm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92
aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRh
KQorICAgICwgbV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9j
b250ZXh0KFdURk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNT
RVJUKG1fZGF0YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENv
bnRleHQodGhpcy0+Y29udGV4dCgpKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRl
eHQ7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CisgICAg
ICAgIHJldHVybiBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5w
bGF0Zm9ybUNvbnRleHQoKSkpOworICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6
CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2lu
dGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5dGVz
UGVyUm93KCksCisgICAgICAgICAgICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwg
RGVmYXVsdEJpdG1hcEluZm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgMCwg
dHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVH
ZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgo
KSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAg
IHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpOwor
CisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JG
b3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6
ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2Fs
ZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0
ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNj
YWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlw
cGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldElt
YWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7Cisg
ICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0
aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0Lnko
KSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisgICAgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3Mg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgc3JjUmVjdENsaXBwZWQueSgp
ICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUlt
YWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCBCYWNrZW5kQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBv
dXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dz
LCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW50U2l6
ZSBzcmNTaXplU2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBz
cmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVk
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsK
KyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNy
Y1NpemVTY2FsZWQsIHNyY1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRl
c3RSZWN0KTsKKyAgICAKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
bV9kYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAq
IDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplU2NhbGVkLndp
ZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlw
cGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAg
IGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JB
LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRl
c3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wN2M4MDAzMDA3MjczMGZhMDg3YmYzNTQxM2Q2MzlhODA4N2ZmYzE5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQpOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUm
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsK
KworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAor
ICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENH
RGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsK
KworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJu
YWxTaXplLndpZHRoKCk7IH0KKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dE
YXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5k
aWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAi
SU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxw
YWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMy
IGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXpl
ZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5
QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXIm
IGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsK
LQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3Vy
ZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhf
dCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZv
aWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3Qg
dkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VS
VChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwt
PlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRl
Q2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0K
LSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRh
dGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXpl
X3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQo
aW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMu
cm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3Qu
aGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVz
dC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91
dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgp
OwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2Vs
ZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRh
dGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAg
ICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5z
ZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwg
aGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWdu
ZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsK
LSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFt
cGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAg
dWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsK
LSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hl
Y2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJl
Y3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgu
dW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lu
eCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3
ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyAr
PSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0g
MDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBz
aXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUu
d2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4g
d2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgp
OwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWln
aHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsK
LSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQot
ICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQo
KSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9
IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8
IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAot
ICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWlu
dDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhf
dCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAg
ICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJS
b3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewot
Ci0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAg
ICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVz
dC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRl
c3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5
RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAo
b3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkg
ewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAg
ICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQu
dW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3Jk
ZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNS
b3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNl
eCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNh
ZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQot
I2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVu
c2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJv
dygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7
Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAg
ICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0g
aGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBk
ZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAg
ICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJH
UkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAw
LCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywg
JmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBp
ZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQot
ICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5z
YWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0g
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNl
eCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNl
eCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNy
Y1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVu
c2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0g
eCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4
ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNv
dXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9
IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkg
PCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAg
ICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkg
KyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6
ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0Lndp
ZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hl
Y2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVz
dHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAg
IEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZl
R2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+
PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFko
KSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2lu
dC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgp
IDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJl
Y3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAg
IAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgp
OwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkg
KiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYg
KCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVH
ZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRh
KSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdl
X0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAg
ICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0g
Y29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBk
ZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0g
ZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQg
YmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1ti
YXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVy
IGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAg
ICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsg
MV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3Jj
Um93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVz
dFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3Jj
Um93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFj
ZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRl
c3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dz
ID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRl
c3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndp
ZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgp
OwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93
czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMs
IGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5l
bHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4
ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWlu
dDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUp
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXgg
KyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dz
ICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUp
Ci0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjNTVhNTRhZDkxMTc5NTNjYTVlNjk2ZGEwN2U2ZTBkZjY4MTQzZDU4Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMu
aD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpD
R0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJv
dmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewot
ICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7
Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0
YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92
aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6
ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291
cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMjJjMjQ2MzhlN2Jl
MjE4NDliZjJhZTRlNTY3NThiZDZjNDRiZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMjA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2lu
Y2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGludGVy
bmFsU2l6ZSA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4
aW11bVNpemUoKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBtYXhTaXplLndpZHRo
KCkgfHwgaW50ZXJuYWxTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7
CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0
ZShpbnRlcm5hbFNpemUsIGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
UmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZv
cm1Db250ZXh0KGhvc3RXaW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZs
b2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOworICAgIAorICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShzZW5kUmlnaHQpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFj
ZSkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1
cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dChjb250
ZXh0KCkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICA6IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCks
IGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpKSkKK3sKK30KKworTWFjaFNlbmRSaWdo
dCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dD
b250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJm
YWNlLT5ieXRlc1BlclJvdygpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAorewor
ICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7Cisg
ICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOwor
fQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVz
dGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFn
ZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2
ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3Jj
UmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1
bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVz
dEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3Jj
Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9j
aygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICBjb3B5SW1hZ2VQaXhl
bHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9y
Rm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5
dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAg
IGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9y
ZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3Qg
ZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1Jl
Y3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAh
YXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJv
dyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAg
ICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJm
YWNlQmFzZUFkZHJlc3MoKSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyAr
IHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVz
UGVyUm93LCBzcmNSb3dzLCBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0
ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5
OworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAg
ICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNy
Y1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJl
Y3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQ
dXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQs
IHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFj
ZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgdWludDhf
dCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0Lngo
KSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplLndpZHRo
KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVk
LnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNv
cHlJbWFnZVBpeGVscyhpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVy
Um93LCBzcmNSb3dzLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xv
ckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgp
KTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2Uu
CisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5
NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5m
aWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTUxMjcwMmZiZWM4YWYxNzEwYTY0N2E5ZDIy
YjI1YjU3Y2NlZTc5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkltYWdl
QnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSU9T
dXJmYWNlOworCitjbGFzcyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1h
Z2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJ
bnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93Kik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBNYWNo
U2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0OworCisgICAgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVy
cmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6
ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIG92ZXJyaWRlIHsgcmV0dXJuIG1lbW9yeUNvc3QoKTsg
fQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
KworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7ICAgIAor
ICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXpl
JiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworICAgIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlz
aWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdo
dCk7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0OworCisgICAgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuY3BwCmluZGV4IDg5ZDA0MzljMjEwZGI1MDFhYzkzOWViMTE0MTQ4ODFlZWVjNjViMjQu
LmQwOTEzOWYwMWJkMzM2ZjI4NDhhZWE1MjZhNGY5ZjgwMGVlNzg1ZWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCkBAIC0yNiw3ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKIAorI2lmIFVTRShDRykKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgog
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgi
CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs1MiwxNDAgQEAgdWlu
dDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK0NG
U3RyaW5nUmVmIGpwZWdVVEkoKQoreworI2lmICFQTEFURk9STShDT0NPQSkKKyAgICBzdGF0aWMg
Y29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKKyNl
bmRpZgorICAgIHJldHVybiBrVVRUeXBlSlBFRzsKIH0KKworUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorewor
I2lmIFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUp
LmNyZWF0ZUNGU3RyaW5nKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8v
IEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KKworICAgIC8vIEZJWE1FOiBB
ZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkg
dG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KKyAgICAv
LyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9w
cm9ibGVtLzYwOTUyODY+LgorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5H
ID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VU
VHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKKworICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQorICAgICAgICBy
ZXR1cm4ga1VUVHlwZVBORzsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
bWltZVR5cGUsICJpbWFnZS9qcGVnIikpCisgICAgICAgIHJldHVybiBqcGVnVVRJKCk7CisgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikp
CisgICAgICAgIHJldHVybiBrVVRUeXBlR0lGOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGtVVFR5cGVQTkc7CisjZW5kaWYKK30KKworYm9vbCBlbmNvZGVJbWFnZShD
R0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAh
ZGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFk
b3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7
CisgICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChDRkVxdWFs
KHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0
eSA8PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8g
dGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFs
aXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NH
SW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBjb25zdCB2
b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9w
ZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7CisgICAgfQorCisgICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFj
a2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMg
d291bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1
dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFn
ZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAg
cmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKK30K
Kworc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQor
eworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0ltYWdlQWxw
aGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiBw
cmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgp
KSkgeworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdl
IGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgc2l6
ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7CisgICAgICAg
IGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3Jvdyhz
aXplKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEu
ZGF0YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewor
ICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKKyAgICAgICAgICAgIGlm
IChhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtp
ICsgMF0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0
YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0g
ZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOworICAgICAgICAgICAgICAgIGJ1
ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJd
ID0gZGF0YVtpICsgMl07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkYXRh
QWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBo
YSBjaGFubmVsLgorICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAg
IH0KKworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53
aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRo
KCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndp
ZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBk
YXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShp
bWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1N0cmlu
ZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAg
IFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRl
UHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOworICAgIHJldHVy
biAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworU3Ry
aW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZE
YXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVVSTChk
YXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rv
cjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBD
RkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNm
RGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0
b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCmluZGV4IDE2
MTI4YTE5YWJkMWZiODNhYjMxYTExNWM2ODk1MDQ5MWQ0MTk1NTIuLjg0YzU3ZDJmZWU5MzM4ZWQ1
ZTBlZmM0YThlMzM2NWExOWE4MDIwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKQEAgLTI1
LDggKzI1LDMxIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsK
KwogV0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNv
bnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCi19CitDRlN0cmluZ1JlZiBq
cGVnVVRJKCk7CitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKGNvbnN0IFN0cmluZyYpOworCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3Ry
aW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsK
KworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0
cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENG
RGF0YVJlZik7CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDgw
ZjZiMTg3MjUyMjk2OGVhN2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2MuLjI4MjFlZjgxZDc1ZGZiMGZm
MDVhODViZTVjOWZiYzI1OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Miw2ICs0Miw3
IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NH
Q29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CisjaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UuaAppbmRleCAyNDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2NGM5YTA0ZmY5NjljZGIzLi40
Y2MwZmEzZjc5NzI3ZWI5ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMTAwLDEw
ICsxMDAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+
IGNyZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJv
bUltYWdlKENHSW1hZ2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZy
b21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAg
ICAgV0VCQ09SRV9FWFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIHZvaWQgbW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5t
bSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpp
bmRleCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2Qw
YThmODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBA
CiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1w
b3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBv
cnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3Vy
ZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAg
ICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNl
KSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RG
TW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBO
U0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNp
Z25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qg
c2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNh
MTE0OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIo
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVt
c0Zyb21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5
TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYpOwogCiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45OWYxY2UyNzM1NDUwYmRhYzNiYmRmMTFhMzA4NWQ5YTdmM2M5
ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250
ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5
TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihk
aXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCks
IEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAg
ICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsg
IH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0
OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlz
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZv
aWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNw
bGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENv
bnRleHQsIG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSkKKyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXko
eyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNw
bGF5TGlzdCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4g
bV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkg
eyBmYWxzZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1
Li5hZjNhYWRlMmEzMzJjYzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4YjU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAKQEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1h
Z2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1
bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9u
czsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICBhdXRvIHBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0
cyhtX3ZhbHVlcyk7CiAKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcmVzdWx0
SW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgcGl4ZWxBcnJheURpbWVuc2lvbnMuc2NhbGUocmVz
dWx0SW1hZ2UtPnJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAg
ICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0z
MTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUo
KQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5
KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGlt
YWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2Ut
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpw
aXhlbEFycmF5LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBl
JiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1
NjE4ZThmZGRkODRlY2IuLjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0N2Q0MDU4MDA0ZWE3MTcyZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hh
ZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVs
IGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEu
CiAgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5h
bFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKICAgICBpZiAo
IXNyY1BpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAq
IHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVB
cnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFy
cmF5LCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgQ29vcmRpbmF0
ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRl
T3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4
dC5maWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNp
emUoKSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1Mjdh
NTYyNzM1M2RmNDQ5Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ci5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBtX3NvdXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5n
TW9kZSBtX3JlbmRlcmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAg
ZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2
ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi41YzhiM2I0ZGUwYWZhNzE0
NThjZGNmNmM2YmMwZmZkMmNjYmQxNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNzksOSAr
Mjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQog
CiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRp
b25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0
LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgp
LCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVz
dGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0K
IApAQCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVk
UmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVy
c2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwg
bV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpA
QCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJl
c3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJz
aW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1
bHQpIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCks
IG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1
ZmZlckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VC
dWZmZXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjVhMGQ1MGY4Y2Ux
YWFmNjUzNWRlZWM5NDBiODVkYzU1MTdlNGIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9J
bWFnZUJ1ZmZlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAq
ICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
ICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
Ci0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0j
aW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8
d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZl
clNpemUpCi17Ci0gICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMg
Y29tZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCi0gICAgLy8gaHR0cDovL2Rl
dmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmlu
Zy5odG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1p
bWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7Ci0gICAgaWYgKHR5cGUgIT0gImpwZWci
ICYmIHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0
eXBlICE9ICJibXAiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1Bp
eGJ1Zj4gcGl4YnVmOwotICAgIGlmICh0eXBlID09ICJqcGVnIikgewotICAgICAgICAvLyBKUEVH
IGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMg
dGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCi0gICAgICAgIC8vIGNv
bXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3Vw
cG9ydCBhbHBoYS4KLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsK
LSAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VS
RkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0gICAg
ICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAg
ICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAg
ICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNl
U2l6ZShzdXJmYWNlKTsKLSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYo
Y2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9z
b3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgICAgICAgICBjYWly
b19wYWludChjci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVm
KGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZh
Y2UpKTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1Vu
aXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFs
aXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3Ry
aW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFs
aXR5ICogMTAwLjAgKyAwLjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihw
aXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5k
YXRhKCksICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5k
YXRhKCksIE5VTEwpOwotICAgIH0gZWxzZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVm
ZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRm
OCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7
Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAot
ewotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGEgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOwotICAgIGlmIChpbWFnZURhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6
LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1h
Z2VEYXRhLmRhdGEoKSwgaW1hZ2VEYXRhLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1
cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
LQotICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXpl
OwotICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbWltZVR5cGUs
IHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVy
LmdldCgpLCBidWZmZXJTaXplKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9O
aWNvc2lhR0MzRExheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCmluZGV4IDRjNGM0MjY5NjEyNzFjN2I3
YTE5ZDI5NmE5NDAwZWZkYzBmYWM5YWUuLjc1NzAwM2IxZjExZGY0YjI3NjZiNDA5ZTgyMmNkOGI0
MjBmYjRhNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25p
Y29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCkBAIC05
NCw3ICs5NCw3IEBAIHZvaWQgR0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKICAgICBJ
bnRTaXplIHRleHR1cmVTaXplKG1fY29udGV4dC5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0Lm1f
Y3VycmVudEhlaWdodCk7CiAgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IG1fY29u
dGV4dC5jb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRC
bGVuZCA6IDA7CiAjaWYgVVNFKEFOR0xFKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXplLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVy
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZS5jcHAKaW5kZXggN2QyY2VmZDYyNjFkZWUyYTM5YTg5ZDEwMTcwMmViNTAyNTJmNGY1ZS4u
ZjAzOTEzODA2MGQzNDQzNGU2Y2RkYmY5NmVhNjRjMzAxYTYzNTUzZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJl
LmNwcApAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRz
KFRleHR1cmVNYXBwZXImLCBHcmFwaGljc0xheWVyKiBzb3VyY2VMYXllciwgYwogewogICAgIC8v
IE1ha2luZyBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIgaGVyZSBpcyBP
SyBiZWNhdXNlIHRoaXMgY29kZQogICAgIC8vIGlzbid0IHVzZWQgYnkgYW55IHBsYXRmb3JtcyB0
aGF0IHJlc3BlY3QgdGhlIGFjY2VsZXJhdGVkIGJpdC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNp
emUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAppbmRleCAxYzY2YWQ3OWNlNDBjMTQ1NThmNjY1MjUy
YjI1ZTNiYjdkZWQxNmJkLi44OTdjZTQwZDA0YzdlMGFkMWVhMTkyY2I5MTA2MTlmOGY5MjIyNGNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFs
dGltZVZpZGVvU291cmNlLmNwcApAQCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdl
QnVmZmVyKQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0
ZWQpOworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXpl
KCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCmluZGV4IGQ1YjkxYjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0
NTguLjhmNTBlNTc1NzFkN2IzODUwMGVlZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9p
ZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAg
IAogICAgIGVuc3VyZUxheWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIo
cmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGlu
Z3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxl
cmF0ZWQpOworICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRl
dmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRl
cnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFp
bnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQy
MDI5YTJkNDQ2NGRmNWNiN2IzYTQ0MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5
ODRiNWQyYjUyMWE2OTkxYzYxNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVz
L1NoYXBlLmNwcApAQCAtMTgxLDE0ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBT
aGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMK
ICAgICBJbnRSZWN0IG1hcmdpblJlY3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBh
dXRvIGludGVydmFscyA9IG1ha2VVbmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJl
Y3QuaGVpZ2h0KCksIC1tYXJnaW5SZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRo
aXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1h
Z2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAo
aW1hZ2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQg
PSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBp
bWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBw
aXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1h
Z2VSZWN0LnNpemUoKSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAg
ICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwog
ICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBm
b3VyIGJ5dGVzOiBSR0JBLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNk
Mjk3NzViODQ2ZjA1OWQ1YTJjYTcxM2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFj
ZTcxN2VjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgYwogCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2Ug
JiYgIXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTog
VGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVy
YXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcs
IHRob3VnaC4KLSAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JT
cGFjZTo6U1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2
M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFi
YTkzOGQwZDllMjYzNGQ4ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBA
IGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNj
YWxlLndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVs
dGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwg
ZWZmZWN0aXZlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUs
IGNvbnRleHQpOwogICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1f
cmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4
Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25j
YXRDVE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAg
ZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRI
X1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwg
dGhpcyA8PCAiIHBvc3RBcHBseVJlc291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApp
bmRleCAxNzg3ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5
Nzg3MjIwNDY1YmM2YWVjMGI1ODA0YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEs
NyArNzEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5k
ZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50
ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFj
ZTo6U1JHQjsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNo
b3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRj
aCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNr
ZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0
ZWQsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zv
cm0sIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwog
ICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgy
MTQxMWFkZTc3NTA4NTYxNjg4NTZlZDIyYjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4
ZDNhNzlmYjQ5NWRkZDRmMGY0M2Q5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZH
SW1hZ2UuY3BwCkBAIC0yMTgsNyArMjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVy
YXRlZCBkcmF3aW5nIGZsYWcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIp
IC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
Q01ha2VMaXN0cy50eHQKaW5kZXggNTMyNjc4ZjM3NjAzM2MzYzAwZjlmNmJkNWEzMGMzODY5MGUz
MzRiZi4uMGFiOTIwMTYyNGU4NjBhMGQ5Y2MwZjA3MTlmYTYzMTVmMmYxNTYyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0CkBAIC0xNyw2ICsxNyw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dlYktpdF9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dF
QktJVF9ESVJ9IgogICAgICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lU
X0RJUn0vR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05l
dHdvcmtQcm9jZXNzIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZp
ZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBlZGZiNmUxZTA1
ZTU2NDAwOGI3ZDU3YTg3NDUzNzhjNDNkNjZjZjk2Li43YTUyMTQyNWZmOTMxNzJiNWFiN2UxZGMy
NDIwYWZlNjVjOTc2ZjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CkBAIC0xNSw2ICsxNSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9I
RUFERVJTX0RJUikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19E
SVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3Mu
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVBy
b2Nlc3Muc2IuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMiw2ICsx
MDQsNyBAQCAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2Vz
L0luZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNv
ZGVjcy5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKaW5kZXggZGZiYzBlZmU2Yjg0NzI2Zjk2Yzg5ODI4Y2Q4M2QwZWQ3NTkwNWEw
Ni4uOTBkOTExMWZkMTBlODYzNDViN2VmNGZmNTNiMTU5YTBjMzEyY2FjMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIw
LDEyIEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdp
blByb2Nlc3NQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2Fn
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2lu
UHJveHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZUltYWdlQnVmZmVyTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAt
MTQyLDYgKzE0OCw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VS
ZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVz
c2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTI5
MDkzMDk3Y2Q5YmRlYjM0NWExOWE1ZDM3ZmU1N2E1NDBkZWI3MC4uOGM3NTNkMTZmNDBkZmRkY2Zl
MTc0NWJhYTVmZTU5YmYyOTY4NzdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAt
MjUsNiArMjUsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAg
ICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9t
ZWRpYSBcCisgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAg
ICQoV2ViS2l0MikvR1BVUHJvY2Vzcy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1By
b2Nlc3MgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2
ICs1Myw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlv
biBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL0dQVS9tZWRpYSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL01lZGlhQ2FjaGUgXApAQCAtMTQwLDYgKzE0Miw4IEBAIE1FU1NBR0VfUkVDRUlWRVJT
ID0gXAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciBcCiAgICAgUGx1Z2luUHJv
Y2Vzc1Byb3h5IFwKICAgICBQbHVnaW5Qcm94eSBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXIgXAor
ICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgXAogICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyUHJveHkgXApAQCAtMTQ3LDYgKzE1MSw3IEBAIE1FU1NBR0VfUkVDRUlW
RVJTID0gXAogICAgIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRp
YVJlc291cmNlTWFuYWdlciBcCiAgICAgUmVtb3RlT2JqZWN0UmVnaXN0cnkgXAorICAgIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3Ig
XAogICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JV
SSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAKaW5kZXggNjIwYjQxZjI4ZDY2NzZhM2RlMTdmNDc2YjJkZjM4OGZmZjY0
NzcwZC4uYTM3MWNmMjNkYTc3ZmE3NmUzZTQwM2RkYzJkM2FkYjY2MTkwMWM0MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcApAQCAtMTYwLDUyICsxNjAsNjggQEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmxpYldlYlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12
b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAg
ICByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJv
eHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVj
b3JkZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNv
cmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90
ZU1lZGlhUmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJl
Y29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJU
Q0NvZGVjc1Byb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRD
Q29kZWNzUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKQorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9j
ZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkK
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAg
ICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJv
bUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRj
aFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3Zv
aWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAg
ICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRl
KCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0g
bnVsbHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBmNDg1OTY0
ZDQ2YzUyZTMzOGQyYWJlNGY3NjVkZGNiNWE5NGEwNzkwLi4wMjcwMzdmZTk5NDY0MDlmMDZjMjNi
ZjZjZWNkMzc4NTNhNTZlN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBAQAogI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+
CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDcsMTgg
KzQ5LDIwIEBAIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IGNyZWF0ZShHUFVQ
cm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJu
IG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNz
YWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQ
VVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAg
ICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZv
clN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24o
KTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogICAgIFJlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpOwogCiAgICAg
TG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTc3LDE0ICs4MSwyMSBAQCBwcml2YXRlOgogCiAgICAgLy8g
SVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlv
biYpIGZpbmFsOwotICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogICAgIHZvaWQgZGlk
UmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlSW52
YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOwor
CisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKKyAgICB2b2lkIGNy
ZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZv
aWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwog
CiAgICAgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9u
PiBtX2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyUHJveHk+IG1fcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk7CkBAIC05Niw2ICsxMDcs
NyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAg
IHN0ZDo6dW5pcXVlX3B0cjxMaWJXZWJSVENDb2RlY3NQcm94eT4gbV9saWJXZWJSVENDb2RlY3NQ
cm94eTsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDNkNDBhNTcxMmUwMmQx
NDlkMTRmOTJmNTZlNDQ1MzQ2YzAxMjIxZDguLjkzMmMwMTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJj
NTI1OWJhNGQ3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5
IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgeworbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBX
YW50c0Rpc3BhdGNoTWVzc2FnZSB7CisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdl
YktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpCisgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogfQogCiAjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNWYyN2M4ZmEzZTdiODUwZTEzN2JhZTMyZWRkYjhhNzE1ZTg0NmY4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3Nh
Z2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K1JlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAs
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBp
ZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2Fn
ZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
LnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90
ZUltYWdlQnVmZmVyUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6
Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0g
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3Rp
bmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50
b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0
ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5k
UmlnaHQpKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUltYWdl
QnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qm
IGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIp
Cit7CisgICAgbG9jYWxGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXIoZmx1c2hJZGVudGlmaWVy
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTE2YTE0M2U3N2IyMjJjMzU1MThkM2Q1NjZmZjNhOWU1
YTIxYmNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgor
I2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7
CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNz
YWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoK
KyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisK
K3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0
aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAv
LyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlbW90ZUNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICB2b2lk
IGZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGxvY2FsRmx1c2hD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKwor
ICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRp
ZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNz
YWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iMGFlNzhlMmNlNGFiOTUxOWI2NWFiODRiNGQ3MmRkZWI1ZWM5
NThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5
IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgTm90UmVm
Q291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
IGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjgxMDM3MWRlM2FlOTA2NDE3MTVlZDFjODkxNmMyNDQ1ZDdjZThhMQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90
ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5
ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OlBoeXNpY2FsSW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7Cisg
ICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpQaHlzaWNhbEltYWdl
QnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6
bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6
OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk+KHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQs
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIElt
YWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAgIDogQmFz
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRl
bnRpZmllcikKKyAgICB7CisgICAgICAgIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCht
X2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2VuZC0+aW50ZXJuYWxTaXplKCksIG1fYmFj
a2VuZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2VuZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tl
bmQtPmNyZWF0ZVNlbmRSaWdodCgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBsb2Nh
bEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVt
Q291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQo
KSwgZGlzcGxheUxpc3QpOworICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgQmFz
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
Njc4N2VlZmEyMmYwYzQ2MDkxMDhiNWJmYjRkNzdlOTc3NDBiNjJkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordXNpbmcgUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QWNjZWxlcmF0ZWRQbGF0Zm9ybUlt
YWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY0MGZmY2U5YjE5Njk5MWZkZjk5NGY4MjRlZDY5MjNh
MDg4NGY3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTAsMCArMSwx
MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZShHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4obmV3IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7Cisg
ICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1l
c3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2Vp
dmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7
Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChtX2ltYWdl
QnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdl
dCgpOworICAgIGlmICghZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKKyAgICAgICAgcmV0dXJu
OworCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAK
KyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJl
bW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZUFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZlck1hcC5hZGQoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdl
QnVmZmVySWRlbnRpZmllcikKK3sKKyAgICAvLyBDcmVhdGVTdXJmYWNlIG1lc3NhZ2Ugc2hvdWxk
IGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgaWYgKCFtX2ltYWdlQnVm
ZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbWFnZUJ1ZmZl
ck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OTM4YmVlNTExZTY5ZGZl
ZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVy
CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cisg
ICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CisKKyAgICBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4K
KyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBv
dmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAg
ICAgICAgCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
dm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKworICAgIHVz
aW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFnZUJ1ZmZlcklkZW50aWZpZXIsIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4+OworICAgIEltYWdlQnVmZmVyTWFwIG1f
aW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4N2Y4MDJjMzZmZDk1N2JjNDkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7
CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNp
emUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZm
ZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VJbWFn
ZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBmOGJjZTE0NTUwN2RmNDllODllZDRmNzE5ODc2
ZTEwYmY3MDk2YmRlLi5lZDllMTc3ZGIzZmUxNjA3ZWNhZDMzNTdiYjkzNjM1ODM1MTAyZWM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBi
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYgKzI3LDcg
QEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNU
SU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdF
X0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRS
SUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJV
VEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91
cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9k
ZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNlbmRSaWdo
dCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNv
cmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMSw2ICsyMTQs
NyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAg
ICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklE
JywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNv
cmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0yMTgsMTAg
KzIyMiwxMyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6OkltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAg
ICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAg
ICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UmVt
b3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50aWZpZXInLAogICAgICAgICAnV2Vi
S2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXInLApAQCAtNzYyLDEzICs3NjksMTYgQEAgZGVmIGdl
bmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgIGVsc2U6CiAgICAgICAg
ICAgICBhc3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKIAotICAgIGlmIGFzeW5jX21lc3Nh
Z2VzOgorICAgIGlmIGFzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FO
VFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCd2
b2lkICVzOjpkaWRSZWNlaXZlJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1l
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxz
ZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNl
aXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyk7XG4nKQogCiAgICAgICAgIHJlc3VsdCArPSBbYXN5bmNfbWVzc2FnZV9zdGF0ZW1l
bnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIGFzeW5jX21lc3NhZ2VzXQorICAg
ICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRU
UklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgaWYgKHJlY2VpdmVyLnN1cGVyY2xhc3MpOgog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICVzOjpkaWRSZWNlaXZlTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTtcbicgJSAocmVjZWl2ZXIuc3VwZXJjbGFzcykpCiAgICAgICAgIGVs
c2U6CkBAIC03NzcsMTMgKzc4NywxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJl
Y2VpdmVyKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCiAKLSAgICBpZiBzeW5jX21l
c3NhZ2VzOgorICAgIGlmIHN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShX
QU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZVN5bmMlc01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIs
IHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpXG4nICUgKHJlY2Vp
dmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lf
UkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xu
JykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURf
UkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRv
IHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAgICAgICAgIHJlc3VsdCArPSBb
c3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4g
c3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19E
SVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgaWYgKGRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNv
ZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicp
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7XG4n
KQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGRlY29kZXIpO1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpO1xu
JykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXgg
MzQ4MmQwNTBlNGJlZmMxMDJlMzE2ZDAxOThiMDA0ZWY2MDg0NTFiZS4uM2NlMjE0OTAzNTZiNzVj
NmU5ZWE0NjNmMGUxNmY3YTM3NzI2NTA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FscGhhUHJlbXVs
dGlwbGljYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9wbGF5RXZlbnQuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNM
b2dnaW5nQ2xpZW50Lmg+CkBAIC03OTcsNiArNzk4LDI2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFy
Z3VtZW50Q29kZXI8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiB7CiAKIG5hbWVz
cGFjZSBXVEYgewogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
IFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24sCisgICAgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1
Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZW5kZXJpbmdNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVz
ID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLAorICAgIFdlYkNvcmU6
OlJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RB
Y2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdCwKKyAg
ICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlOjpSZW1vdGUKKyAgICA+OworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpDb2xvclNwYWNlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKICAgICBXZWJDb3JlOjpDb2xvclNwYWNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggMzA2Y2Qx
ZTY5MzU2NjFhZDQxYzA2MDkyODQ4YmY5YWYzNmIxYjcyNi4uMzUyZTM0MWU2NDI1OTI0N2U1YjYx
ZjUzODM2NTMyODYwZTU1ZDQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4
dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0zMSw2ICszMSw4IEBAIEdQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlTWVkaWFSZXNvdXJjZS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNv
dXJjZUxvYWRlci5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFn
ZXIuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3Bw
CiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTE0LDYgKzUx
Niw4IEBAIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAK
IFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKIFdlYlBy
b2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVu
aWZ5CiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCitX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcAorV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAog
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKIFdlYlByb2Nlc3MvR1BV
L3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJpdmF0ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9N
ZWRpYVJlY29yZGVyUHJvdmlkZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggOTM5ZmIx
NzFiNzFlOGMyZjJmMjNlMDMyMjA2YjBhYjE3Yzk4YWI5OS4uY2ZmNDVhMjg1YWE4YjU1YWQ2NDcw
MjE4MzA3M2M5NTM1MTNmODM1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29j
b2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNjMyLDEwICs2
MzIsMTQgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxp
bmdDb29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2VzCiBFZGl0YWJsZUltYWdlQ29udHJv
bGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
UmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQ
VVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2
ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJU
Q0NvZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2Vp
dmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVj
b3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlck1lc3Nh
Z2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBhZDhiNmRlZjIxNzhjZjI4ZjNlYWVlMGU3YjZiYWE0ZmQxNjczNTA4Li5kYzMxOGM3ZWE2ZDdm
NjcyZmE2Zjk1ZjI4NzM5MjYzNDFhYjc3ZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5NjEsOCArMzk2MSwyNiBAQAogCQk3MUE2
NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVj
b2duaXplci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyog
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRo
ID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0
ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIx
RjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdl
cy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUEyM0FEMkZENjAwQkRB
RkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE2MjNBRDRG
MzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMg
LyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTY0
MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tl
ck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4
Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdl
QnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTQyM0FCMEFGMTAwQTYx
MjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQjIzQjRDN0E5MDBG
NjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5
RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9y
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5
QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC02MzkzLDYgKzY0MTEsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEyRjIzOUIzQjBDMDA5NTk4RTIgLyogbWVkaWEgKi8s
CisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJ
CQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIz
NzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTJEN0U0
M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5oICovLApAQCAtNjQw
OSw2ICs2NDI4LDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAog
CQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5
QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAv
KiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOThFMjNCNjMzQ0EwMEFFNTY4NiAvKiB3
ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCkBAIC03NzgyLDYgKzc4MDIsMzggQEAKIAkJCW5h
bWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3MjFGMUU5NzIz
QUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAorCQkJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZG
NyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFFOTkyM0FEMkZENjAw
QkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIz
NUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
ICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdE
NDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzJENUMyRUIyM0I0
QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAq
LywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdC
YWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3
MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAq
LywKKwkJCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVy
LmggKi8sCisJCQkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVy
LmNwcCAqLywKKwkJCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZm
ZXIuaCAqLywKKwkJCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZm
ZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0Mg
LyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyRDVDMkU3MjNCMzg0MjEw
MEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFODIz
QjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyRDVD
MkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLAor
CQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCAx
OGU5MzZkZTMyMzA3NzBmMjQzNjFiNmFiYWE4ZTE3ZTRkMmU1YWMwLi4xODhmYWMyMGExZTkyM2Rm
NjJiYjFhMzgwNTUwYWFhNGY5NGQ4ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjAsMjkgKzYwLDM1IEBA
IHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7
CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UpCi17Ci19Ci0KLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQor
Ym9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0p
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2Vy
TWVkaWFDYXB0dXJlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBjYXB0dXJlTWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1l
bnQ8VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFuYWdl
ci0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNp
ZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJU
Q0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
ciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNl
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmgKaW5kZXggMzFjNjEwNDY2OWYyZjAyZmZhNDQwZmViODgwOTI2Yzc0YWUyNmFjZi4uNmQxYjgz
ZGU1ODM2YWZhZTIxYWZjMzRmNThhMjJlNWQ2ZDMyM2M3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgs
NyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
KyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Niw2ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAgICBJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAg
ICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4g
bV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogcHJpdmF0ZToKICAgICBHUFVQcm9jZXNzQ29ubmVj
dGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwpAQCAtNTMsMTAgKzU1LDE1IEBAIHBy
aXZhdGU6CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNl
aXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7
CiAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKwogICAgIC8vIFRo
ZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAg
ICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4
M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7
CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMmJiZGQ4NjM0MDUyMDVhZGE3ZWYzY2M3Mzg0NjAxOWZiMTk5M2IzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRl
bnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdlYWY5NDRiYTM4ZjBh
OTk0YTViZTUyNDE5NTlmNGFjODhhNTkyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
IDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVySWRlbnRpZmll
ciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZT47CisKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNTFiNGNlODBm
N2IxYTZlY2JjODJiZTQ2NWQ5YTgxZmQxZDM5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
Y3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1
ZmZlci5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAg
Ly8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9jZXNz
Q29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVy
TWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24o
KS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAv
LyBDcmVhdGUgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5k
ZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK1JlbW90ZUltYWdl
QnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2Vs
ZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVz
c2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJN
YXAucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIobV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBS
ZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAg
IHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6Ondh
aXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+
IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29u
bmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFu
ZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVJ
bWFnZUJ1ZmZlckJhY2tlbmQ+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2Fp
dEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwor
Ym9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcigpCit7CisgICAg
UmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBj
b25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3Rl
SW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcj4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIs
IDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFy
cml2ZXMpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2Vu
ZCgpCit7CisgICAgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOwor
ICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7ICFpc0JhY2tlbmRD
cmVhdGVkKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRDcmVhdGVJbWFnZUJ1ZmZl
ckJhY2tlbmQoKTsKKworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291
bnQ7IGlzUGVuZGluZ0ZsdXNoKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRTZXRG
bHVzaElkZW50aWZpZXIoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJ
ZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sK
KyAgICBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyID0gZmx1c2hJZGVudGlmaWVyOworfQorCit2
b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBtX3NlbnRGbHVz
aElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAg
ICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpGbHVzaENvbnRleHQoZGlz
cGxheUxpc3QsIG1fc2VudEZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKKyAgICBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmI1NmUzMWQwY2FmMjA2ZWU1MDZjOTc5NjkwNWI3ODQw
YTQ5YjhhYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNs
dWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlz
cGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlcgorICAgIDogcHJpdmF0ZSBJ
UEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewor
cHVibGljOgorICAgIH5SZW1vdGVJbWFnZUJ1ZmZlcigpOworCitwcm90ZWN0ZWQ6CisgICAgUmVt
b3RlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisg
ICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJy
aWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICAvLyBCbG9ja2VycworICAgIGJvb2wgd2FpdENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZCgpOworICAgIGJvb2wgd2FpdFNldEZsdXNoSWRlbnRpZmllcigpOworCisgICAgdm9p
ZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25z
dCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRp
ZmllcjsgfQorCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgTWFjaFNlbmRS
aWdodCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAw
OworCisgICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIpOyAgICAgICAgCisgICAgdm9pZCByZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIg
bV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRl
KCkgfTsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZp
ZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRp
ZmllcjsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWY4Nzc1NTdjMGFhOGM4YTkwNTA0YTEzNTgwZGE1OTFh
YTViZmM1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsx
LDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisj
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNv
dW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdlYkNvcmU6OkZsb2F0
U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJp
Z2h0IHNlbmRSaWdodCkKKyAgICB2b2lkIFNldEZsdXNoSWRlbnRpZmllcihXZWJLaXQ6OkltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NzFjN2FkODA0YzJjNDFmZWQxNmNiMTA2YzY2ZDA5Zjc0
MDM1MWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+Citj
bGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVibGljIERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXIgeworICAgIHVzaW5n
IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNr
ZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2Vu
ZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KG5ldyBSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVu
ZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCisgICAgICAgIDogQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIo
c2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNl
bmRSaWdodCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9iYWNrZW5kKTsKKyAg
ICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2VuZFR5cGUqIGVuc3VyZUJh
Y2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tlbmQpCisg
ICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcyku
ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsK
KyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxh
eUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChk
aXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBm
bHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE3MzJhNTViMGIyZWI3ODQyMzdlODJlYjg1
MWIwYjk0YjkyNzc5ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUlt
YWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBSZW1vdGVBY2NlbGVy
YXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEFjY2Vs
ZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGM5NjQ5ZTdlZWEwYTFiMDY3
NWNkYmY4MTg2N2U0Y2Y3YWMyZGM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciks
IDApOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lgor
ICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5k
ZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBD
OjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAor
eworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihz
aXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBm
Mzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
OworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVy
aW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3Jl
YXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25z
dCBXZWJDb3JlOjpIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0NjVmYjhjNmY3N2Y3ZmRlMzhmNjhjYmIwNzUyNDZjOTk0
ZGIxZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRl
bnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBP
YmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZT47CisKK30KKwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRD
Q29kZWNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJU
Q0NvZGVjcy5jcHAKaW5kZXggNDZkMTE5ODc3MmM1MWI4YWQ5MGVmOGExNzEzMjFmZmNlMjkwZmNm
OS4uYjAyOTIxZTA2MWE2MGUzMzUwODg3ZTdiMDg5MzI0ZWFiOGVhM2Y1ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3Mu
Y3BwCkBAIC00Miw2ICs0Miw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKwogc3RhdGljIHdlYnJ0Yzo6V2ViS2l0VmlkZW9EZWNvZGVyIGNyZWF0
ZVZpZGVvRGVjb2Rlcihjb25zdCB3ZWJydGM6OlNkcFZpZGVvRm9ybWF0JiBmb3JtYXQpCiB7CiAg
ICAgaWYgKGZvcm1hdC5uYW1lICE9ICJIMjY0IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXgg
OGU0YzkzNzVkN2I4Y2MxMGZmYTAwODAzZDQ4MjE3M2JlNWEzNTU4YS4uNDgxZmFhYWFjYWQyMGQy
NjM5ZTg1ZDE2NTYzYmViMjg3MmUwMGRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLmgiCiAjaW5jbHVkZSAi
UGFnZUJhbm5lci5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNs
dWRlICJVc2VyRGF0YS5oIgogI2luY2x1ZGUgIldlYkNvbG9yQ2hvb3Nlci5oIgogI2luY2x1ZGUg
IldlYkNvcmVBcmd1bWVudENvZGVycy5oIgpAQCAtODgxLDE1ICs4ODIsMjIgQEAgR3JhcGhpY3NM
YXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25z
dAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikK
LQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAog
ewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1fcGFnZS5kcmF3aW5nQXJlYSgpKQogICAg
ICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNw
bGF5SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQorI2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICByZXR1cm4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxzZQorICAgIHJldHVybiBSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0
YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1NWUxYzFkNjA4NTBlNDcxZjY3OTRlZDFj
MmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUxYjRmNTNiMmQxZGY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29y
ZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFj
a2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dl
ZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVD
bGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNkMTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4u
MjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFiMWVjYmJmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4
dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gV2Vi
Q29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRl
bQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHNu
YXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFuIHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBp
biBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbmlsOwogCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNGMxNzZk
NGQ0ZjRjYWQzYzllMTU1YzkxOTdiYmFhMDZiNTEwZmE1NC4uNGYwNTc4YTdmOTZiOGI1N2E3MTFi
Njk5Y2Y3MGY0ZGViNjUxOWM5OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTAxLTA4ICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1w
bGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0
LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0wOCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFw
cGxlLmNvbT4KIAogICAgICAgICBmZXcgd2ViLXBsYXRmb3JtLXRlc3RzIGFyZSBmYWlsaW5nIG9u
IGlPUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNw
bGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3
ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXkt
bGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUt
aW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xv
ciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVz
cyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNm
b3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAg
IChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387191</attachid>
            <date>2020-01-08 22:00:40 -0800</date>
            <delta_ts>2020-01-08 22:23:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200108220039.patch</filename>
            <type>text/plain</type>
            <size>459121</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzllYjI1MjY1YWNjMjk4
NGYzOWRjMDY1NzI2ZjliZDRlODdhODgxYy4uMmNhZjljZTZlNDJjMTkxZGY5YmU3ZGE0NGI0NDA4
Mzc1ZmMxMjczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzNSBAQAorMjAyMC0wMS0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5k
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRl
ZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJ
bWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250
ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJp
dG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVD
b21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRv
THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFs
U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29s
dXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNhbEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjbGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNl
QmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
bWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0
ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURh
dGFSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVt
dWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzU2xvdyk6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJ
bWFnZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0
ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VU
SSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxp
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAg
ICAgICAoTmljb3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9D
b250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0
QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisK
IDIwMjAtMDEtMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWR1Y2UgYmluYXJ5IHNpemUgYnkgcHVyZ2luZyBDKysgdHlwZSBpbmZvcm1hdGlvbiBpbiBP
YmplY3RpdmUtQyBmaWVsZHMgYW5kIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDEwMTE3ODk1OWM4
Zjk3ZThmNjgzZmUwN2E5MTQ4ZDU2Mjk1MjNiYi4uOGQzNGQ0NzA5MGVlYzJmYmZhMmY2YTI5ZjQ2
Y2Q2ZTljOTNlMWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAyMC0wMS0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJl
Y2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1
c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2Fn
ZXMuaW4uCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQ
VVByb2Nlc3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRp
bmdGbHVzaCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDoKKwogMjAyMC0wMS0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBiaW5hcnkgc2l6ZSBieSBwdXJnaW5nIEMrKyB0
eXBlIGluZm9ybWF0aW9uIGluIE9iamVjdGl2ZS1DIGZpZWxkcyBhbmQgcGFyYW1ldGVycwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDgxYjYwN2U0Yzc2OWEwZjE1OTRjYmE1YWE3ZjU0
ZGQzNWU3MGNjOGIuLjg4OTQxOGQ2ZGRjNTQyNzQ0ZWM2MjYxMDE2NTBhODcwNjQ0ZTAyYzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0wOCAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIElt
cGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRT
aGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA4ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIGJpbmFyeSBzaXplIGJ5IHB1cmdp
bmcgQysrIHR5cGUgaW5mb3JtYXRpb24gaW4gT2JqZWN0aXZlLUMgZmllbGRzIGFuZCBwYXJhbWV0
ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5
M2I5OTY0ZTc3Li45OTM3MGJiNGI3YjgzMTU1N2YzNjA4N2EyMmEzOGYxM2NkOWJhZDJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNs
aWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJh
Y2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0
LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9u
cy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1LDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVu
dGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24u
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
YWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJv
YXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQw
ZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVy
OjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVm
ZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VC
dWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEy
OTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0
NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2
LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
aW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzVi
NTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBv
aW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQxMTIxNTU3YWU2ZjM1ZGI5YWQ1ZjRjMWU4YWNjY2EwODY2M2U2ZmIuLjdh
MjA5YTg2N2QzZTFhMTQwZGIyMDM0NDVlZDNhZGVlMjc2ODhlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNS4uNGYwM2Vj
MjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2ZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
R1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVlNGJiOTQzMWFlY2I0YmNjYzI4YmQyLi45
N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFlNTJkZjJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RL
LnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJlZnJlc2hNb25pdG9yR3RrLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZlMjhiNTdkYzc0NGM5
ODJlYWU3MTAxYTYyMmJiMTc5MGJjOWZiNzIuLmRjMTUzNjBiZmE1ZDg1Mjc2YTA3NWM0NjFjZjZl
OGFkYTVmNjZkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAw
ODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5
NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4
NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8q
IFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdE
MTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0
RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2
MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NB
OTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyog
SlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzQsMTAgKzIxMzIsMjEgQEAKIAkJ
NzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJE
QUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQ
YWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVD
OTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEy
M0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMw
MDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0
RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEz
QyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUx
MURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIw
MEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5
Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUz
RkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAw
MjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEy
M0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJE
NUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxp
bmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJ
NzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMw
QUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDEsOSArNjU1MCw2IEBACiAJCTIy
NUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBF
IC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0Ix
MzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJC
QkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkw
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMSw4ICs5NjA3LDExIEBACiAJCTcxRUZDRURFMjAy
QjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0
cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4
NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAv
KiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRW
YWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0
MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Zh
bHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0Mx
RjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5n
TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0
OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHBhdGggPSAuLi9BbHBoYVByZW11
bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MjMsNyArOTYzMiwyMCBAQAogCQk3MjdB
RkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTA3
QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQy
M0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0Qjcw
MDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNjIz
QjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU5MjNC
NDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0
MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjg3LDcgKzEyNzA5LDYgQEAKIAkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVs
ZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2ODYsNiArMTY3MDcs
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODg1LDYgKzI0OTA3LDcgQEAKIAkJQjI3NTM1
MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNH
LmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNw
cCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICov
LApAQCAtMjQ4OTQsOSArMjQ5MTcsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAg
LyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIg
LyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQy
MEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBC
OTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQkU0
MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJ
CQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0
MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIx
REIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1
NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5
OTIsNiArMjUwMTgsNyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21Q
YWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJh
eS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMu
aCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1MDgzLDcgKzI1MTEwLDggQEAK
IAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywK
IAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJ
CUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5
RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MjAyODBE
MTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJC
RTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0Qx
OUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZF
QTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4
OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MTQwLDYgKzI1MTY4LDgg
QEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAog
CQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZB
NkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkJFM0ZFMjNBQUJG
QTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MjMyM0FD
NDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1
NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMz
REMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4
NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ5
LDYgKzI1MTc5LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmgg
Ki8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNw
cCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUu
aCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICov
LAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJ
CQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYz
REQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5OTAsNiAr
MjkwMjMsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6
ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyog
QWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1
QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4
dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8q
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIz
MTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjk2ODQsNiArMjk3MTgsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3
MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMy
Mjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAw
MDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDI5Miw4ICszMDMyOCwxMCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5
NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5
QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4
MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8q
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFGMUVB
NzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8q
IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAx
OTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTMxNzYzLDYgKzMxODAxLDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAx
RDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4
MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlz
aWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0QyMDBC
OTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
RDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0
dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzgyLDYgKzMxODIxLDcgQEAKIAkJCQlC
Q0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8q
IFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVBODAw
MjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0
NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2Nh
bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTksNiArMzE5OTksOCBAQAogCQkJCUJDRUE0ODc2
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhG
MkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNl
U3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQz
IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjNDMUY1
OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0
QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMTgxNzUxNWUxY2M3MDkwYzdlNTlhMGNi
ZDI1M2ZmNzI2MTc0NGM3My4uZjUwMWNhMjNhNzM5NWYxZTViMjFjODFiMDRkZGIwMTkzYjdhMmYz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRo
KCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUg
PSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwog
ICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0y
Nzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7
CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0
aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6
Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbikg
fSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2Qx
OTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2
LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0g
SW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZm
ZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRv
IHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAg
IGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdl
OjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21Q
YWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNw
cAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRm
ZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFp
bnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdo
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNS
R0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3BpZWRC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1h
Z2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9u
R3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGll
ZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgpLCBQ
cmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVm
ZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlk
YWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAxNDg2
YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFz
UGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYw
LDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1
ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAg
bV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3Vt
ZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBS
ZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52
YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4LDM5
ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25z
dCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2Vz
RGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBp
ZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYg
KHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NE
aXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29u
dGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBI
VE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAg
IGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFn
cyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6
OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykg
Y29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAo
YnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdp
bmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRo
KCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVu
YWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkg
JiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgp
LT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcg
c2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9j
dW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgCisg
ICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52
YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAg
cmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6
OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYg
KHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRB
Y2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJp
bmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+
ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAj
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7
CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2Nl
bGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEz
NGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxp
c3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVl
MTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMw
OTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
aXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMg
UmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0
ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5k
ZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUx
MTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAg
ICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAg
ICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsg
SW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdlQnVm
ZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgp
IHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29u
c3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVu
YWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBP
ZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0
MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4
MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyAr
MTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdC
dWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0
ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkw
LDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVm
UHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpj
cmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVh
bikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQo
KS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQo
KSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAgICAg
ICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0
OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4
dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5k
aXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERpc3Bs
YXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQotCiBj
b25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXplU2F2
ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIAog
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEo
Q29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9h
dCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgp
Lm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
Y29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1h
Z2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBi
eSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1h
Z2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1w
dHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkg
PSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRy
LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRh
UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAgICAg
U3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBw
ZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0
ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgs
IGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0
SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgs
IGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1dElt
YWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5WCwg
ZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNh
bnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRp
Y19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVz
dE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29v
cmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBi
dWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisg
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3Rl
bSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDog
YnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1
Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAg
ICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJy
YXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9p
bnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRhLmRh
dGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3KGRl
c3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hh
ZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODky
YmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIxNDFh
NzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoK
ICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlz
cGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENh
bnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0
b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRl
PGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNv
b3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBj
b25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRp
cnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBk
eSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRp
cnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1
MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7
CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJp
bmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFz
LCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjks
NyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNB
Y2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0g
QWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4u
MTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAg
IGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1h
Z2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAg
ICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFn
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAg
ICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2Us
IFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB2
aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8s
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1
MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlwZSA9PSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0
dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxl
dmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQp
IHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdl
dCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9y
bWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4LDcg
KzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1
ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0
NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8gdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIElt
YWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQo
KSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVm
ZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdo
dCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAg
ICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAg
ICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZl
cjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2
aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAg
ICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4SW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVm
UHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVy
KEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6
ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVj
dCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZm
ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdl
QnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRo
aXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1f
YnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMx
YTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQog
ICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6
ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwg
VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXpl
KCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3
ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50
aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNl
dEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQog
CitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25z
dAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0Jh
Y2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1f
cmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpk
aXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMx
NzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApA
QCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9v
bCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNr
ZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigp
IG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qg
b3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJl
c3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3
NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0
OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURv
bWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMw
Myw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NM
YXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJm
YTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0
ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
U25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0
aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAg
aWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9y
KQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFn
ZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVj
dC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250
ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQz
Zjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYz
M2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBA
IC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAg
ICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVj
dCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAg
ICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRh
dGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFV
UkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwg
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRh
NDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNmIwMGM1ZTY0MDEwOTI4NzJiNDdiNWE0ZmM4ZTkyYmQz
YTE5MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDkg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyR0xTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRy
Q2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRv
dy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCmluZGV4IDJjZmVjYWRj
MjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQuLmY1ZjIxN2NjZDg0MDYwODAwMjU1YzIw
M2QyMjE3Y2FlY2UwY2UyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hv
c3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRv
d19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRn
ZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBSZW5k
ZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNl
TW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworICAgIAogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5NTc1NGM0NjI3NTdiNzhk
YmZhNDEwMjU0MzJhZjBiN2QuLjlhNzQyNWUwMzM2OTJlMzRhMzczNDhjNWJhOWU3M2U5YzQyNGFh
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyAr
MzAsMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
R0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
SW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZkMWNhZWY4NTQxZGVlMDYyYmZlMDU0MTZjZGEyZjJhN2Y3OTI2ZTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRp
cGxpY2F0aW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAgIFVucHJlbXVsdGlwbGll
ZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFhYjQ2ODY3NjhmMWEyODJkNTg4
MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgOiBw
dWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9
IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2Fs
SW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOworICAgIH0K
KworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBl
PiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IERpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhp
czsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlz
dChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1ODZkZDRiMmFmOTFmNDU2NTUzNWE3MDI5Mzky
M2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEyZmY4NGMwZTY2NDJmODE4MjcwOTljZTgzN2UyODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAjZW5kaWYKICAgICBib29sIGlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5h
Y2NlbGVyYXRlZDsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRl
eCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4NzlkYmQ0OTY5NjRiNDkxYjE4Li4wMGJlMGZlYTA2MDU1
Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAorI2luY2x1ZGUg
IkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFiNzZmMTIu
LjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3OGFhMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5j
bHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIsMTcgKzEyMyw2IEBAIGVudW0gVGV4dEFsaWduIHsKICAg
ICBSaWdodFRleHRBbGlnbgogfTsKIAotZW51bSBSZW5kZXJpbmdNb2RlIHsKLSAgICBVbmFjY2Vs
ZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlciwgLy8gVXNlIHBsYWlu
IG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIHBsYXRmb3JtIEFQSSB0byBhbGxvY2F0ZSBi
YWNraW5nIHN0b3JlLgotICAgIEFjY2VsZXJhdGVkCi19OwotCi1lbnVtIGNsYXNzIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gewotICAgIFByZW11bHRpcGxpZWQsCi0gICAgVW5wcmVtdWx0aXBsaWVk
Ci19OwotCiBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBvc2l0ZU9w
ZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogU3RyaW5nIGJsZW5kTW9kZU5hbWUoV2ViQ29y
ZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgV2ViQ29y
ZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMsNyArMTMzLDYgQEAgV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOwotV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBj
MDEyNjM3MGNiODY1OTI3YTMyYmYxMWY2MTQ4NmQ3MWFmN2I0NzU4Li40ZTJiZTcxYzc0MWM1NWY1
NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzggKzI4LDQ0
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRM
ZW5ndGggPSA0MDk2Owotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xh
bXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBSZW5k
ZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUlt
YWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUs
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3Mp
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRl
eHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFy
Z2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQot
I2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0
YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhD
bGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0xMDUsOTcgKzExMSwxMiBAQCBGbG9hdFJlY3QgSW1h
Z2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4g
RmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0K
IAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBm
b3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZv
ckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6
ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3Jj
Q29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBv
bmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBp
ZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6
OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkr
KykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAg
ICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICog
MjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAg
IH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7
Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9
IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxp
bmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5k
aWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRU
b0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgp
LCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQ
aXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAg
ICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAg
ICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBz
cmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAg
IGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAo
KGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZz
ZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6
ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmlj
IGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVy
LgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENB
SVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAot
ewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVj
dCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVy
IHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVk
IGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAg
ICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwog
fQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNv
cHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9C
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUocmVjdC5zaXplKCksIGNvbnRleHQpOwog
Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihz
Y2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0
byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXpl
LCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxl
IGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5z
Y2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBy
ZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBj
b250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAg
IC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFu
ZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7Cisg
ICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGli
bGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIHJldHVybiBhcmVFc3NlbnRpYWxs
eUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29udGV4dCgpLnNjYWxlRmFjdG9y
KCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQog
Ci0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VC
dWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9yeUNvc3Qo
KSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5l
ZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4K
LSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9l
c24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXpl
KCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBpbWFnZUJ1
ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXplX3QgSW1h
Z2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9Ci0jZW5kaWYKIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggM2JkZWU0ZWUwMGVkMTdhZTM0M2IyZjZhOGRkZDAwOTM4OWMyZTZiZi4u
YzYwYjc1ZDRmYmZiYTVkMmJkNDUwYjEzYTc1MzEzMGZjNmJjY2FmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
NywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3Mg
SW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNr
aW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2Vx
dWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3Rv
cmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBj
bGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdl
QnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwg
V0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsK
LSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJu
IGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNl
ID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRp
ZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNv
bnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIC8v
IENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRo
IHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVu
IGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVm
ZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3Rv
cmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZs
b2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNl
ZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0
ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5n
KGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNv
bnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUg
Y2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMg
RmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgc3RhdGljIEludFNp
emUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBH
aXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZp
b3IKLSAgICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0g
ICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIGVudW0g
Q29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3Jk
aW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVT
eXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CisgICAgdmlydHVhbCBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAKLSAgICB2
b2lkIHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRl
U3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pOworICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxv
Z2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9
IDA7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVh
bCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNp
emVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0
OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CiAKLSNpZiBVU0UoQ0FJUk8pCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
LCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotI2lmICFVU0UoQ0cpCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNy
Y0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0j
ZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsK
IAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0OworICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2
ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Cisg
ICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0
aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3
b3JrCi0gICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFu
ZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVu
dW0sIGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ug
c3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgPSAwOwogCi0gICAgLy8g
VGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdo
aWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJv
b2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7
Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAg
ICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6
ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
VmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi1wcml2YXRlOgotI2lmIFVT
RShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhl
IGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8vIGltYWdlLCBj
cm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGlj
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZWxpZiBV
U0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01Q
dHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgotICAgIAot
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCA9IEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRl
U3lzdGVtOjpMb2dpY2FsKSA9IDA7CiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAgIElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRU
b0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBD
dXN0b21QYWludEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7
Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZs
b2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBs
YWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRo
YXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9v
bCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2Rl
LCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQot
ICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJ
bWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogfTsKIAotI2lmIFVTRShDRykKLVN0
cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTc4NWM4ZTc4YzQxYzMyNjU1ZjEyYzI3MjAyMDFhZWUwOGYyYWYxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFj
a2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFz
aygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW50
ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5s
ZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQg
PCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3Qg
YSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFh
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsdW1h
ID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8g
MjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1h
KTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWlu
YW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwYjJjMzMwNjcyMTJk
MTNhOWVmNjI2ZTk5NGVkMDEyNTdlNWM5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDEx
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAi
TmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0b3JlQ29w
eSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3Mg
ZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNl
cXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2Vy
dmVSZXNvbHV0aW9uIDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBj
bGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKwor
ZW51bSBjbGFzcyBDb29yZGluYXRlU3lzdGVtIDogdWludDhfdCB7CisgICAgTG9naWNhbCwKKyAg
ICBCYWNraW5nU3RvcmUKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworCisgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNv
bG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVy
biA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmlydHVhbCBz
aXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB2aXJ0
dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7IH0K
KworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0
dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29yZGluYXRlU3lzdGVtKSB7IH0KKyAgICAK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dM
ZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICAgICAgOiBtX2xv
Z2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFs
U2l6ZSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAg
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworICAgIEludFNp
emUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRTaXplIG1faW50ZXJuYWxTaXplOworICAgIGZsb2F0
IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Zjg5ZWMwZDM2ZmVmYmQxMmFiZTU0M2MzZjIwMzRmNjE1OGIzZDJjZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShD
RykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8pCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ3NzJjNjk0ZDM4MWFjYmM5MjYwZGJiNDdlOWZlMjcwMWU0Mjc2NWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdl
QnVmZmVyLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgorY2xhc3MgUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJs
aWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gUGh5c2ljYWxJbWFn
ZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxJbWFnZUJ1ZmZlciwgSW1hZ2VCdWZmZXJUeXBlPjo6dmFs
dWUpOworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICghYmFj
a2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJh
Y2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFj
a2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RGTW92ZShiYWNrZW5k
KSkKKyAgICB7CisgICAgfQorCisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
KworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICAgICAg
cmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250
ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAg
ICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYXNlVHJhbnNmb3JtKCkgOiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmxvZ2ljYWxTaXplKCkg
OiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+aW50ZXJuYWxTaXpl
KCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPnJlc29sdXRp
b25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPm1lbW9yeUNvc3Qo
KSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5leHRlcm5hbE1lbW9y
eUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkg
eworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdlKGNv
cHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAg
ICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnRyYW5z
Zm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENvbG9yU3BhY2UpOworICAgICAgICB9
CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2Fz
dDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5nZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgYXJyYXksIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9y
bWF0LCBhcnJheSwgZGF0YVNpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3Rl
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5ZXIo
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0
Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9u
VGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlU
b1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3Jt
YXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9iYWNrZW5kOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxMmUxOTFmMjNm
MmRlNGY0YjFhYWE1MjMzYjc1MTIzY2VjODNiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1
ZGUgIkltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJE
KQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOworI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOworI2Vs
c2UKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9y
bUltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVy
ID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2lu
ZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEFj
Y2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjRmMDA4NjE4NWNmMjI4NWJiZjI1NTgyZjk5NzIzOWY2ZTlkN2VlNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+
IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVy
aW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQg
eyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYm
IGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFy
ZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAg
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3Jt
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhv
c3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBB
Y2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJP
VUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICgh
aW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1
ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwMzZk
MDg4MjA1NjRlMDM1YmYxZThhMjNhMGRkNmYyOGFkYmYzZjgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93Owor
Y2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JFX0VYUE9S
VCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tl
bmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
KyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJp
bmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2Rh
NzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgewor
ICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBS
ZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEwNzY3OGM1
NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMz
MzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRj
aEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2Nl
bGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAg
fQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3co
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllcklt
YWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxs
YmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBV
bmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAK
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBs
YXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBh
dXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03
MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5n
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAg
YXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAg
IGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0g
bGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2
b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2Us
IGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJs
dXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBs
YXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBs
YXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0
ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRh
dGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50
U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxh
eWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdl
UHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApp
bmRleCA2MmM3OWYxM2ExYzcyNGRkZjM3YTk0NjRmODMyY2Q2Zjc3OWUwN2Q4Li44MGEwMjVlOGU2
Y2E4OGE2YjQ3ZmM3ZmRjNWU1YzVlMjUwZjlmZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAg
LTE3NCw3ICsxNzQsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBk
cmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2lu
LCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0
YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkp
IHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNv
bnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmln
aW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNo
YWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFs
cGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGlj
IHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdT
aGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRy
YXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFn
ZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAg
aWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFj
ZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRl
T3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAg
IH0KIH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBs
YXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAg
IHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllcklt
YWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VC
dWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmln
aW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxT
b3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJl
MTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAy
ZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2
OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUlt
YWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDljNzZlMjkxMmY4MWZjOTRhZGI1YzQ4
NDQ1MjcxMzQ2MGRjZmIyOGYuLjI5YTBlYzQ5OTRmMzYxNWQ4N2IxYmI0ZTFlMzNkNzY4ODA3Y2Jh
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDExLDcgKzQx
MSw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBi
dWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fp
cm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBk
ZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3OTY1N2UzYjI5OWVkNmViNGM1Y2MzNWRiOTUzMjQ1Nzg3Nzc1YjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlS
TykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25z
LmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8
RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYg
VVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VT
KQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRl
eHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmlu
Z01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAg
ICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykp
OwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0K
LQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5k
ZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNl
bmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6
OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBp
ZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0
dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
LSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0g
ICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29t
cG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBt
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3Vy
ZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0
KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwot
fQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkK
LXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3Vy
cmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0
ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAg
ICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5s
b2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1f
c2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAg
ICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8
Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5p
bXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZv
cm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0
IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2Vi
Z2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNl
cyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28g
d2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZm
ZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBt
X3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0
b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2Nv
bXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAg
ICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2Vu
ZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgp
LCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1
dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNh
dXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20g
YSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0g
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9E
ZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNl
IGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVh
ZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xP
Ul9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNv
cHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJm
YWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29w
eTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2Vy
Y2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAg
ICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5U
X0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWly
b1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6
OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNv
ZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0g
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJu
IGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSks
IHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29s
dXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8g
TWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0g
Y2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxl
ZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlv
bj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJl
c3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNp
emUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6
ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdN
b2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFj
ZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0
dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAg
ICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxs
b2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0K
LSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQotI2Vsc2UK
LSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7Ci0jZW5k
aWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNl
RGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jf
d2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lk
KiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5o
ZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFj
ZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9p
ZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNl
dCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2Nh
bGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0
ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0
LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNj
YWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0g
ICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVh
c2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1h
cEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkp
OwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgp
Ci17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgp
KSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAg
ICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAg
ICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFs
aXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRl
c3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3Rp
bmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6
Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2Uu
Z2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0g
ICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRl
ZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCog
cm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewot
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9y
IHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAg
ICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3Jl
ZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3Iu
YWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xv
cihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtf
ZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNp
emUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1
cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVy
bHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZh
Y2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdF
KQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAg
cmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
LX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSBy
ZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFy
ZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWln
aHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcg
MiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0Lngo
KSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAv
LyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0g
MDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0
LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0Lngo
KTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBk
ZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
ZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBp
bnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0
LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwot
ICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwg
YmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5z
IDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8g
VGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRo
ZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1h
Z2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFk
anVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJm
YWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lu
eSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRv
bmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFy
ZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUu
d2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgp
LCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIq
IGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0
OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2ln
bmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJp
ZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1
bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
dW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2
b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBv
bmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNp
dmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+
PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+
PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDAp
ID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYp
OwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0g
cmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVz
UGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0g
SW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9
PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0g
ICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9y
ZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRp
b25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2lj
YWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJ
bnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6
ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3Np
emUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJl
Y3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0
LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3Rv
cmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2Rh
dGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0
IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3Rv
cmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNh
bERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+
IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBp
bnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxl
ZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERl
c3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAg
QVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsK
LSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRT
b3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkg
KyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2Fs
RGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5k
eCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0
eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0
eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRl
c3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGlu
dCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0
LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXpl
LmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lu
eSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERl
c3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVu
ZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAg
ICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNh
bERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBk
ZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVy
LgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93
cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZh
Y2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3Qp
OwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9y
ZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVj
dC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0
aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1h
Z2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2Uu
ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkg
KyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykg
ewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCog
cGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcg
Q29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAg
ICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAg
ICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBi
bHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5n
bGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNh
bE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0g
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ug
b3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEu
bV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVt
bnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2lj
YWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVj
dC55KCkpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLX0KLQotI2lmICFQTEFURk9S
TShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0gICAg
aWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVu
ZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9S
OwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJvb2wgZW5j
b2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
VmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwg
bWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVk
IGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFt
KGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOwot
fQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFs
aXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwot
Ci0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRh
OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNv
ZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBl
LCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBlbmNv
ZGVkSW1hZ2U7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWly
byBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5n
ZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVD
b250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFw
cGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQs
IG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0
Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9k
YXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1f
ZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0
YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
JiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZh
cyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5
cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFy
Z2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdl
dCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zm
c2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3Qg
ZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEu
bV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5h
bGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlw
bHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4MmNmMzlk
ZmEzNTE0MzliY2M2ZDIxZWQ5OGRjZjJmNTdlYmI4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiTUlNRVR5
cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENB
SVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJ
bWFnZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7Cisg
ICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIG1fcGxhdGZvcm1Db250ZXh0LnNldENy
KGNyLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4o
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0
KSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Cisg
ICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1dG8gY29weSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKSk7CisKKyAg
ICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7CisgICAg
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsK
KyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0
KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisKKyAgICAgICAgcmV0
dXJuIGNvcHk7CisgICAgICAgIH0KKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Cisg
ICAgICAgIHJldHVybiBtX3N1cmZhY2U7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0Cit7Cisg
ICAgQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UgJiYg
Y2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX0NPTlRF
TlRfQ09MT1JfQUxQSEEpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0
b3JlOworICAgIGVsc2UKKyAgICAgICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZTsK
KyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKK1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1h
cEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24K
KyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2
aW9yKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBy
ZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
SW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhp
c1Njb3BlKGRlc3RDb250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAg
IGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdENvbnRleHQuc3RhdGUo
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwg
aW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29u
dGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRpb25Db250ZXh0
U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRl
eHRTdGF0ZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgaWYgKGF1
dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBD
b3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBDYWlybzo6
ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwg
bV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3Jt
Q29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9y
U3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZGVzdENvbG9yU3BhY2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0
ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQorICAgICAgICB8
fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRlc3RDb2xvclNw
YWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGVz
dENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7CisgICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10geworICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29s
b3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9IGVsc2UgaWYgKGRlc3RDb2xvclNwYWNl
ID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9y
KTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5k
KGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7
CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmlj
ZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2Rl
ZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICBpZiAoZW5jb2RlZEltYWdl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRhOiwiOworCisgICAgVmVjdG9yPGNoYXI+
IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29k
ZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1l
VHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1
YWxpdHkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRv
QkdSQURhdGEoKSBjb25zdAoreworICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJj
ZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CisKKyAgICBhdXRv
IHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Cisg
ICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlk
ZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdo
dChzdXJmYWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCitSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29y
ZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVj
dCYsIGNvbnN0IEludFBvaW50JiwgQ29vcmRpbmF0ZVN5c3RlbSkKK3sKKworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGY3OGE1MTBiNDBmZDYwYzUxMjQ3MjEyZWJiY2Y1
ZDE3OWQyNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsxLDczIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJ
Uk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6Cisg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRp
dmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNl
cnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHRyYW5zZm9ybUNv
bG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNw
YWNlKSBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+JiYpOworCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JT
cGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KKyAgICBOYXRpdmVJbWFn
ZVB0ciBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7CisKKyAgICBtdXRhYmxlIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWly
byBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3Jh
cGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3
NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0j
ZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1
ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXll
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNp
emU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwotCi1jbGFzcyBJbWFn
ZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShO
SUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgotI2VuZGlmCi0j
ZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYsIFJl
bmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyRGF0YSgpOwotCi0gICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJv
IG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVu
ZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdm9p
ZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJy
aWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4g
cHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBv
dmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0g
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKLSAgICB1aW50
MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0
b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5
ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAg
dmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFj
aXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKLSNlbmRpZgotfTsKLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQotCi0jZW5kaWYgLy8g
SW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAxZjI2OTM2ZWU1YjVlMmQ4MzIxYjYxMzAyODVhMzI0OTc0
YWVmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
I2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShM
SUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWds
Lmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElC
RVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5j
bHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5k
aWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1h
Z2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3Vy
ZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNy
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5n
ZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQ+
IEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJl
ZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRl
eHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFj
dGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICBnbEdlblRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5U
LCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBH
TF9SR0JBLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwg
MCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworCisgICAgY2Fp
cm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7CisKKyAgICAvLyBU
aHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRy
aXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxT
RSk7CisKKyAgICBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9y
X3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUsIG1f
aW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgaWYg
KGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgp
KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kPihuZXcgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK0lt
YWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxv
Z2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RG
TW92ZShzdXJmYWNlKSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNF
KE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNy
ZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9y
eSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5l
dyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorI2VuZGlmCit9CisK
K0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2Vu
ZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAg
ICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNv
c2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENv
bnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAg
IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dM
Q29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisg
ICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGds
RGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBp
ZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6
cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1f
bmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBy
ZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitib29sIEltYWdlQnVmZmVy
R0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwg
UGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9y
bWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCit7CisgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2Fu
dmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3
YXlzIDEuIik7CisgICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdldDsKKyAgICBzd2l0Y2ggKHRhcmdldCkg
eworICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBH
TF9URVhUVVJFXzJEOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
KyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAg
ICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Y2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4
dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7CisgICAg
Y29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgdWludDMyX3QgZmJvOworICAgIGds
R2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1F
QlVGRkVSLCBmYm8pOworICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIs
IEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAg
IGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7Cisg
ICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX2lu
dGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xC
aW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIo
R0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVm
ZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21w
b3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBnbEdlblRleHR1cmVzKDEsICZtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29t
cG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9M
SU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01B
R19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1f
aW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JB
LCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9w
dFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0Rl
dmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBt
X2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSkpOworICAgIG1f
Y29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2Uu
Z2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBD
QUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0
aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2NvbXBvc2l0
b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKworICAgICAg
ICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgICAgIHByb3h5
LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXplLCBUZXh0dXJlTWFwcGVyR0w6
OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShOSUNPU0lB
KQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJU
ZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxz
ZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlm
CisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2Fw
IHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRo
ZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkg
cmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRl
bnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KKyAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7
CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVS
QVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKKwor
ICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKKyNlbHNlCisKK3ZvaWQgSW1hZ2VCdWZm
ZXJHTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0
ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgQVNTRVJUKG1fdGV4
dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28g
d2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgorICAgIEdMQ29u
dGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAg
Y2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworICAgIHByZXZpb3VzQWN0aXZl
Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJl
TWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVN
YXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1faW50ZXJuYWxTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgs
IG9wYWNpdHkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xT
dXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQwNDQ0NjM2MmM1MTBk
N2U4NzdjZWQ0MGQ0ZjMzMjNhYWI1MDM3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5o
CkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyR0xT
dXJmYWNlQmFja2VuZAorI2lmIFVTRShOSUNPU0lBKQorICAgIDogcHVibGljIE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKKyNlbHNlCisgICAgOiBwdWJsaWMg
UGxhdGZvcm1MYXllcgorI2VuZGlmCisgICAgLCBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tl
bmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJHTFN1
cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICB+SW1hZ2VCdWZmZXJH
TFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0g
dGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JC
dWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAh
VVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29w
eVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihU
ZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVu
dExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZSB7
IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7IDAgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tl
bmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmUzZDI1OGYyZmE0NzFmNjdiNzg5ODBjMWRlZjFiNzdlZjhiNGE1
NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsg
U2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1v
YmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8p
CisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKElt
YWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWly
b191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKKworICAgIGZsb2F0IHNjYWxlZFdp
ZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKKyAgICBmbG9hdCBz
Y2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKKwor
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0
aW9uPworICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhw
cmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRT
aXplIGludGVybmFsU2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKKworICAgIGludCBz
dHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMy
LCBpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYg
KCF0cnlGYXN0WmVyb2VkTWFsbG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0
VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
c3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdC
MzIsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIHN0cmlkZSkp
OworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJm
YWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZy
ZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVySW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2Vu
ZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92
ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdl
QnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAg
OiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJU
KGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNF
X1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZDo6
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAg
dW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyAr
IHN0cmlkZSAqIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUu
d2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4Owor
ICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdC
KCpwaXhlbCk7CisgICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4
ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRh
YmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAg
ICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOworICAgICAg
ICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJm
YWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVp
Z2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNiZDY0MGQyYzcwMmVlNTJjZjAxZGJlMDUxNjFjMzc0YmMwM2EyODIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckltYWdlU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJh
Y2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5k
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJJbWFn
ZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpIG92ZXJy
aWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmEy
NTU0Y2RhNjhhMzk4NDAxNDM4YmVkZDk2OGYwYzNjNjI5YWYwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisKKyNpZiBVU0UoQ0FJ
Uk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdSZWZQdHJHdGsu
aCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCitz
dGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIXJlaW50ZXJw
cmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0
aCkpCisgICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7CisgICAgcmV0dXJu
IENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWly
b19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhf
dD4qIG91dHB1dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAi
aW1hZ2UvcG5nIik7IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKwor
ICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRl
RnVuY3Rpb24sIG91dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5j
b2RlZEltYWdlOworICAgIGlmICghaW1hZ2UgfHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlw
ZSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGVuY29k
ZWRJbWFnZTsKK30KKworI2Vsc2UKKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXpl
KQoreworICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVz
IGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9w
ZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRt
bCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlw
ZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0
eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAh
PSAiYm1wIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+
IHBpeGJ1ZjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vz
bid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQg
dG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3Np
dGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQg
YWxwaGEuCisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7CisgICAg
ICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0Vf
VFlQRV9JTUFHRSkgeworICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
c3VyZmFjZSksCisgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUo
c3VyZmFjZSk7CisgICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJv
X2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNl
X3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcGFp
bnQoY3IuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWly
b1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisgICAg
ICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7
CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVP
dXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAm
JiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmluZyBx
dWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAq
IDEwMC4wICsgMC41KSk7CisgICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVm
LmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgp
LCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgp
LCBOVUxMKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihw
aXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5k
YXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOworfQor
CitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1ZU91
dFB0cjxnY2hhcj4gYnVmZmVyOworICAgIGdzaXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFlbmNv
ZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAg
IGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4g
aW1hZ2VEYXRhOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGls
aXRpZXNDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZTMzYzdjYTA5NmNhZDg5MjI2MzczOWM3NWY5NWIy
MGZlZGMwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEoY2Fpcm9fc3VyZmFjZV90KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDQ5NmVjYTMyNGQzZTRkYTIyZmNhNTk5OThl
YjVlZjVlZTczZDIwOWEuLjcyMmVlZmZlNmM5ZTVmZDI4NjZiZTI3Mjg3YTQ3MDIxMDBjYmZjNTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRS
ZWN0JiBkZQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlvblNpemUgPSBidWZmZXIuc2l6ZUZvckRlc3Rp
bmF0aW9uU2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5h
dGlvblNpemUgPSBkZXN0UmVjdC5zaXplKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAKICAg
ICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU2ZjE5NjRkMDk1NTJiZDFhMjdmYzBkMjI4MDlk
OGEzZGE2Yjc1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2
IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChD
KSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cpCi0K
LSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIK
LSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdl
SU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0j
aW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0j
aW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0j
aW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8cGFs
L3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBm
b3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQu
Ci0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1
ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVy
KTsKLQotc3RhdGljIEZsb2F0U2l6ZSBzY2FsZVNpemVUb1VzZXJTcGFjZShjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNraW5nU3RvcmVTaXplLCBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUpCi17Ci0gICAgZmxvYXQgeE1hZ25pZmljYXRpb24gPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKSAvIGludGVybmFsU2l6ZS53
aWR0aCgpOwotICAgIGZsb2F0IHlNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpIC8gaW50ZXJuYWxTaXplLmhlaWdodCgpOwotICAgIHJl
dHVybiBGbG9hdFNpemUobG9naWNhbFNpemUud2lkdGgoKSAqIHhNYWduaWZpY2F0aW9uLCBsb2dp
Y2FsU2l6ZS5oZWlnaHQoKSAqIHlNYWduaWZpY2F0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBp
ZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWlu
UHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAg
ICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29u
dGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRD
b2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNF
KQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2Ug
PSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJy
ZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0Yo
Q0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAg
aWYgKCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYo
KTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYK
LSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZl
clNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNp
emUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3Mp
KTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAv
LyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29u
dGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0g
ICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAg
ICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBm
YWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxl
ZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9h
dCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsK
LQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNv
bHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlz
RXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0g
SW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRl
cmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwg
bV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93
PiB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxv
dz4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGlu
dGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsK
LSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
KSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAg
ICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2Fm
ZUdldCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9
IGZhbHNlOwotI2Vsc2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVk
KTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAg
UmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVu
ZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAg
ICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6
ZSh3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpKSk7Ci0gICAgICAgIG1fZGF0
YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIElu
dFNpemUodXNlckJvdW5kcyksIGNvbG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZh
Y2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0
Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAg
ICAgICAgICAgICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29u
dGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxs
b2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0K
LQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9
IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBp
ZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0Vf
QVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1f
ZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlm
Ci0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0
YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2Rh
dGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byBy
ZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsK
LSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRh
dGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdy
YXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0
YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEs
IG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYg
KCFjZ0NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRl
eHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9
Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgp
LnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNv
bnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAg
IHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdN
b2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVm
ZmVyKCkgPSBkZWZhdWx0OwotCi1GbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5h
dGlvblNpemUoRmxvYXRTaXplIGRlc3RpbmF0aW9uU2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4g
c2NhbGVTaXplVG9Vc2VyU3BhY2UoZGVzdGluYXRpb25TaXplLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSwgaW50ZXJuYWxTaXplKCkpOwotfQotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0g
ICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0Mg
dGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nl
c3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXpl
KCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQn
cyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBv
bmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4K
LSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkg
YmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9k
YXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygp
OwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgp
LmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgp
IGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29u
Y3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJv
dXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRv
IGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFz
c2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJ
dCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0
b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZh
Y2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJl
dHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVu
c3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29udGV4
dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBD
R0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1h
Z2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYg
KENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lk
dGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihi
b3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdp
dGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91
bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJ
bWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNp
emUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9u
U2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZ
ZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2Uu
Z2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxv
Z2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENH
Q29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAg
ICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXpl
SW5Vc2VyU3BhY2UgPSBzY2FsZVNpemVUb1VzZXJTcGFjZShsb2dpY2FsU2l6ZSwgYmFja2luZ1N0
b3JlU2l6ZSwgaW50ZXJuYWxTaXplKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNw
YWNlKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2Up
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVh
dGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlv
biA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJ
bWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwg
bG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxl
LCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpz
aW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRl
cm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dp
Y2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2lu
Z1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBm
bG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0K
LSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50
b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2Fs
U2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi1SZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKQot
ICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFj
ZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQot
ICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAg
ICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9w
dENGKENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5z
YWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRhLmRh
dGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1h
Z2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIs
IEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBp
ZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZl
ci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1h
Z2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRl
RnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KHJlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdl
LmdldCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRp
b25zKTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsg
Ly8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICBl
bHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVz
dGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJh
d05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0
KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAg
aWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8g
RHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAg
ICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5k
ZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAg
IGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFk
anVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29w
eSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQ
YXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50
UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5
RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJu
YWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAg
ICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExv
Z2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVs
QXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdl
dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsK
LQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6
ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNl
LCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQ
b2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsK
LSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdl
IGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdl
KCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0
KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYg
anBlZ1VUSSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQot
ICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMu
anBlZyIpOwotI2VuZGlmCi0gICAgcmV0dXJuIGtVVFR5cGVKUEVHOwotfQotICAgIAotc3RhdGlj
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVzZSB0
aGUgQ29yZVNlcnZpY2VzIHZlcnNpb24/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBV
VElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAgIEFT
U0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFk
c2FmZS4KLQotICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1
cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSBy
ZWxpYWJseSBpcyBmb3VuZC4KLSAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVH
LCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgotICAgIHN0YXRpYyBjb25z
dCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBzdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5n
aWYiKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwg
ImltYWdlL3BuZyIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZVBORzsKLSAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCi0gICAgICAg
IHJldHVybiBqcGVnVVRJKCk7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNl
KG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlR0lGOwotCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0jZW5kaWYK
LX0KLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdS
ZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkK
LXsKLSAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNy
ZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24pCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGlt
YWdlUHJvcGVydGllczsKLSAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0
eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8vIEFw
cGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9u
LgotICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVh
dGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7
Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXBy
ZXNzaW9uUXVhbGl0eTsKLSAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1
YWxpdHkuZ2V0KCk7Ci0gICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9u
YXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJh
Y2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIH0KLQotICAgIC8v
IFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3Ig
SlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCi0gICAg
Ly8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsu
Ci0KLSAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1h
Z2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIFN0cmluZyBkYXRhVVJM
KENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIFZlY3Rvcjxj
aGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEp
LCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRh
OiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1zdGF0aWMgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKLXsKLSAgICBWZWN0b3I8
dWludDhfdD4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSks
IENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotU3RyaW5n
IEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwg
cHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwg
bWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVU
eXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRh
dGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRyPENG
RGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBh
dXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NF
UlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwo
dXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9m
IGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICgh
cHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNp
emUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVt
dWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVByb3Zp
ZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11
bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICgh
ZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFO
b25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpbWFn
ZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNp
emUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCku
aGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRT
ZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxvYXRT
aXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShsb2dpY2Fs
U2l6ZSgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVj
dE1ha2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2Vy
U3BhY2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAg
YXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwg
cXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4g
Y2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBh
dXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NF
UlQodXRpKTsKLQotICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdl
QWxwaGFMYXN0OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRh
KCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENG
RXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhh
dmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24g
dG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNl
cnZlQ2FwYWNpdHkoc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAg
ICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpi
dWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRh
dGFbaSArIDNdOwotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtp
ICsgMF07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOwotICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNr
aXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgICAgIGRhdGEgPSBwcmVt
dWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgfQotCi0gICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwotICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOwotICAg
IGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8g
aW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWln
aHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NH
Qml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQo
KSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLQotICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAp
KTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHks
IGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdU
Rk1vdmUoY2ZEYXRhKTsKLX0KLQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsK
LSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQot
ICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJu
ICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYg
c291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5
KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsg
fTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotICAgIHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTQzZWEyNWRhMDVjZGYwN2ExMGYzNjQzZDdmODRhMGRhNzhjNDE5MQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUg
PEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworSW50U2l6ZSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0
U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkp
LCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2Fs
ZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEludFNp
emUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
Ynl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVy
bmFsU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93
PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5hbFNp
emUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93
ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gaW50ZXJuYWxTaXpl
OworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQoreworICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7
CisgICAgY29udGV4dC50cmFuc2xhdGUoMCwgLW1faW50ZXJuYWxTaXplLmhlaWdodCgpKTsKKyAg
ICBjb250ZXh0LmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOworfQor
CitzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKK3sKKyAg
ICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbnRlcm5hbFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSkKKyAgICAgICAgcmV0
dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFr
ZSgwLCAwLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSkpOwor
ICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwg
Y29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRp
b24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxz
ZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9n
aWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0Lmdl
dCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwor
ICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQo
KSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdU
Rk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2Nh
bGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVy
bmFsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAg
IGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8g
Q29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2Ut
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1JldGFpblB0cjxD
RkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAg
YXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNT
RVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFs
KHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFu
IGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBv
ZiBibGFjay4KKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dp
Y2FsU2l6ZSgpKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAgICAgIGlmICghcHJl
bXVsdGlwbGllZERhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBz
aXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUo
KS5oZWlnaHQoKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0
aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRp
cGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7CisgICAgICAgIGlmICghZGF0
YVByb3ZpZGVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25l
U2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CisgICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBpbWFnZSA9
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUo
KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRC
bGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6
ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53
aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkp
OworICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdl
dCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0
b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAg
ICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisK
K1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWlt
ZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRh
VVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKwor
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y3JlYXRlR2V0
SW1hZ2VEYXRhQXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENs
aXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsK
KyAgICBhcmVhICo9IHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5h
bFNpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBz
cmNSZWN0KTsKKyAgICBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBw
ZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRYKC1zcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAg
ICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgp
ICE9IHNyY1JlY3Quc2l6ZSgpKQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0
ZVB1dEltYWdlRGF0YVJlY3RzKGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEludFJlY3QmIHNyY1JlY3RDbGlw
cGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGRhdGFSZWN0ID0g
eyBJbnRQb2ludDo6emVybygpLCBzcmNTaXplIH07CisgICAgc3JjUmVjdENsaXBwZWQgPSBpbnRl
cnNlY3Rpb24oZGF0YVJlY3QsIHNyY1JlY3QpOworICAgIAorICAgIGRlc3RSZWN0ID0gc3JjUmVj
dENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludCk7CisgICAgCisgICAgaWYg
KHNyY1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0UmVjdC54KCkgLSBz
cmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRZKGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpKTsKKworICAgIEludFJlY3QgYnVmZmVy
UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAgICBkZXN0UmVj
dC5pbnRlcnNlY3QoYnVmZmVyUmVjdCk7CisKKyAgICBzcmNSZWN0Q2xpcHBlZC5zZXRTaXplKGRl
c3RSZWN0LnNpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGll
ZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhf
dCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBp
eGVsKQoreworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
IGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9IHNyY1BpeGVs
WzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQaXhlbFszXSA9
IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRU
b1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhf
dCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBp
eGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhh
KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9y
bWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkg
eworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Cisg
ICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAg
ICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgICAgICBk
ZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAv
LyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0g
KHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhl
bFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiAy
NTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1BpeGVsWzNdOworICAgIGlmIChhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYg
KHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxb
MF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhl
bFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBp
eGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0
UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBT
d2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNy
Y1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQ
aXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4
ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNTbG93KAorICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0
LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIHN0ZDo6ZnVuY3Rpb248dm9pZChDb2xvckZvcm1hdCwgY29u
c3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50OF90Kik+IGNvcHlGdW5jdG9yOworICAgIAor
ICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNT
RVJUKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOworICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkOworICAgIH0gZWxzZSBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgY29weUZ1bmN0b3IgPSBjb3B5UHJl
bXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkOworICAgIGVsc2UKKyAgICAgICAgY29weUZ1bmN0
b3IgPSBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkOworICAgICAgICAKKyAgICBz
aXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4
IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9y
Rm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAg
ICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7CisgICAgfQorfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCitzdGF0aWMgaW5s
aW5lIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcih1bnNpZ25lZCBieXRlc1BlclJvdywg
dWludDhfdCogcm93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB2SW1hZ2VfQnVmZmVy
IHZJbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVmZmVyLndp
ZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2
SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0
YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVm
ZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sKKyAgICBp
ZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChz
cmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQoZGVzdEFs
cGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworCisg
ICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3Jj
Q29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChz
cmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVBy
ZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3Jt
YXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMg
QkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAs
IDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVz
dCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1h
dCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzU2xvdyhzcmNB
bHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0
QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
c2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9
IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0
Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZv
cm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3QpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBjb3B5SW1hZ2VQaXhl
bHNTbG93KHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNy
Y1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3cs
IGRlc3RSb3dzLCBzaXplKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OGZlMGVh
NmFhMGE5NzEyNzEyMWUzYjNhOTQyMWUxNTllZjViZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKwor
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2xvZ2ljYWxTaXpl
LmhlaWdodCgpKTsgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisK
KyAgICB2b2lkIHNldHVwQ29udGV4dChHcmFwaGljc0NvbnRleHQmKTsKKworICAgIHZpcnR1YWwg
UmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisgICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJl
Y3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25z
dDsKKworICAgIHN0YXRpYyB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQs
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25z
dCBJbnRTaXplJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQ4
OTVhNDllZTgxNmU4YjdiYTIzZDVmZWFmMGE0OWU4M2Q1OGRhOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENB
IHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5n
IGlzIG9wdGltaXplZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQor
CisjaWYgVVNFX0FSR0IzMgorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0
bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkhvc3Q7Citjb25zdGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9y
bWF0ID0gQ29sb3JGb3JtYXQ6OkJHUkE7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFw
SW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsK
K2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZv
cm1hdDo6UkdCQTsKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxj
dWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJu
YWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBk
YXRhOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAqIGludGVybmFsU2l6ZS53aWR0aCgp
OworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQ
ZXJSb3cpLmdldFZhbHVlKGRhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGRhdGEpICYgMykpOworCisgICAgc2l6
ZV90IG51bUJ5dGVzID0gaW50ZXJuYWxTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAg
dmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRv
IGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFs
U2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNo
ZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYg
KCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBj
b25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEs
IHNpemVfdCkgeworICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Cisg
ICAgfTsKKworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIG51bUJ5dGVzLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcg
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShj
b250ZXh0KSkpOworfQorCitJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92
aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92
aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250
ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIp
OworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCh0aGlzLT5jb250ZXh0
KCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlv
cikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7
CisgICAgCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAgICAgICAgIG1faW50ZXJuYWxTaXplLndpZHRoKCks
IG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAg
ICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywg
bV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBy
ZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3Qg
ZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qg
c3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhfdCogc3JjUm93cyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhl
bHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9y
Rm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5
dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jl
c29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBk
ZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3JjUmVj
dFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8ICFh
cnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCog
ZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDhfdCo+KG1fZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyAr
IHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZvcm1h
dCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JG
b3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7
CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBz
cmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNv
b3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRp
b25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJl
Y3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVj
dFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIAorICAg
IHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCog
ZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgZGVzdFJlY3Qu
eSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93ID0gNCAqIHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90
KiBzcmNSb3dzID0gYXJyYXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQ
ZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAor
ICAgICAgICBpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBz
cmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBC
YWNrZW5kQ29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNp
emUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3YzgwMDMwMDcyNzMw
ZmEwODdiZjM1NDEzZDYzOWE4MDg3ZmZjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYv
TWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCisgICAgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgTmF0aXZlSW1hZ2VQdHIg
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29y
ZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYs
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYpOworCisgICAgdW5zaWduZWQgYnl0
ZXNQZXJSb3coKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQor
CisgICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9k
YXRhUHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250
ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZjMDMxY2Mw
NjY0ZGU3YTU3N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1
ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENH
KQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgot
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJh
eUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNp
bmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNs
dWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJm
YWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBB
UkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJH
QjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJ
bWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NF
UlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VO
b0Vycm9yICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMg
MSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1h
Z2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwg
MCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3Qs
IG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0
KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAg
ICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3
YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBh
cmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0
XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
ZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZv
aWQqIGlucHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93
KQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJU
KG91dHB1dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0
aDsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0
ZXNQZXJSb3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0g
ICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0K
LSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURf
UEFSQU0oaW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFN
KGhlaWdodCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQo
NCAqIHdpZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewot
ICAgICAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwg
NCAqIGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRh
KCksIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5
dGVzUGVyUm93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVS
ZW5kZXJpbmcpIGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+
IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5o
ZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRh
ID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0
YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJl
Y3QubWF4WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYg
KHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUu
d2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVz
dWx0LT56ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAg
aW50IGRlc3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0g
ICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAg
IGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0
dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdp
bngpOwotICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBl
bmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmln
aW54OwotICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0g
MDsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmln
aW55IDwgMCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1v
cmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1p
bjxpbnQ+KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAg
aWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6
ZS5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0g
ICAgCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgp
IDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHJl
c3VsdERhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAot
ICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0Owot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9
IHNyY1Jvd3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAg
IGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0
ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0Vf
QVJHQjMyCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
I2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAo
KHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0g
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsg
eCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9B
UkdCMzIKLSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMg
d2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChh
bHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jh
c2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4
ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3Jj
Um93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jv
d3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJv
d3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93
cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNp
ZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsg
Ml07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jh
c2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNS
b3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkK
LSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgeClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwot
I2VuZGlmCi0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAg
ICBzcmNCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jv
d3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lk
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7
Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0
YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0
LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAg
dW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAg
ICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAg
IHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNP
dmVyZmxvd2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
ICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAo
c3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgr
KykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAg
ICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVy
RGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29u
c3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChz
b3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+
IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNv
dXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAg
QVNTRVJUX1VOVVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0g
ICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngu
dW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50
PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgp
KTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAot
ICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2Vk
PGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9
IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0
KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChv
cmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVj
a2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0
Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9
IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhf
dCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsK
LSAgICB1aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAg
ICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhl
aWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3Qq
PihzcmNSb3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAg
ICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWln
aHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVT
RV9BUkdCMzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
I2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNF
X0FSR0IzMgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdl
IHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dz
W2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jh
c2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCAr
IDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwot
I2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tl
cjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3Vy
ZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50
OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
ICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAg
c3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3Rf
Y2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0Owot
ICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVp
Z2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChz
b3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQot
ICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdS
QS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0g
ICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1h
cCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNd
OwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWE1NGFkOTExNzk1
M2NhNWU2OTZkYTA3ZTZlMGRmNjgxNDNkNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5j
bHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJh
eS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgotCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFjZVJlZjsKLXR5
cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsKLXR5cGVkZWYg
dWludDMyX3QgQ0dCaXRtYXBJbmZvOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElP
U3VyZmFjZTsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgSW50U2l6ZSBiYWNraW5n
U3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1Bl
clJvdzsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZTsKLQotICAgIC8vIE9ubHkgZm9y
IHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICB2b2lkKiBkYXRhIHsgbnVsbHB0ciB9OwotICAg
IFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotICAgIENHQml0bWFw
SW5mbyBiaXRtYXBJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNv
bnRleHQ7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIC8v
IE9ubHkgZm9yIGFjY2VsZXJhdGVkIEltYWdlQnVmZmVycy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SU9TdXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2QyMmMyNDYzOGU3YmUyMTg0OWJmMmFlNGU1Njc1OGJk
NmM0NGJlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyMDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorCisj
aWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworCitJbnRTaXplIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUp
OworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlm
IChpbnRlcm5hbFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8fCBpbnRlcm5hbFNpemUu
aGVpZ2h0KCkgPiBtYXhTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIGludGVybmFsU2l6ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGludGVy
bmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOwor
ICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKGludGVybmFsU2l6ZSwgaW50
ZXJuYWxTaXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3Vy
ZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0
UmVmPiBjZ0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRv
dyk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6
Onplcm8oKSwgaW50ZXJuYWxTaXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5k
UmlnaHQpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGlu
dGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdo
dCkpKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNT
RVJUKG1fc3VyZmFjZSk7CisgICAgc2V0dXBDb250ZXh0KGNvbnRleHQoKSk7Cit9CisKK0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQg
c2VuZFJpZ2h0KQorICAgIDogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgSU9TdXJmYWNlOjpj
cmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoc2VuZFJpZ2h0KSwgY2FjaGVkQ0dDb2xvclNwYWNl
KG1fY29sb3JTcGFjZSkpKQoreworfQorCitNYWNoU2VuZFJpZ2h0IEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlU2VuZFJpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJm
YWNlLT5jcmVhdGVTZW5kUmlnaHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZh
Y2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3Rh
bEJ5dGVzKCk7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0
ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmJ5dGVzUGVyUm93KCk7
Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFj
ZS0+Y3JlYXRlSW1hZ2UoKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNl
OjpzaW5rSW50b0ltYWdlKFdURk1vdmUobV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0
IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJ
bWFnZSgpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCks
IG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0
YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6
ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xv
Z2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVz
UGVyUm93KCk7CisKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAg
IHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5k
YXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAg
IEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0
ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAx
KQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAg
IEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRv
IGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3JjUmVjdFNjYWxlZCwgc3JjUmVjdENs
aXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQg
KiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBhcnJheS0+
ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICog
NDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICBJ
T1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3Mg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSAr
IHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgp
ICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIG91
dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3Ms
IGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW50U2l6
ZSBzcmNTaXplU2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBz
cmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVk
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsK
KyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNy
Y1NpemVTY2FsZWQsIHNyY1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRl
c3RSZWN0KTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7
CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tl
cjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgZGVzdFJl
Y3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2ln
bmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNyY1NpemUud2lkdGgoKTsKKyAgICB1aW50OF90KiBz
cmNSb3dzID0gYXJyYXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKGlucHV0
Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0
Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgLy8gRm9yY2Ug
cmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4KKyAgICAvLyBTZWUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3
aHkgdGhpcyBpcyBuZWNlc3NhcnkuCisgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgx
LCAxLCAwLCAwKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNTEyNzAyZmJlYzhhZjE3MTBhNjQ3YTlkMjJiMjViNTdjY2VlNzllCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShD
RykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIK
KyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJT1N1cmZhY2U7CisKK2NsYXNzIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7
CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQp
OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7
CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50
ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSk7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBNYWNo
U2VuZFJpZ2h0KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIE1hY2hTZW5kUmlnaHQgY3JlYXRlU2Vu
ZFJpZ2h0KCkgY29uc3Q7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlD
b3N0KCkgb3ZlcnJpZGUgeyByZXR1cm4gbWVtb3J5Q29zdCgpOyB9CisKKyAgICBOYXRpdmVJbWFn
ZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUp
IGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsgICAgCisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0pIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4mJik7CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KTsKKworICAgIHVuc2lnbmVk
IGJ5dGVzUGVyUm93KCkgY29uc3Q7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBt
X3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKaW5kZXggODlk
MDQzOWMyMTBkYjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uZDA5MTM5ZjAxYmQzMzZmMjg0
OGFlYTUyNmE0ZjlmODAwZWU3ODVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAg
LTI2LDcgKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTQxLDQgKzUyLDE0MCBAQCB1aW50OF90IHZlcmlmeUltYWdlQnVm
ZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAg
ICByZXR1cm4gKih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorQ0ZTdHJpbmdSZWYganBlZ1VUSSgp
Cit7CisjaWYgIVBMQVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBr
VVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOworI2VuZGlmCisgICAgcmV0dXJuIGtV
VFR5cGVKUEVHOwogfQorCitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisjaWYgUExBVEZPUk0oQ09DT0Ep
CisgICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsK
KyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBD
RlNUUiBpcyB0aHJlYWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQg
Zm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlN
RVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3csIG9ubHkgc3Vw
cG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCisg
ICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBu
ZyIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNv
bS5jb21wdXNlcnZlLmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwor
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pw
ZWciKSkKKyAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAgcmV0dXJuIGtV
VFR5cGVHSUY7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1VUVHlw
ZVBORzsKKyNlbmRpZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENG
U3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVm
IGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGlu
YXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAoIWRlc3RpbmF0
aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5
UmVmPiBpbWFnZVByb3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYm
IHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAg
ICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0
aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVt
YmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVh
bGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9z
c3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJl
c3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENG
RGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtl
eUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisK
KyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxh
Y2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0
aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0
byB3b3JrLgorICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgp
LCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZURlc3Rp
bmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOworfQorCitzdGF0aWMgUmV0YWluUHRy
PENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgQVNTRVJUKE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBl
KSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBl
KTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5m
byA9IGtDR0ltYWdlQWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2Uu
ZGF0YSgpLT5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwor
CisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQ
RUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBj
b21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3Vy
Y2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVk
RGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICB1bnNp
Z25lZCBjaGFyKiBidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBhbHBoYSA9IGRhdGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1
OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8g
MjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhh
IC8gMjU1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDBdID0gZGF0YVtpICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFb
aSArIDFdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFn
ZUFscGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAg
IGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVp
Z2h0KCkpOworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNy
ZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQo
KSwgMCkpOworICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCks
IHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQ
cm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKwor
ICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0
KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVm
IGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2
NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdl
dExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlw
ZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25zdCBJ
bWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlw
ZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBl
KTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0
b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBk
YXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRh
dGEpKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3Qg
SW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5
cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAg
ICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlhYmQxZmI4M2FiMzFh
MTE1YzY4OTUwNDkxZDQxOTU1Mi4uODRjNTdkMmZlZTkzMzhlZDVlMGVmYzRhOGUzMzY1YTE5YTgw
MjA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjUsOCArMjUsMzEgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBXRUJDT1JFX0VYUE9SVCB1
aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBz
aXplX3QgYnVmZmVyU2l6ZSk7CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdVVEkoKTsKK1JldGFpblB0
cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7
CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworCitTdHJpbmcgZGF0YVVSTChD
RkRhdGFSZWYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwoY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KTsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKK1ZlY3Rvcjx1
aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggODBmNmIxODcyNTIyOTY4ZWE3ZDk1
NzZiN2UwMDU2MzMzMjU4ODIzYy4uMjgyMWVmODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2
MmViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NHUERGRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0Nv
cmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCmluZGV4IDI0M2M0
OGI5NTFiMTc0YjZiMjRiYWM1MzY0YzlhMDRmZjk2OWNkYjMuLjRjYzBmYTNmNzk3MjdlYjlkZWVk
YzRhZDBlMTE3MzRkYWIyMTRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCkBAIC0xMDAsMTAgKzEwMCw2IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbVN1cmZhY2Uo
SU9TdXJmYWNlUmVmLCBDR0NvbG9yU3BhY2VSZWYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2UoQ0dJbWFnZVJlZik7
CiAgICAgCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotI2VuZGlmCi0KICAgICBXRUJDT1JFX0VYUE9SVCB+
SU9TdXJmYWNlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBtb3ZlVG9Qb29s
KHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IGMyMTI1YzNlZjE2MGMw
ODEwMTA5ODIzYjRiOTAzNmRkZjZmYmNmNjcuLjM5MWZjMjNjZDBhOGY4NjlhY2MxMDczMmQxNGZk
ZjQ1MGZjMjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UubW0KQEAgLTMzLDcgKzMzLDYgQEAKICNpbXBvcnQgIkhvc3RXaW5k
b3cuaCIKICNpbXBvcnQgIklPU3VyZmFjZVBvb2wuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgi
Ci0jaW1wb3J0ICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+CkBAIC0xMTAsMTMgKzEwOSw2IEBAIHZvaWQgSU9TdXJmYWNlOjptb3ZlVG9Qb29sKHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKICAgICBJT1N1cmZhY2VQb29sOjpz
aGFyZWRQb29sKCkuYWRkU3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKTsKIH0KIAotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNl
PiBJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyKQotewotICAgIHJldHVybiBXVEZNb3ZlKGltYWdlQnVmZmVyLT5t
X2RhdGEuc3VyZmFjZSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIE5TRGljdGlvbmFyeSAqb3B0aW9u
c0ZvckJpcGxhbmFyU3VyZmFjZShJbnRTaXplIHNpemUsIHVuc2lnbmVkIHBpeGVsRm9ybWF0LCBz
aXplX3QgZmlyc3RQbGFuZUJ5dGVzUGVyUGl4ZWwsIHNpemVfdCBzZWNvbmRQbGFuZUJ5dGVzUGVy
UGl4ZWwpCiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaAppbmRleCAyOGUyNjQ0ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi4yYzY3
N2Y2YjczNmU3NTJlNDFmOGIzZjI0MzQ3NmQ0NTA4NDI0MzcxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxp
c3QuaApAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbGlzdFtp
bmRleF0uZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHJlbW92ZUl0ZW1zRnJvbUluZGV4KHNpemVfdCk7
CiAKICAgICBzaXplX3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsg
fQpAQCAtMjUxLDYgKzI1MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6
ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0gLy8g
V2ViQ29yZQotCi11c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk5ZjFjZTI3MzU0NTBiZGFjM2JiZGYxMWEzMDg1ZDlhN2YzYzllMTUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRHJhd2luZ0NvbnRleHQgeworcHVibGljOgorICAg
IERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpCisgICAgICAgIDog
bV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgeworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwg
bV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9n
aWNhbFNpemUpLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIH0pCisgICAgeworICAgIH0K
KworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nh
c3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyAgfQorICAgIERpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9Cisg
ICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheURpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXBsYXlEaXNwbGF5TGlzdC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5
TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgIHsKKyAgICAgICAg
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAg
ICAgICBtX3JlcGxheURpc3BsYXlMaXN0LnJlc2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBSZXBsYXllciByZXBsYXllcihkZXN0Q29udGV4dCwgbV9kaXNwbGF5TGlz
dCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgICAgICAgICAg
bV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7IH0sIG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBsYXllci5yZXBsYXko
KTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIERpc3BsYXlMaXN0IG1fZGlzcGxheUxp
c3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBtX3JlcGxheURpc3BsYXlMaXN0
OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07Cit9OworCit9
IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2
MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLmFmM2FhZGUyYTMzMmNjMTBh
OTYxM2YyMTI2MTcxN2RkMWQ4NThiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjg2LDEz
ICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAog
ICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6
ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxB
cnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAm
cGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdl
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBp
bWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
VmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKIAorICAg
IEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUo
KTsKKyAgICBwaXhlbEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1bHRJbWFnZS0+cmVzb2x1dGlv
blNjYWxlKCkpOworCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRS
SVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsKQEAgLTMxMSw3ICszMTMsNyBAQCB2b2lk
IEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnBpeGVsQXJyYXksIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LnNpemUoKSwgaW1h
Z2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQXJyYXksIGltYWdlUmVj
dC5zaXplKCksIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMjVk
NTdhZjA2YzAxYTdjNzhhN2ZiOTQ3ZDQwNTgwMDRlYTcxNzJkOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cApAQCAtMTAwLDEzICsxMDAsMTMgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVm
ZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KICAgICBJbnRSZWN0IHNoYWRv
d0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRv
IHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShz
aGFkb3dBcmVhLCBudWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5
c3RlbSk7CisgICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLCBDb29y
ZGluYXRlU3lzdGVtOjpCYWNraW5nU3RvcmUpOwogICAgIGlmICghc3JjUGl4ZWxBcnJheSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhl
bEFycmF5LT5kYXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCku
d2lkdGgoKSk7CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUo
KSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3Jk
aW5hdGVTeXN0ZW0pOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXksIHNoYWRvd0FyZWEuc2l6
ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtOjpCYWNraW5nU3Rv
cmUpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVj
dChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xv
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaAppbmRleCA0OWU4YzVhMjZlNzcxYzQyNDk2NzgxOTUyN2E1NjI3MzUzZGY0NDk2Li5kZDM1
Y2M2NWIxMzdkODIyYzcwMTUzMmRhYmQyNDkwMDRiZjJhOWY2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTcxLDcgKzcxLDcg
QEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1h
Z2U7CiAgICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9k
ZSB7IFVuYWNjZWxlcmF0ZWQgfTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKICAgICBmbG9hdCBtX2ZpbHRlclNjYWxl
IHsgMSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2NjM4
NGZjNTUwNzRhMmY5NzJiNTkwZmEuLjVjOGIzYjRkZTBhZmE3MTQ1OGNkY2Y2YzZiYzBmZmQyY2Ni
ZDE0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZl
ciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBJbnRSZWN0IGRlc3Rp
bmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
aWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5wdXRCeXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0
aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlv
blJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFy
cmF5KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwg
SW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAg
IHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00NDMsNyArNDQzLDcg
QEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdl
IGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSkpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1h
Z2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBAIC00NjksNyArNDY5LDcgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFy
cmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2Ug
YnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAg
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNWEwZDUwZjhjZTFhYWY2NTM1ZGVlYzk0MGI4NWRj
NTUxN2U0YjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
LSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJHZGtDYWlyb1V0
aWxpdGllcy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxjYWly
by5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5p
cXVlT3V0UHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKLXsKLSAgICAvLyBM
aXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQ
aXhidWYgZG9jdW1lbnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9n
ZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1z
YXZlLXRvLWJ1ZmZlcnYKLQotICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNp
emVvZiAiaW1hZ2UiKTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAm
JiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7Ci0gICAg
aWYgKHR5cGUgPT0gImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFs
cGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11
c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVy
IGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgotICAgICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOwotICAgICAgICBpZiAoY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsK
LSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAg
ICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAgICAgICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBJbnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOwotICAg
ICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
KENBSVJPX0ZPUk1BVF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3Vy
ZmFjZS5nZXQoKSkpOwotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdl
dCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsK
LSAgICAgICAgfQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQ
aXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBwaXhidWYgPSBh
ZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOwotICAgIGlmICghcGl4
YnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4g
ZXJyb3I7Ci0gICAgaWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0g
MC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9
IFN0cmluZzo6bnVtYmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkp
OwotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZl
ci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0
cigpLCAicXVhbGl0eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAm
YnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iu
b3V0UHRyKCksIE5VTEwpOwotCi0gICAgcmV0dXJuICFlcnJvcjsKLX0KLQotU3RyaW5nIEltYWdl
QnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IGltYWdlRGF0YSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGltYWdl
RGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3Rvcjxj
aGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShpbWFnZURhdGEuZGF0YSgpLCBpbWFn
ZURhdGEuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5
cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgR1VuaXF1ZU91dFB0
cjxnY2hhcj4gYnVmZmVyOwotICAgIGdzaXplIGJ1ZmZlclNpemU7Ci0gICAgaWYgKCFlbmNvZGVJ
bWFnZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBi
dWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGE7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUp
OwotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDM0RMYXllci5jcHAKaW5kZXggNGM0YzQyNjk2MTI3MWM3YjdhMTlkMjk2YTk0MDBlZmRjMGZh
YzlhZS4uNzU3MDAzYjFmMTFkZjRiMjc2NmI0MDllODIyY2Q4YjQyMGZiNGE1YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3Np
YUdDM0RMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmlj
b3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBH
QzNETGF5ZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQogICAgIEludFNpemUgdGV4dHVyZVNpemUo
bV9jb250ZXh0Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKICAg
ICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1
dGVzKCkuYWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMDsKICNpZiBVU0Uo
QU5HTEUpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHRleHR1cmVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWlt
YWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAppbmRleCA3ZDJj
ZWZkNjI2MWRlZTJhMzlhODlkMTAxNzAyZWI1MDI1MmY0ZjVlLi5mMDM5MTM4MDYwZDM0NDM0ZTZj
ZGRiZjk2ZWE2NGMzMDFhNjM1NTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCkBAIC0zOCw3ICszOCw3
IEBAIHZvaWQgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYsIEdy
YXBoaWNzTGF5ZXIqIHNvdXJjZUxheWVyLCBjCiB7CiAgICAgLy8gTWFraW5nIGFuIHVuY29uZGl0
aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlciBoZXJlIGlzIE9LIGJlY2F1c2UgdGhpcyBjb2Rl
CiAgICAgLy8gaXNuJ3QgdXNlZCBieSBhbnkgcGxhdGZvcm1zIHRoYXQgcmVzcGVjdCB0aGUgYWNj
ZWxlcmF0ZWQgYml0LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3Vy
Y2UuY3BwCmluZGV4IDFjNjZhZDc5Y2U0MGMxNDU1OGY2NjUyNTJiMjVlM2JiN2RlZDE2YmQuLjg5
N2NlNDBkMDRjN2UwYWQxZWExOTJjYjkxMDYxOWY4ZjkyMjI0Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3Bw
CkBAIC00NTgsNyArNDU4LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNl
OjppbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXgg
ZDViOTFiMjY4NmFlMjYxZWI1M2MwNjg5YmVlYzYyZjU1ZTNmYjQ1OC4uOGY1MGU1NzU3MWQ3YjM4
NTAwZWVkN2JjZGE2YjNhNjQyYWJmNzk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCkBAIC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRh
dGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJG
aWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmls
dGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0
ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwg
cmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9
CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNh
NDQxOTNiZTI4NjNjMWVkMmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFjNjE1
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0xODEs
MTQgKzE4MSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJT
aGFwZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFyZ2lu
UmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFr
ZVVuaXF1ZTxSYXN0ZXJTaGFwZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdp
blJlY3QueSgpKTsKICAgICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5v
dCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Qu
c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAg
ICAgICBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250
ZXh0KCk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5k
cmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsK
IAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1
ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VS
ZWN0LnNpemUoKSkpOworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJy
YXkgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhl
bEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBp
eGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKaW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNh
NzEzZS4uMWQ3N2I2M2M2ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAK
ICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNF
bXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBz
aG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0
Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBj
bGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
cmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2Vs
ZXJhdGVkLCAmY29udGV4dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zv
cm0sIENvbG9yU3BhY2U6OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250
ZXh0KTsKICAgICAgICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3
NDkyYTkzMmY0MzE2MWIuLjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhlODAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3Qg
UmVuZGUKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUu
aGVpZ2h0KCkpOwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5z
aGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/
IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsKICAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0s
IENvbG9yU3BhY2U6OkxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYg
KCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFN
YXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIEdyYXBoaWMKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNo
ZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0ZXJE
YXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJjZUdy
YXBoaWNCdWZmZXIgPSBudWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5
UmVzb3VyY2UgZG9uZVxuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1
YmRmOTkyNDc0Y2ZjMDIyYjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4
MDRjNDU1Y2Q4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IFJlbmRlCiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9
IHN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3Zn
U3R5bGUuY29sb3JJbnRlcnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJS
R0IgPyBDb2xvclNwYWNlOjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICAv
LyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRp
dGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFr
cyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNv
bHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAg
ICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUlt
YWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2Vy
RGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCBiODIxNDExYWRlNzc1MDg1NjE2ODg1
NmVkMjJiNjJlYTZiNWNkM2Q5Li45Nzg2N2FhZDNjMjdiNWI1MzhkM2E3OWZiNDk1ZGRkNGYwZjQz
ZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3
ICsyMTgsNyBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICAvLyBDYWlybyBkb2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywg
c28gaXQncyBPSyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZl
ci4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9j
YXRlIGltYWdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRl
eCA1MzI2NzhmMzc2MDMzYzNjMDBmOWY2YmQ1YTMwYzM4NjkwZTMzNGJmLi4wYWI5MjAxNjI0ZTg2
MGEwZDljYzBmMDcxOWZhNjMxNWYyZjE1NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYg
KzE3LDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V2ViS2l0X0RF
UklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAgIiR7
V0VCS0lUX0RJUn0vR1BVUHJvY2VzcyIKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAgICAg
IiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRf
RElSfS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IGVkZmI2ZTFlMDVlNTY0MDA4YjdkNTdhODc0NTM3
OGM0M2Q2NmNmOTYuLjdhNTIxNDI1ZmY5MzE3MmI1YWI3ZTFkYzI0MjBhZmU2NWM5NzZmNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAor
KysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE1
LDYgKzE1LDggQEAgJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9tb2RlbHMu
cHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pF
Q1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgorJChQUk9K
RUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9K
RUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAtMTAyLDYgKzEwNCw3IEBAICQoUFJPSkVDVF9E
SVIpL1dlYlByb2Nlc3MvQ2FjaGUvV2ViQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNv
bm5lY3Rpb25Ub1NlcnZlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9G
dWxsU2NyZWVuL1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElS
KS9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29kZWNzLm1lc3NhZ2VzLmluCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCBk
ZmJjMGVmZTZiODQ3MjZmOTZjODk4MjhjZDgzZDBlZDc1OTA1YTA2Li45MGQ5MTExZmQxMGU4NjM0
NWI3ZWY0ZmY1M2IxNTlhMGMzMTJjYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKQEAgLTEyMCw2ICsxMjAsMTIgQEAgJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2Fn
ZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1BsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzUmVwbGll
cy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJ
bWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaAorJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNz
YWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlN
ZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzUmVwbGllcy5oCkBAIC0xNDIsNiArMTQ4LDkgQEAgJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXJNZXNzYWdlc1IKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0
cnlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXNSZXBsaWVz
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBlMjkwOTMwOTdjZDliZGViMzQ1YTE5
YTVkMzdmZTU3YTU0MGRlYjcwLi44Yzc1M2QxNmY0MGRmZGRjZmUxNzQ1YmFhNWZlNTliZjI5Njg3
N2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yNSw2ICsyNSw3IEBAIFZQQVRI
ID0gXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9j
ZXNzL21hYyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21lZGlhIFwKKyAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9j
ZXNzL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2VzcyBcCiAgICAgJChXZWJL
aXQyKS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIFwKQEAgLTUyLDYgKzUzLDcgQEAgVlBBVEggPSBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIFwKICAgICAkKFdlYktpdDIp
L1dlYlByb2Nlc3MvR1BVIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwK
KyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQo
V2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nl
c3MvSWNvbkRhdGFiYXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBc
CkBAIC0xNDAsNiArMTQyLDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1Z2luUHJv
Y2Vzc0Nvbm5lY3Rpb25NYW5hZ2VyIFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkgXAogICAgIFBs
dWdpblByb3h5IFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlciBcCisgICAgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSBcCiAgICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBcCiAgICAgUmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eSBcCkBAIC0xNDcsNiArMTUxLDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUmVtb3Rl
TWVkaWFSZWNvcmRlck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwK
ICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5IFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5z
cGVjdG9yUHJveHkgXAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRl
eCA2MjBiNDFmMjhkNjY3NmEzZGUxN2Y0NzZiMmRmMzg4ZmZmNjQ3NzBkLi5hMzcxY2YyM2RhNzdm
YTc2ZTNlNDAzZGRjMmQzYWRiNjYxOTAxYzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0xNjAsNTIgKzE2
MCw2OCBAQCBMaWJXZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
bGliV2ViUlRDQ29kZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6
OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNl
aXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBN
ZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlY29kZXIu
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlk
UmVjZWl2ZVJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lm
IFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBsaWJXZWJSVENDb2RlY3NQcm94eSgpLmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJu
IG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KTsKIH0KIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIs
IHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCitib29sIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6
OkVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVj
b2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVN
YW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoKnRoaXMsIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpy
ZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpOworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IGY0ODU5NjRkNDZjNTJlMzM4ZDJhYmU0Zjc2
NWRkY2I1YTk0YTA3OTAuLjAyNzAzN2ZlOTk0NjQwOWYwNmMyM2JmNmNlY2QzNzg1M2E1NmU3Yjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaApAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQog
CiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRl
bXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgog
I2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vz
c2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00NywxOCArNDksMjAgQEAgY2xhc3MgVXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcwogICAgIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4K
KyAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgog
ICAgICwgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBQQUw6OlNlc3Np
b25JRCk7CiAgICAgdmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogCiAgICAg
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgp
OyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsg
cmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2VzcyYgZ3B1UHJvY2Vz
cygpIHsgcmV0dXJuIG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlByb2Nlc3NJ
ZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9j
ZXNzSWRlbnRpZmllcjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVuc2lvbihGdW5jdGlv
bjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0gICAgV2ViQ29yZTo6
UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIm
IHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXImIGxvZ2dlcigpOwpA
QCAtNzcsMTQgKzgxLDIxIEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNs
aWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9p
ZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZU5hbWUpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNo
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3Bh
dGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5n
QmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICAgICBSZWZQdHI8TG9nZ2Vy
PiBtX2xvZ2dlcjsKIAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAg
ICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVy
TWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nlc3NJZGVu
dGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eT4gbV9yZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eTsKQEAgLTk2LDYgKzEwNyw3IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExp
YldlYlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCisgICAg
c3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZj
MDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5YmE0ZDcwNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7Citt
ZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdl
IHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVh
c2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1
ZjI3YzhmYTNlN2I4NTBlMTM3YmFlMzJlZGRiOGE3MTVlODQ2ZjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFr
UHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAg
ICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMp
OworfQorCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgp
Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVm
ZmVySWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAg
aWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3Zv
aWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5k
UmlnaHQgc2VuZFJpZ2h0KQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVy
OjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdodCkpLCBtX2ltYWdlQnVm
ZmVySWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hD
b250ZXh0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBsb2NhbEZsdXNo
Q29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OlNldEZsdXNoSWRlbnRpZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRl
bnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlhMTZhMTQzZTc3YjIyMmMzNTUxOGQzZDU2NmZmM2E5ZTVhMjFiY2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hT
ZW5kUmlnaHQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIEltYWdlQnVmZmVySWRlbnRpZmll
cik7CisgICAgflJlbW90ZUltYWdlQnVmZmVyUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAgIC8v
IElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpD
b2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KTsKKworICAgIHZvaWQgZmx1c2hDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIEltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworCisgICAgV2Vha1B0cjxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgSW1h
Z2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmIwYWU3OGUyY2U0YWI5NTE5YjY1YWI4NGI0ZDcyZGRlYjVlYzk1OGMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVz
c2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lk
IEZsdXNoQ29udGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxp
c3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQor
fQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODEwMzcxZGUzYWU5MDY0
MTcxNWVkMWM4OTE2YzI0NDVkN2NlOGExCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
IgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHsKKyAgICB1c2luZyBCYXNlUGh5c2lj
YWxJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+
OworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eT4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBudWxscHRyLCBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eShz
dGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCwgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVy
IGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZl
cihXVEZNb3ZlKGJhY2tlbmQpKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyUHJveHkoZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAg
ICAgICAgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2VuZC0+bG9naWNhbFNp
emUoKSwgbV9iYWNrZW5kLT5pbnRlcm5hbFNpemUoKSwgbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2Nh
bGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+Y3JlYXRlU2VuZFJpZ2h0
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllciByZXBs
YXllcihCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpLCBkaXNwbGF5TGlzdCk7Cisg
ICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjo6Zmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ2Nzg3ZWVmYTIyZjBjNDYwOTEw
OGI1YmZiNGQ3N2U5Nzc0MGI2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHku
aApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBS
ZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXJQcm94eTxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZjQwZmZjZTliMTk2OTkxZmRmOTk0ZjgyNGVkNjkyM2EwODg0ZjcyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkK
KyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50
NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkp
OworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAg
ICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMo
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAgaWYgKCFncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRjaCAocmVuZGVy
aW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVy
UHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAq
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAg
ICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2ltYWdlQnVmZmVyTWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VC
dWZmZXIpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQor
eworICAgIC8vIENyZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVk
IGJlZm9yZSB0aGlzIG9uZS4KKyAgICBpZiAoIW1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ltYWdlQnVmZmVyTWFwLnJlbW92ZShpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk5MzhiZWU1MTFlNjlkZmVmZmRlNTQ5ZDA4MjIyNzg5ZTQ4
MDgxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+Cisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBD
OjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKKworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcjsgfQorCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRf
dCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8g
SVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgICAgICAKKyAgICB2b2lkIGNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29s
b3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworCisgICAgdXNpbmcgSW1hZ2VCdWZmZXJNYXAg
PSBIYXNoTWFwPEltYWdlQnVmZmVySWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6
OkltYWdlQnVmZmVyPj47CisgICAgSW1hZ2VCdWZmZXJNYXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAg
ICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzczsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4g
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRkY2Y3ZjMyYjQ1MjZkZGZi
ZWJiNzg3ZjgwMmMzNmZkOTU3YmM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIENyZWF0ZUlt
YWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VC
dWZmZXJJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZUltYWdlQnVmZmVyKFdlYktpdDo6SW1h
Z2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK30KKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CmluZGV4IGY4YmNlMTQ1NTA3ZGY0OWU4OWVkNGY3MTk4NzZlMTBiZjcwOTZiZGUuLmVkOWUx
NzdkYjNmZTE2MDdlY2FkMzM1N2JiOTM2MzU4MzUxMDJlYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjcsNiArMjcsNyBAQCBpbXBvcnQgc3lzCiBmcm9t
IHdlYmtpdCBpbXBvcnQgcGFyc2VyCiAKIFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFID0gJ1dh
bnRzQ29ubmVjdGlvbicKK1dBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFID0gJ1dhbnRz
RGlzcGF0Y2hNZXNzYWdlJwogTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNl
aXZlcicKIE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVk
JwogU1lOQ0hST05PVVNfQVRUUklCVVRFID0gJ1N5bmNocm9ub3VzJwpAQCAtMjA0LDYgKzIwNSw4
IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgcmV0
dXJuIGZyb3plbnNldChbCiAgICAgICAgICdNYWNoU2VuZFJpZ2h0JywKICAgICAgICAgJ1N0cmlu
ZycsCisgICAgICAgICdXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uJywKKyAgICAgICAg
J1dlYkNvcmU6OkNvbG9yU3BhY2UnLAogICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZldGNoSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJD
b3JlOjpGcmFtZUlkZW50aWZpZXInLApAQCAtMjExLDYgKzIxNCw3IEBAIGRlZiB0eXBlc190aGF0
X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpQb2ludGVySUQnLAogICAgICAgICAnV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6UmVuZGVyaW5nTW9kZScs
CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJDb3JlOjpTZXJ2aWNlV29ya2VySm9iSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpT
ZXJ2aWNlV29ya2VyT3JDbGllbnREYXRhJywKQEAgLTIxOCwxMCArMjIyLDEzIEBAIGRlZiB0eXBl
c190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpT
ZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpT
V1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6QWN0aXZpdHlT
dGF0ZUNoYW5nZUlEJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXInLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0SUQnLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVBs
YXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFSZWNv
cmRlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVNZWRpYVJlc291cmNlSWRl
bnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6UlRDRGVjb2RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0
OjpSVENFbmNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3JhZ2VBcmVhSWRl
bnRpZmllcicsCkBAIC03NjIsMTMgKzc2OSwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5k
bGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzeW5jX21lc3NhZ2Vz
LmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6CisgICAgaWYgYXN5bmNf
bWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdF
X0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmUl
c01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29k
ZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0
dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVz
dWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUo
Tk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAKICAg
ICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2Fn
ZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhh
c19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4n
KQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpO1xu
JyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAgLTc3NywxMyArNzg3
LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVzc2FnZXM6CisgICAgaWYgc3lu
Y19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NB
R0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIu
bmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUp
IGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3Qg
cmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUp
OgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21lc3NhZ2Vfc3RhdGVt
ZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21lc3NhZ2VzXQorICAg
ICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRU
UklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hTeW5j
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxuJykKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCAzNDgyZDA1MGU0YmVmYzEwMmUz
MTZkMDE5OGIwMDRlZjYwODQ1MWJlLi4zY2UyMTQ5MDM1NmI3NWM2ZTllYTQ2M2YwZTE2ZjdhMzc3
MjY1MDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcmd1bWVudENv
ZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JT
cGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaD4KQEAg
LTc5Nyw2ICs3OTgsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsKIAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBs
YXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4g
eworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwKKyAg
ICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0LAorICAgIFdlYkNvcmU6OlJlbmRlcmlu
Z01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJl
bW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6
OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgIFdlYkNv
cmU6OkNvbG9yU3BhY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAzMDZjZDFlNjkzNTY2MWFkNDFjMDYwOTI4
NDhiZjlhZjM2YjFiNzI2Li4zNTJlMzQxZTY0MjU5MjQ3ZTViNjFmNTM4MzY1MzI4NjBlNTVkNDkw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlcy50eHQKQEAgLTMxLDYgKzMxLDggQEAgR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVN
ZWRpYVBsYXllclByb3h5LmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNl
LmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTG9hZGVyLmNwcAogR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlci5jcHAKK0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcAorR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKIAogTmV0d29y
a1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05l
dHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MTQsNiArNTE2LDggQEAgV2ViUHJvY2Vzcy9H
UFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVt
b3RlTWVkaWFQbGF5ZXJNSU1FVHlwZUNhY2hlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvR1BV
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VQcm94eS5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJy
dGMvTGliV2ViUlRDQ29kZWNzLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3Jk
ZXJQcml2YXRlLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcm92aWRl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCA5MzlmYjE3MWI3MWU4YzJmMmYyM2UwMzIy
MDZiMGFiMTdjOThhYjk5Li5jZmY0NWEyODVhYThiNTVhZDY0NzAyMTgzMDczYzk1MzUxM2Y4MzU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC02MzIsMTAgKzYzMiwxNCBAQCBXZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAv
LyBEZXJpdmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVy
LmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVBy
b2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0Nv
ZGVjc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2Vp
dmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2VSZWNlaXZl
ci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAogU2Vy
dmljZVdvcmtlckZldGNoVGFza01lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFkOGI2ZGVmMjE3OGNmMjhm
M2VhZWUwZTdiNmJhYTRmZDE2NzM1MDguLmRjMzE4YzdlYTZkN2Y2NzJmYTZmOTVmMjg3MzkyNjM0
MWFiNzdlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMzk2MSw4ICszOTYxLDI2IEBACiAJCTcxQTY3NkE0MjJDNjIzMTgwMDdENjI5
NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBp
b3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBX
S1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlv
bkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZC
ODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0
Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVNpbXVs
YXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFG
RjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIx
RjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFF
QTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8q
IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBp
Y2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNv
bG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwRjIz
QUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VC
dWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZm
ZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU3MjNC
Mzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVEMjNCNEM4MjMw
MEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJz
aXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0
ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0ND
RjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0
YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJz
aXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTYz
OTMsNiArNjQxMSw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJ
CTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3MkJCRTQwRTIzQUIw
NDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4ODIzQjYxMjYx
MDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3NTJDRDkwMEVBNUNBMCAvKiBH
UFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1MkNEOTAwRUE1Q0Ew
IC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02NDA5LDYgKzY0MjgsNyBAQAogCQkJ
CTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYyMzc1MjA5
RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2NUIgLyogbWVk
aWEgKi8sCisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQg
Ki8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDlG
QjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8s
CiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaCAqLywKQEAgLTc3ODIsNiArNzgwMiwzOCBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBS
ZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5jcHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2
MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFFQTYy
M0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovLAor
CQkJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJCXBhdGgg
PSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJ
NzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRUE5MjNBRDdCREYwMEJE
QUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovLAorCQkJCTcyMUYxRTlCMjNB
RDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJCQk3MkJCRTQw
RjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAorCQkJCTcyQkJF
NDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJF
NDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLywK
KwkJCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oICovLAorCQkJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyLmggKi8sCisJCQkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQz
IC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJl
bmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QTg0
M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRlMzIzMDc3MGYyNDM2
MWI2YWJhYThlMTdlNGQyZTVhYzAuLjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEzODA1NTBhYWE0Zjk0
ZDhlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsKLX0KLQotdm9p
ZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25u
ZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6
OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFt
ZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vz
cyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5h
Z2VyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlcj4oKSkKICAgICAgICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2Fn
ZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFVTRShMSUJXRUJSVEMpICYm
IFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlkUmVjZWl2
ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1h
cCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCku
ZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwor
fQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJl
bmNlKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCAzMWM2MTA0NjY5
ZjJmMDJmZmE0NDBmZWI4ODA5MjZjNzRhZTI2YWNmLi42ZDFiODNkZTU4MzZhZmFlMjFhZmMzNGY1
OGEyMmU1ZDZkMzIzYzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH5HUFVQ
cm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
bigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2Vp
dmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1h
cDsgfQogCiBwcml2YXRlOgogICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllcik7CkBAIC01MywxMCArNTUsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6
OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVy
PiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAorICAgIGJvb2wgZGlzcGF0
Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlz
cGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVu
aXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0
aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5lY3Rp
b24+IG1fY29ubmVjdGlvbjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VS
ZWNlaXZlck1hcDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5p
biBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVz
c2FnZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4NGNlOWQ2NGIzMC4u
NTdmZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5p
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVBy
b2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIyYmJk
ZDg2MzQwNTIwNWFkYTdlZjNjYzczODQ2MDE5ZmIxOTkzYjMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcg
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklk
ZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2VhZjk0NGJhMzhmMGE5OTRhNWJlNTI0MTk1OWY0YWM4
OGE1OTIyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlm
aWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVySWRlbnRpZmll
clR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmll
cjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0Y2U4MGY3YjFhNmVjYmM4MmJlNDY1ZDlh
ODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKQEAgLTAsMCArMSwxMDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJl
bW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNz
YWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYg
YXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorICAgIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1h
cCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6
OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFn
ZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2Vp
dmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3Nh
Z2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVh
c2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyOjpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsK
K30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50
NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlv
bigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVs
eTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZD4o
bV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1
cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJlbW90ZUltYWdlQnVm
ZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9u
PiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JB
bmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1
c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JP
cHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK3ZvaWQg
UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sKKyAgICBjb25zdGV4
cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNpZ25lZCB3
YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0ZWQoKSAmJiB3YWl0c0Nv
dW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworCisgICAg
Zm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgaXNQZW5kaW5nRmx1c2go
KSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNoSWRlbnRpZmllcigpOwor
fQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVjZWl2ZWRGbHVz
aElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZm
ZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCwgbV9zZW50Rmx1
c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVuc3VyZVVwZGF0
ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi42YjU2ZTMxZDBjYWYyMDZlZTUwNmM5Nzk2OTA1Yjc4NDBhNDliOGFiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+Cisj
aW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgor
ICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgflJlbW90
ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24q
IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3Qg
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEJs
b2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAgYm9v
bCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0ZWRCYWNr
ZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZs
dXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICAvLyBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KSA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNldEZs
dXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7ICAgICAgICAKKyAgICB2
b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hZjg3NzU1N2MwYWE4YzhhOTA1MDRhMTM1ODBkYTU5MWFhNWJmYzVkCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisj
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
bWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBX
ZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJD
b3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAg
IHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTU3MWM3YWQ4MDRjMmM0MWZlZDE2Y2IxMDZjNjZkMDlmNzQwMzUxZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4s
IHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2lu
ZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
KyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJl
bW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tlbmQgPSBC
YWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5k
LmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0X2Nh
c3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFja2Vu
ZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAgIHZvaWQg
Zmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0
ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAgICAgICBS
ZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAg
ICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaERyYXdp
bmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAg
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTczMmE1NWIwYjJlYjc4NDIzN2U4MmViODUxYjBiOTRiOTI3NzlmNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1
ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRkYzk2NDllN2VlYTBhMWIwNjc1Y2RiZjgxODY3ZTRjZjdhYzJk
YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
KTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
Cit7CisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAg
c2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5n
QmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxl
YXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNj
ZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpbWFnZUJ1ZmZlciA9
IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmJlOWRjYmQ2MGYzOTU4NzdmNDhlNTE3MTg1MDlk
OWQxZjQ0YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0JhY2tlbmQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQK
KyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kCisgICAgLCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVh
dGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisKKyAgICAvLyBJUEM6Ok1l
c3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNrZW5kCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5k
b3cqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7
CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDQ2NWZiOGM2Zjc3ZjdmZGUzOGY2OGNiYjA3NTI0NmM5OTRkYjFkNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZSB7IH07
Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlPjsKKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAppbmRleCA0
NmQxMTk4NzcyYzUxYjhhZDkwZWY4YTE3MTMyMWZmY2UyOTBmY2Y5Li5iMDI5MjFlMDYxYTYwZTMz
NTA4ODdlN2IwODkzMjRlYWI4ZWEzZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKQEAgLTQyLDYgKzQyLDgg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBz
dGF0aWMgd2VicnRjOjpXZWJLaXRWaWRlb0RlY29kZXIgY3JlYXRlVmlkZW9EZWNvZGVyKGNvbnN0
IHdlYnJ0Yzo6U2RwVmlkZW9Gb3JtYXQmIGZvcm1hdCkKIHsKICAgICBpZiAoZm9ybWF0Lm5hbWUg
IT0gIkgyNjQiKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3NWQ3YjhjYzEwZmZh
MDA4MDNkNDgyMTczYmU1YTM1NThhLi43NzI2ZmU5NDhhMjI3OWJiZjkzOWYwNjQ0ZjY0NTY4MmVk
NmI3OTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTAyLDYgKzEwMiwxMCBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbi5oPgogI2Vu
ZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtODgxLDE1ICs4ODUsMjIg
QEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhpY3NMYXllckZh
Y3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BM
QVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xp
ZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1fcGFnZS5kcmF3aW5n
QXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQorI2VuZGlmCiAKK3N0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICBy
ZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxzZQorICAgIHJldHVy
biBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2b2lkIFdlYkNocm9t
ZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBs
YXllcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1NWUxYzFkNjA4NTBl
NDcxZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUxYjRmNTNiMmQxZGY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBS
ZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlm
CiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRl
UmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2Vy
RmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRN
ZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNkMTlmMzU0ZDliY2Mw
MjkxZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFiMWVjYmJmOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4
dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBAQCBSZXRhaW5QdHI8
TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2
aWNlUGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gVGhpcyBpcyBlZmZl
Y3RpdmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFuIHVuYWNjZWxlcmF0
ZWQgZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6
ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbmlsOwogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggNGMxNzZkNGQ0ZjRjYWQzYzllMTU1YzkxOTdiYmFhMDZiNTEwZmE1NC4uNGYwNTc4YTdm
OTZiOGI1N2E3MTFiNjk5Y2Y3MGY0ZGViNjUxOWM5OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisy
MDIwLTAxLTA4ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0wOCAgUnlhbiBIYWRkYWQgIDxy
eWFuaGFkZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBmZXcgd2ViLXBsYXRmb3JtLXRlc3RzIGFy
ZSBmYWlsaW5nIG9uIGlPUwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2Nh
bnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3
NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcx
Yzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2Fu
dmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUK
KyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQot
ICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ry
b2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1p
Z25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNp
emUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387193</attachid>
            <date>2020-01-08 22:23:18 -0800</date>
            <delta_ts>2020-01-09 14:51:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200108222317.patch</filename>
            <type>text/plain</type>
            <size>459174</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MjQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzllYjI1MjY1YWNjMjk4
NGYzOWRjMDY1NzI2ZjliZDRlODdhODgxYy4uMmNhZjljZTZlNDJjMTkxZGY5YmU3ZGE0NGI0NDA4
Mzc1ZmMxMjczOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzNSBAQAorMjAyMC0wMS0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2FzIHJlLWZhY3RvcmVkIHRvIGFsbG93
IHJlbW90ZSByZW5kZXJpbmcuIFRoZSByZS1mYWN0b3JpbmcKKyAgICAgICAgd2FzIG5lZWRlZCB0
byBhbGxvdyBkZWNvdXBsaW5nIHRoZSBmb2xsb3dpbmcgZnJvbSB0aGUgaW50ZXJmYWNlIG9mCisg
ICAgICAgIEltYWdlQnVmZmVyLiAKKworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5k
CisgICAgICAgICAgICAtLSBEcmF3aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQ
QyBjb21tdW5pY2F0aW9ucworCisgICAgICAgIFRoZSBuZXcgY2xhc3MgaGllcmFyY2h5IGZvciBJ
bWFnZUJ1ZmZlciBpczoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAg
ICAgICAgICAgfF9fIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICAgICAgICBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQKKyAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICAgfF9fIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+IF9fX198ICAgUmVtb3RlSW1hZ2VCdWZmZXIgX19fX19fX19fX19fX198CisgICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAg
ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICAgfCAgICAgICB8X18gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT4gX3wgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IF98CisgICAgICAgICAg
ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8XyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8QmFja2VuZFR5cGU+ICBfX19fX19fX19fX198CisK
KyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAg
ICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8
X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAg
ICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kCisKKyAgICAgICAgSWYgQ0cgc3Vw
cG9ydHMgYWNjZWxlcmF0ZWQgY2FudmFzIGRyYXdpbmcsIHRoZSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KCkgd2lsbAorICAgICAgICBjcmVhdGUgdGhlc2UgdHlwZXM6CisKKyAgICAgICAgICAgIEluLVBy
b2Nlc3M6IFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzczoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRl
ZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJ
bWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250
ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJp
dG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVD
b21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRv
THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5h
bmNlTWFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENv
bnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFs
U2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29s
dXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNhbEltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRl
eHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjbGVhclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y29weVRv
UGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyR0xTdXJmYWNl
QmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZh
Y2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
bWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0
ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeSk6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURh
dGFSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVt
dWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11
bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzU2xvdyk6CisgICAg
ICAgIChXZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJ
bWFnZVBpeGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0
ZXNQZXJSb3cgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VU
SSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxp
c3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAg
ICAgICAoTmljb3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6
Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9D
b250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0
QXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJj
ZU1hc2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6
YXBwbHlSZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisK
IDIwMjAtMDEtMDggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWR1Y2UgYmluYXJ5IHNpemUgYnkgcHVyZ2luZyBDKysgdHlwZSBpbmZvcm1hdGlvbiBpbiBP
YmplY3RpdmUtQyBmaWVsZHMgYW5kIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDEwMTE3ODk1OWM4
Zjk3ZThmNjgzZmUwN2E5MTQ4ZDU2Mjk1MjNiYi4uOGQzNGQ0NzA5MGVlYzJmYmZhMmY2YTI5ZjQ2
Y2Q2ZTljOTNlMWVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5NSBAQAorMjAyMC0wMS0wOCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJl
Y2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1
c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2Fn
ZXMuaW4uCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6
CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVk
IGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbi4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAg
ICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQ
VVByb2Nlc3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRp
bmdGbHVzaCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDoKKwogMjAyMC0wMS0wOCAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lA
YXBwbGUuY29tPgogCiAgICAgICAgIFJlZHVjZSBiaW5hcnkgc2l6ZSBieSBwdXJnaW5nIEMrKyB0
eXBlIGluZm9ybWF0aW9uIGluIE9iamVjdGl2ZS1DIGZpZWxkcyBhbmQgcGFyYW1ldGVycwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDgxYjYwN2U0Yzc2OWEwZjE1OTRjYmE1YWE3ZjU0
ZGQzNWU3MGNjOGIuLjg4OTQxOGQ2ZGRjNTQyNzQ0ZWM2MjYxMDE2NTBhODcwNjQ0ZTAyYzggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wMS0wOCAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIElt
cGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRT
aGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA4ICBZdXN1a2UgU3V6dWtpICA8
eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIGJpbmFyeSBzaXplIGJ5IHB1cmdp
bmcgQysrIHR5cGUgaW5mb3JtYXRpb24gaW4gT2JqZWN0aXZlLUMgZmllbGRzIGFuZCBwYXJhbWV0
ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5
M2I5OTY0ZTc3Li45OTM3MGJiNGI3YjgzMTU1N2YzNjA4N2EyMmEzOGYxM2NkOWJhZDJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNs
aWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJh
Y2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0
LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9u
cy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1LDcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVu
dGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24u
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9U
YWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJv
YXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQw
ZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lk
IENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVy
OjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVm
ZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VC
dWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2lu
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEy
OTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0
NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21h
a2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1
cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
KyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2
LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UK
aW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzVi
NTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21h
a2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBv
aW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0Nv
bnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CmluZGV4IDQxMTIxNTU3YWU2ZjM1ZGI5YWQ1ZjRjMWU4YWNjY2EwODY2M2U2ZmIuLjdh
MjA5YTg2N2QzZTFhMTQwZGIyMDM0NDVlZDNhZGVlMjc2ODhlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBA
IC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJu
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFkNjZlZTcxMjM0N2MxNjZiNS4uNGYwM2Vj
MjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2ZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNH
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
R1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVlNGJiOTQzMWFlY2I0YmNjYzI4YmQyLi45
N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFlNTJkZjJiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RL
LnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJlZnJlc2hNb25pdG9yR3RrLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDZlMjhiNTdkYzc0NGM5
ODJlYWU3MTAxYTYyMmJiMTc5MGJjOWZiNzIuLmRjMTUzNjBiZmE1ZDg1Mjc2YTA3NWM0NjFjZjZl
OGFkYTVmNjZkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAw
ODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5
NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4
NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8q
IFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdE
MTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0
RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUx
RTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2
MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NB
OTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyog
SlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzQsMTAgKzIxMzIsMjEgQEAKIAkJ
NzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZC
QTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVF
NTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJE
QUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQ
YWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVD
OTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEy
M0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMw
MDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJl
bXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0
RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEz
QyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZG
QiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUx
MURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIw
MEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5
Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUz
RkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAw
MjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEy
M0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJE
NUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxp
bmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJ
NzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMw
QUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDEsOSArNjU1MCw2IEBACiAJCTIy
NUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBF
IC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
Y3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0Ix
MzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJC
QkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkw
MTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMSw4ICs5NjA3LDExIEBACiAJCTcxRUZDRURFMjAy
QjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0
cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9
ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4
NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAv
KiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRW
YWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0
MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1Zh
bHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0Mx
RjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5n
TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0
OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHBhdGggPSAuLi9BbHBoYVByZW11
bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MjMsNyArOTYzMiwyMCBAQAogCQk3MjdB
RkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTA3
QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQy
M0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0Qjcw
MDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNjIz
QjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU5MjNC
NDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0
MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjg3LDcgKzEyNzA5LDYgQEAKIAkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFB
NCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJB
MUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVs
ZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2ODYsNiArMTY3MDcs
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODg1LDYgKzI0OTA3LDcgQEAKIAkJQjI3NTM1
MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNH
LmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNw
cCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICov
LApAQCAtMjQ4OTQsOSArMjQ5MTcsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAg
LyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIg
LyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQy
MEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBC
OTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdC
MTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlG
ODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQkU0
MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJ
CQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0
MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIx
REIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1
NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5
OTIsNiArMjUwMTgsNyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21Q
YWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJh
eS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMu
aCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlz
cGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1MDgzLDcgKzI1MTEwLDggQEAK
IAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywK
IAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJ
CUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5
RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MjAyODBE
MTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJC
RTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0Qx
OUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZF
QTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4
OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MTQwLDYgKzI1MTY4LDgg
QEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAog
CQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZB
NkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkJFM0ZFMjNBQUJG
QTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MjMyM0FD
NDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1
NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMz
REMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4
NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ5
LDYgKzI1MTc5LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmgg
Ki8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNw
cCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUu
aCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICov
LAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJ
CQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYz
REQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5OTAsNiAr
MjkwMjMsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6
ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyog
QWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1
QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4
dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8q
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIz
MTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjk2ODQsNiArMjk3MTgsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3
MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMy
Mjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAw
MDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDI5Miw4ICszMDMyOCwxMCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5
NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5
QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4
MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8q
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFGMUVB
NzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8q
IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAx
OTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTMxNzYzLDYgKzMxODAxLDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAx
RDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4
MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlz
aWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0QyMDBC
OTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
RDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0
dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzgyLDYgKzMxODIxLDcgQEAKIAkJCQlC
Q0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8q
IFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVBODAw
MjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0
NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2Nh
bGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTksNiArMzE5OTksOCBAQAogCQkJCUJDRUE0ODc2
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhG
MkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNl
U3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQz
IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjNDMUY1
OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0
QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggMTgxNzUxNWUxY2M3MDkwYzdlNTlhMGNi
ZDI1M2ZmNzI2MTc0NGM3My4uZjUwMWNhMjNhNzM5NWYxZTViMjFjODFiMDRkZGIwMTkzYjdhMmYz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+
Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRo
KCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUg
PSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwog
ICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRp
b25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0y
Nzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7
CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCks
IEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0
aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6
Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbikg
fSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2Qx
OTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBj
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2
LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0g
SW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZm
ZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRv
IHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAg
IGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdl
OjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21Q
YWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNw
cAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRm
ZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFp
bnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdo
dCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNS
R0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3BpZWRC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1h
Z2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9u
R3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGll
ZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgpLCBQ
cmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVm
ZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlk
YWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAxNDg2
YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMs
NiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFz
UGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYw
LDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1
ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJl
YW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAg
bV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3Vt
ZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigq
bV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBS
ZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52
YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4LDM5
ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25z
dCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2Vz
RGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBp
ZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYg
KHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NE
aXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29u
dGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBI
VE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAg
IGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFn
cyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6
OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykg
Y29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAo
YnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdp
bmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRo
KCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVu
YWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkg
JiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgp
LT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcg
c2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9j
dW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgCisg
ICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52
YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAg
cmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6
OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYg
KHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRB
Y2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJp
bmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+
ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAj
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7
CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2Nl
bGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1l
bnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEz
NGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxp
c3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVl
MTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMw
OTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
aXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMg
UmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0
ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5k
ZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUx
MTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2Ny
ZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAg
ICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAg
ICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsg
SW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdlQnVm
ZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgp
IHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29u
c3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVu
YWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBP
ZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0
MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4
MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyAr
MTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdC
dWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0
ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0
ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwg
Y29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkw
LDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVm
UHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpj
cmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVh
bikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQo
KS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQo
KSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAgICAg
ICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0
OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4
dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5k
aXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERpc3Bs
YXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQotCiBj
b25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXplU2F2
ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0
YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIAog
RXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEo
Q29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0
SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0s
IGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9h
dCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgp
Lm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
Y29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1h
Z2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBi
eSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1h
Z2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1w
dHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkg
PSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRy
LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRh
UmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAgICAg
U3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBw
ZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0
ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgs
IGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0
SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgs
IGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1dElt
YWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5WCwg
ZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNh
bnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRp
Y19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVz
dE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29v
cmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBi
dWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisg
ICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3Rl
bSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDog
YnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1
Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0Lmlu
dGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAg
ICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJy
YXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9p
bnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRhLmRh
dGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3KGRl
c3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hh
ZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODky
YmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIxNDFh
NzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoK
ICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlz
cGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENh
bnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0
b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRl
PGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZs
b2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNv
b3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBj
b25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRp
cnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBk
eSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRp
cnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1
MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7
CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5n
TW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJp
bmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFz
LCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjks
NyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNB
Y2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0g
QWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4u
MTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAg
IGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8
SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1h
Z2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAg
ICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFn
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0
dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAg
ICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2Us
IFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB2
aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8s
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1
MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlwZSA9PSBH
cmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0
dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxl
dmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQp
IHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdl
dCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9y
bWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4LDcg
KzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0
ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAg
Ly8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1
ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0
NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8gdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIElt
YWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQo
KSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVm
ZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdo
dCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAg
ICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAg
ICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRy
PEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZl
cjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2
aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAg
ICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4SW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1h
Z2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVm
UHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVy
KEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCks
IGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6
ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVj
dCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZm
ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdl
QnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRo
aXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1f
YnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMx
YTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVt
ZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxl
bWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJv
bFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQog
ICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6
ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwg
VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXpl
KCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3
ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50
aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNl
dEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQog
CitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25z
dAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0Jh
Y2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1f
cmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpk
aXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMx
NzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApA
QCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29y
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9v
bCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNr
ZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigp
IG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qg
b3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJl
c3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3
NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0
OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcg
QEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURv
bWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMw
Myw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NM
YXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJm
YTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0
ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
U25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0
aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAg
aWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9y
KQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFn
ZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVj
dC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAg
ICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250
ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQz
Zjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYz
M2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBA
IC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAg
ICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVj
dCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAg
ICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRh
dGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFV
UkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwg
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRh
NDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNmIwMGM1ZTY0MDEwOTI4NzJiNDdiNWE0ZmM4ZTkyYmQz
YTE5MWJkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDkg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyR0xTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRy
Q2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRv
dy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCmluZGV4IDJjZmVjYWRj
MjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQuLmY1ZjIxN2NjZDg0MDYwODAwMjU1YzIw
M2QyMjE3Y2FlY2UwY2UyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hv
c3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
MywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRv
d19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRn
ZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBSZW5k
ZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNl
TW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworICAgIAogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5NTc1NGM0NjI3NTdiNzhk
YmZhNDEwMjU0MzJhZjBiN2QuLjlhNzQyNWUwMzM2OTJlMzRhMzczNDhjNWJhOWU3M2U5YzQyNGFh
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyAr
MzAsMTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
R0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
SW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjZkMWNhZWY4NTQxZGVlMDYyYmZlMDU0MTZjZGEyZjJhN2Y3OTI2ZTIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRp
cGxpY2F0aW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAgIFVucHJlbXVsdGlwbGll
ZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6
VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFhYjQ2ODY3NjhmMWEyODJkNTg4
MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgOiBw
dWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9
IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2Fs
SW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOworICAgIH0K
KworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBl
PiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IERpc3BsYXlM
aXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhp
czsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlz
dChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1ODZkZDRiMmFmOTFmNDU2NTUzNWE3MDI5Mzky
M2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEyZmY4NGMwZTY2NDJmODE4MjcwOTljZTgzN2UyODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
c2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAjZW5kaWYKICAgICBib29sIGlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5h
Y2NlbGVyYXRlZDsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRl
eCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4NzlkYmQ0OTY5NjRiNDkxYjE4Li4wMGJlMGZlYTA2MDU1
Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAorI2luY2x1ZGUg
IkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFiNzZmMTIu
LjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3OGFhMmQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5j
bHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIsMTcgKzEyMyw2IEBAIGVudW0gVGV4dEFsaWduIHsKICAg
ICBSaWdodFRleHRBbGlnbgogfTsKIAotZW51bSBSZW5kZXJpbmdNb2RlIHsKLSAgICBVbmFjY2Vs
ZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlciwgLy8gVXNlIHBsYWlu
IG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIHBsYXRmb3JtIEFQSSB0byBhbGxvY2F0ZSBi
YWNraW5nIHN0b3JlLgotICAgIEFjY2VsZXJhdGVkCi19OwotCi1lbnVtIGNsYXNzIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gewotICAgIFByZW11bHRpcGxpZWQsCi0gICAgVW5wcmVtdWx0aXBsaWVk
Ci19OwotCiBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBvc2l0ZU9w
ZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogU3RyaW5nIGJsZW5kTW9kZU5hbWUoV2ViQ29y
ZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgV2ViQ29y
ZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMsNyArMTMzLDYgQEAgV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNvbXBvc2l0
ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOwotV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBj
MDEyNjM3MGNiODY1OTI3YTMyYmYxMWY2MTQ4NmQ3MWFmN2I0NzU4Li40ZTJiZTcxYzc0MWM1NWY1
NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdo
dCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzggKzI4LDQ0
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2lu
Y2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRM
ZW5ndGggPSA0MDk2Owotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xh
bXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBSZW5k
ZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUlt
YWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUs
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3Mp
KTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwor
CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVz
cG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRl
eHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFy
Z2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNv
bnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQot
I2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0
YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhD
bGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25z
dCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0xMDUsOTcgKzExMSwxMiBAQCBGbG9hdFJlY3QgSW1h
Z2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4g
RmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0K
IAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBm
b3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZv
ckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6
ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3Jj
Q29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBv
bmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBp
ZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6
OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkr
KykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAg
ICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICog
MjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAg
IH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7
Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9
IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxp
bmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5k
aWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRU
b0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgp
LCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQ
aXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsg
cGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAg
ICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAg
ICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBz
cmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAg
IGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAo
KGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZz
ZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6
ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmlj
IGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVy
LgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENB
SVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAot
ewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVj
dCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVy
IHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVk
IGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAg
ICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwog
fQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNv
cHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3
IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9C
dWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUocmVjdC5zaXplKCksIGNvbnRleHQpOwog
Ci0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihz
Y2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0K
LXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1h
Z2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0
byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXpl
LCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxl
IGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5z
Y2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNF
KERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2Rl
KCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICBy
ZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBj
b250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAg
IC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFu
ZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7Cisg
ICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGli
bGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIHJldHVybiBhcmVFc3NlbnRpYWxs
eUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29udGV4dCgpLnNjYWxlRmFjdG9y
KCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQog
Ci0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VC
dWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9yeUNvc3Qo
KSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5l
ZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4K
LSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9l
c24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXpl
KCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBpbWFnZUJ1
ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXplX3QgSW1h
Z2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
IHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9Ci0jZW5kaWYKIAotfQorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKaW5kZXggM2JkZWU0ZWUwMGVkMTdhZTM0M2IyZjZhOGRkZDAwOTM4OWMyZTZiZi4u
YzYwYjc1ZDRmYmZiYTVkMmJkNDUwYjEzYTc1MzEzMGZjNmJjY2FmNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0y
NywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNm
b3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMu
aCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRh
dGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3Mg
SW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNr
aW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2Vx
dWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3Rv
cmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBj
bGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdl
QnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwg
V0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsK
LSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJu
IGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFj
ZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYg
VVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNl
ID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRp
ZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNv
bnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIC8v
IENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRo
IHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVu
IGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVm
ZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3Rv
cmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3Np
emU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bG9naWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZs
b2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNl
ZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0
ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5n
KGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNv
bnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUg
Y2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFt
cGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMg
RmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9F
WFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgc3RhdGljIEludFNp
emUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBH
aXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZp
b3IKLSAgICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0g
ICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIGVudW0g
Q29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3Jk
aW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVT
eXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CisgICAgdmlydHVhbCBEaXNw
bGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAKLSAgICB2
b2lkIHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRl
U3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pOworICAgIHZpcnR1YWwgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxv
Z2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9
IDA7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVh
bCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNp
emVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0
OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CiAKLSNpZiBVU0UoQ0FJUk8pCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
LCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotI2lmICFVU0UoQ0cpCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNy
Y0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0j
ZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
QWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsK
IAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0OworICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2
ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Cisg
ICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0
aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3
b3JrCi0gICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFu
ZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVu
dW0sIGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ug
c3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgPSAwOwogCi0gICAgLy8g
VGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdo
aWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJv
b2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7
Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAg
ICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6
ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
VmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi1wcml2YXRlOgotI2lmIFVT
RShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhl
IGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8vIGltYWdlLCBj
cm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGlj
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZWxpZiBV
U0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01Q
dHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgotICAgIAot
ICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25z
dCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCA9IEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRl
U3lzdGVtOjpMb2dpY2FsKSA9IDA7CiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAgIElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRU
b0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0g
ICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2Zh
ZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBD
dXN0b21QYWludEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7
Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZs
b2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBs
YWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRo
YXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VC
Q09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9v
bCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2Rl
LCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0
YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQot
ICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJ
bWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogfTsKIAotI2lmIFVTRShDRykKLVN0
cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTc4NWM4ZTc4YzQxYzMyNjU1ZjEyYzI3MjAyMDFhZWUwOGYyYWYxMwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFj
a2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5n
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFz
aygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW50
ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5s
ZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQg
PCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3Qg
YSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFh
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5
LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsdW1h
ID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8g
MjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1h
KTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWlu
YW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUwYjJjMzMwNjcyMTJk
MTNhOWVmNjI2ZTk5NGVkMDEyNTdlNWM5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDEx
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRl
ICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAi
TmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0b3JlQ29w
eSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3Mg
ZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNl
cXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2Vy
dmVSZXNvbHV0aW9uIDogdWludDhfdCB7CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBj
bGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKwor
ZW51bSBjbGFzcyBDb29yZGluYXRlU3lzdGVtIDogdWludDhfdCB7CisgICAgTG9naWNhbCwKKyAg
ICBCYWNraW5nU3RvcmUKK307CisKK2NsYXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6
CisgICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworCisgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNv
bG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwg
QWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFu
c2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVy
biA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmlydHVhbCBz
aXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZs
b2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICB2aXJ0
dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJik7CisKKyAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0
dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlLCBDb2xvclNwYWNlKSB7IH0K
KworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rv
cjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyByZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0
dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmLCBjb25z
dCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29yZGluYXRlU3lzdGVtKSB7IH0KKyAgICAK
KyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dM
ZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICAgICAgOiBtX2xv
Z2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFs
U2l6ZSkKKyAgICAgICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAg
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCisgICAgeworICAgIH0KKworICAgIEludFNp
emUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRTaXplIG1faW50ZXJuYWxTaXplOworICAgIGZsb2F0
IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
Zjg5ZWMwZDM2ZmVmYmQxMmFiZTU0M2MzZjIwMzRmNjE1OGIzZDJjZi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShD
RykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQot
I2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8pCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjQ3NzJjNjk0ZDM4MWFjYmM5MjYwZGJiNDdlOWZlMjcwMWU0Mjc2NWEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdl
QnVmZmVyLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgorY2xhc3MgUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFnZUJ1ZmZlciB7CitwdWJs
aWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gUGh5c2ljYWxJbWFn
ZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBzdGF0aWNf
YXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxJbWFnZUJ1ZmZlciwgSW1hZ2VCdWZmZXJUeXBlPjo6dmFs
dWUpOworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICghYmFj
a2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJh
Y2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFj
a2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQoV1RGTW92ZShiYWNrZW5k
KSkKKyAgICB7CisgICAgfQorCisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
KworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICAgICAg
cmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250
ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAg
ICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFm
ZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYXNlVHJhbnNmb3JtKCkgOiBBZmZpbmVU
cmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmxvZ2ljYWxTaXplKCkg
OiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+aW50ZXJuYWxTaXpl
KCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPnJlc29sdXRp
b25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPm1lbW9yeUNvc3Qo
KSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5leHRlcm5hbE1lbW9y
eUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkg
eworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdlKGNv
cHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAg
ICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnRyYW5z
Zm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENvbG9yU3BhY2UpOworICAgICAgICB9
CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2Fz
dDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JB
RGF0YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5nZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgYXJyYXksIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9y
bWF0LCBhcnJheSwgZGF0YVNpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3Rl
bSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5ZXIo
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0
Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9u
VGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlU
b1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3Jt
YXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9iYWNrZW5kOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxMmUxOTFmMjNm
MmRlNGY0YjFhYWE1MjMzYjc1MTIzY2VjODNiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1
ZGUgIkltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJE
KQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kOworI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOworI2Vs
c2UKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9y
bUltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRpZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVy
ID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47Cit1c2lu
ZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEFj
Y2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjRmMDA4NjE4NWNmMjI4NWJiZjI1NTgyZjk5NzIzOWY2ZTlkN2VlNwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+
IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVy
aW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQg
eyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYm
IGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFy
ZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFBsYXRm
b3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAg
ICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3Jt
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhv
c3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBB
Y2NlbGVyYXRlZFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJP
VUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICgh
aW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1
ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MWI5
MmQ1ODRmZWU4ZjRhZjdhODU5NjRlYWFiYzFjZWQ1MDE3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAs
MCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXpl
OworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisg
ICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3Qg
SG9zdFdpbmRvdyogPSBudWxscHRyKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNr
ZW5kKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAK
K3Byb3RlY3RlZDoKKyAgICBSZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmJjYzM5ODhmZDY0M2RhNzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdN
b2RlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVt
IGNsYXNzIFJlbmRlcmluZ01vZGUgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0
ZWQsCisgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBS
ZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBSZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cAppbmRleCA0MDQxYjNmODEwNzY3OGM1NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5
ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMzMzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJs
aWM6CiAgICAgICAgIGNsZWFyU2NyYXRjaEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0Js
dXIgaXMgbm90IHVzZWQgd2l0aCBhY2NlbGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1h
a2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2lt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRl
ZCwgMSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5k
ZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAgfQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFk
b3dCbHVyOjpkcmF3SW5zZXRTaGFkb3coY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEludFJlY3QKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRU
aWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hh
ZG93ZWRSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRp
ZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxh
eWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdl
UHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVy
SW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJv
cGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBp
ZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93
V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1
bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFn
ZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQcm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJh
Y2smIGRyYXdCdWZmZXIpCiB7Ci0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5h
Y2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hh
ZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAg
IGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNo
QnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdl
UHJvcGVydGllcyk7Ci0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZl
ci5nZXQoKTsKICNlbmRpZgogCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpk
cmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
LCBjb24KICNpZiBVU0UoQ0cpCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6
OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAg
YXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUs
IFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgog
CkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIo
SW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICBy
ZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7
Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAg
ICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2Uo
bGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQp
OwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9
KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwog
fQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkx
Miw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRy
YW5zZm9ybSk7CiAKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4
cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVy
YXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBh
bmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9D
YWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCA2MmM3OWYxM2ExYzcyNGRkZjM3YTk0NjRmODMy
Y2Q2Zjc3OWUwN2Q4Li44MGEwMjVlOGU2Y2E4OGE2YjQ3ZmM3ZmRjNWU1YzVlMjUwZjlmZWRiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09w
ZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTE3NCw3ICsxNzQsNyBAQCBlbnVtIFBhdGhEcmF3aW5n
U3R5bGUgewogCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29u
c3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBs
YXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJ
bWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRy
YXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChy
b3VuZGVkSW50UG9pbnQobGF5ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBsYXllclNpemUpLCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9y
IH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBA
IC0xODIsNyArMTgyLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRm
b3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlz
IGlzIG1vc3RseSBzYW1lIGFzIGRyYXdTaGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1l
cmdlIHR3by4KIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0
ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0
aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdl
KHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hh
ZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxw
aGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0KIH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMg
dm9pZCBmaWxsU2hhZG93QnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRl
eHQsIEltYWdlQnVmZmVyJgogewogICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KSkKICAgICAgICAgY2xpcFRvSW1hZ2VCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdl
dCgpLCBGbG9hdFJlY3QobGF5ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7
CiAKICAgICBGaWxsU291cmNlIGZpbGxTb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKaW5kZXggOWIwMjVlMTQ3NjczNTJlMTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYy
YjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAyZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
VG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAg
ICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBz
dXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1
ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWly
bzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBk
ZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4
IDljNzZlMjkxMmY4MWZjOTRhZGI1YzQ4NDQ1MjcxMzQ2MGRjZmIyOGYuLjI5YTBlYzQ5OTRmMzYx
NWQ4N2IxYmI0ZTFlMzNkNzY4ODA3Y2JhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvLmNwcApAQCAtNDExLDcgKzQxMSw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1w
bENhaXJvOjpjbGlwQm91bmRzKCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQor
ICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1D
b250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3OTY1N2UzYjI5OWVkNmViNGM1Y2Mz
NWRiOTUzMjQ1Nzg3Nzc1YjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODEgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0j
aW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0
cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJv
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJH
TC5oIgotCi0jaWYgVVNFKEVHTCkKLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlF
R0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNs
dWRlIDxjYWlyby1nbC5oPgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2ds
Lmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UK
LSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNl
bmRpZgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1
ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
KQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwg
bV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0
b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQp
IHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpD
b250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVy
UHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0j
ZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJE
YXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAg
ICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkp
LmludmFsaWRhdGVDbGllbnQoKTsKLSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0Fj
dGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6
OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRl
eHR1cmVzKDEsICZtX3RleHR1cmUpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQot
ICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZl
Q29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAm
bV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0g
ICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwg
R0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FM
SUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JB
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKLQotICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19n
bF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlS
T19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRp
YWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQot
I2lmICFVU0UoTklDT1NJQSkKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyUHJveHkuY29weVJlZigpOwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRh
Ojpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZl
Q29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JU
ZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBh
dXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBM
b2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1
c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+
KG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVu
ZCwgR0xfUkdCQSkpOwotICAgICAgICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAg
cHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAg
cHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQot
ICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVy
cyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAg
ICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGlu
IHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8g
aW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJv
X3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNF
KTsKLSAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJl
dmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotfQotI2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFj
ZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fp
cm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fp
cm9fcGFpbnQoY3IuZ2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fp
cm9HTFN1cmZhY2UoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhl
IHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0
cmFjdGluZyBpdAotICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdl
blRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOwotCi0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05N
RU5ULCAxKTsKLQotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICov
LCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAq
LywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCog
ZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5l
c3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBj
YWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1f
c3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRl
dmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7
Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZh
Y2VDb3B5KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9w
dFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0g
YWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJj
ZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5n
ZXQoKSk7Ci0KLSAgICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChz
dXJmYWNlKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3Vy
ZmFjZTsKLQotICAgIHJldHVybiBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8g
c3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rv
cjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZh
Y2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdl
RGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFj
ZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFj
ZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1f
c3VyZmFjZS5nZXQoKTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAg
IDogbV9kYXRhKEludFNpemUoc2l6ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxT
aXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0g
ICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQot
ICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndp
ZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxl
ICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2Fs
bHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0
aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0g
ICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAg
IGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1f
ZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZh
Y2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0g
VW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1h
Y2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9
PSBVbmFjY2VsZXJhdGVkKQotI2Vsc2UKLSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9k
ZSAhPSBBY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191
c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0g
Y2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXpl
LndpZHRoKCkpOwotICAgICAgICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlG
YXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFj
ZURhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRh
S2V5LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0g
ICAgfQotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0
KCkpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUg
d2lsbCBub3RpY2Ugd2UgZGlkbid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAg
Y2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNv
bHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBj
ciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAg
bV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9j
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y3JlYXRlRmFjdG9yeShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNj
ZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
LQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKLXsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xv
clNwYWNlOjpTUkdCLCBjb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZl
cjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQot
Ci1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCi17Ci0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1h
Z2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhl
cml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9y
ID09IENvcHlCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KGNvcHlDYWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAv
LyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3Ry
dWN0aW9uCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4obV9kYXRhLm1fc3VyZmFjZSkpOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0
b3JlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29u
dGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250
ZXh0ID09ICZjb250ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29w
eShzdXJmYWNlLmdldCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWlu
ZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBv
cHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0
aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAg
ICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwg
c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25D
b250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRl
eHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29u
dGV4dFN0YXRlKSk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWlu
dGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBuYXRpdmVJbWFnZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxh
dGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiYgbG9va1VwVGFibGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBj
b252ZXJzaW9ucyBvbiBhY2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9nZXRfdHlwZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAg
IGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3Vy
ZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsr
eSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWdu
ZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bV9zaXplLndpZHRoKCk7IHgrKykgewotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93
ICsgeDsKLSAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBs
aWVkQVJHQigqcGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRh
YmxlW3BpeGVsQ29sb3IucmVkKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
b2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBpeGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBw
cmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQo
KSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFk
anVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAg
IGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlw
ZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3Jp
dGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2Ug
Y3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0g
Q0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAK
LSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJl
ZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25z
dCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNp
emUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFy
ZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgp
OwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3Zl
cmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBp
ZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcg
MiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0Lnko
KSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
aWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8
fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0g
ICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChv
cmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54
ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5k
eCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54Owot
Ci0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlm
IChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmln
aW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAg
IGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7
Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVz
dWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBp
cyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0
IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdl
QnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVt
bnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9
IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGlt
YWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdl
dCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGlt
YWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdl
U3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJv
IHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0g
ICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIElu
dFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsK
LSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5n
ZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dp
Y2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIElu
dFNpemUoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2Uu
Z2V0KCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAg
ICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFj
ZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgo
KTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVz
dEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93
czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1
bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdp
bng7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11
bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwg
cGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9
ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVu
ID0gKCpwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVl
ID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGll
ZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdy
ZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1
IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0g
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5p
dChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lz
dGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25T
Y2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4K
LWlubGluZSBVbml0IGJhY2tpbmdTdG9yZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVm
ZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdl
QnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9
PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0g
ICAgcmVzdWx0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50
UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5n
U3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9u
cyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBs
b2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNj
YWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAot
ewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0
ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJh
eURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1h
Z2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9y
ZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVV
bml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUs
IGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2Fs
ZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBs
b2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2lu
dCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNj
YWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0
LmhlaWdodCgpID4gMCk7Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgp
OwotICAgIGludCBkZXN0eCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0
LngoKTsKLSAgICBpbnQgbG9naWNhbERlc3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dp
Y2FsU291cmNlUmVjdC54KCk7Ci0gICAgQVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChk
ZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBB
U1NFUlQob3JpZ2lueCA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5k
eCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBp
bnQgbG9naWNhbEVuZHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0
Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5keCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQg
bnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBs
b2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291
cmNlUmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxl
ZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50
LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0g
ICAgQVNTRVJUKGRlc3R5IDwgbV9zaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+
PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0K
LSAgICBpbnQgZW5keSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1h
eFkoKTsKLSAgICBpbnQgbG9naWNhbEVuZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2lj
YWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkp
OwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93
cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNhbERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhl
IGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAg
IC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZh
Y2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBk
ZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
aW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9z
dXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxl
KGltYWdlU3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBkZXN0eCA9IGltYWdlUmVjdC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgp
OwotCi0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0
ICogc2NhbGVkU291cmNlU2l6ZS53aWR0aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93
ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsK
LSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4o
cGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7
Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAg
ICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9y
KCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlz
IHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAg
ICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAo
c291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkg
ewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
Z3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQg
IDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3Mg
Kz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9w
ZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1
cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVz
dHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQot
ICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAg
ICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1h
Z2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJl
Y3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dp
Y2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2lu
dC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwot
ICAgIH0KLX0KLQotI2lmICFQTEFURk9STShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3Jp
dGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2ln
bmVkIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50
OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4g
Q0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VT
UzsKLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAg
QVNTRVJUX1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5
IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3Vy
ZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09
IENBSVJPX1NUQVRVU19TVUNDRVNTOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdl
ID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2
NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFn
ZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25z
dAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9
IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQot
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5j
b2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJu
IHsgfTsKLQotICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
LXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVy
JiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1f
dGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwg
c28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdM
Q29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0g
ICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0
aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0
dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1
cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFj
aXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1M
YXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBV
U0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5n
ZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBj
b25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAg
ICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJl
KEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4w
LCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0
aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhh
IHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3Rl
eHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJl
VGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgot
ICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgot
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdM
X1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5t
X3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4
dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZm
Ym8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
LCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJl
KGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleElt
YWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1f
c2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwg
MCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1
c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRl
c3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAg
ICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZ
KTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE4MmNmMzlkZmEzNTE0MzliY2M2ZDIxZWQ5OGRjZjJmNTdlYmI4OTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tl
QHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0Nh
aXJvLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNpemUsIGlu
dGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNl
KFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1f
c3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNh
aXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAg
IG1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtl
VW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVG
YWN0b3J5KG1fcGxhdGZvcm1Db250ZXh0KSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250
ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3
aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAg
ICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJP
X0ZPUk1BVF9BUkdCMzIsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1f
c3VyZmFjZS5nZXQoKSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodCht
X3N1cmZhY2UuZ2V0KCkpKSk7CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShjb3B5LmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChj
ci5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgICAgIH0KKworICAgIGNhc2Ug
RG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBtX3N1cmZhY2U7CisgICAgfQor
ICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQor
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29l
cmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3I7
CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX3N1cmZh
Y2UuZ2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisgICAgICAgIGNvcHlCZWhh
dmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAgICAgICAgY29weUJlaGF2
aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKGNvcHlC
ZWhhdmlvcik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGlu
IHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShj
b3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGlu
dGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RDb250ZXh0LCBvcHRpb25zLmludGVy
cG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0
YXRlID0gZGVzdENvbnRleHQuc3RhdGUoKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6
IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0Q29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7
IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkgfSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFk
b3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RD
b250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBpbWFnZS5nZXQoKSwgbV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2Ug
PT0gZGVzdENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8
LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29s
b3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xv
clNwYWNlOjpTUkdCKQorICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGlu
ZWFyUmdiTFVUID0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFy
cmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAg
IGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAg
ICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOwor
ICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9
IGVsc2UgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsK
KyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZs
b2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRv
U1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5
KTsKKyAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRh
OiwiOworCisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVu
Y29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisg
ICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwor
fQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dl
dF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4g
ZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1dG8gc3Vy
ZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2Zs
dXNoKHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVy
biBpbWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4g
aW1hZ2VEYXRhOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIHJldHVy
biBudWxscHRyOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JiwgQ29vcmRpbmF0ZVN5
c3RlbSkKK3sKKworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zOGY3OGE1
MTBiNDBmZDYwYzUxMjQ3MjEyZWJiY2Y1ZDE3OWQyNDA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVm
ZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPElt
YWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNl
LCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6
CisgICAgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdmlydHVhbCB2b2lk
IHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mKSB7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkg
Y29uc3Q7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsK
KyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFD
YWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZl
ZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJ
bWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQot
I2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5j
bHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNv
c2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMg
UGxhdGZvcm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZl
ckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdl
QnVmZmVyRGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwot
ICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsK
LSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dh
cEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lk
IHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21w
b3NpdG9yU3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJl
ZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJl
ZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJv
eHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVy
KFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4
dHVyZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
VVNFKENBSVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1
cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjAxZjI2OTM2ZWU1
YjVlMmQ4MzIxYjYxMzAyODVhMzI0OTc0YWVmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5k
LmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisK
KyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgor
I2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNh
aXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNl
bGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1
ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKTsKKworc3Rh
dGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7
CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2Up
KTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFS
KTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIGF1dG8qIGNvbnRleHQg
PSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdH
TENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8v
IFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlz
IG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rp
bmcgc3VyZmFjZS4KKyAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0
b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBt
X2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNh
aXJvRGV2aWNlKCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3Jt
YW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90
aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBzdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NP
TE9SX0FMUEhBLCBtX3RleHR1cmUsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxT
aXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9
IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNs
ZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNr
ZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZN
b3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VC
dWZmZXJHTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IElt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKK3sKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBO
aWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3Jt
TGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
KTsKKyNlbmRpZgorI2VuZGlmCit9CisKK0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6fklt
YWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJU
ZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVu
dCgpOworI2VuZGlmCisKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdM
Q29udGV4dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4
dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9z
aXRvclRleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRl
eHR1cmUpOworI2VuZGlmCisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAg
ICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0
Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNF
KE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBp
ZiAobV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiAw
OworfQorCitib29sIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1
cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAx
LjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29s
dXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYgKHByZW11bHRpcGx5QWxw
aGEgfHwgZmxpcFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV90ZXh0dXJl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdl
dDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAg
ICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhU
VVJFX0NVQkVfTUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0
KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4
dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgdWludDMyX3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAgIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQs
IGRlc3RpbmF0aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGlu
dGVybmFsZm9ybWF0LCAwLCAwLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6
ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7
CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2go
KTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJHTFN1
cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250
ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFy
aW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxT
aXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1f
Y29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3Jf
dGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFs
U2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFz
KG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAg
ICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgp
OworCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBv
c2l0b3JCdWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAg
ICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkp
OworICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJu
YWxTaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAg
ICAgICB9OworI2lmIFVTRShOSUNPU0lBKQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2Fz
dDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXIt
PmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0
Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3Jl
YXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3
ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1
c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBT
byB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1
ZmZlci4KKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCks
IG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9z
aXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1f
Y29tcG9zaXRvckNyLmdldCgpKTsKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisg
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisK
KyNlbHNlCisKK3ZvaWQgSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdl
IHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFm
dGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xD
b250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0
KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4
dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1faW50ZXJuYWxT
aXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzQwNDQ0NjM2MmM1MTBkN2U4NzdjZWQ0MGQ0ZjMzMjNhYWI1MDM3OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyR0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZp
c2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3
ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykg
Q28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEpCisj
aW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQor
I2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEltYWdlQnVmZmVyR0xTdXJmYWNlQmFja2VuZAorI2lmIFVTRShOSUNPU0lBKQor
ICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGll
bnQKKyNlbHNlCisgICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgorI2VuZGlmCisgICAgLCBwdWJs
aWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bWFnZUJ1ZmZlckdMU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
Kik7CisKKyAgICB+SW1hZ2VCdWZmZXJHTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0
aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJHTFN1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZO
ZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9p
ZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5k
aWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXll
clByb3h5OworI2VuZGlmCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9y
U3VyZmFjZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMy
X3QgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4
dHVyZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIFVTRShD
QUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VTdXJmYWNl
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZDI1OGYyZmE0NzFm
NjdiNzg5ODBjMWRlZjFiNzdlZjhiNGE1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNr
ZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZCk7CisK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVySW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5k
b3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtl
eTsKKworICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6
ZS53aWR0aCgpKTsKKyAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2Nh
bGUgKiBzaXplLmhlaWdodCgpKTsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGlj
YWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPworICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdp
ZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZShzY2FsZWRXaWR0aCwgc2Nh
bGVkSGVpZ2h0KTsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93
aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAgdm9p
ZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGludGVybmFsU2l6
ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNl
RGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5h
bFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0
YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQq
IGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdl
QnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlcklt
YWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNl
LmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVm
ZmVySW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5zaWduZWQg
Y2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdl
dCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1f
c3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxTaXplLmhl
aWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNv
bG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBwaXhlbENvbG9y
ID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxlW3BpeGVs
Q29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4ZWxDb2xv
ci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZhY2VfbWFy
a19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndp
ZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVySW1hZ2VT
dXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNiZDY0MGQyYzcwMmVlNTJjZjAxZGJlMDUxNjFj
Mzc0YmMwM2EyODIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZUJ1ZmZlckltYWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJbWFnZVN1cmZh
Y2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckltYWdlU3Vy
ZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJJbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZv
aWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0Nh
aXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xMzI0M2I2M2M1NDZjNzJhNzQ0ZmVhMTEzOTczOTY4ODJlMzJi
N2E1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIg
PHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2No
dWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgor
I2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShHVEspCisKK3N0YXRp
YyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWdu
ZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghcmVpbnRlcnByZXRf
Y2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkK
KyAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKKyAgICByZXR1cm4gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1
cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piog
b3V0cHV0KQoreworICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFn
ZS9wbmciKTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgorCisgICAg
cmV0dXJuIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5j
dGlvbiwgb3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVk
SW1hZ2U7CisgICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAm
ZW5jb2RlZEltYWdlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZElt
YWdlOworfQorCisjZWxzZQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCit7
CisgICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJv
bSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCisgICAgLy8gaHR0cDovL2RldmVsb3Blci5n
bm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dk
ay1waXhidWYtc2F2ZS10by1idWZmZXJ2CisKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1
YnN0cmluZyhzaXplb2YgImltYWdlIik7CisgICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUg
IT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJi
bXAiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4
YnVmOworICAgIGlmICh0eXBlID09ICJqcGVnIikgeworICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qg
c3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0Rh
dGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCisgICAgICAgIC8vIGNvbXBvc2l0ZSBz
b3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBo
YS4KKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKKyAgICAgICAg
aWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFKSB7CisgICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJm
YWNlKSwKKyAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCisgICAgICAgICAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAg
ICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAorICAgICAgICAgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJm
YWNlKTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSkpOworICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3Vy
ZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7CisgICAgICAgICAgICBjYWlyb19wYWludChj
ci5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3Vy
ZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
cGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKKyAg
ICBpZiAoIXBpeGJ1ZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpx
dWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgU3RyaW5nIHF1YWxp
dHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAw
LjAgKyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0
KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZl
cnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5V
TEwpOworICAgIH0gZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1
Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEo
KSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKKworICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBHVW5pcXVlT3V0UHRy
PGdjaGFyPiBidWZmZXI7CisgICAgZ3NpemUgYnVmZmVyU2l6ZTsKKyAgICBpZiAoIWVuY29kZUlt
YWdlKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBidWZmZXJTaXplKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgaW1h
Z2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBpbWFn
ZURhdGE7Cit9CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oR1RLKQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RlMzNjN2NhMDk2Y2FkODkyMjYzNzM5Yzc1Zjk1YjIwZmVk
YzAzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6
ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWZWN0b3I8dWludDhfdD4gZGF0YShj
YWlyb19zdXJmYWNlX3QqLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNDk2ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVm
NWVlNzNkMjA5YS4uNzIyZWVmZmU2YzllNWZkMjg2NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3Qm
IGRlCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
RmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRp
b25TaXplKGRlc3RSZWN0LnNpemUoKSk7CisgICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9u
U2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2Ug
PSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTZmMTk2NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNk
YTZiNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8
Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5o
PgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNs
dWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNs
dWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3Bp
L2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0
ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNk
ZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVy
KTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwot
Ci1zdGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSkKLXsKLSAgICBmbG9hdCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19j
YXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRo
KCk7Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRlcm5hbFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJu
IEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0aCgpICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxT
aXplLmhlaWdodCgpICogeU1hZ25pZmljYXRpb24pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChz
aXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3
aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0
VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9y
U3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0g
ICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENH
SU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0Nv
bnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAo
IWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwot
I2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwot
ICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwg
MSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwot
Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNl
dCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0
LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICBy
ZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBt
X3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNl
OyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lk
dGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNj
YWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0g
ICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRp
b24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHBy
ZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRT
aXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5n
TW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3Np
emUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdp
ZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBo
ZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdl
ciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAg
IENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICog
bV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlm
ICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0
KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFs
c2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwot
I2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRh
aW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBG
bG9hdFNpemUgdXNlckJvdW5kcyA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdp
ZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1
cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6
ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkg
ewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3Jt
Q29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAg
ICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
VU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0
KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0
aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0g
ICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1h
Z2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICgh
bV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdC
MzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRh
LmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAg
ICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRh
dGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5j
b2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVh
c2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAg
ICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkp
OwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMg
dGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRh
dGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVt
Qnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNn
Q29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQot
ICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJh
bnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4
dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3Vj
Y2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUs
IGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIo
KSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9u
U2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXplKSBjb25zdAotewotICAgIHJldHVybiBzY2Fs
ZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNpemUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAv
LyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJl
YWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBo
ZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBi
ZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNh
ZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkg
YmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAg
IC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNh
dXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEu
c3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0g
ICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVp
Z2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJy
ZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3
aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNj
ZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWdu
ZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFs
Qnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkK
LSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgp
IGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBp
ZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJl
R3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0Owot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29u
dGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJl
ZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJ
bWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgp
KSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5k
cy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aElt
YWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMu
aGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdl
PiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdl
UmVmPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwg
SW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykK
LSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQo
KSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNh
bFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50
Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVz
ZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNwYWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVT
aXplLCBpbnRlcm5hbFNpemUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5n
ZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2Up
LCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShX
VEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7
Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdl
QWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dp
Y2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHBy
ZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFs
U2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxT
aXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3Rv
cmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0
IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAg
IHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0
aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXpl
LCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7
Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkK
LXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0lt
YWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAg
ICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpj
cmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAg
IGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVH
ZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVBy
b3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAg
ICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5w
bGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgp
OwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICgh
aW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5t
X3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1
ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9t
SW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVz
b2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0
KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMp
OwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29u
dGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBE
cmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UK
LSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRT
cmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8
fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3
aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAg
ICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmlu
ZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1h
Z2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0g
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0
IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1l
bnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNp
emUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIElu
dFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJh
eURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5h
bFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJj
ZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0g
ICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNj
YWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNv
dXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50
LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAg
IAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYg
aXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4K
LSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2
NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxv
YXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVn
VVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAg
c3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVn
Iik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBD
b3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZy
b21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZl
LgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9y
dGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlh
Ymx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFu
ZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENG
U3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBj
b25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIp
OwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1h
Z2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0
dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWlt
ZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQot
Ci1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1
dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewot
ICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRl
V2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQ
cm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYm
ICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkg
dGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0g
ICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShr
Q0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAg
ICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Np
b25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0
eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlD
cmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3Ms
ICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0
dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVH
IGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBp
biB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQot
ICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwg
aW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmlu
YWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZE
YXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+
IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENG
RGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiAr
IG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8
dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50
OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZE
YXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVz
ZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1l
VHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUs
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZl
Y3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRh
UmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8g
dXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1
dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGku
Z2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBo
YSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxh
Y2suCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVt
dWx0aXBsaWVkRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNp
emVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgp
LmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRp
cGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlw
bGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRh
UHJvdmlkZXIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9
IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXpl
KCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JT
cGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVT
a2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50
RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVz
ZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1h
Z2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0g
Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgp
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJs
ZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUg
aW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXpl
KCkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFr
ZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFj
ZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRv
IGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0
LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFs
aXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRh
dGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8g
dXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1
dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBo
YUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsK
LSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVh
bCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBh
biBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Ag
b2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291
cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHBy
ZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZl
ciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtp
ICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAg
YnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAw
XTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAg
ICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExh
c3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRp
cGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5v
dWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0
byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwg
ZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYg
KCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFn
ZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgp
LCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAw
LCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwot
ICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZE
YXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92
ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAg
IGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAg
ICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRh
dGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsK
LSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQot
ICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9Owot
fQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewot
ICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hD
b250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNDNlYTI1ZGEwNWNkZjA3YTEwZjM2NDNkN2Y4NGEwZGE3OGM0MTkxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzg1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
TUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNj
ZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bnRTaXplIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXpl
IHNjYWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNl
aWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNp
emUuaXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShz
Y2FsZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRl
c1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxT
aXplLndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51
bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5o
ZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dChHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCit7CisgICAgY29udGV4dC5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAg
ICBjb250ZXh0LnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNv
bnRleHQuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0
YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
Q0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQoreworICAgIGlm
IChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+
KGludGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAs
IDAsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSk7CisgICAg
cmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
Cit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9
PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwg
bG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2Fs
U2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCks
IGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQu
Z2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAg
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6
Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGlt
YWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7
CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2Nh
bGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxz
ZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7
CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92
ZShpbWFnZSksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2Fs
ZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1f
cmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQg
PSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwor
CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZj
b250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAg
ICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxT
aXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsK
KyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYg
KGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5
QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJh
d1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5U
cmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworUmV0YWluUHRyPENGRGF0
YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAKKyAgICBhdXRv
IHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQo
dXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRp
LmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxw
aGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJs
YWNrLgorICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxT
aXplKCkpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0
aXBsaWVkRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVf
dCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhl
aWdodCgpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxp
ZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGll
ZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJv
dmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCku
aGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lw
TGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2
ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3Jl
YXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQo
KSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0
Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3
SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRo
KCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Cisg
ICAgfQorCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCks
IHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAg
cmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3Ry
aW5nIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlw
ZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwo
ZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjcmVhdGVHZXRJbWFn
ZURhdGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBl
ZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVjdC53aWR0aCgpOworICAg
IGFyZWEgKj0gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJheSA9IFVpbnQ4Q2xhbXBl
ZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOworICAgIGlm
ICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6
ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1ZmZlclJlY3QsIHNyY1Jl
Y3QpOworICAgIGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNSZWN0Q2xpcHBlZC5z
aXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNl
dFgoLXNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRl
c3RSZWN0LnNldFkoLXNyY1JlY3QueSgpKTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0g
c3JjUmVjdC5zaXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgpOworICAgIAorICAgIHJl
dHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlUHV0
SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQs
IEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgZGF0YVJlY3QgPSB7IElu
dFBvaW50Ojp6ZXJvKCksIHNyY1NpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2Vj
dGlvbihkYXRhUmVjdCwgc3JjUmVjdCk7CisgICAgCisgICAgZGVzdFJlY3QgPSBzcmNSZWN0Q2xp
cHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsKKyAgICAKKyAgICBpZiAoc3Jj
UmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1Jl
Y3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNl
dFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0
ID0geyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0Lmlu
dGVyc2VjdChidWZmZXJSZWN0KTsKKworICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJl
Y3Quc2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9Q
cmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBz
cmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwp
Cit7CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAg
ICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVz
dFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07
CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3Jj
UGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5w
cmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBz
cmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwp
Cit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsK
KyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQs
IHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7Cisg
ICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAg
ICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBk
ZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3Jj
UGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JG
b3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4
ZWxbM107CisgICAgaWYgKGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGll
ZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3Jj
Q29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9
IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFd
ID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhl
bFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAg
cGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4
ZWxbMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVs
WzFdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsw
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQs
IHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNp
emUmIHNpemUpCit7CisgICAgc3RkOjpmdW5jdGlvbjx2b2lkKENvbG9yRm9ybWF0LCBjb25zdCB1
aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4gY29weUZ1bmN0b3I7CisgICAgCisgICAg
aWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQo
c3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCAm
JiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCk7CisgICAgICAgIGNvcHlGdW5jdG9yID0gY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxp
ZWQ7CisgICAgfSBlbHNlIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICBjb3B5RnVuY3RvciA9IGNvcHlQcmVtdWx0
aXBsaWVkVG9VbnByZW11bHRpcGxpZWQ7CisgICAgZWxzZQorICAgICAgICBjb3B5RnVuY3RvciA9
IGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ7CisgICAgICAgIAorICAgIHNpemVf
dCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3QgeCA9IDA7IHggPCBi
eXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Ioc3JjQ29sb3JGb3Jt
YXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4XSk7CisgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKKyAgICB9Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUg
dkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50
OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdklt
YWdlQnVmZmVyOworICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2
SW1hZ2VQaXhlbENvdW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGgg
PSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFn
ZUJ1ZmZlci5yb3dCeXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0g
cm93czsKKyAgICByZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg
Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBz
cmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXIm
IHNyYywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgZGVzdENvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChz
cmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0Nv
bG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAg
ICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1
aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hh
bm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xv
ckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0Nv
bG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAh
PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JB
IDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBt
YXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxw
aGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBp
ZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09
IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNTbG93KHNyY0FscGhh
Rm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBo
YUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXpl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFr
ZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdl
X0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dz
LCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0
LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3Jj
Um93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1Ns
b3coc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIHNpemUpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZmUwZWE2YWEw
YTk3MTI3MTIxZTNiM2E5NDIxZTE1OWVmNWJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0w
LDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQmFj
a2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJ
bWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRl
OworCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVp
Z2h0KCkpOyB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoK
KyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAg
IHZvaWQgc2V0dXBDb250ZXh0KEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgdmlydHVhbCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkg
Y29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXpl
JiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Owor
CisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IElu
dFNpemUmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NDg5NWE0
OWVlODE2ZThiN2JhMjNkNWZlYWYwYTQ5ZTgzZDU4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ0EgdXNl
cyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMg
b3B0aW1pemVkLgorI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNp
ZiBVU0VfQVJHQjMyCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJ
bmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRl
cjMySG9zdDsKK2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQg
PSBDb2xvckZvcm1hdDo6QkdSQTsKKyNlbHNlCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZv
IERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworY29u
c3RleHByIGNvbnN0IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0
OjpSR0JBOworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0
ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRhdGE7
CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7CisK
KyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1BlclJv
dykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJU
KCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3Qg
bnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8gY2dD
b250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxTaXpl
LndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hlZENH
Q29sb3JTcGFjZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNn
Q29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBt
YWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0
IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6
ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9
OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNvbnRl
eHQpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBp
bnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3ZpZGVy
LCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVy
KFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQp
KQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7Cisg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KHRoaXMtPmNvbnRleHQoKSk7
Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7
CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAg
ICAKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlKAorICAgICAgICAgICAgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9p
bnRlcm5hbFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAg
Y2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2Rh
dGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3Vs
dCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0
Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygK
KyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3Jt
YXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQ
ZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAo
Y29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1
dGlvblNjYWxlICE9IDEpCisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RS
ZWN0OworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2Nh
bGVkLCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5
LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0
Um93cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0UmVjdC54KCkgKiA0OworICAgIAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0
ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4obV9kYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBz
cmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1h
dDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKwor
ICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1Np
emU7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNj
YWxlICE9IDEpIHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAg
IH0KKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsK
KyAgICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2Nh
bGVkLCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBkZXN0UmVjdC55KCkg
KiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZVNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJv
dyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAg
ICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tl
bmRDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjODAwMzAwNzI3MzBmYTA4
N2JmMzU0MTNkNjM5YTgwODdmZmMxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNo
U2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1YmxpYzoKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5
TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1Bl
clJvdygpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAg
ICB2b2lkKiBtX2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQ
cm92aWRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRk
ZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0K
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUg
PGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VT
UEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0Iz
MiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFD
Q0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpKQotc3RhdGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdl
X0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChz
cmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJy
b3IgIT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFu
ZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURh
dGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAz
IH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFw
LCBrdkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0
YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17
Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlm
IChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywg
JmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBj
aGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBC
R1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0g
eyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0
LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
KQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCog
aW5wdXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0
cHV0KTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwot
ICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1Bl
clJvdzsKLSAgICBzcmMuZGF0YSA9IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0Owot
ICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBk
ZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJB
TShpbnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVp
Z2h0KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICog
d2lkdGggKiBoZWlnaHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAg
ICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICog
YmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6
OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwg
bG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQ
ZXJSb3coKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
ckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZykgY29uc3QKLXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJl
YSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdo
dCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSBy
ZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5t
YXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVj
dC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0
aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQt
Pnplcm9GaWxsKCk7Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQg
ZGVzdHggPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBp
ZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVz
dHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0g
c3RkOjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7
Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHgg
PSBzaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7
Ci0gICAgCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwot
ICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkg
PCAwKSB7Ci0gICAgICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdp
bnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGlu
dD4oZGVzdGgudW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAo
ZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhl
aWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAK
LSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0g
MCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0
RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAg
aWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBz
cmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3Jj
Um93czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVz
dC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBk
ZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdC
MzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxz
ZQotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lk
dGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4Kysp
IHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0Iz
MgotICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1
c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhh
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1ti
YXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhd
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dz
W2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAg
aWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAo
c3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1ti
YXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyAr
IGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsg
YmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNy
Y1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVT
RV9BUkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2Fm
ZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXgg
KyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3Nb
YmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93
c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4
KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5k
aWYKLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAg
ICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNy
Y0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdp
bnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51
bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0g
c3JjUm93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lk
dGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnBy
ZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdklt
YWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0Zs
YWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50
OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAo
YWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNS
b3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkg
LyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
c3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBk
ZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAg
ICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAg
ICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRh
OjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRT
aXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJj
ZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7
Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNl
UmVjdC54KCkpOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NF
UlRfVU5VU0VEKHNpemUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBB
U1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNh
ZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVu
ZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwot
ICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAg
Q2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50
PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291
cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0
UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0
KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdp
bnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8
aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4
WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQot
ICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNr
ZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8
fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5
dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmln
aW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAg
IHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykg
ewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVz
dEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQ
ZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAg
ICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0
ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNy
Y1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBk
ZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9
IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FS
R0IzMgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxz
ZQotICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVH
ZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAg
ICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJH
QjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNl
IGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jh
c2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFz
ZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUp
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5k
aWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
ICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpB
Y2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNl
LT5ieXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
Pihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyAr
IGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAg
dkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgp
OwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMu
cm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0
PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAg
ICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQg
PSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1Bl
clJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJj
ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAg
ICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgot
ICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAg
ICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBr
dkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBi
YXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhd
OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0g
ICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1ti
YXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4
ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dz
W2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAg
ICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1
ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRl
ICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+
Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRl
ZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50
MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJm
YWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9y
ZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93
OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29m
dHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0
YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZv
IGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4
dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25s
eSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsK
LSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5k
ZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zZDIyYzI0NjM4ZTdiZTIxODQ5YmYyYWU0ZTU2NzU4YmQ2YzQ0
YmVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBV
U0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVH
cmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7CisgICAgaWYgKGlu
dGVybmFsU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGludGVybmFsU2l6ZS5oZWln
aHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1
cm4gaW50ZXJuYWxTaXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxT
aXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAg
aWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5h
bFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+
IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsK
KyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0Nv
bnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVy
bygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92
ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdo
dCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSkp
OworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNH
QmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQo
bV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRleHQoY29udGV4dCgpKTsKK30KKworSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5k
UmlnaHQpCisgICAgOiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGlu
dGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBJT1N1cmZhY2U6OmNyZWF0
ZUZyb21TZW5kUmlnaHQoV1RGTW92ZShzZW5kUmlnaHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9j
b2xvclNwYWNlKSkpCit7Cit9CisKK01hY2hTZW5kUmlnaHQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2Ut
PmNyZWF0ZVNlbmRSaWdodCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+
ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5w
bGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6Om1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0
ZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1Bl
clJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30K
KworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5j
cmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNp
bmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRq
dXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdl
KCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9p
bnRlcm5hbFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkg
Y29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFy
ZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNh
bFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJS
b3coKTsKKworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWlu
dDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJh
c2VBZGRyZXNzKCkpOworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEo
KSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50
UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9
PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisg
ICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50
UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJy
YXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBl
ZCwgZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNy
Y1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRh
KCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0Owor
CisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3Vy
ZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgc3Jj
UmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0
OworCisgICAgY29weUltYWdlUGl4ZWxzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgb3V0cHV0
Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVz
dFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUm
IHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNy
Y1NpemVTY2FsZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1Jl
Y3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNh
bCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAg
IEludFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6
ZVNjYWxlZCwgc3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJl
Y3QpOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAg
ICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpB
Y2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBkZXN0UmVjdC55
KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZS53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jv
d3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyAr
IHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoaW5wdXRGb3Jt
YXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICAvLyBGb3JjZSByZWNy
ZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0
aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEs
IDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENH
KSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE1MTI3MDJmYmVjOGFmMTcxMGE2NDdhOWQyMmIyNWI1N2NjZWU3OWUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKSAm
JiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1
YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
cGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5k
UmlnaHQpOworCisgICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmln
aHQoKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVt
b3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3Qo
KSBvdmVycmlkZSB7IHJldHVybiBtZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92
ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiYmKTsKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdW5zaWduZWQgYnl0
ZXNQZXJSb3coKSBjb25zdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3Vy
ZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykg
JiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAppbmRleCA4OWQwNDM5
YzIxMGRiNTAxYWM5MzllYjExNDE0ODgxZWVlYzY1YjI0Li5kMDkxMzlmMDFiZDMzNmYyODQ4YWVh
NTI2YTRmOWY4MDBlZTc4NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcApAQCAtMjYs
NyArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmgiCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDEsNCArNTIsMTQwIEBAIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQogICAgIHJl
dHVybiAqKHVpbnQ4X3QqKWxhc3RCeXRlOwogfQogCitDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sK
KyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5
cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlw
ZUpQRUc7CiB9CisKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAg
ICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOworI2Vs
c2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RS
IGlzIHRocmVhZHNhZmUuCisKKyAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3Ig
YWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlw
ZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCisgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0
IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KKyAgICBz
dGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7
CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNv
bXB1c2VydmUuZ2lmIik7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
bWltZVR5cGUsICJpbWFnZS9wbmciKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7CisgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIp
KQorICAgICAgICByZXR1cm4ganBlZ1VUSSgpOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQorICAgICAgICByZXR1cm4ga1VUVHlw
ZUdJRjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrVVRUeXBlUE5H
OworI2VuZGlmCit9CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJp
bmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0
YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlv
bkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVh
bGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIC8v
IEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0
aW9uLgorICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5
KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNv
bXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lv
blF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIH0KKworICAg
IC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBm
b3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCisg
ICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdv
cmsuCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGlt
YWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRp
b25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
KworICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwor
ICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0g
a0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRh
KCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAg
ICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3Mg
ZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBv
c2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53
aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRh
LnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVk
IGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAg
ICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Cisg
ICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7
CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAy
NTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0g
PSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsg
MV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxw
aGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0
YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1
ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQo
KSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAw
KSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291
cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAg
YXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwg
cXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBy
ZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0
YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0
YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsg
IjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdl
RGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBx
dWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwor
ICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihD
RkRhdGFSZWYgY2ZEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEu
YXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkp
OworICAgIHJldHVybiBkYXRhOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFn
ZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwg
cXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJl
dHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVj
Njg5NTA0OTFkNDE5NTUyLi44NGM1N2QyZmVlOTMzOGVkNWUwZWZjNGE4ZTMzNjVhMTlhODAyMDRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCkBAIC0yNSw4ICsyNSwzMSBAQAogCiAjcHJhZ21h
IG9uY2UKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVfRVhQT1JUIHVpbnQ4
X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVf
dCBidWZmZXJTaXplKTsKIAotfQorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpOworUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKKwor
Ym9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmluZyBkYXRhVVJMKENGRGF0
YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOworVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3
ZTAwNTYzMzMyNTg4MjNjLi4yODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
UkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1
MWIxNzRiNmIyNGJhYzUzNjRjOWEwNGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFk
MGUxMTczNGRhYjIxNGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTEwMCwxMCArMTAwLDYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1
cmZhY2VSZWYsIENHQ29sb3JTcGFjZVJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAg
ICAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1
cmZhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAx
MDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUw
ZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5o
IgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNp
bXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEku
aD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJl
ZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElP
U3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0
YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9y
QmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVf
dCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhl
bCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZi
NzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4
XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAog
ICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBA
IC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJD
b3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlm
MWNlMjczNTQ1MGJkYWMzYmJkZjExYTMwODVkOWE3ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
RGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJh
d2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2Nv
bnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rp
c3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2Fs
U2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxE
cmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBj
b25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3Ry
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAg
IG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBs
YXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsK
KyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3Jl
cGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOwor
ICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdy
YXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7Cisg
ICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8g
RGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFi
ZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEz
ZjIxMjYxNzE3ZGQxZDg1OGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4
NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAg
ICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAg
SW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkp
OwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5
ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhl
bEFycmF5RGltZW5zaW9ucyk7CisgICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdl
UmVjdCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0
b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50
U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOwor
ICAgIHBpeGVsQXJyYXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2Nh
bGUoKSk7CisKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9U
WVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVD
b2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJl
Y3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNp
emUoKSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2Fm
MDZjMDFhN2M3OGE3ZmI5NDdkNDA1ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBA
IC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIg
d291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJl
YShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3Jj
UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRv
d0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVt
KTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5h
dGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAg
ICByZXR1cm47CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJy
YXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0
aCgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBz
aGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0
ZVN5c3RlbSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCks
IHNoYWRvd0FyZWEsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7
CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVy
YXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZs
b2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
CmluZGV4IDQ5ZThjNWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1
YjEzN2Q4MjJjNzAxNTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBw
cml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsK
ICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBt
X2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsg
VW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAx
IH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1
NTA3NGEyZjk3MmI1OTBmYS4uNWM4YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBG
aWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRp
b25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAo
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0
aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVj
dCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXko
Km1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2
b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJh
eSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVm
ZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
OwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lk
IEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkm
IGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNp
emUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
OwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1YTBkNTBmOGNlMWFhZjY1MzVkZWVjOTQwYjg1ZGM1NTE3
ZTRiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIEln
YWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoK
LSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+
Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVP
dXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQotewotICAgIC8vIExpc3Qg
b2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1
ZiBkb2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1w
aXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUt
dG8tYnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9m
ICJpbWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5
cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAo
dHlwZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEg
Y2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBl
bmNvZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxh
Y2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7Ci0gICAgICAgIGlmIChjYWlyb19zdXJm
YWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAg
ICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAg
ICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7Ci0gICAgICAg
ICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJ
Uk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNl
LmdldCgpKSk7Ci0gICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCks
IHN1cmZhY2UsIDAsIDApOwotICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1
ZihuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0
R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJv
cjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAg
JiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3Ry
aW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Ci0g
ICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91
dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCks
ICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZm
ZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQ
dHIoKSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZm
ZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4g
aW1hZ2VEYXRhID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoaW1hZ2VEYXRh
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+
IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGltYWdlRGF0YS5kYXRhKCksIGltYWdlRGF0
YS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSAr
ICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdj
aGFyPiBidWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBpZiAoIWVuY29kZUltYWdl
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZl
clNpemUpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdl
RGF0YTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0g
ICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0Mz
RExheWVyLmNwcAppbmRleCA0YzRjNDI2OTYxMjcxYzdiN2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFl
Li43NTcwMDNiMWYxMWRmNGIyNzY2YjQwOWU4MjJjZDhiNDIwZmI0YTViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0Mz
RExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lh
L3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEdDM0RM
YXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2Nv
bnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOwogICAgIFRl
eHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBtX2NvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMo
KS5hbHBoYSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwOwogI2lmIFVTRShBTkdM
RSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4
dHVyZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghaW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCmluZGV4IDdkMmNlZmQ2
MjYxZGVlMmEzOWE4OWQxMDE3MDJlYjUwMjUyZjRmNWUuLmYwMzkxMzgwNjBkMzQ0MzRlNmNkZGJm
OTZlYTY0YzMwMWE2MzU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAg
dm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyJiwgR3JhcGhp
Y3NMYXllciogc291cmNlTGF5ZXIsIGMKIHsKICAgICAvLyBNYWtpbmcgYW4gdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGlzIGNvZGUKICAg
ICAvLyBpc24ndCB1c2VkIGJ5IGFueSBwbGF0Zm9ybXMgdGhhdCByZXNwZWN0IHRoZSBhY2NlbGVy
YXRlZCBiaXQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKIAogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAKaW5kZXggMWM2NmFkNzljZTQwYzE0NTU4ZjY2NTI1MmIyNWUzYmI3ZGVkMTZiZC4uODk3Y2U0
MGQwNGM3ZTBhZDFlYTE5MmNiOTEwNjE5ZjhmOTIyMjRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAg
LTQ1OCw3ICs0NTgsNyBAQCBJbWFnZUJ1ZmZlciogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6Omlt
YWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAobV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBkNWI5
MWIyNjg2YWUyNjFlYjUzYzA2ODliZWVjNjJmNTVlM2ZiNDU4Li44ZjUwZTU3NTcxZDdiMzg1MDBl
ZWQ3YmNkYTZiM2E2NDJhYmY3OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKQEAgLTY5MDUsNyArNjkwNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZp
bHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0KICAgICAKICAgICBlbnN1cmVMYXllckZpbHRl
cnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMt
PmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5k
ZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAog
dm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggOTE0MjAyOWEyZDQ0NjRkZjVjYjdiM2E0NDE5
M2JlMjg2M2MxZWQyYS4uOTM1YTZlZTllNzZmZjQ0MDJmOTg0YjVkMmI1MjFhNjk5MWM2MTUyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTE4MSwxNCAr
MTgxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBl
KEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgSW50UmVjdCBtYXJnaW5SZWN0
ID0gc25hcHBlZEludFJlY3QobWFyZ2luUik7CiAgICAgYXV0byBpbnRlcnZhbHMgPSBtYWtlVW5p
cXVlPFJhc3RlclNoYXBlSW50ZXJ2YWxzPihtYXJnaW5SZWN0LmhlaWdodCgpLCAtbWFyZ2luUmVj
dC55KCkpOwogICAgIC8vIEZJWE1FICgxNDk0MjApOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXpl
KCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQo
KTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJ
bWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0g
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVy
LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Qu
c2l6ZSgpKSk7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9
IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJheSk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJy
YXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxB
cnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VD
bGlwcGVyLmNwcAppbmRleCAwOGU0OTI4MmFkOTNiY2FjZDI5Nzc1Yjg0NmYwNTlkNWEyY2E3MTNl
Li4xZDc3YjYzYzZmZTI4MzEyYWUxMWVkODI1YjUyM2FhY2U3MTdlYzVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6
OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGMKIAogICAg
IGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5
KCkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3Vs
ZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0
aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2guCi0gICAgICAgIGNsaXBw
ZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBh
aW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFVuYWNjZWxlcmF0
ZWQsICZjb250ZXh0KTsKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Q29sb3JTcGFjZTo6U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQp
OwogICAgICAgICBpZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNzViNTliNjNjM2U0OTYwYmQ0ZTNiZGJkODc0OTJh
OTMyZjQzMTYxYi4uMTJlN2YxNWQ2MzJkNzZkOTlmNmJhYmE5MzhkMGQ5ZTI2MzRkOGU4MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5k
ZQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWln
aHQoKSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFy
RnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNj
ZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwog
ICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdl
QnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29s
b3JTcGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNv
dXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5j
b250YWlucygmcmVuZGVyZXIpKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIFJlbmRlclNWR1Jl
c291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
R3JhcGhpYwogICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJG
cmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgICAgICB9CiAgICAgfQotICAgIGZpbHRlckRhdGEu
c291cmNlR3JhcGhpY0J1ZmZlci5yZXNldCgpOworICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhp
Y0J1ZmZlciA9IG51bGxwdHI7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFt
IDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAiIDw8IHRoaXMgPDwgIiBwb3N0QXBwbHlSZXNv
dXJjZSBkb25lXG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKaW5kZXggMTc4N2UxOGMyZGNlZjViZGY5
OTI0NzRjZmMwMjJiNTE2NmFkNTg0OC4uMTIwYzU3YjU2OTc4NzIyMDQ2NWJjNmFlYzBiNTgwNGM0
NTVjZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZU1hc2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJT
VkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
Y29uc3QgUmVuZGUKICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5
bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHls
ZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/
IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJ
WE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9u
YWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFs
cGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZH
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRl
VHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAg
bWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRh
LT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGI4MjE0MTFhZGU3NzUwODU2MTY4ODU2ZWQy
MmI2MmVhNmI1Y2QzZDkuLjk3ODY3YWFkM2MyN2I1YjUzOGQzYTc5ZmI0OTVkZGQ0ZjBmNDNkOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjE4LDcgKzIx
OCw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZShjb25zdCBHcmFwaGljc0NvbnRleHQqKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNjZWxlcmF0ZWQgZHJhd2luZyBmbGFnLCBzbyBp
dCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUg
aW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDUz
MjY3OGYzNzYwMzNjM2MwMGY5ZjZiZDVhMzBjMzg2OTBlMzM0YmYuLjBhYjkyMDE2MjRlODYwYTBk
OWNjMGYwNzE5ZmE2MzE1ZjJmMTU2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtMTcsNiArMTcs
NyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXZWJLaXRfREVSSVZF
RF9TT1VSQ0VTX0RJUn0vaW5jbHVkZSIKICAgICAiJHtXRUJLSVRfRElSfSIKICAgICAiJHtXRUJL
SVRfRElSfS9HUFVQcm9jZXNzIgorICAgICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZCIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2VzcyIKICAgICAiJHtX
RUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZWRmYjZlMWUwNWU1NjQwMDhiN2Q1N2E4NzQ1Mzc4YzQz
ZDY2Y2Y5Ni4uN2E1MjE0MjVmZjkzMTcyYjVhYjdlMWRjMjQyMGFmZTY1Yzk3NmY1OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiAr
MTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vZGVscy5weQog
JChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1Rf
RElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5t
ZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1Rf
RElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3Nh
Z2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDIsNiArMTA0LDcgQEAgJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVj
dGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxT
Y3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1Rf
RElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BV
L3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IGRmYmMw
ZWZlNmI4NDcyNmY5NmM4OTgyOGNkODNkMGVkNzU5MDVhMDYuLjkwZDkxMTFmZDEwZTg2MzQ1Yjdl
ZjRmZjUzYjE1OWEwYzMxMmNhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1Jl
cGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1
Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdl
QnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2Vz
UmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3Nh
Z2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTE0Miw2ICsxNDgsOSBAQCAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNl
TWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1l
c3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGUyOTA5MzA5N2NkOWJkZWIzNDVhMTlhNWQz
N2ZlNTdhNTQwZGViNzAuLjhjNzUzZDE2ZjQwZGZkZGNmZTE3NDViYWE1ZmU1OWJmMjk2ODc3ZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBc
CiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mv
bWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQoV2ViS2l0Mikv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mv
d2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIp
L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAg
ICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2Vi
UHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAg
ICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJL
aXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9J
Y29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAg
LTE0MCw2ICsxNDIsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQbHVnaW5Qcm9jZXNz
Q29ubmVjdGlvbk1hbmFnZXIgXAogICAgIFBsdWdpblByb2Nlc3NQcm94eSBcCiAgICAgUGx1Z2lu
UHJveHkgXAorICAgIFJlbW90ZUltYWdlQnVmZmVyIFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5IFwKICAgICBSZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwK
QEAgLTE0Nyw2ICsxNTEsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRp
YVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAg
IFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkg
XAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0
b3JQcm94eSBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDYy
MGI0MWYyOGQ2Njc2YTNkZTE3ZjQ3NmIyZGYzODhmZmY2NDc3MGQuLmEzNzFjZjIzZGE3N2ZhNzZl
M2U0MDNkZGMyZDNhZGI2NjE5MDFjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE2MCw1MiArMTYwLDY4
IEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJX
ZWJSVENDb2RlY3NQcm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlz
cGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNz
YWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2Vy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6
OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewog
ICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNl
aXZlUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgUExB
VEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVz
c2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwog
fQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3Rk
Ojp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK2Jvb2wgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHko
KS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVh
c2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZjQ4NTk2NGQ0NmM1MmUzMzhkMmFiZTRmNzY1ZGRj
YjVhOTRhMDc5MC4uMDI3MDM3ZmU5OTQ2NDA5ZjA2YzIzYmY2Y2VjZDM3ODUzYTU2ZTdiOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5o
PgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5j
bHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9u
SUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ3LDE4ICs0OSwyMCBAQCBjbGFzcyBVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5OwogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
CiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAg
ICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAg
LCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nl
c3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklE
KTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0K
KyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1
cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkg
eyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZv
aWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2Vi
UHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03
NywxNCArODEsMjEgQEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50
CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFt
ZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVy
PiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hT
eW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9w
dHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1f
bG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJl
ZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAg
bV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZp
ZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTYsNiArMTA3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2Vi
UlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIy
MWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3Nh
Z2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2Ugewor
ICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJl
bmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdj
OGZhM2U3Yjg1MGUxMzdiYWUzMmVkZGI4YTcxNWU4NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIo
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAg
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9
CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sK
KyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+
bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdl
QnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAo
YXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5j
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdo
dCBzZW5kUmlnaHQpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRl
eHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250
ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWExNmExNDNlNzdiMjIyYzM1NTE4ZDNkNTY2ZmYzYTllNWEyMWJjYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRS
aWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
KyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBD
OjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIK
KyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2Rl
ciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9y
U3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBh
ZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRkNzJkZGViNWVjOTU4YwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdl
cyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1
c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwg
V2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1
ZWQxYzg5MTZjMjQ0NWQ3Y2U4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHku
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQ
cm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwg
cHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbElt
YWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47Cisg
ICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRp
Zmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6
dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdU
Rk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAg
ICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgp
LCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgp
LCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7
CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVy
KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAg
ICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY3ODdlZWZhMjJmMGM0NjA5MTA4YjVi
ZmI0ZDc3ZTk3NzQwYjYyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90
ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5PEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFmNDBmZmNlOWIxOTY5OTFmZGY5OTRmODI0ZWQ2OTIzYTA4ODRmNzIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
IgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYg
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
KTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAg
ICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgp
LCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9
CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAg
IHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVm
ZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdN
b2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1h
Z2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZl
cikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdl
QnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7Cisg
ICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVm
b3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVy
SWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVy
KEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhh
c2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdl
YWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3
ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VC
dWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkK
aW5kZXggZjhiY2UxNDU1MDdkZjQ5ZTg5ZWQ0ZjcxOTg3NmUxMGJmNzA5NmJkZS4uZWQ5ZTE3N2Ri
M2ZlMTYwN2VjYWQzMzU3YmI5MzYzNTgzNTEwMmVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Vi
a2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHND
b25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNw
YXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVy
JwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBT
WU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAg
ZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4g
ZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywK
KyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2Vi
Q29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXIn
LAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6
OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fu
bm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllcicsCisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAg
ICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZp
Y2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjE4LDEwICsyMjIsMTMgQEAgZGVmIHR5cGVzX3Ro
YXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZp
Y2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNXU2Vy
dmVyQ29ubmVjdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRl
Q2hhbmdlSUQnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcics
CisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVy
UHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVy
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlm
aWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJU
Q0VuY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlm
aWVyJywKQEAgLTc2MiwxMyArNzY5LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIo
cmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBw
ZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNz
YWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRU
UklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlcilc
bicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmli
dXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQu
YXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1Rf
UkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAg
ICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBm
b3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0
dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAg
ICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUg
KHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc3LDEzICs3ODcsMTYg
QEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21l
c3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9B
VFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1l
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxz
ZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNl
aXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQo
cmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAg
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJV
VEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDM0ODJkMDUwZTRiZWZjMTAyZTMxNmQw
MTk4YjAwNGVmNjA4NDUxYmUuLjNjZTIxNDkwMzU2Yjc1YzZlOWVhNDYzZjBlMTZmN2EzNzcyNjUw
NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBA
IC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtNzk3
LDYgKzc5OCwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNl
cmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3Rl
CisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29s
b3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6
Q29sb3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDMwNmNkMWU2OTM1NjYxYWQ0MWMwNjA5Mjg0OGJm
OWFmMzZiMWI3MjYuLjM1MmUzNDFlNjQyNTkyNDdlNWI2MWY1MzgzNjUzMjg2MGU1NWQ0OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dApAQCAtMzEsNiArMzEsOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UGxheWVyUHJveHkuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3Bw
CiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJv
Y2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUxNCw2ICs1MTYsOCBAQCBXZWJQcm9jZXNzL0dQVS9t
ZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9S
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVN
ZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9M
aWJXZWJSVENDb2RlY3MuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclBy
aXZhdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByb3ZpZGVyLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDkzOWZiMTcxYjcxZThjMmYyZjIzZTAzMjIwNmIw
YWIxN2M5OGFiOTkuLmNmZjQ1YTI4NWFhOGI1NWFkNjQ3MDIxODMwNzNjOTUzNTEzZjgzNTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTYzMiwxMCArNjMyLDE0IEBAIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KIC8vIERl
cml2ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAorR1BVUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNz
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIu
Y3BwCitSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVm
ZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJlY2VpdmVyLmNw
cAogUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNl
V29ya2VyRmV0Y2hUYXNrTWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2Vi
S2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWQ4YjZkZWYyMTc4Y2YyOGYzZWFl
ZTBlN2I2YmFhNGZkMTY3MzUwOC4uZGMzMThjN2VhNmQ3ZjY3MmZhNmY5NWYyODczOTI2MzQxYWI3
N2U4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCkBAIC0zOTYxLDggKzM5NjEsMjYgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8q
IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9X
S1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVj
b2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91
Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBB
MjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBv
bGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVk
TW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5
QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBOTIz
QUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhF
ODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2Vy
TWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQ
aWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBGMjNBQjA0
OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBS
ZW1vdGVJbWFnZUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW1vdGVJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZl
ci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5t
ZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTcyM0IzODQy
MTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3
RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVE
YXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0
YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYw
MEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3Rv
cmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVE
YXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM5Myw2
ICs2NDExLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5
MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlhICovLAorCQkJCTcyQkJFNDBFMjNBQjA0NTgw
MEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFF
NTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVBy
b2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyog
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAgLTY0MDksNiArNjQyOCw3IEBACiAJCQkJMkQ5
RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0
OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAq
LywKKwkJCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLywK
IAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBD
MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJ
CQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5o
ICovLApAQCAtNzc4Miw2ICs3ODAyLDM4IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRl
cmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cCAqLywKKwkJCQk3MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oICovLAorCQkJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAv
KiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0
RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJ
NzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAgKi8sCisJCQkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oICovLAorCQkJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJl
bmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MkJC
RTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3
IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzIxRjFFOUIyM0FEMzZE
MDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyQkJFNDBGMjNB
QjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8sCisJCQkJNzJCQkU0MTAy
M0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTQy
M0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovLAorCQkJ
CTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgg
Ki8sCisJCQkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXIuaCAqLywKKwkJCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyog
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVy
aW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFE
MjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggMThlOTM2ZGUzMjMwNzcwZjI0MzYxYjZh
YmFhOGUxN2U0ZDJlNWFjMC4uMTg4ZmFjMjBhMWU5MjNkZjYyYmIxYTM4MDU1MGFhYTRmOTRkOGUz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29u
bmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHAKQEAgLTYwLDI5ICs2MCwzNSBAQCB2b2lkIEdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewogfQogCi12b2lkIEdQVVByb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQotewotfQotCi12b2lkIEdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVj
b2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8UmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogY2FwdHVyZU1hbmFnZXIg
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyPigpKQogICAgICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2VpdmVNZXNzYWdlRnJv
bUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgVVNFKExJQldFQlJUQykgJiYgUExB
VEZPUk0oQ09DT0EpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1l
c3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5saWJXZWJSVENDb2RlY3MoKS5kaWRSZWNlaXZlTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCku
ZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIEdQVVByb2Nl
c3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVy
PiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNw
YXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisK
K3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2Up
Cit7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IDMxYzYxMDQ2NjlmMmYw
MmZmYTQ0MGZlYjg4MDkyNmM3NGFlMjZhY2YuLjZkMWI4M2RlNTgzNmFmYWUyMWFmYzM0ZjU4YTIy
ZTVkNmQzMjNjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtNDYsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgfkdQVVByb2Nl
c3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkg
eyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJN
YXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9
CiAKIHByaXZhdGU6CiAgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyKTsKQEAgLTUzLDEwICs1NSwxNSBAQCBwcml2YXRlOgogICAgIC8vIElQQzo6Q29u
bmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogCisgICAgYm9vbCBkaXNwYXRjaE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRj
aFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICAvLyBUaGUgY29ubmVjdGlvbiBmcm9tIHRoZSB3
ZWIgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4g
bV9jb25uZWN0aW9uOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2Vp
dmVyTWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgppbmRleCBkMzZmOGEwOTVmNmE3N2JiYjZjYWM4ODNhNjUxZTg0Y2U5ZDY0YjMwLi41N2Zl
Y2RlOWRmMjdjNzM5YTZjYmYwMjY5ODA2NTkyYjVlMjE3OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVz
c2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAot
bWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24geworbWVzc2FnZXMgLT4gR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24gV2FudHNEaXNwYXRjaE1lc3NhZ2UgewogCiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjJiYmRkODYz
NDA1MjA1YWRhN2VmM2NjNzM4NDYwMTlmYjE5OTNiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitlbnVtIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRp
Zmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjA3ZWFmOTQ0YmEzOGYwYTk5NGE1YmU1MjQxOTU5ZjRhYzg4YTU5
MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlw
ZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPElt
YWdlQnVmZmVySWRlbnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTUxYjRjZTgwZjdiMWE2ZWNiYzgyYmU0NjVkOWE4MWZk
MWQzOWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApAQCAtMCwwICsxLDEwOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2Vz
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBh
IE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7
CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVt
b3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Q3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOworfQorCitSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUltYWdlQnVm
ZmVyKCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIu
CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJl
Y2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZl
cigqdGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lgor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZUlt
YWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQor
Cit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgp
OworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7
CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1l
c3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kPihtX2lt
YWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdh
aXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6
OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNv
bm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERp
c3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElk
ZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlv
bjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1v
dGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKQoreworICAgIGNvbnN0ZXhwciBj
b25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50ID0gMzsKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRz
Q291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNCYWNrZW5kQ3JlYXRlZCgpICYmIHdhaXRzQ291bnQt
LTsgKQorICAgICAgICB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyBpc1BlbmRpbmdGbHVzaCgpICYm
IHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7Cit9CisK
K3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbV9yZWNlaXZlZEZsdXNoSWRl
bnRpZmllciA9IGZsdXNoSWRlbnRpZmllcjsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6
cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QpCit7CisgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6Rmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0LCBtX3NlbnRGbHVzaElk
ZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgZW5zdXJlVXBkYXRlZEJh
Y2tlbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjZiNTZlMzFkMGNhZjIwNmVlNTA2Yzk3OTY5MDViNzg0MGE0OWI4YWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
KyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNs
dWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UmVtb3RlSW1hZ2VCdWZmZXIKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAg
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICB+UmVtb3RlSW1h
Z2VCdWZmZXIoKTsKKworcHJvdGVjdGVkOgorICAgIFJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gQmxvY2tl
cnMKKyAgICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKyAgICBib29sIHdh
aXRTZXRGbHVzaElkZW50aWZpZXIoKTsKKworICAgIHZvaWQgZW5zdXJlVXBkYXRlZEJhY2tlbmQo
KTsKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJ
ZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworICAgIC8vIElQQzo6
TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJ
bWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0Rmx1c2hJ
ZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsgICAgICAgIAorICAgIHZvaWQg
cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYpOworCisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
IHsgSW1hZ2VCdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CisgICAgSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOworICAgIEltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CisgICAgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFmODc3NTU3YzBhYThjOGE5MDUwNGExMzU4MGRhNTkxYWE1YmZjNWQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNz
YWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlciBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIENyZWF0
ZUltYWdlQnVmZmVyQmFja2VuZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNv
cmU6OkludFNpemUgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6
OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCisgICAgdm9p
ZCBTZXRGbHVzaElkZW50aWZpZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBm
bHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
NTcxYzdhZDgwNGMyYzQxZmVkMTZjYjEwNmM2NmQwOWY3NDAzNTFlCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciA6IHB1YmxpYyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVi
bGljIFJlbW90ZUltYWdlQnVmZmVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJh
c2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPihuZXcgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAg
ICAgICA6IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3Rl
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fYmFja2VuZCk7CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tl
bmRUeXBlOjpjcmVhdGUobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdodCkpOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQuZ2V0
KCk7IH0KKworICAgIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmICghbV9iYWNrZW5kKQorICAgICAgICAgICAgY29uc3RfY2FzdDxS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7
CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVz
aENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90
ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBk
aXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xNzMyYTU1YjBiMmViNzg0MjM3ZTgyZWI4NTFiMGI5NGI5Mjc3OWY2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVy
ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZm
ZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGRjOTY0OWU3ZWVhMGExYjA2NzVjZGJmODE4NjdlNGNmN2FjMmRjNwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOwor
fQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sK
KyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5k
KE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNr
ZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJlbGVhc2Ug
dGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJl
dHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24o
KS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
OworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVy
YXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5ZDFm
NDRjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZl
ci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAg
IDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgp
OworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2Fn
ZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyop
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAg
ICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
NDY1ZmI4YzZmNzdmN2ZkZTM4ZjY4Y2JiMDc1MjQ2Yzk5NGRiMWQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3Vz
aW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllclR5cGU+OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCmluZGV4IDQ2ZDEx
OTg3NzJjNTFiOGFkOTBlZjhhMTcxMzIxZmZjZTI5MGZjZjkuLmIwMjkyMWUwNjFhNjBlMzM1MDg4
N2U3YjA4OTMyNGVhYjhlYTNmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApAQCAtNDIsNiArNDIsOCBAQAog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIHN0YXRp
YyB3ZWJydGM6OldlYktpdFZpZGVvRGVjb2RlciBjcmVhdGVWaWRlb0RlY29kZXIoY29uc3Qgd2Vi
cnRjOjpTZHBWaWRlb0Zvcm1hdCYgZm9ybWF0KQogewogICAgIGlmIChmb3JtYXQubmFtZSAhPSAi
SDI2NCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgw
M2Q0ODIxNzNiZTVhMzU1OGEuLjc3MjZmZTk0OGEyMjc5YmJmOTM5ZjA2NDRmNjQ1NjgyZWQ2Yjc5
ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9Nb2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uLmg+CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC04ODEsMTUgKzg4NSwyMiBAQCBH
cmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9y
eSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9N
T05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6
OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQp
IGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVh
KCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorc3RkOjp1
bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVy
biBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOwogI2VuZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xp
ZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVy
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGZkYTMzOGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFm
Njc5NGVkMWMyY2QuLjRkZWRmZWU3ODQxMTY1ZTU3N2Q5NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMSw2ICsyMzEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0
cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFn
cyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVD
bGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250
ZXh0TWVudUNsaWVudC5tbQppbmRleCBlZjAzNTAzNDJiYjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFm
MjkwNDNkLi4yNDA3ZjEwNjliNTdmYmY2NTk0ODg3NTQxMjhjZThmYWIxZWNiYmY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVu
dUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9X
ZWJDb250ZXh0TWVudUNsaWVudC5tbQpAQCAtMjAyLDcgKzIwMiw3IEBAIFJldGFpblB0cjxOU0lt
YWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQ
aWNrZXJJdGVtCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2
ZWx5IGEgc25hcHNob3QsIGFuZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBm
YXNoaW9uIGluIGxpbmUgd2l0aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCks
IFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA0YzE3NmQ0ZDRmNGNhZDNjOWUxNTVjOTE5N2JiYWEwNmI1MTBmYTU0Li40ZjA1NzhhN2Y5NmI4
YjU3YTcxMWI2OTljZjcwZjRkZWI2NTE5Yzk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAt
MDEtMDggIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNw
bGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTAxLTA4ICBSeWFuIEhhZGRhZCAgPHJ5YW5o
YWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIGZldyB3ZWItcGxhdGZvcm0tdGVzdHMgYXJlIGZh
aWxpbmcgb24gaU9TCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFz
LWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2Fu
dmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMWI1N2U3OTFiNzJhY2NhODc3NjE0
NDc5YjRkYzdmZTVjOTU5NGQ3Ny4uMzRjODdiOWIwNDI5NDU1YTliZjExNDFjNmJmYjM5NzFjNzUy
MGI4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAo
cmVzdG9yZS1pbmRleCAwKSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChm
aWxsLWNvbG9yICNDODAwMDApKQorICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2Ut
dGhpY2tuZXNzIDEuMDApCisgIChmaWxsLWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9y
ZS10cmFuc2Zvcm1zIDEpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1
NXg1MCkKICAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387276</attachid>
            <date>2020-01-09 14:52:01 -0800</date>
            <delta_ts>2020-01-09 15:08:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200109145200.patch</filename>
            <type>text/plain</type>
            <size>464525</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBjNDEwNjY3ZTM1Nzhm
NDY3NmFlZDcyZmJiNTRmMThiODJkODhlNC4uNDNmZDZmMmUzYjAyMGFjZGExNmYzMGI1NDYxMzAy
OThkMmU3MDY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1OCBAQAorMjAyMC0wMS0wOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworCisg
ICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNoeSBmb3IgSW1hZ2VCdWZmZXI6CisKKyAg
ICAgICAgSW1hZ2VCdWZmZXIKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgIHRlbXBsYXRl
PEJhY2tlbmRUeXBlPgorICAgICAgICAgICAgKy0gUGh5c2ljYWxJbWFnZUJ1ZmZlciAgICAgIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCAgICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFj
a2VuZFR5cGU+ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgICAgICAgKy0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciAtLS0tLSsgICBSZW1vdGVJbWFn
ZUJ1ZmZlciAtLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAg
ICAgICAgfCAgICAgICB8ICB0ZW1wbGF0ZTxCYWNrZW5kVHlwZT4gICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICArLSBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyIC0rICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSAtKworICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5IC0tLS0tLS0tLS0tLS0tKworCisKKyAgICAgICAgVGhpcyBpcyB0aGUgY2xhc3MgaGll
cmFyY2h5IGZvciBJbWFnZUJ1ZmZlckJhY2tlbmQ6CisKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQK
KyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAgICB8ICAgICAgIHxfXyBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAgICAgICAgICAgIHwgICAgICAgfAorICAg
ICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAg
ICAgICAgICB8X18gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHxfXyBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAgIEFzIGFuIGV4YW1wbGUsIGlmIEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUyBpcyBlbmFibGVkLCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkKKyAgICAg
ICAgd2lsbCBjcmVhdGUgdGhlc2UgSW1hZ2VCdWZmZXJzIGZvciBVU0UoQ0cpIHBsYXRmb3Jtcy4K
KworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAgICAgUGh5
c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAg
ICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRl
ZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJ
bWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250
ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJp
dG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVD
b21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRv
THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50
ZXJuYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNp
bmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvcHlGdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3Jt
VGV4dHVyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNh
bEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVu
c3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9k
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGls
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhU
aWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0xheWVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhaXJvOjpkcmF3U2hhZG93SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmZp
bGxTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRv
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0
b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBp
eGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29w
eU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0ZXNQZXJS
b3cgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VUSSk6Cisg
ICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAgICAgICAo
Tmljb3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3Vs
YXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisKIDIwMjAt
MDEtMDkgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW90
ZVZpZGVvU2FtcGxlIHNob3VsZCBiZSBhYmxlIHRvIHN1cHBvcnQgY2FudmFzIHZpZGVvIHNhbXBs
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMzIzZTViYjA2NDU1NDlmNzQwODI1MWVmNzBiNjViZjc1ZjQ2NjEwOS4u
NDM2ZDIzODFkZWE0MTYxYzIzZGE5ZDI3NmQ3MDc1NjQ1NTc0ZGU2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAyMC0wMS0wOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0
OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNz
YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmguCisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAgICAqIEdQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VS
ZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Ondh
aXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2Vz
LmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
RGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAx
LTA5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0
VGVzdFJ1bm5lciBsZWFrcyBvYmplY3RzIGluIGEgdG9wLWxldmVsIGF1dG9yZWxlYXNlUG9vbCB0
aGF0J3MgbmV2ZXIgY2xlYXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDgxYjYw
N2U0Yzc2OWEwZjE1OTRjYmE1YWE3ZjU0ZGQzNWU3MGNjOGIuLmVmOGMyYzZlZmYxY2VmZDViOTU4
MzM2MjJmZWVlYTUxZGNiMjYzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMC0wMS0wOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51
Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIw
LTAxLTA4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlIGJpbmFyeSBzaXplIGJ5IHB1cmdpbmcgQysrIHR5cGUgaW5mb3JtYXRpb24gaW4gT2JqZWN0
aXZlLUMgZmllbGRzIGFuZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3
ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5M2I5OTY0ZTc3Li45OTM3MGJiNGI3YjgzMTU1N2YzNjA4
N2EyMmEzOGYxM2NkOWJhZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
YW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0
Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250
cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIu
aApAQCAtMTA3Myw3ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1N
ZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRU
cmFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZp
ZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2Zi
NmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAK
QEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6
OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1
dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcElt
YWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsg
bnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5
NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2Qx
NjkxOTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQxMTIxNTU3YWU2ZjM1ZGI5YWQ1
ZjRjMWU4YWNjY2EwODY2M2U2ZmIuLjdhMjA5YTg2N2QzZTFhMTQwZGIyMDM0NDVlZDNhZGVlMjc2
ODhlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
aW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9y
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFk
NjZlZTcxMjM0N2MxNjZiNS4uNGYwM2VjMjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2Zj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VT
b3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVl
NGJiOTQzMWFlY2I0YmNjYzI4YmQyLi45N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFl
NTJkZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJl
ZnJlc2hNb25pdG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0
aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VH
dGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJv
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDZlMjhiNTdkYzc0NGM5ODJlYWU3MTAxYTYyMmJiMTc5MGJjOWZiNzIuLmRjMTUz
NjBiZmE1ZDg1Mjc2YTA3NWM0NjFjZjZlOGFkYTVmNjZkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBA
QAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2Mjky
NTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJ
CTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkw
Mjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4
QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQky
MkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0Fs
dEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVt
ZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
SXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQu
aCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5
MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAg
LTIxMzQsMTAgKzIxMzIsMjEgQEAKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxs
KSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyog
U1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYw
MEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVy
dHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJF
NDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIz
MEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjND
MTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8q
IFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1
NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAv
KiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxl
bmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJ
CTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRl
Q2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JF
RUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEy
M0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1h
Z2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYy
M0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4
MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVz
c2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAg
LTY1NDEsOSArNjU1MCw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAy
OTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0
YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1
QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdl
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMSw4ICs5
NjA3LDExIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVj
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1h
dGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkz
NkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91
Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5
MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg7IHBhdGggPSAuLi9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
WFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
MjMsNyArOTYzMiwyMCBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhU
c1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8q
IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkz
RTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIz
QUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdC
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAv
KiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUx
OCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjg3
LDcgKzEyNzA5LDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5
MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTY2ODYsNiArMTY3MDcsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZC
Q0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlC
MDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkND
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJD
RDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODg1
LDYgKzI0OTA3LDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1
MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYy
Qjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjQ4OTQsOSArMjQ5MTcsMTIgQEAKIAkJCQk5
MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2
RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJ
CQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVy
Q0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRh
dGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNB
QUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5OTIsNiArMjUwMTgsNyBAQAogCQkJCTRCN0FFNDkyMjE3
N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1
QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2
OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2
QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0
MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUND
MTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywK
QEAgLTI1MDgzLDcgKzI1MTEwLDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyog
SW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyog
SW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVj
b2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rl
ci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAq
LywKQEAgLTI1MTQwLDYgKzI1MTY4LDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcg
LyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQ
YXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5o
ICovLAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVy
LmggKi8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5o
ICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1U
ZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ5LDYgKzI1MTc5LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1
NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYy
IC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4
RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdE
NDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3
RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3
RjkgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAv
KiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJv
dW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0Js
dXIuY3BwICovLApAQCAtMjg5OTAsNiArMjkwMjMsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3Qzcw
MDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQw
QzQwNjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAw
RDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Uw
OEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2ODQsNiArMjk3MTgsOCBAQAog
CQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIz
QzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJl
Y29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyog
RGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI5Miw4ICszMDMyOCwx
MCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAv
KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcw
MEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIz
NUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBF
NjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQy
NTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250
cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzYzLDYgKzMxODAxLDcgQEAK
IAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNX
YXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFD
MjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVy
ZUluUGljdHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMw
MDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMx
NzgyLDYgKzMxODIxLDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZv
cm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMw
MDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1
QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0Ex
NiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4
MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTksNiAr
MzE5OTksOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlcklt
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlG
NiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBk
YXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUz
MDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXgg
NjRkZmYyZDk4NGVmNzJkZDllYmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0ZTQ5MGFiNGQ4MWJk
NmZmMTI4ZTI1YTc3Njc0MWQ5ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAg
ICAgIEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAg
IGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAg
ICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7
CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRl
QXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
SW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwg
bG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0
byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNf
Y2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJp
dG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXgg
ZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2Mx
MTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0
ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0
U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBG
SVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJl
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4
YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyAr
OTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAg
ICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxl
cmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFn
ZSgpIGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAg
IG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVy
LT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9j
b3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5n
ZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRl
eCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgx
ODAzM2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNp
emUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNr
LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29u
c3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJl
cGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAg
Ly8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIg
Z2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3Vz
ZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlz
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigp
ICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlM
aXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5k
aXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBT
dHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlM
aXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFz
VGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250
ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkp
CisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxh
eUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4
NSwxMSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVy
KCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNp
emUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5k
b3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBk
b2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAor
ICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBv
biBjYW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxh
eUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJh
d2luZ0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZv
ciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9
IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2Vz
UmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUo
c2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9k
ZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAg
IHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2Rl
OjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7Cisg
ICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlm
IChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVy
KCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0
ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0
aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0
NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4
YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyAr
MTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAK
LSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9u
YWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApp
bmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThm
ZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0
bWFwLmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJp
dG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdh
YmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNm
ZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1h
cD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
KQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1
dG8gYnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAt
MjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigp
IGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxl
cmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1
Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0
MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJl
Y3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZm
CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkK
IHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNB
Y2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZm
ZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRl
cm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVy
bjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBl
YXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29u
dGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQp
OworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9F
bGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01v
ZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXko
Ym9vbCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92
ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3Bs
YXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1
cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1T
dHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRp
c3BsYXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICgh
ZGlzcGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0
LT5hc1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0
YWNrKCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNyZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQg
c3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRh
KEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOwor
ICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5
LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZs
b2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAog
ewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBj
YW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2
LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkp
OwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5
dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYg
KCFieXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAg
ICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBk
YXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAz
LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwg
ZGlydHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpM
b2dpY2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7
CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxv
YXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1
ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
SW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3Qp
OwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlm
IChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJj
ZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZl
cjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgo
KSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdo
dCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0p
OworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEu
aGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5
c3RlbSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgK
aW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFm
NTAwZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAt
MjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQg
c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxp
c3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVw
bGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQog
ICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQ
cm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHBy
b3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0
ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJ
bWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBz
eSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFn
ZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURh
dGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQg
c2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZs
b2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVy
YXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdk
OGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThj
NDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
OwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFj
Y2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0
aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0
bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEw
YWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJk
YTdhYmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2Uo
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAg
ICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0Nv
bnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9I
ZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVU
b0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Cisg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQo
KSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAog
ICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkg
ewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1h
dCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJl
KCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9y
bWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5m
byh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAt
PmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0
Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAg
ICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6Oklt
YWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICBy
ZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQK
ICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQo
dGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVs
KSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9y
bVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50
ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFz
LT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUg
U1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdl
KHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9u
dENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01T
b3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpA
QCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdl
KGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKElt
YWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0
Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxS
VUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBG
SVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5
IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAw
Y2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1
YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBS
ZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBU
aGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3Ip
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEz
MDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRh
ODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENo
cm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRk
ZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5k
KQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxh
dGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2
OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJh
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JI
aWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNr
ZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAg
dm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJp
dmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmll
d3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZh
ZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIK
ICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJT
ZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgog
CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVu
ZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3Mg
bnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNz
TGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNo
b3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUx
Li5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYg
ZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWlu
dFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNj
YWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2Fs
ZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAt
aW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25z
b2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3Bw
CmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUx
ZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNp
emUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNp
emUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFn
ZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBz
b3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFn
ZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
aW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNTVhNzAwNWU0
Mjg1YWI0NzdmOTM5YmU4Y2U2YWVhYjU2MjA2ZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fp
cm8uY21ha2UKQEAgLTEzLDcgKzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRp
b25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZi
MGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93
X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3Mg
SG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAg
IHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0
ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAg
LTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dAppbmRleCA0MjFkZmJkOTU3NTRjNDYyNzU3Yjc4ZGJmYTQxMDI1NDMyYWYwYjdkLi5kMjNi
YjAyM2U3ZDc4NDBhZWJhYTQxNGY5OWYwYmMwYzFmMmNkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QYXRoQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2Fl
Zjg1NDFkZWUwNjJiZmUwNTQxNmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4
X3QgeworICAgIFByZW11bHRpcGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZkNWJh
MjAwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
Y2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6
dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJhY2tl
bmQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1
ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdD
b250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKwor
ICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlzaWNh
bEltYWdlQnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKaW5kZXggZjU4NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4u
MzViZDU4YzNkMTJmZjg0YzBlNjY0MmY4MTgyNzA5OWNlODM3ZTI4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MCw3
ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQo
KSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9
CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFl
MDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3NGRk
Mzc0ZWVhMWQ0Mjg0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5k
ZXggY2VlYTFkYTQwZWIzMmZmNzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNiZTRh
YzZiODg0MzY0YzU1NDM5N2Y3ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTEyMiwxNyArMTIzLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFs
aWduCiB9OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAg
VW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9j
YXRpb24gcmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUu
Ci0gICAgQWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biB7Ci0gICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmlu
ZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNv
cmU6OkJsZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUp
OwogYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUm
KTsKQEAgLTE0Myw3ICsxMzMsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRS
dWxlKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IGMwMTI2MzcwY2I4NjU5
MjdhMzJiZjExZjYxNDg2ZDcxYWY3YjQ3NTguLjRlMmJlNzFjNzQxYzU1ZjU2YzBhZDA0NmE3OTdl
NTBhMDk3MTg4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7
Ci1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICog
TWF4Q2xhbXBlZExlbmd0aDsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6
OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
KTsKK30KIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6
U1JHQiwgY29udGV4dCk7Cit9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICgh
c3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxl
IGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBz
dWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJp
bmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKKworc3Rh
dGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0IGZs
b2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7
CiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKIHsKQEAgLTEwNSw5NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVj
dC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShD
RykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0
YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNr
ZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKSkKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25T
aXplKEZsb2F0U2l6ZSBzaXplKSBjb25zdAotewotICAgIHJldHVybiBzaXplOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09
IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4g
bGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNw
YWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdi
TFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5Owot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9y
ID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAg
ICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2Ug
aWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMg
Y29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29s
b3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cp
Ci0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFz
aygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6
ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
bHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxl
bmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8
IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBh
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEg
PSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAy
NTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEp
OwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5j
ZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdp
dGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJp
Y0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9y
bUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwg
Ym9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewot
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUg
Y29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAg
ICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBh
bmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAog
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpAQCAtMjA0LDYzICsxMjUsMjcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QKIAogICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAKLSAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEs
IGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywg
LXJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29t
cGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3Bh
Y2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNw
YWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRo
ZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNp
emUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUo
c2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFu
c2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlv
biB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNp
emUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXI7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoY29udGV4
dC5zY2FsZUZhY3RvcigpLCB0aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0
dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNpZiAhVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5
Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZv
a2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJl
ZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBw
b2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICog
aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50
b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmco
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVy
biAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRl
eCAzYmRlZTRlZTAwZWQxN2FlMzQzYjJmNmE4ZGRkMDA5Mzg5YzJlNmJmLi5jNjBiNzVkNGZiZmJh
NWQyYmQ0NTBiMTNhNzUzMTMwZmM2YmNjYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE3MCArMjcsODEg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2luY2x1
ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1w
ZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNs
YXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkg
ewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRv
bid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1
ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNlcnZl
UmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsKK25hbWVzcGFjZSBEaXNwbGF5TGlz
dCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9S
VCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBj
bGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50
ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNl
OjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBD
cmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29w
eSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgLy8gQ3JlYXRlIGFuIGlt
YWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVz
b2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNv
bnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKLQotICAg
IC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsg
fQotCi0gICAgRmxvYXRTaXplIHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKSBjb25z
dDsKLQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1
dGlvblNjYWxlOyB9CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBp
bmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9y
IGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShj
b25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24g
dGhlIGZhc3RlciBjb3B5SW1hZ2UgTW9kZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlm
IGl0IHN1cHBvcnRzIHRoZSBEb250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9y
IHJldHVybiBDb3B5QmFja2luZ1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFj
a2luZ1N0b3JlQ29weSBmYXN0Q29weUltYWdlTW9kZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgZW51bSBDb29yZGluYXRlU3lz
dGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0gfTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUq
IHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KIAotICAgIHZvaWQgcHV0Qnl0ZUFy
cmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZm
ZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRy
YW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKICAgICAKLSAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1v
cnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFs
TWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQot
I2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9p
ZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNl
LCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRl
ZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHND
bGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMg
RmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9h
dFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0g
ICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8v
IFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXpl
KCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3Vs
dC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Pik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1h
cD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRh
dGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2lj
YWwpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29s
LCBib29sKSBjb25zdCA9IDA7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7CiAKLSAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFz
aygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xh
c3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1h
Z2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXpl
IG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0
aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nl
c3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBr
bm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsK
LSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RX
aW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Kiwg
Ym9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCi0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwo
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzJiZGY2
Yzk2NGQ1OTVlODQyYTNiNjFmZTYzYjc5NTVkYjU5MTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9sb2dp
Y2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFsU2l6ZSkK
KyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdo
dCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4
cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXpl
IGludGVybmFsU2l6ZSA9IEludFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJS
b3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxz
aXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYg
KG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAg
ICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1f
aW50ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAg
IHJldHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5
LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4
X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYg
KCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBs
dW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlh
IC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBs
dW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1
bWluYW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQor
CitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0
SW1hZ2VEYXRhQXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENs
aXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsK
KyAgICBhcmVhICo9IHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5h
bFNpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBz
cmNSZWN0KTsKKyAgICBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBw
ZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRYKC1zcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAg
ICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgp
ICE9IHNyY1JlY3Quc2l6ZSgpKQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQ
dXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBl
ZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsg
SW50UG9pbnQ6Onplcm8oKSwgc3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJz
ZWN0aW9uKGRhdGFSZWN0LCBzcmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RD
bGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChz
cmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3Jj
UmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Qu
c2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJl
Y3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3Qu
aW50ZXJzZWN0KGJ1ZmZlclJlY3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0
UmVjdC5zaXplKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhl
bCkKK3sKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsx
XTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBz
cmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9V
bnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhl
bCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8
fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxp
ZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVz
dENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1
NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAv
IGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxw
aGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChz
cmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQo
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50
OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUp
IHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3Jt
YXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1h
dCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEu
CisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1Owor
ICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAg
ICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3Rvciko
Q29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3Rh
dGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAgQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAor
ICAgIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3Qg
Ynl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
c2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0
ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0
LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
c3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNB
bHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRl
c3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsK
KyAgICAgICAgY29weUltYWdlUGl4ZWxzU2xvdzxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3c8
Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNvcHlJbWFn
ZVBpeGVsc1Nsb3c8Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg1ODQwZmI0OWEzMmM1NWIzNzM4ZGQ3NjU4OTUxNWFjYmRmZWFm
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xh
c3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9y
ZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5Lgor
ICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0
aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7
CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4
X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGluYXRlU3lz
dGVtIDogdWludDhfdCB7CisgICAgTG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307CisKK2Ns
YXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW1hZ2VCdWZm
ZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJ
bnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9Cisg
ICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2Nh
bGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
U3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1l
bW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2Fm
ZUdldCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1
cm4gMDsgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlLCBDb2xvclNwYWNlKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyBy
ZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29y
ZGluYXRlU3lzdGVtKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJ
bWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0
KSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3Jj
Um93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxT
aXplOworICAgIEludFNpemUgbV9pbnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9u
U2NhbGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZi
ZDEyYWJlNTQzYzNmMjAzNGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2
OTRkMzgxYWNiYzkyNjBkYmI0N2U5ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlz
aWNhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mPEltYWdlQnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAg
IGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6
Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBi
YWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAg
ICB9CisKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVh
bCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5n
ZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQt
PmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkg
PyBlbnN1cmVCYWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3Vy
ZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsg
fQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUo
KTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAx
OyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVu
c3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAg
IHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1
cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsg
fQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5
QmVoYXZpb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tl
bmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFj
ZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJM
KG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFj
a2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0
YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRG
b3JtYXQsIHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29u
c3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3Jk
aW5hdGVTeXN0ZW06OkxvZ2ljYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7
CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBk
YXRhU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlw
bHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmExMTU5ZmZlOGRkMjBhMTdiZTMyMDBi
N2FlMTkxZDU5M2U4NDI3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAo
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisj
ZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJEKQor
dXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIFVT
RShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShDQUlS
TykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIEFjY2VsZXJhdGVkUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDsKKyNlbHNlCit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0g
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFn
ZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1
ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRm
b3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY0ZjAwODYxODVjZjIyODViYmYyNTU4MmY5OTcyMzlmNmU5ZDdlZTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdC
YWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisK
K1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tl
bmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdC
YWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdp
bmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRv
dy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0
KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0
ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3Rl
OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQ
bGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
aW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NzFiOTJkNTg0ZmVlOGY0YWY3YTg1OTY0ZWFhYmMxY2VkNTAxNzMxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3Mg
SW50U2l6ZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUo
KTsKKworICAgIHN0YXRpYyBSZW5kZXJpbmdCYWNrZW5kJiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgCisgICAgdmlydHVhbCB+UmVuZGVy
aW5nQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01v
ZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iY2MzOTg4ZmQ2NDNkYTcwNDQxZTUzMzhiMTZhMTFiMDU0NjMxMzg0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIHsKKyAgICBBY2NlbGVyYXRlZCwKKyAgICBVbmFj
Y2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3Qs
CisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAKaW5kZXggNDA0MWIzZjgxMDc2NzhjNTZhY2RiMGM1MzNhMDk4NmY3ZTY0NTU5Ni4u
NjEyZjllOWQyMmQ2NzFmNjhkNTY1ZjEyNDQ5NGVjMzMyZDVmOTQ1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTgzLDcgKzgzLDcg
QEAgcHVibGljOgogICAgICAgICBjbGVhclNjcmF0Y2hCdWZmZXIoKTsKIAogICAgICAgICAvLyBT
aGFkb3dCbHVyIGlzIG5vdCB1c2VkIHdpdGggYWNjZWxlcmF0ZWQgZHJhd2luZywgc28gaXQncyBP
SyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShyb3VuZGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogICAgIH0KIApAQCAtNTkzLDcgKzU5Myw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTYyMSw3ICs2MjEs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNl
dFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRS
ZWN0JiBmdWxsUmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaG9sZVJlY3QsIGNvbnN0IExh
eWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZl
ckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6
ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02ODUsNyArNjg1LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnMKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0
U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obGF5
ZXJJbWFnZVByb3BlcnRpZXMpOwotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxh
eWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1h
Z2VCdWZmZXIuZ2V0KCk7CiAjZW5kaWYKIApAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uCiAjaWYgVVNFKENHKQogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNo
QnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxz
ZQotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxh
dGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1hZ2VCdWZmZXIuZ2V0KCk7CiAj
ZW5kaWYKIApAQCAtODg0LDEyICs4ODQsMTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hhZG93
QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGEKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0
ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJsdXJMYXll
ckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRo
KCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJl
Y3QsIHsgfSk7CisgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdC5zaXplKCksIGJsdXJS
ZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1h
Z2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKQEAgLTkx
Miw3ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiAgICAgYWRqdXN0Qmx1clJh
ZGl1cyh0cmFuc2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFVu
YWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggNjJjNzlmMTNhMWM3MjRkZGYzN2E5
NDY0ZjgzMmNkNmY3NzllMDdkOC4uODBhMDI1ZThlNmNhODhhNmI0N2ZjN2ZkYzVlNWM1ZTI1MGY5
ZmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgZW51bSBQYXRo
RHJhd2luZ1N0eWxlIHsKIAogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRm
b3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdl
LCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNp
emUsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJm
YWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9
IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAg
ICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9h
dFJlY3Qocm91bmRlZEludFBvaW50KGxheWVyT3JpZ2luKSwgbGF5ZXJTaXplKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgbGF5ZXJTaXplKSwgeyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVP
cGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAg
fQogfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZl
cihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1CiAvLyBGSVhN
RTogVGhpcyBpcyBtb3N0bHkgc2FtZSBhcyBkcmF3U2hhZG93TGF5ZXJCdWZmZXIsIHNvIHdlIHNo
b3VsZCBtZXJnZSB0d28uCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93SW1hZ2UoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgU2hh
ZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllcklt
YWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRp
dmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmds
b2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xOTEsNyArMTkxLDcgQEAg
c3RhdGljIHZvaWQgZmlsbFNoYWRvd0J1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBzYXZlKHBsYXRmb3JtQ29udGV4dCk7CiAK
LSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKQorICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgc3Vy
ZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2luLCBleHBhbmRlZEludFNpemUobGF5ZXJT
aXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCmluZGV4IDliMDI1ZTE0NzY3MzUyZTE0YWQ0OGY4NjdiMDQ1ODVlZTgwMzQxMzQu
LjRlMWJmMmI0MzY3ZjM0MzU5ZDg1NGViNzhjMjIwMmRmNTdiMjc0NzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZQogICAgIH0KIAogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAg
ICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5n
ZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cAppbmRleCA5Yzc2ZTI5MTJmODFmYzk0YWRiNWM0ODQ0NTI3MTM0NjBkY2ZiMjhmLi4yOWEwZWM0
OTk0ZjM2MTVkODdiMWJiNGUxZTMzZDc2ODgwN2NiYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5jcHAKQEAgLTQxMSw3ICs0MTEsNyBAQCBJbnRSZWN0IEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1h
Z2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3Bs
YXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk2NTdlM2IyOTllZDZl
YjRjNWNjMzVkYjk1MzI0NTc4Nzc3NWI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzgxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLSNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0
ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPGNhaXJv
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUg
IkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlm
Ci0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxl
cG94eS9nbC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
LSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2Vu
ZGlmCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlQnVmZmVyRGF0YTo6
SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KDApCi0gICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgICwgbV9j
b21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0gICAgLCBtX3RleHR1cmUoMCkKLSNlbmRpZgot
ewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIG1fbmljb3NpYUxheWVyID0gTmlj
b3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKLSNlbHNlCi0gICAgICAgIG1fcGxhdGZv
cm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19Ci0KLUltYWdlQnVmZmVyRGF0YTo6fkltYWdl
QnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIEdMQ29udGV4dCogcHJl
dmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCkt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0
dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGlmIChwcmV2aW91
c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQo
KTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19BTElHTk1FTlQsIDEpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwg
R0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2Uo
KSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKLSAgICBjYWlyb19z
ZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7
Ci19Ci0KLSNpZiAhVVNFKE5JQ09TSUEpCi1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gSW1hZ2VCdWZmZXJEYXRhOjpwcm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVm
ZmVyRGF0YTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgR0xDb250ZXh0KiBwcmV2aW91
c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLQotICAgIGlmICghbV9jb21w
b3NpdG9yVGV4dHVyZSkgewotICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAg
ICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgICAgICAgICBw
cm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkQmxlbmQsIEdMX1JHQkEpKTsKLSAgICAgICAgICAgIH07Ci0jaWYgVVNFKE5JQ09TSUEpCi0g
ICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0g
ICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhl
IGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNh
c2VzCi0gICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5k
ZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAot
ICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgotICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAg
ICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7Ci0gICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOwotCi0gICAg
aWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLSNlbmRpZgotCi12b2lkIGNsZWFyU3VyZmFjZShj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOwot
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwot
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNy
ZWF0ZUNhaXJvR0xTdXJmYWNlKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0g
ICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBXZSBtdXN0IGdlbmVy
YXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkg
Zm9yIGV4dHJhY3RpbmcgaXQKLSAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCi0g
ICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLQotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0KLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBs
ZXZlbCAqLywgR0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCAvKiBi
b3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgY2Fpcm9fZGV2
aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7Ci0KLSAgICAvLyBUaHJlYWQt
YXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMu
Ci0gICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7Ci0K
LSAgICBtX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdGV4dHVyZSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIGNsZWFyU3VyZmFjZShtX3N1cmZhY2Uu
Z2V0KCkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fp
cm9TdXJmYWNlQ29weShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgYXV0byBjb3B5
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0Iz
MiwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSkpOwotCi0gICAgYXV0
byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFp
bnQoY3IuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0g
Q0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0gICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQoc3VyZmFjZSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKLSAgICAgICAgcmV0
dXJuIHN1cmZhY2U7Ci0KLSAgICByZXR1cm4gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlKTsKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAg
ICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1
cyhzdXJmYWNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLQotICAgIGF1dG8g
cGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKLSAg
ICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KHN1cmZhY2UuZ2V0KCkpICoKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLU5hdGl2ZUlt
YWdlUHRyIEltYWdlQnVmZmVyOjpuYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGF0YS5tX3N1cmZhY2UuZ2V0KCk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vz
cykKLSAgICA6IG1fZGF0YShJbnRTaXplKHNpemUpLCByZW5kZXJpbmdNb2RlKQotICAgICwgbV9s
b2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZXJy
b3IuCi0KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICog
c2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihtX3Jlc29sdXRp
b25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRv
bWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2Nh
bGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQpOwotICAgIG1fZGF0YS5tX3NpemUgPSBtX3NpemU7Ci0KLSAgICBpZiAobV9zaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZCkgewotICAg
ICAgICBtX2RhdGEuY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLSAgICAgICAgaWYgKCFtX2RhdGEu
bV9zdXJmYWNlIHx8IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkp
ICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyaW5n
TW9kZSA9IFVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0
byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmlu
Z01vZGUgPT0gVW5hY2NlbGVyYXRlZCkKLSNlbHNlCi0gICAgQVNTRVJUKG1fZGF0YS5tX3JlbmRl
cmluZ01vZGUgIT0gQWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0gICAgewotICAgICAgICBzdGF0aWMg
Y2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7Ci0KLSAgICAgICAgaW50IHN0
cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIs
IG1fc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgdm9pZCogc3VyZmFjZURhdGE7Ci0gICAgICAgIGlm
ICghdHJ5RmFzdFplcm9lZE1hbGxvYyhtX3NpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVl
KHN1cmZhY2VEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEubV9z
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7Ci0gICAgICAgIGNh
aXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCAmc19zdXJm
YWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsgZmFzdEZyZWUoZGF0YSk7
IH0pOwotICAgIH0KLQotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOyAgLy8g
Y3JlYXRlIHdpbGwgbm90aWNlIHdlIGRpZG4ndCBzZXQgbV9pbml0aWFsaXplZCBhbmQgZmFpbC4K
LQotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCks
IG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkp
OwotICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9k
YXRhLm1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0g
ICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6
ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1h
Z2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLm1fY29udGV4
dDsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKQotewotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Is
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICAvLyBjb3B5Q2Fpcm9JbWFnZVN1cmZh
Y2UgaW5oZXJpdHMgc3VyZmFjZSdzIGRldmljZSBzY2FsZSBmYWN0b3IuCi0gICAgaWYgKGNvcHlC
ZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gQml0bWFwSW1hZ2U6
OmNyZWF0ZShjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwot
Ci0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBv
biBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+KG1fZGF0YS5tX3N1cmZhY2UpKTsKLX0KLQotQmFja2luZ1N0b3JlQ29weSBJ
bWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlQnVm
ZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChkZXN0aW5h
dGlvbkNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAgICAgICBpZiAoJmRlc3RpbmF0
aW9uQ29udGV4dCA9PSAmY29udGV4dCgpKQotICAgICAgICAgICAgc3VyZmFjZSA9IGNhaXJvU3Vy
ZmFjZUNvcHkoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RpbmF0aW9uQ29u
dGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgY29uc3QgYXV0
byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsK
LSAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRp
b25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGNvbnRl
eHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBz
dXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RSZWN0LCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUgY29sb3Ig
c3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRh
U3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgp
KTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdo
dCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRy
PHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhl
bCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJl
bXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihs
b29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAgICAgKnBp
eGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX2RhdGEubV9z
dXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUu
aGVpZ2h0KCkpOwotfQotCi1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjb3B5U3VyZmFjZVRvSW1h
Z2VBbmRBZGp1c3RSZWN0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBjYWlyb19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlwZSA9IGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUoc3VyZmFjZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW1hZ2Us
IHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRhdGE7Ci0gICAgLy8gb3RoZXJ3
aXNlIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBzdXJmYWNlIGltYWdlCi0gICAgaWYgKHN1cmZhY2VU
eXBlID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7
Ci0gICAgCi0gICAgcmVjdC5zZXRYKDApOwotICAgIHJlY3Quc2V0WSgwKTsKLSAgICByZXR1cm4g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHByZW11bHRpcGxpZWQ+Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsUmVj
dCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIC8v
IFRoZSBhcmVhIGNhbiBvdmVyZmxvdyBpZiB0aGUgcmVjdCBpcyB0b28gYmlnLgotICAgIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qu
d2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0g
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQo
KSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
Q2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keCA9IDA7
Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQocmVjdC54KCksIHJlY3Qud2lkdGgoKSwgZW5keCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUg
YWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keSA9IDA7Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQo
cmVjdC55KCksIHJlY3QuaGVpZ2h0KCksIGVuZHkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHggPiBzaXplLndp
ZHRoKCkgfHwgZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwo
KTsKLQotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAg
ICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAg
b3JpZ2lueCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCi0gICAg
ICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3Jp
Z2lueDsKLQotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsK
LSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAg
ICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQot
ICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBv
cmlnaW55OwotCi0gICAgLy8gTm90aGluZyB3aWxsIGJlIGNvcGllZCwgc28ganVzdCByZXR1cm4g
dGhlIHJlc3VsdC4KLSAgICBpZiAobnVtQ29sdW1ucyA8PSAwIHx8IG51bVJvd3MgPD0gMCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1
cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVk
IHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhp
cyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChvcmlnaW54LCBvcmlnaW55LCBu
dW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1
cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KGRhdGEubV9zdXJmYWNlLmdl
dCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3Vy
ZmFjZS5nZXQoKSwgcmVzb2x1dGlvblNjYWxlLCByZXNvbHV0aW9uU2NhbGUpOwotICAgIG9yaWdp
bnggPSBpbWFnZVJlY3QueCgpOwotICAgIG9yaWdpbnkgPSBpbWFnZVJlY3QueSgpOwotICAgIGlm
IChpbWFnZVN1cmZhY2UgIT0gZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhp
cyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLgotICAgICAgICBJbnRSZWN0IGxvZ2ljYWxBcmVhID0gaW50ZXJzZWN0aW9uKGxvZ2ljYWxS
ZWN0LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdo
dCgpKSk7Ci0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIGltYWdlU3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgtbG9naWNhbEFyZWEueCgp
LCAtbG9naWNhbEFyZWEueSgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsQXJlYS5zaXpl
KCkpLCBJbnRTaXplKCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VT
dXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRh
KCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFn
ZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0
LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0
eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHgg
KyBvcmlnaW54OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZy
b21QcmVtdWx0aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlv
biBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSAoKnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCByZWQgPSAoKnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWdu
ZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11
bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3Jl
ZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1
ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
bHVlOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9
Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9n
aWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNv
bHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJ
bWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9
PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9u
U2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFs
dWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5
RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewot
ICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lz
dGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0g
YmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3Jl
UmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6
OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSog
cGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29v
cmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0
b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJu
IGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNr
aW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2lu
Z1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3Vy
Y2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9p
bnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VS
ZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChk
ZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFT
U0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291
cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VS
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291
cmNlUmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgp
ICsgbG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBB
U1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAg
aW50IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7
Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291
cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0g
ICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1
bW5zID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNj
YWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkg
KyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERl
c3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49
IDApOwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9y
aWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZ
KCkpOwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNl
UmVjdC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkg
KyBsb2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhl
aWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNh
bE51bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXpl
IG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3Rl
bS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZl
ZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChk
ZXN0eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZp
Y2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VS
ZWN0LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBj
b25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRl
c1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsg
Kyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNp
Z25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4Owot
Ci0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZy
b21Db2xvcigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBw
aXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQp
IHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3Vy
ZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBj
YWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9n
aWNhbERlc3R4LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93
cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsK
LSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90
aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgp
LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNp
emUobG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxE
ZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKLSAgICB9Ci19Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQotc3RhdGljIGNhaXJvX3N0YXR1
c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0
b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKLSAgICAgICAg
cmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICByZXR1cm4gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0KQot
ewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsg
Ly8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotCi0gICAgcmV0dXJuIGNh
aXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0
cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29k
ZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGVuY29kZWRJbWFn
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFy
PiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNv
ZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlOwotICAgIGlmICghaW1hZ2Ug
fHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29kZWRJbWFnZSkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZW5jb2RlZEltYWdlOwotfQotCi0jZW5kaWYKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmICFVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQotewotICAgIEFT
U0VSVChtX3RleHR1cmUpOwotCi0gICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNv
bnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4K
LSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKLSAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgc3RhdGljX2Nh
c3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJl
LCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX3NpemUsIHRhcmdldFJlY3QsIG1hdHJp
eCwgb3BhY2l0eSk7Ci19Ci0jZW5kaWYKLQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiBtX2RhdGEubV9uaWNvc2lh
TGF5ZXIuZ2V0KCk7Ci0jZWxzZQotICAgIGlmIChtX2RhdGEubV90ZXh0dXJlKQotICAgICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxJbWFnZUJ1ZmZlckRhdGEqPigmbV9kYXRhKTsKLSNlbmRpZgotI2Vu
ZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUg
cmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKLSAgICBpZiAocHJlbXVsdGlw
bHlBbHBoYSB8fCBmbGlwWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2Rh
dGEubV90ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHQ0dMZW51bSBiaW5k
VGV4dHVyZVRhcmdldDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgYmluZFRleHR1cmVUYXJn
ZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+
IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOwotICAgIGNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHVpbnQzMl90IGZibzsKLSAgICBnbEdlbkZyYW1lYnVmZmVy
cygxLCAmZmJvKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsK
LSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9kYXRhLm1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCksIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVU
YXJnZXQsIDApOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAg
ICBnbEZsdXNoKCk7Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgcmV0
dXJuIHRydWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9Q
QVJBTShkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxwaGEpOwotICAgIFVOVVNFRF9QQVJB
TShmbGlwWSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODBiNTIyNDVkM2Y3Mzk0MTQ2OWEyMTc2MTE3MmY1NzA3
NjU5ODNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGls
aXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxT
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1f
c3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0
YXR1cyhtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJl
ZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkp
KTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Km1fY29udGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVz
UGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNr
aW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0g
YWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAg
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9
CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJm
YWNlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNh
aXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5n
ZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAg
ICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAg
ICAgIGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRp
dmVJbWFnZShjb3B5QmVoYXZpb3IpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2Ug
dGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcElt
YWdlOjpjcmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOworfQorCitSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwg
b3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlC
YWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJ
bWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3Jl
OjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChz
cmNDb2xvclNwYWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAg
ICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9
IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpT
UkdCKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9y
U3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNv
bG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJn
YkxVVCk7CisgICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdC
KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNl
UmdiTFVUPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29s
b3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAg
YXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAg
ICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30K
KworU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1l
VHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJh
c2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNl
NjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1h
Z2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7
CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sK
KyAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCk7CisgICAgY2Fp
cm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGE7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAgIGltYWdlRGF0YS5hcHBlbmQo
cGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgor
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwor
CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBo
YUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0
LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRl
U3lzdGVtKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7Cisg
ICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBt
X3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVj
dCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3Jj
UmVjdFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8
ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhf
dCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVy
Um93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBp
eGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29s
b3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRwdXRG
b3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0
UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFBvaW50JiwgQ29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2Fs
ZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jl
c29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3Qg
ZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwg
c3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAg
IAorICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWlu
dDhfdCogZGVzdFJvd3MgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0
OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZVNjYWxlZC53aWR0
aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBl
ZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwg
c3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RS
b3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3Jl
Y3RhbmdsZShpbWFnZVN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBk
ZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVjdC5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM4MjlhZmYzNjUyNGQwODE4YzE0MzgwM2FkNjQ4Y2QyYzNlZTk3
NTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tl
QHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFj
a2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJl
c2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBz
aW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xv
clNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBv
dmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lz
dGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IElu
dFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAg
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7
IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7
CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGNv
cHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJik7CisKKyAgICBtdXRh
YmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICBQbGF0Zm9ybUNvbnRl
eHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU5MTAwZjc0ZWEwYWVjZjEwMjFj
MDMzODQ5OWQ3MzExNmFlODQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNw
cApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgor
CisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIK
KyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxj
YWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+Cisj
ZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2Vsc2UKKyNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYKKworV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsK
Kworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1
cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9S
X0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAg
ICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhl
IHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0
cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICB1aW50
MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGds
VGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
TUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3Jl
aShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJF
XzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJu
YWxTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllU
RSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZp
Y2UoKTsKKworICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhp
dCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9h
d2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xP
Ul9BTFBIQSwgdGV4dHVyZSwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWln
aHQoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19T
VEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjbGVhclN1cmZh
Y2Uoc3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0ZXh0dXJlKQoreworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFM
YXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7CisjZWxzZQorICAgIG1f
cGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpCit7CisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBpZiAocHJldmlvdXNBY3Rp
dmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigp
IGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLmdl
dCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhpczsKKyNl
bmRpZgorICAgIHJldHVybiAwOworfQorCitib29sIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdM
T2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVy
ZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsK
KyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdD
M0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVf
MkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBiaW5k
VGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjYWlyb19zdXJm
YWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250
ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKKyAgICBjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJfdCBmYm87CisgICAgZ2xHZW5GcmFtZWJ1
ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZi
byk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1Jf
QVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xCaW5kVGV4
dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKKyAgICBnbENvcHlU
ZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1faW50ZXJuYWxTaXpl
LndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJl
KGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgMCk7CisgICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZm
Ym8pOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRv
ckJ1ZmZlcigpCit7CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVk
RGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwg
MSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2ludGVy
bmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgMCk7CisKKyAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2Uo
KSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9pbnRl
cm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NvbXBv
c2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgp
KSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9f
QU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0
aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2NvbXBvc2l0
b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKworICAgICAg
ICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgICAgIHByb3h5
LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZm
ZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXplLCBUZXh0dXJlTWFwcGVyR0w6
OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShOSUNPU0lB
KQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJU
ZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxz
ZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlm
CisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2Fw
IHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRo
ZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkg
cmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRl
bnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KKyAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7
CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVS
QVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKKwor
ICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYg
dGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VSVChtX3Rl
eHR1cmUpOworCisgICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRleHQsIHNv
IHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KKyAgICBHTENv
bnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAg
IGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKyAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgc3RhdGljX2Nhc3Q8VGV4dHVy
ZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJlLCBUZXh0dXJl
TWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX2ludGVybmFsU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4
LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOWI3
OGVhMDAxZTc4ZDBjYWI3N2I0YTAzZDcxMWY3NDM4NGY1OWNmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworI2lmIFVTRShOSUNPU0lBKQorI2luY2x1ZGUg
Ik5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgorI2Vsc2UKKyNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorI2lmIFVTRShOSUNPU0lBKQorICAg
IDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQK
KyNlbHNlCisgICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgorI2VuZGlmCisgICAgLCBwdWJsaWMg
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93Kik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQo
KTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Cisg
ICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lB
KQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQor
I2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYs
IGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9u
aWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29t
cG9zaXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisjZW5k
aWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzhjM2ZiZTUzYzRhNWMyYjAyMTNmMWI5NTFhMjU3NTc1NDZlOGYy
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBV
U0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9r
ZXlfdCBzX3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxj
dWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJu
YWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbnQgc3Ry
aWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwg
aW50ZXJuYWxTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICgh
dHJ5RmFzdFplcm9lZE1hbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZh
bHVlKHN1cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0
aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMy
LCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsK
KyAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFj
ZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVl
KGRhdGEpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2FsU2l6ZSwg
aW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFj
ZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgp
KSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qg
c3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0
KCkpOworICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9z
dXJmYWNlLmdldCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVp
Z2h0KCk7ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2ln
bmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29s
b3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3Ig
PSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9y
LmFscGhhKCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29s
b3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJr
X2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lk
dGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MjAzYWY0ZjE1MjJmMzM0MDM1
NmMwMTIxZmYxZTkxNjM1YWJkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kIDogcHVibGlj
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKElt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
LCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUp
IG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlmNzY5YzQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorKysgL2Rldi9udWxs
CkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2RlZmluZSBJbWFnZUJ1
ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXIu
aCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIuaCIK
LSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKE5JQ09T
SUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCi0j
ZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotY2xhc3MgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRhCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICA6
IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50Ci0j
ZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlmCi17Ci1wdWJs
aWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5kZXJpbmdNb2RlKTsK
LSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29u
dGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Ci0g
ICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7Ci0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQgY3JlYXRlQ2Fpcm9H
TFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNlCi0g
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZW5k
aWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMyX3QgbV9jb21wb3Np
dG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7Ci0KLSNpZiBV
U0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFM
YXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+
IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZpcnR1YWwgdm9pZCBw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJn
ZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0jZW5kaWYK
LSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIEltYWdlQnVmZmVyRGF0
YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTMyNDNiNjNjNTQ2YzcyYTc0NGZlYTExMzk3Mzk2ODgyZTMyYjdhNQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorCisjaWYg
VVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9H
VW5pcXVlUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYg
UExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlICJHZGtDYWly
b1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCitzdGF0aWMgY2Fpcm9fc3RhdHVzX3Qg
d3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVu
c2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4
X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCisgICAgICAgIHJldHVybiBD
QUlST19TVEFUVVNfV1JJVEVfRVJST1I7CisgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNT
OworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91dHB1dCkKK3sKKyAgICBB
U1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7IC8vIE9ubHkg
UE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKworICAgIHJldHVybiBjYWlyb19zdXJm
YWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rpb24sIG91dHB1dCkgPT0g
Q0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1
cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlOworICAgIGlmICgh
aW1hZ2UgfHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29kZWRJbWFnZSkpCisg
ICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGVuY29kZWRJbWFnZTsKK30KKworI2Vsc2UK
Kworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQ
dHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQoreworICAgIC8vIExpc3Qgb2Yg
c3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBk
b2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhi
dWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8t
YnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJp
bWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUg
IT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKKyAgICBpZiAodHlw
ZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hh
bm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNv
ZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sg
Zm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCisgICAgICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7CisgICAgICAgIGlmIChjYWlyb19zdXJmYWNl
X2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgeworICAgICAg
ICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAg
ICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7CisgICAgICAgICAg
ICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9f
Rk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAg
IFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdl
dCgpKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1
cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAg
ICB9CisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1Zihu
ZXdTdXJmYWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1Jl
ZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7CisgICAgaWYgKCFwaXhidWYpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsK
KyAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYg
KnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5n
OjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7CisgICAg
ICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0
cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJx
dWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UK
KyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIu
b3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIo
KSwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0
YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVmZmVyOwor
ICAgIGdzaXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5
cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGltYWdlRGF0YS5hcHBlbmQoYnVm
ZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCisjZW5k
aWYgLy8gIVBMQVRGT1JNKEdUSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNkZTMzYzdjYTA5NmNhZDg5MjI2MzczOWM3NWY5NWIyMGZlZGMwMzcKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90Kiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCmluZGV4IDQ5NmVjYTMyNGQzZTRkYTIyZmNhNTk5OThlYjVlZjVlZTczZDIwOWEuLjcyMmVl
ZmZlNmM5ZTVmZDI4NjZiZTI3Mjg3YTQ3MDIxMDBjYmZjNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAK
QEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZQogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0U2l6ZSBidWZmZXJE
ZXN0aW5hdGlvblNpemUgPSBidWZmZXIuc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShkZXN0UmVjdC5z
aXplKCkpOworICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlvblNpemUgPSBkZXN0UmVjdC5z
aXplKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYnVmZmVyLmNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMzU2ZjE5NjRkMDk1NTJiZDFhMjdmYzBkMjI4MDlkOGEzZGE2Yjc1Yi4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY1
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3Jl
R3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwv
c3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0j
aW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVh
cC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiVVRJVXRpbGl0aWVz
LmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0j
aW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VT
UEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0Iz
MiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ERUNMQVJFX0FM
TE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NB
VE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLQotc3RhdGljIEZsb2F0U2l6
ZSBzY2FsZVNpemVUb1VzZXJTcGFjZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBJbnRTaXplJiBiYWNraW5nU3RvcmVTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUp
Ci17Ci0gICAgZmxvYXQgeE1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2lu
Z1N0b3JlU2l6ZS53aWR0aCgpKSAvIGludGVybmFsU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHlN
YWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0
KCkpIC8gaW50ZXJuYWxTaXplLmhlaWdodCgpOwotICAgIHJldHVybiBGbG9hdFNpemUobG9naWNh
bFNpemUud2lkdGgoKSAqIHhNYWduaWZpY2F0aW9uLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSAqIHlN
YWduaWZpY2F0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
Y29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdl
dFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAg
ICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7
Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4
dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRH
ZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNv
bG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAg
ICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JT
cGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxl
ZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7
Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0
KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2Vz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25k
aW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNv
bnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0K
LQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNj
ZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUo
cmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSBy
ZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1
dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWls
ZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxv
YXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwg
c2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQot
ICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0
ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9IDAp
Ci0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9IG1fc2l6ZS53aWR0
aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0gbV9zaXplLmhl
aWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0gICAg
bV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVfdCwg
UmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJv
dzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIEludFNpemUgbWF4
U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0
KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4gbWF4U2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwotI2Vsc2UKLSAgICBB
U1NFUlQocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKTsKLSNlbmRpZgotCi0gICAgbV9k
YXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgRmxvYXRTaXplIHVzZXJCb3Vu
ZHMgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSh3aWR0aC51bnNhZmVHZXQoKSwg
aGVpZ2h0LnVuc2FmZUdldCgpKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNl
OjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyksIGNv
bG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNn
Q29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRv
dyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29udGV4
dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVzZXJC
b3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3VyZmFj
ZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShob3N0
V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIGFj
Y2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBi
YWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxlcmF0
ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0
cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEu
Ynl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1fZGF0
YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwg
bV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRh
LmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10g
KHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdlQnVm
ZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsKLSAg
ICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNh
ZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgp
LCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBo
aWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCkuc2Nh
bGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmljZVNj
YWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQot
Ci1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nl
c3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENHQ29s
b3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNj
ZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1G
bG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplIGRl
c3RpbmF0aW9uU2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2NhbGVTaXplVG9Vc2VyU3BhY2Uo
ZGVzdGluYXRpb25TaXplLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXplKCkp
OwotfQotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJ
bWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1h
eSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0
byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAg
IC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0
IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2Rh
dGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmlu
ZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8g
YWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkg
ZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAg
IHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50
ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXpl
X3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0
aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2Vz
cyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFj
ZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1
Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1f
ZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBj
aGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBt
X2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0K
LUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNl
KQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgp
OwotI2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IElu
dFNpemUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFn
ZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhl
aWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAg
ICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwg
Q0dSZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAg
IHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50
U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2
ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0g
Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250
ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4
LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShj
b250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRv
UmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2Fs
U2l6ZSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzY2FsZVNp
emVUb1VzZXJTcGFjZShsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXpl
KTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOwot
ICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4
dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwot
fQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmIChtX3Jlc29s
dXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRp
b246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsK
LSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVl
ZGVkKFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZl
ci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVy
LT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVm
ZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUg
PSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUo
aW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1CYWNraW5nU3Rv
cmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0gICAgcmV0dXJuIERv
bnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gaW1hZ2VC
dWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1
cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVm
ZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQotICAgIHJldHVybiBpbWFnZUJ1ZmZl
ci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSNlbmRpZgotfQotCi1S
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewot
ICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAgICBjYXNlIERvbnRDb3B5QmFj
a2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVp
Z2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xv
clNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRhLmRhdGFQcm92aWRlci5nZXQoKSwgMCwg
dHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkp
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAg
ICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbmRpZgotCi0gICAg
cmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0jaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2Rh
dGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAot
ICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAg
ICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7
Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gSU9TdXJm
YWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1v
dmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0g
ICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBiYWNraW5nU3RvcmVT
aXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLSNlbHNlCi0gICAgaW1h
Z2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
LSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQo
KSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91ciBv
d24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIEZsb2F0UmVjdCBh
ZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdl
dCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwg
b3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewot
ICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29w
eSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2luZyBpbnRvIG91ciBvd24g
YnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAgICBjb3B5LT5kcmF3UGF0
dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFj
a2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50
U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsK
LSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAg
ICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxB
cnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Qu
c2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5p
c0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSBy
ZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3Jj
UmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0
ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVk
U291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0g
c291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0
ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxl
ZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCks
IGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICAvLyBGb3JjZSBy
ZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0
aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCkuCi0gICAgLy8gU2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcg
d2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAw
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCi17Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQotICAgIHN0YXRpYyBjb25zdCBDRlN0
cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOwotI2VuZGlmCi0gICAg
cmV0dXJuIGtVVFR5cGVKUEVHOwotfQotICAgIAotc3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsK
LSAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVzZSB0aGUgQ29yZVNlcnZpY2VzIHZlcnNp
b24/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBVVElGcm9tTUlNRVR5cGUobWltZVR5
cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KLQotICAgIC8vIEZJWE1F
OiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3
YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KLSAg
ICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6
Ly9wcm9ibGVtLzYwOTUyODY+LgotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBl
UE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYg
a1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKLQotICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQotICAgICAg
ICByZXR1cm4ga1VUVHlwZVBORzsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCi0gICAgICAgIHJldHVybiBqcGVnVVRJKCk7Ci0g
ICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lm
IikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlR0lGOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGJvb2wgZW5j
b2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKLXsKLSAgICBpZiAoIWltYWdlIHx8
ICF1dGkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGVzdGlu
YXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0
aSwgMSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKLSAgICBp
ZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAg
JiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBx
dWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgotICAgICAgICBhdXRvIGNvbXBy
ZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7Ci0gICAgICAgIGNvbnN0IHZvaWQq
IGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKLSAgICAg
ICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7Ci0gICAgICAg
IGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2
YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25h
cnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIH0KLQotICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0
aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQ
cm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCi0gICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVu
Y3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCi0KLSAgICBDR0ltYWdlRGVzdGlu
YXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5n
ZXQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9u
LmdldCgpKTsKLX0KLQotc3RhdGljIFN0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAg
IGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0
YSksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFz
ZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1zdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0
b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBk
YXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRh
dGEpKTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIGlmIChhdXRv
IGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkK
LSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVy
biAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17
Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7
Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6
OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFn
ZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRpKTsKLQotICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBy
ZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkp
KSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2Ug
aGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBwcmVt
dWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2lu
dCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0
ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKLSAgICAg
ICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgp
LCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCks
IGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VD
cmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAz
MiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0
bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92
aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9
IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFn
ZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
ICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dp
Y2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5n
ZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29u
dGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2lj
YWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNw
YWNlID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShsb2dpY2FsU2l6ZSgpKTsKLSAgICAgICAgQ0dD
b250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgaW1hZ2VTaXpl
SW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0KCkpLCBpbWFn
ZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJ
bWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICgh
ZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgp
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEp
OwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0
YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpCi17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFn
ZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRpKTsKLQotICAgIENHSW1h
Z2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OwotICAgIHVuc2ln
bmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVn
VVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwg
c28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAg
ICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKLSAg
ICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5n
cm93KHNpemUpOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBwcmVtdWx0aXBsaWVk
RGF0YS5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFbaSArIDNdOwotICAgICAgICAg
ICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBk
YXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0g
PSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsg
Ml0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF07Ci0gICAgICAgICAgICAg
ICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltp
ICsgMl0gPSBkYXRhW2kgKyAyXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhl
IGFscGhhIGNoYW5uZWwuCi0gICAgICAgIGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7
Ci0gICAgfQotCi0gICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291
cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwotICAgIGF1dG8gZGF0YVByb3ZpZGVyID0g
YWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uu
d2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOwotICAgIGlmICghZGF0YVByb3ZpZGVyKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1h
Z2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3Vy
Y2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVs
dCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRl
cmluZ0ludGVudERlZmF1bHQpKTsKLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFD
cmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUlt
YWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQot
U3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0g
Y2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVVS
TChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0
YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRh
dGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAgIHJl
dHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjBiNjc3
NjJiY2RiMDRjOThkNzc5OWVlNGM2MjU1NDBkZDI3ZDYwYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNw
cApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0
ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6c2V0dXBDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXpl
KDEsIC0xKSk7CisgICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVp
Z2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlv
blNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0
YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWln
aHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLmhlaWdodCgpKSkp
CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1h
Z2UsIENHUmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5o
ZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+
IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VS
ZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBp
bnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFn
ZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNp
emUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQo
KSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1v
ZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENs
aXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9n
aWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9n
aWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9h
dFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdl
dCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdl
KGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1h
Z2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlm
IChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJl
aGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxp
bmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUs
IG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCBtX2xvZ2ljYWxTaXplLCBt
X2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJl
Y3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJh
Y2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5n
ZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250
ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0g
JmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisg
ICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVk
U3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQor
CitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OworICAgIAorICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5
cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAg
ICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3Mg
ZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBv
c2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50
UG9pbnQoKSwgbG9naWNhbFNpemUoKSksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAg
ICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAq
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICBhdXRv
IGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxs
cHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAg
ICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJ
bWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olllcykg
eworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAg
ICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwg
aW50ZXJuYWxTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAg
Q0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwor
ICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7CisgICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgp
KTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNv
bnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJ
bWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAo
YXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1
cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9
IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAg
ICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRh
OiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1
ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dz
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVy
OworICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhl
bENvdW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNf
Y2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5y
b3dCeXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAg
ICByZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdl
UGl4ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZv
cm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0
ICE9IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dh
cCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1h
cFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9
PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0
ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29s
b3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JB
LgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAg
ICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJ
bWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQs
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1
aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAoc3JjQWxw
aGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xv
ckZvcm1hdCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKHNyY0FscGhh
Rm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBo
YUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXpl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFr
ZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdl
X0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dz
LCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0
LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3Jj
Um93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1Vu
YWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIHNpemUpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRk
MDc2N2MxODczMDJjMjViZmZkNTliY2E2ZTBjMGZjN2QwMGYxNDcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1
ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAg
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBv
dmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNm
b3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0x
LCAwLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92
ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwg
UmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisgICAg
c3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUm
KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNGE3ZjY1NGRhNTUz
Njk2YmYzMTY2NDY5NTEzMmVlYjU5NTk3MmM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQ0EgdXNlcyBBUkdC
MzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1p
emVkLgorI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCisKKyNpZiBVU0Vf
QVJHQjMyCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9z
dDsKK2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xv
ckZvcm1hdDo6QkdSQTsKKyNlbHNlCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1
bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworY29uc3RleHBy
IGNvbnN0IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpSR0JB
OworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVy
bmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRhdGE7CisgICAg
dW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7CisKKyAgICBp
ZiAoIXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0
VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVp
bnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0
ZXMgPSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8gY2dDb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxTaXplLndpZHRo
KCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hlZENHQ29sb3JT
cGFjZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5p
cXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8g
cmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7
CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisg
ICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNvbnRleHQpKSk7
Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCB2b2lk
KiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJbWFnZUJ1ZmZl
ckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1v
dmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQorewor
ICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNT
RVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4
dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJl
dHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBj
b25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2lu
Z1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAKKyAgICBjYXNlIERvbnRDb3B5
QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAg
ICAgICAgICAgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCks
IDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1f
Y29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAg
ICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9Cisg
ICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5h
cmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2lj
YWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVy
Um93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVy
Um93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCks
IG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAg
ICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50UmVj
dCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkg
PSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBlZCwg
ZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1Jl
Y3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkg
KyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworICAg
IAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50
OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhKSArIHNyY1Jl
Y3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsK
KworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVy
Um93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJh
eSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQor
eworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVjdCBzcmNS
ZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAgICAgICAg
c3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNyY1JlY3RT
Y2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJlY3Qgc3Jj
UmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJbWFn
ZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQsIHNyY1Jl
Y3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KG1fZGF0YSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3Jj
U2l6ZVNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkg
KyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngo
KSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xv
ckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZvcm1hdCwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDdjODAwMzAwNzI3MzBmYTA4N2JmMzU0MTNkNjM5YTgwODdmZmMx
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJs
aWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRp
bmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5
c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEs
IFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJu
IDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAg
UmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQy
ZWFiYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0Nv
cmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxl
cmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+
Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBD
QSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGlu
ZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJH
QjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQg
dW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2
SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJU
KGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0
aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8
LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAg
IGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVy
JiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRh
KTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2
SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdz
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBj
b252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0
cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAg
dkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdl
Tm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZv
aWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9C
dWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWln
aHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9
IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0
aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGgg
KiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlE
YXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVO
VVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VE
X1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURh
dGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0
Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0g
ICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1
bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0
aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNl
KTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJl
c3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSBy
ZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3Vs
dCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZl
R2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEo
KSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxp
bnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgp
IDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0
KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0g
ICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNr
ZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAg
ICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAg
ICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51
bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZl
R2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAg
Q2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdp
bnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0
aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3Ro
ICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkg
PSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCks
IHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8
aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZl
R2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0
aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVy
aW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0K
LSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAg
ICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAq
IHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAg
ICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAg
ICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQg
PSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAg
dkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2Fm
ZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBk
ZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJl
bXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdl
VW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsK
LSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYK
LSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEg
PSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAg
ICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBB
UkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNS
b3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUp
IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
KHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFs
cGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAo
d2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRl
c3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNl
OjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFj
ZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
Pihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyAr
IG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAg
c3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQo
KTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVz
dC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJv
d3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShz
cmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0
XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FS
R0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vs
c2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAg
IENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAg
aW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jv
d3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1ti
YXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUp
IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
KHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNS
b3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93
c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0g
c3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jv
d3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93
cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxF
UkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0
LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwot
ICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxp
bnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAo
Q2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VS
VChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4
LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVH
ZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0
Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRl
c3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2Fm
ZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0g
c291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0
eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJl
Y3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJU
KGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnku
dW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291
cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8
aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5k
eS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWln
aHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkg
LSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJj
ZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEo
KSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7
Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwot
ICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEp
Ci0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVu
c2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAg
ICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgp
OwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJl
bXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdl
UHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0j
ZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAg
ICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBo
YSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAg
Ly8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJH
QjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3Jj
Um93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UK
LSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2Vy
IGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUp
OwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAg
ICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRk
cmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0
KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0
ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsK
LQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0
dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5k
YXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1
ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2Fw
IHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVD
aGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAg
ICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdl
dCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZl
R2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVp
bnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNv
dXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYg
YWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIg
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAg
ICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1
OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNr
ZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENH
Q29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlk
ZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VC
dWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJl
ZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgot
ICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVy
UmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1h
Z2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5k
aWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRl
cmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYs
IGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZv
aWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50
U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MDYxNTNiNjA1YWE1OTUxNTkzMzhhNWM2YmQzYWVmNTIzNTQ2NGI3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisK
K0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAg
SW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50
ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIG1heFNpemUgPSBJ
T1N1cmZhY2U6Om1heGltdW1TaXplKCk7CisgICAgaWYgKGludGVybmFsU2l6ZS53aWR0aCgpID4g
bWF4U2l6ZS53aWR0aCgpIHx8IGludGVybmFsU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJu
YWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9T
dXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JT
cGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2Ut
PmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250
ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsK
KyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKK3sKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSkpOworfQorCitJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwg
aW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZh
Y2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1
cENvbnRleHQoKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCisgICAgOiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmlnaHQoV1RGTW92ZShzZW5kUmln
aHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSkpCit7Cit9CisKK01hY2hTZW5k
UmlnaHQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVTZW5kUmlnaHQoKSBjb25z
dAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZVNlbmRSaWdodCgpOworfQorCitHcmFw
aGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAg
IENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3NpemVf
dCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25zdAoreworICAg
IHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFn
ZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQor
eworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2Up
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmco
R3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0
aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBh
ZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8g
aW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdO
YXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBhZGp1c3Rl
ZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90
IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90
IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIElPU3VyZmFjZTo6TG9ja2Vy
IGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBD
b2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRl
c3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0
Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsK
KyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYm
IG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRS
ZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShz
cmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkg
fHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50
OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQ
ZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cg
PSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7
CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2su
c3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNC
eXRlc1BlclJvdywgc3JjUm93cywgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVz
dEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBh
cnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBzcmNTaXplOworICAgIElu
dFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0g
PT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKSB7
CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAg
ICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICB9CisKKyAgICBJ
bnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3Vs
YXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVjdFNjYWxlZCwgZGVzdFBv
aW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1
cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIHVp
bnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNl
QmFzZUFkZHJlc3MoKSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVj
dC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZS53
aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xp
cHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAg
ICBjb3B5SW1hZ2VQaXhlbHMoaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRl
c1BlclJvdywgc3JjUm93cywgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
Q29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNp
emUoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGlt
YWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0
KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1MTI3MDJmYmVjOGFmMTcxMGE2NDdh
OWQyMmIyNWI1N2NjZWU3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsx
LDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElPU3VyZmFjZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kIDogcHVibGlj
IEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29u
c3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgV0VCQ09SRV9FWFBPUlQg
TWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkg
b3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAg
IHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVycmlkZSB7IHJldHVybiBtZW1vcnlDb3N0
KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQ
dHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHJhd0Nv
bnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJp
ZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOyAg
ICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKyAgICBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
cGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5k
UmlnaHQpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdDsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmNwcAppbmRleCA4OWQwNDM5YzIxMGRiNTAxYWM5MzllYjExNDE0ODgxZWVlYzY1
YjI0Li5kMDkxMzlmMDFiZDMzNmYyODQ4YWVhNTI2YTRmOWY4MDBlZTc4NWVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcApAQCAtMjYsNyArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCiAKKyNpZiBVU0UoQ0cpCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8u
aD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlVUSVV0aWxpdGll
cy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNCArNTIsMTQwIEBA
IHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplKQogICAgIHJldHVybiAqKHVpbnQ4X3QqKWxhc3RCeXRlOwogfQog
CitDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7
CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQRUc7CiB9CisKK1JldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVU
eXBlKS5jcmVhdGVDRlN0cmluZygpOworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCisKKyAgICAvLyBGSVhN
RTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEg
d2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCisg
ICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS82MDk1Mjg2Pi4KKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7CisKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKKyAgICAg
ICAgcmV0dXJuIGtVVFR5cGVQTkc7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQorICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwor
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dp
ZiIpKQorICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBrVVRUeXBlUE5HOworI2VuZGlmCit9CisKK2Jvb2wgZW5jb2RlSW1h
Z2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1dGkg
fHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwg
MCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAoQ0ZF
cXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1
YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5
IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICBhdXRvIGNvbXByZXNzaW9u
UXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NG
TnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9
IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgY29u
c3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGltYWdl
UHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwg
MSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOworICAgIH0KKworICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlv
bkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0
aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCisgICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25z
LCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRk
SW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwor
ICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7
Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRh
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdl
QnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJbWFn
ZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5zaWdu
ZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhf
dD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdV
VEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBz
byB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAg
IHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAg
ICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdy
b3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWRE
YXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAg
ICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRh
dGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9
IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAy
XSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAg
ICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
ZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUg
YWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsK
KyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3Vy
Y2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53
aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJj
ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0
IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1h
Z2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitT
dHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sK
KyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICBy
ZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisK
K1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9
IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFV
UkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitW
ZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRh
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCitWZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEg
PSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRh
VmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAppbmRl
eCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFkNDE5NTUyLi44NGM1N2QyZmVlOTMz
OGVkNWUwZWZjNGE4ZTMzNjVhMTlhODAyMDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCkBA
IC0yNSw4ICsyNSwzMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShDRykKKworI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURh
dGE7CisKIFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIAotfQorQ0ZTdHJpbmdS
ZWYganBlZ1VUSSgpOworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJN
SU1FVHlwZShjb25zdCBTdHJpbmcmKTsKKworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBD
RlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJl
Zik7CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
CitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3Rv
cihDRkRhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRl
eCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMyNTg4MjNjLi4yODIxZWY4MWQ3NWRm
YjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZEb2N1bWVudC5oPgor
I2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIyNGJhYzUzNjRjOWEwNGZmOTY5Y2Ri
My4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRhYjIxNGE2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTEw
MCwxMCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYsIENHQ29sb3JTcGFjZVJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0
ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAgICAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVh
dGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0jZW5kaWYK
LQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMy
M2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMs
NiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgog
I2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAj
aW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJ
T1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNl
KQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3Vy
ZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVy
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJu
IFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwg
dW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6
ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndp
ZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFl
NTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQz
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNs
ZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3Zl
SXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlz
cGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlmMWNlMjczNTQ1MGJkYWMzYmJkZjExYTMwODVkOWE3
ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxh
eUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5n
Q29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlz
cGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRl
cj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0
ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRl
eHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5
TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxh
eUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAg
ICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3Vu
dCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRl
c3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVw
bGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAg
RGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxp
c3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2Zj
NTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3ZGQxZDg1OGI1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJh
d0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwg
cmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVu
c2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgYXV0byBw
aXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQog
ICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRG
bG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVsQXJyYXlEaW1lbnNpb25zLnNjYWxl
KHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpA
QCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVB
cnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdElt
YWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4
VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzll
YTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3OGE3ZmI5NDdkNDA1ODAwNGVhNzE3
MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIEZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIC8vIFRPRE86IERpcmVjdCBw
aXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VE
YXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50
ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBy
ZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAgICAg
aWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0U2hhZG93
LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCks
IDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5wdXRC
eXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1
ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqc3JjUGl4
ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIENvb3Jk
aW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThjNWEyNmU3NzFjNDI0OTY3ODE5
NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAxNTMyZGFiZDI0OTAwNGJmMmE5
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0
aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRl
cmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmlu
Z01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9Owog
ICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5k
ZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uNWM4YjNiNGRlMGFm
YTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjc5
LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0
KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9u
UmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNp
emUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCks
IGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7
CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZl
clJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1h
Z2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNl
IHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29u
dmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVy
UmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1h
Z2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxz
ZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1h
Z2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1YTBkNTBm
OGNlMWFhZjY1MzVkZWVjOTQwYjg1ZGM1NTE3ZTRiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1
ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2Uo
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBi
dWZmZXJTaXplKQotewotICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5
cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6
Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1z
YXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUg
PSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJq
cGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIg
JiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxH
ZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8g
SlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3Rh
dGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAv
LyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90
IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZh
Y2U7Ci0gICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAot
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAot
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwK
LSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3Vy
ZmFjZVNpemUoc3VyZmFjZSk7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgICAgICAgICAg
Y2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0
R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1Zihz
dXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYg
cXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAg
IFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50Pigq
cXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Ci0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZm
ZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4
KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4
KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3Rv
X2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBl
LnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gIWVy
cm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhID0gdG9EYXRhKG1pbWVUeXBlLCBx
dWFsaXR5KTsKLSAgICBpZiAoaW1hZ2VEYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGltYWdlRGF0YS5kYXRhKCksIGltYWdlRGF0YS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAg
cmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQot
Ci1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBl
KSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVy
U2l6ZTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1pbWVU
eXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm4geyB9Owot
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKGJ1
ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDM0RMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAppbmRleCA0YzRjNDI2OTYxMjcx
YzdiN2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFlLi43NTcwMDNiMWYxMWRmNGIyNzY2YjQwOWU4MjJj
ZDhiNDIwZmI0YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcApA
QCAtOTQsNyArOTQsNyBAQCB2b2lkIEdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAg
ICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4
dC5tX2N1cnJlbnRIZWlnaHQpOwogICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBt
X2NvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkQmxlbmQgOiAwOwogI2lmIFVTRShBTkdMRSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgVW5h
Y2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1h
cFRleHR1cmUuY3BwCmluZGV4IDdkMmNlZmQ2MjYxZGVlMmEzOWE4OWQxMDE3MDJlYjUwMjUyZjRm
NWUuLmYwMzkxMzgwNjBkMzQ0MzRlNmNkZGJmOTZlYTY0YzMwMWE2MzU1M2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250
ZW50cyhUZXh0dXJlTWFwcGVyJiwgR3JhcGhpY3NMYXllciogc291cmNlTGF5ZXIsIGMKIHsKICAg
ICAvLyBNYWtpbmcgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyIGhlcmUg
aXMgT0sgYmVjYXVzZSB0aGlzIGNvZGUKICAgICAvLyBpc24ndCB1c2VkIGJ5IGFueSBwbGF0Zm9y
bXMgdGhhdCByZXNwZWN0IHRoZSBhY2NlbGVyYXRlZCBiaXQuCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVj
dC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggMWM2NmFkNzljZTQwYzE0NTU4ZjY2
NTI1MmIyNWUzYmI3ZGVkMTZiZC4uODk3Y2U0MGQwNGM3ZTBhZDFlYTE5MmNiOTEwNjE5ZjhmOTIy
MjRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBJbWFnZUJ1ZmZlciog
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAobV9p
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBt
X2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJl
U2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1faW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCBkNWI5MWIyNjg2YWUyNjFlYjUzYzA2ODliZWVjNjJmNTVl
M2ZiNDU4Li44ZjUwZTU3NTcxZDdiMzg1MDBlZWQ3YmNkYTZiM2E2NDJhYmY3OTUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTY5MDUsNyArNjkwNSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0K
ICAgICAKICAgICBlbnN1cmVMYXllckZpbHRlcnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmls
dGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFj
Y2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2Uo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRG
aWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNS
ZXBhaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXgg
OTE0MjAyOWEyZDQ0NjRkZjVjYjdiM2E0NDE5M2JlMjg2M2MxZWQyYS4uOTM1YTZlZTllNzZmZjQ0
MDJmOTg0YjVkMmI1MjFhNjk5MWM2MTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAKQEAgLTE4MSwxNCArMTgxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xk
LCBjCiAgICAgSW50UmVjdCBtYXJnaW5SZWN0ID0gc25hcHBlZEludFJlY3QobWFyZ2luUik7CiAg
ICAgYXV0byBpbnRlcnZhbHMgPSBtYWtlVW5pcXVlPFJhc3RlclNoYXBlSW50ZXJ2YWxzPihtYXJn
aW5SZWN0LmhlaWdodCgpLCAtbWFyZ2luUmVjdC55KCkpOwogICAgIC8vIEZJWE1FICgxNDk0MjAp
OiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAg
aWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQo
KSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCks
IGltYWdlUmVjdC5zaXplKCkpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJheSk7
CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgo
KTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwg
aXMgZm91ciBieXRlczogUkdCQS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAwOGU0OTI4MmFkOTNi
Y2FjZDI5Nzc1Yjg0NmYwNTlkNWEyY2E3MTNlLi4xZDc3YjYzYzZmZTI4MzEyYWUxMWVkODI1YjUy
M2FhY2U3MTdlYzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGMKIAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0lt
YWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2
OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNj
ZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBw
aW5nLCB0aG91Z2guCi0gICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENv
bG9yU3BhY2U6OlNSR0IsIFVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKKyAgICAgICAgY2xpcHBl
ck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwogICAgICAgICBpZiAoIWNsaXBwZXJNYXNrSW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNzVi
NTliNjNjM2U0OTYwYmQ0ZTNiZGJkODc0OTJhOTMyZjQzMTYxYi4uMTJlN2YxNWQ2MzJkNzZkOTlm
NmJhYmE5MzhkMGQ5ZTI2MzRkOGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTE5MSw3ICsxOTEs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2Fs
ZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3Jt
Lm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdp
b24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdN
b2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJU
KCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKQEAgLTI4Niw3
ICsyODYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICAgICAgY29udGV4dC0+
Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgICAg
ICB9CiAgICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5yZXNldCgpOwor
ICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7CiAKICAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAi
IDw8IHRoaXMgPDwgIiBwb3N0QXBwbHlSZXNvdXJjZSBkb25lXG4iKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHAKaW5kZXggMTc4N2UxOGMyZGNlZjViZGY5OTI0NzRjZmMwMjJiNTE2NmFkNTg0OC4uMTIwYzU3
YjU2OTc4NzIyMDQ2NWJjNmFlYzBiNTgwNGM0NTVjZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xv
ckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9y
U3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZl
ciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQg
bWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAg
bWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2Vs
ZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJh
bnNmb3JtLCBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0
KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4
IGI4MjE0MTFhZGU3NzUwODU2MTY4ODU2ZWQyMmI2MmVhNmI1Y2QzZDkuLjk3ODY3YWFkM2MyN2I1
YjUzOGQzYTc5ZmI0OTVkZGQ0ZjBmNDNkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcApAQCAtMjE4LDcgKzIxOCw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNj
ZWxlcmF0ZWQgZHJhd2luZyBmbGFnLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVm
ZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
S2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDUzMjY3OGYzNzYwMzNjM2MwMGY5ZjZiZDVhMzBjMzg2
OTBlMzM0YmYuLjBhYjkyMDE2MjRlODYwYTBkOWNjMGYwNzE5ZmE2MzE1ZjJmMTU2MmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9D
TWFrZUxpc3RzLnR4dApAQCAtMTcsNiArMTcsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5jbHVkZSIKICAgICAi
JHtXRUJLSVRfRElSfSIKICAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzIgorICAgICIke1dF
QktJVF9ESVJ9L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCIKICAgICAiJHtXRUJLSVRfRElS
fS9OZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZWRmYjZl
MWUwNWU1NjQwMDhiN2Q1N2E4NzQ1Mzc4YzQzZDY2Y2Y5Ni4uN2E1MjE0MjVmZjkzMTcyYjVhYjdl
MWRjMjQyMGFmZTY1Yzk3NmY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZB
VEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURF
UlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9j
ZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5H
UFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDIs
NiArMTA0LDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3Jh
Z2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1v
dGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CmluZGV4IGRmYmMwZWZlNmI4NDcyNmY5NmM4OTgyOGNkODNkMGVkNzU5
MDVhMDYuLjkwZDkxMTFmZDEwZTg2MzQ1YjdlZjRmZjUzYjE1OWEwYzMxMmNhYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYg
KzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9Q
bHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1l
c3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Bs
dWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZm
ZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxp
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgK
QEAgLTE0Miw2ICsxNDgsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNz
YWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBs
aWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IGUyOTA5MzA5N2NkOWJkZWIzNDVhMTlhNWQzN2ZlNTdhNTQwZGViNzAuLjhjNzUzZDE2ZjQwZGZk
ZGNmZTE3NDViYWE1ZmU1OWJmMjk2ODc3ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UK
QEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwK
ICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nl
c3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwK
ICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdv
cmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAt
NTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9j
YXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0MCw2ICsxNDIsOCBAQCBNRVNTQUdFX1JFQ0VJ
VkVSUyA9IFwKICAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIgXAogICAgIFBsdWdp
blByb2Nlc3NQcm94eSBcCiAgICAgUGx1Z2luUHJveHkgXAorICAgIFJlbW90ZUltYWdlQnVmZmVy
IFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwKQEAgLTE0Nyw2ICsxNTEsNyBAQCBNRVNTQUdFX1JF
Q0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3Rl
TWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAgUmVtb3RlV2ViSW5zcGVj
dG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDYyMGI0MWYyOGQ2Njc2YTNkZTE3ZjQ3NmIyZGYzODhm
ZmY2NDc3MGQuLmEzNzFjZjIzZGE3N2ZhNzZlM2U0MDNkZGMyZDNhZGI2NjE5MDFjNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKQEAgLTE2MCw1MiArMTYwLDY4IEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94eSgpCiB9CiAjZW5kaWYK
IAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVz
c2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6
OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
aWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRp
YVJlY29yZGVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlh
UmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVk
aWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMp
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJX
ZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldl
YlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJl
cGx5RW5jb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2Vi
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlz
cGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQor
Cit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VS
VChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZjQ4
NTk2NGQ0NmM1MmUzMzhkMmFiZTRmNzY1ZGRjYjVhOTRhMDc5MC4uMDI3MDM3ZmU5OTQ2NDA5ZjA2
YzIzYmY2Y2VjZDM3ODUzYTU2ZTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVk
ZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmll
ci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ3
LDE4ICs0OSwyMCBAQCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogCiBjbGFz
cyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUo
R1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246
OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAg
ICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9
CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFu
dXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5z
aW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAog
ICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03NywxNCArODEsMjEgQEAgcHJpdmF0ZToKIAogICAg
IC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5l
Y3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lk
IGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5h
bDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9p
ZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7Cisg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29u
c3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTYsNiAr
MTA3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29k
ZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJl
MDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2
ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyAr
MjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdjOGZhM2U3Yjg1MGUxMzdiYWUzMmVkZGI4YTcxNWU4
NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlN
ZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisg
ICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7Cisg
ICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1l
c3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRp
Zmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAg
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJ
UEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlm
aWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRp
ZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExNmExNDNlNzdiMjIyYzM1NTE4ZDNkNTY2ZmYz
YTllNWEyMWJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMu
aD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6
TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJs
aWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgp
OworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29u
bmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1
aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1v
dGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAg
dm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZs
dXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7
CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
bWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBhZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRkNzJkZGVi
NWVjOTU4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCAr
MSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
IyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IE5v
dFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
ZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1ZWQxYzg5MTZjMjQ0NWQ3Y2U4YTEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJl
cGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNz
IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkg
eworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVm
ZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNr
ZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBt
X2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9i
YWNrZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQg
bG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3Qu
aXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250
ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAg
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNDY3ODdlZWZhMjJmMGM0NjA5MTA4YjViZmI0ZDc3ZTk3NzQwYjYyZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEFjY2VsZXJhdGVkUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNDBmZmNlOWIxOTY5OTFmZGY5OTRmODI0ZWQ2
OTIzYTA4ODRmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAg
KzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSAi
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUo
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7Cisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+KG5l
dyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQor
eworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYg
KGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7Cisg
ICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2
NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VC
dWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1h
Z2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9p
bWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJl
dHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7Cisg
ICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVy
YXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRl
bnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNo
b3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFn
ZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VC
dWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJlZTUxMWU2
OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNl
bmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0
ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6Cisg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5k
ZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0
IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7
CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6Rmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAg
ICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1h
cCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50
ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2lj
YWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdl
QnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNl
SW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQv
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggZjhiY2UxNDU1MDdkZjQ5ZTg5ZWQ0Zjcx
OTg3NmUxMGJmNzA5NmJkZS4uZWQ5ZTE3N2RiM2ZlMTYwN2VjYWQzMzU3YmI5MzYzNTgzNTEwMmVj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsy
Nyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09O
TkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVT
U0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJf
QVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRU
UklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hy
b25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zvcndh
cmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5k
UmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdX
ZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTEsNiAr
MjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50
ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCisgICAgICAgICdX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjE4
LDEwICsyMjIsMTMgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQo
KToKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYkNvcmU6OlNXU2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAorICAgICAgICAnV2ViS2l0OjpJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVy
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAg
ICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2MiwxMyArNzY5LDE2IEBAIGRl
ZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19t
ZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRl
KFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIu
bmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUp
IGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3Qg
cmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUp
OgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3Rh
dGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10K
KyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdF
X0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNo
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNz
KToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAg
ICBlbHNlOgpAQCAtNzc3LDEzICs3ODcsMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxl
cihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3lu
Y19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1
dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBw
ZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5j
JXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChy
ZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVH
QUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VO
VEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
YXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQg
Kz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdl
IGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FO
VFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47
XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24p
O1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtc
bicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVy
KTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmlu
ZGV4IDM0ODJkMDUwZTRiZWZjMTAyZTMxNmQwMTk4YjAwNGVmNjA4NDUxYmUuLjNjZTIxNDkwMzU2
Yjc1YzZlOWVhNDYzZjBlMTZmN2EzNzcyNjUwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtNzk3LDYgKzc5OCwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBu
YW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
KyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZh
bHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlM
aXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Qs
CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDMw
NmNkMWU2OTM1NjYxYWQ0MWMwNjA5Mjg0OGJmOWFmMzZiMWI3MjYuLjM1MmUzNDFlNjQyNTkyNDdl
NWI2MWY1MzgzNjUzMjg2MGU1NWQ0OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNl
cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMzEsNiArMzEsOCBAQCBH
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCiBHUFVQcm9jZXNzL21l
ZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VN
YW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2Vy
LmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUxNCw2
ICs1MTYsOCBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUu
Y3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCiBX
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIEBu
by11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNw
cAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAK
K1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCiBXZWJQcm9jZXNz
L0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJy
dGMvTWVkaWFSZWNvcmRlclByb3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
b3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDkz
OWZiMTcxYjcxZThjMmYyZjIzZTAzMjIwNmIwYWIxN2M5OGFiOTkuLmNmZjQ1YTI4NWFhOGI1NWFk
NjQ3MDIxODMwNzNjOTUzNTEzZjgzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNl
c0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTYzMiwx
MCArNjMyLDE0IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Ny
b2xsaW5nQ29vcmRpbmF0b3IubW0KIC8vIERlcml2ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNv
bnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZVJlY2VpdmVyLmNwcAorR1BVUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJl
Y2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJX
ZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VS
ZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRp
YVJlY29yZGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrTWVzc2FnZVJlY2VpdmVy
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYWQ4YjZkZWYyMTc4Y2YyOGYzZWFlZTBlN2I2YmFhNGZkMTY3MzUwOC4uZGMzMThjN2Vh
NmQ3ZjY3MmZhNmY5NWYyODczOTI2MzQxYWI3N2U4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTYxLDggKzM5NjEsMjYgQEAKIAkJ
NzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1
IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsg
cGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2lt
dWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyog
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlBMjNBRDJGRDYw
MEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBNjIz
QUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjAyM0MxODI4NzAwMjYy
NjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1
Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29s
b3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQ
aWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4
QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDE0MjNBQjBBRjEw
MEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUIyM0I0QzdB
OTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0
MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3
Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRh
U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEw
MEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjM5Myw2ICs2NDExLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlh
ICovLAorCQkJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICov
LAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQz
QzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQky
RDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAg
LTY0MDksNiArNjQyOCw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAq
LywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3
MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFG
RjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYg
Lyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyog
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzc4Miw2ICs3ODAyLDM4IEBACiAJ
CQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzIxRjFF
OTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLywKKwkJCQk3MjFGMUU5ODIzQUQyRkQ2MDBC
REFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRTk5MjNBRDJG
RDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJ
CTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzJENUMyRUQyM0I0QzgyMzAw
RjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAorCQkJCTcyRDVDMkVC
MjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworCQk3MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVy
aW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
LmggKi8sCisJCQkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRp
Zmllci5oICovLAorCQkJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1
ZmZlci5jcHAgKi8sCisJCQkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdl
QnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdl
QnVmZmVyLm1lc3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTEyM0FCMDc2MzAwQTYx
MjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkQ1QzJFNzIzQjM4
NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMy
RTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3
MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAq
LywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVy
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5k
ZXggMThlOTM2ZGUzMjMwNzcwZjI0MzYxYjZhYmFhOGUxN2U0ZDJlNWFjMC4uMTg4ZmFjMjBhMWU5
MjNkZjYyYmIxYTM4MDU1MGFhYTRmOTRkOGUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTYwLDI5ICs2MCwz
NSBAQCB2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24m
KQogewogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5n
UmVmZXJlbmNlKQotewotfQotCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
cikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNp
bmdsZXRvbigpLnN1cHBsZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNl
aXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAg
ICBpZiAoYXV0byogY2FwdHVyZU1hbmFnZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBw
bGVtZW50PFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyPigpKQogICAgICAgICAgICAgY2FwdHVyZU1h
bmFnZXItPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlm
CiAjaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKGRlY29kZXIu
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5saWJX
ZWJSVENDb2RlY3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICBy
ZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOworfQorCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVy
biBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCit7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29u
bmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5oCmluZGV4IDMxYzYxMDQ2NjlmMmYwMmZmYTQ0MGZlYjg4MDkyNmM3NGFlMjZhY2YuLjZk
MWI4M2RlNTgzNmFmYWUyMWFmYzM0ZjU4YTIyZTVkNmQzMjNjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTI4LDYg
KzI4LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9u
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDYsNiArNDcs
NyBAQCBwdWJsaWM6CiAgICAgfkdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9
CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0
dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAKIHByaXZhdGU6CiAgICAgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsKQEAgLTUzLDEwICs1NSwxNSBA
QCBwcml2YXRlOgogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRD
bG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworICAgIHZvaWQgZGlk
UmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJy
aWRlOwogCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICAv
LyBUaGUgY29ubmVjdGlvbiBmcm9tIHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3Mu
CiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCBkMzZmOGEwOTVmNmE3N2JiYjZj
YWM4ODNhNjUxZTg0Y2U5ZDY0YjMwLi41N2ZlY2RlOWRmMjdjNzM5YTZjYmYwMjY5ODA2NTkyYjVl
MjE3OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKIAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24geworbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gV2FudHNEaXNwYXRjaE1lc3Nh
Z2UgewogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjJiYmRkODYzNDA1MjA1YWRhN2VmM2NjNzM4NDYwMTlmYjE5OTNi
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlm
aWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciA9IE9iamVj
dElkZW50aWZpZXI8SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlPjsKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdl
QnVmZmVySWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3ZWFmOTQ0YmEz
OGYwYTk5NGE1YmU1MjQxOTU5ZjRhYzg4YTU5MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlm
aWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Vu
dW0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlcklkZW50
aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVySWRlbnRpZmllclR5cGU+OworCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTUxYjRj
ZTgwZjdiMWE2ZWNiYzgyYmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1h
Z2VCdWZmZXIuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorewor
ICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNl
aXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisg
ICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwg
cmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitSZW1vdGVJ
bWFnZUJ1ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBp
dHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAm
IG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVBy
b2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2Vp
dmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRo
ZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK0lQQzo6Q29ubmVjdGlv
biogUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25u
ZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlcjo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdl
QnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVy
Ojp3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0
aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRG
b3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6
OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9
CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQorewor
ICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1
cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJl
bW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3Nh
Z2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJh
Y2tlbmQoKQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50ID0g
MzsKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNCYWNr
ZW5kQ3JlYXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0
c0NvdW50OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0
U2V0Rmx1c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZs
dXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIp
Cit7CisgICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZsdXNoSWRlbnRpZmllcjsKK30K
Kwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgbV9zZW50
Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7
CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Rmx1c2hDb250ZXh0
KGRpc3BsYXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRp
Zmllcik7CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiNTZlMzFkMGNhZjIwNmVlNTA2Yzk3OTY5MDVi
Nzg0MGE0OWI4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIKKyAgICA6IHByaXZh
dGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKK3B1YmxpYzoKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXIoKTsKKworcHJvdGVjdGVkOgorICAg
IFJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVy
LgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBv
dmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgLy8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1
ZmZlckJhY2tlbmQoKTsKKyAgICBib29sIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKKworICAg
IHZvaWQgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkg
Y29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElk
ZW50aWZpZXI7IH0KKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsK
KworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hT
ZW5kUmlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0
ID0gMDsKKworICAgIHZvaWQgc2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyKTsgICAgICAgIAorICAgIHZvaWQgcmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworCisgICAgSW1hZ2VCdWZmZXJJZGVudGlm
aWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyIHsgSW1hZ2VCdWZmZXJJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpIH07CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVu
dGlmaWVyOworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElk
ZW50aWZpZXI7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmODc3NTU3YzBhYThjOGE5MDUwNGExMzU4MGRh
NTkxYWE1YmZjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KQEAgLTAs
MCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlciBOb3RS
ZWZDb3VudGVkIHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJDb3JlOjpG
bG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgcGh5c2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNl
bmRSaWdodCBzZW5kUmlnaHQpCisgICAgdm9pZCBTZXRGbHVzaElkZW50aWZpZXIoV2ViS2l0OjpJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTcxYzdhZDgwNGMyYzQxZmVkMTZjYjEwNmM2NmQw
OWY3NDAzNTFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3Rl
SW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyIHsKKyAgICB1
c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjptX2Jh
Y2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7Cisg
ICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29s
dXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPihuZXcgUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7CisgICAgfQorCitw
cm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9k
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdo
dCBzZW5kUmlnaHQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoIW1fYmFja2VuZCk7
CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUobG9naWNhbFNpemUsIGlu
dGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHNlbmRSaWdo
dCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEJhY2tlbmRUeXBlKiBlbnN1
cmVCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbV9iYWNrZW5k
KQorICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRo
aXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0
KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRp
c3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRl
eHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgZmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzMyYTU1YjBiMmViNzg0MjM3ZTgy
ZWI4NTFiMGI5NGI5Mjc3OWY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVk
ZSAiUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlQWNj
ZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxB
Y2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGRjOTY0OWU3ZWVhMGEx
YjA2NzVjZGJmODE4NjdlNGNmN2FjMmRjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sK
KyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNl
UmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisK
K0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2Rl
KSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAg
aW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6
CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0
V2luZG93KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2YmU5ZGNi
ZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5ZDFmNDRjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3Mg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0Jh
Y2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24q
IG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3Qg
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFJl
bmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+
IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
Y29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6
OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDY1ZmI4YzZmNzdmN2ZkZTM4ZjY4Y2JiMDc1MjQ2
Yzk5NGRiMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCAr
MSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVj
dElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
ID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGU+OworCit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldl
YlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJX
ZWJSVENDb2RlY3MuY3BwCmluZGV4IDQ2ZDExOTg3NzJjNTFiOGFkOTBlZjhhMTcxMzIxZmZjZTI5
MGZjZjkuLmIwMjkyMWUwNjFhNjBlMzM1MDg4N2U3YjA4OTMyNGVhYjhlYTNmNWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29k
ZWNzLmNwcApAQCAtNDIsNiArNDIsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKIHN0YXRpYyB3ZWJydGM6OldlYktpdFZpZGVvRGVjb2RlciBj
cmVhdGVWaWRlb0RlY29kZXIoY29uc3Qgd2VicnRjOjpTZHBWaWRlb0Zvcm1hdCYgZm9ybWF0KQog
ewogICAgIGlmIChmb3JtYXQubmFtZSAhPSAiSDI2NCIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmlu
ZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1OGEuLjc3MjZmZTk0OGEy
Mjc5YmJmOTM5ZjA2NDRmNjQ1NjgyZWQ2Yjc5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBA
IC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Nb2NrV2ViQXV0aGVudGljYXRp
b25Db25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNp
bmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CkBAIC04ODEsMTUgKzg4NSwyMiBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21l
Q2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJl
c2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdp
bmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJl
YS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CisjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdl
YkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOwogI2Vu
ZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihG
cmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGZk
YTMzOGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFmNjc5NGVkMWMyY2QuLjRkZWRmZWU3ODQxMTY1ZTU3
N2Q5NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMSw2ICsy
MzEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0
b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJ
RCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisK
ICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2Vycygp
IGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRp
bmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQppbmRleCBlZjAzNTAz
NDJiYjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEwNjliNTdmYmY2NTk0ODg3
NTQxMjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQpAQCAtMjAy
LDcgKzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1h
Z2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgICAgIHJldHVybiBuaWw7
CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFuZCB3aWxsIGJlIHBh
aW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0aCBGcmFtZVNuYXBz
aG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NWI4OTFkZDk2ZWY1ODRlOTYxZTc2NWY0MzFk
ZTEwMmFhNWIyYjZjLi42ZjhkNTFkNTg0MTM1YzFjMTRmODcyNmI5ZDY5MzNmZjA2Mzc3M2I5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMDkgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSBy
ZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAyMDIw
LTAxLTA5ICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCBXUEUgZ2FyZGVuaW5nOiByZWJhc2VsaW5lIHNldmVyYWwgdGVzdHMgYWZ0ZXIgcjI1
NDA0NC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxh
eS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlz
cGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3MmFjY2E4Nzc2MTQ0NzliNGRj
N2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2YmZiMzk3MWM3NTIwYjhmIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5
LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAKKyhzYXZlCisgIChyZXN0b3Jl
LWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAgKGZpbGwtY29s
b3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikKKyAgKHN0cm9rZS10aGlja25l
c3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNoYWRvd3MtaWdub3JlLXRyYW5z
Zm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQog
ICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387281</attachid>
            <date>2020-01-09 15:08:32 -0800</date>
            <delta_ts>2020-01-09 15:38:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200109150831.patch</filename>
            <type>text/plain</type>
            <size>464611</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBjNDEwNjY3ZTM1Nzhm
NDY3NmFlZDcyZmJiNTRmMThiODJkODhlNC4uNDNmZDZmMmUzYjAyMGFjZGExNmYzMGI1NDYxMzAy
OThkMmU3MDY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1OCBAQAorMjAyMC0wMS0wOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworCisg
ICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNoeSBmb3IgSW1hZ2VCdWZmZXI6CisKKyAg
ICAgICAgSW1hZ2VCdWZmZXIKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgIHRlbXBsYXRl
PEJhY2tlbmRUeXBlPgorICAgICAgICAgICAgKy0gUGh5c2ljYWxJbWFnZUJ1ZmZlciAgICAgIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCAgICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFj
a2VuZFR5cGU+ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgICAgICAgKy0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciAtLS0tLSsgICBSZW1vdGVJbWFn
ZUJ1ZmZlciAtLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAg
ICAgICAgfCAgICAgICB8ICB0ZW1wbGF0ZTxCYWNrZW5kVHlwZT4gICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICArLSBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyIC0rICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSAtKworICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5IC0tLS0tLS0tLS0tLS0tKworCisKKyAgICAgICAgVGhpcyBpcyB0aGUgY2xhc3MgaGll
cmFyY2h5IGZvciBJbWFnZUJ1ZmZlckJhY2tlbmQ6CisKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQK
KyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAgICB8ICAgICAgIHxfXyBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAgICAgICAgICAgIHwgICAgICAgfAorICAg
ICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAg
ICAgICAgICB8X18gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHxfXyBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAgIEFzIGFuIGV4YW1wbGUsIGlmIEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUyBpcyBlbmFibGVkLCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkKKyAgICAg
ICAgd2lsbCBjcmVhdGUgdGhlc2UgSW1hZ2VCdWZmZXJzIGZvciBVU0UoQ0cpIHBsYXRmb3Jtcy4K
KworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAgICAgUGh5
c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAg
ICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRl
ZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJ
bWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250
ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJp
dG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVD
b21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRv
THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50
ZXJuYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNp
bmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvcHlGdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3Jt
VGV4dHVyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNh
bEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVu
c3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9k
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGls
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhU
aWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0xheWVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhaXJvOjpkcmF3U2hhZG93SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmZp
bGxTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRv
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0
b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBp
eGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29w
eU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0ZXNQZXJS
b3cgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VUSSk6Cisg
ICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAgICAgICAo
Tmljb3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3Vs
YXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisKIDIwMjAt
MDEtMDkgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW90
ZVZpZGVvU2FtcGxlIHNob3VsZCBiZSBhYmxlIHRvIHN1cHBvcnQgY2FudmFzIHZpZGVvIHNhbXBs
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMzIzZTViYjA2NDU1NDlmNzQwODI1MWVmNzBiNjViZjc1ZjQ2NjEwOS4u
NDM2ZDIzODFkZWE0MTYxYzIzZGE5ZDI3NmQ3MDc1NjQ1NTc0ZGU2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAyMC0wMS0wOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0
OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNz
YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmguCisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAgICAqIEdQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VS
ZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Ondh
aXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2Vz
LmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
RGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAx
LTA5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0
VGVzdFJ1bm5lciBsZWFrcyBvYmplY3RzIGluIGEgdG9wLWxldmVsIGF1dG9yZWxlYXNlUG9vbCB0
aGF0J3MgbmV2ZXIgY2xlYXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDgxYjYw
N2U0Yzc2OWEwZjE1OTRjYmE1YWE3ZjU0ZGQzNWU3MGNjOGIuLmVmOGMyYzZlZmYxY2VmZDViOTU4
MzM2MjJmZWVlYTUxZGNiMjYzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMC0wMS0wOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51
Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIw
LTAxLTA4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlIGJpbmFyeSBzaXplIGJ5IHB1cmdpbmcgQysrIHR5cGUgaW5mb3JtYXRpb24gaW4gT2JqZWN0
aXZlLUMgZmllbGRzIGFuZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3
ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5M2I5OTY0ZTc3Li45OTM3MGJiNGI3YjgzMTU1N2YzNjA4
N2EyMmEzOGYxM2NkOWJhZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
YW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0
Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250
cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIu
aApAQCAtMTA3Myw3ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1N
ZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRU
cmFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZp
ZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2Zi
NmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAK
QEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6
OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1
dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcElt
YWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsg
bnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5
NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2Qx
NjkxOTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQxMTIxNTU3YWU2ZjM1ZGI5YWQ1
ZjRjMWU4YWNjY2EwODY2M2U2ZmIuLjdhMjA5YTg2N2QzZTFhMTQwZGIyMDM0NDVlZDNhZGVlMjc2
ODhlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
aW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9y
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFk
NjZlZTcxMjM0N2MxNjZiNS4uNGYwM2VjMjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2Zj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VT
b3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVl
NGJiOTQzMWFlY2I0YmNjYzI4YmQyLi45N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFl
NTJkZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJl
ZnJlc2hNb25pdG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0
aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VH
dGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJv
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDZlMjhiNTdkYzc0NGM5ODJlYWU3MTAxYTYyMmJiMTc5MGJjOWZiNzIuLmRjMTUz
NjBiZmE1ZDg1Mjc2YTA3NWM0NjFjZjZlOGFkYTVmNjZkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBA
QAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2Mjky
NTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJ
CTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkw
Mjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4
QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQky
MkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0Fs
dEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVt
ZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
SXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQu
aCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5
MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAg
LTIxMzQsMTAgKzIxMzIsMjEgQEAKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxs
KSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyog
U1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYw
MEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVy
dHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJF
NDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIz
MEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjND
MTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8q
IFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1
NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAv
KiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxl
bmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJ
CTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRl
Q2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JF
RUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEy
M0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1h
Z2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYy
M0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4
MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVz
c2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAg
LTY1NDEsOSArNjU1MCw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAy
OTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0
YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1
QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdl
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMSw4ICs5
NjA3LDExIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVj
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1h
dGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkz
NkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91
Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5
MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg7IHBhdGggPSAuLi9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
WFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
MjMsNyArOTYzMiwyMCBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhU
c1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8q
IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkz
RTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIz
QUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdC
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAv
KiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUx
OCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjg3
LDcgKzEyNzA5LDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5
MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTY2ODYsNiArMTY3MDcsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZC
Q0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlC
MDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkND
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJD
RDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODg1
LDYgKzI0OTA3LDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1
MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYy
Qjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjQ4OTQsOSArMjQ5MTcsMTIgQEAKIAkJCQk5
MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2
RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJ
CQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVy
Q0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRh
dGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNB
QUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5OTIsNiArMjUwMTgsNyBAQAogCQkJCTRCN0FFNDkyMjE3
N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1
QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2
OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2
QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0
MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUND
MTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywK
QEAgLTI1MDgzLDcgKzI1MTEwLDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyog
SW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyog
SW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVj
b2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rl
ci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAq
LywKQEAgLTI1MTQwLDYgKzI1MTY4LDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcg
LyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQ
YXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5o
ICovLAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVy
LmggKi8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5o
ICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1U
ZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ5LDYgKzI1MTc5LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1
NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYy
IC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4
RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdE
NDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3
RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3
RjkgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAv
KiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJv
dW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0Js
dXIuY3BwICovLApAQCAtMjg5OTAsNiArMjkwMjMsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3Qzcw
MDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQw
QzQwNjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAw
RDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Uw
OEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2ODQsNiArMjk3MTgsOCBAQAog
CQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIz
QzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJl
Y29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyog
RGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI5Miw4ICszMDMyOCwx
MCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAv
KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcw
MEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIz
NUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBF
NjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQy
NTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250
cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzYzLDYgKzMxODAxLDcgQEAK
IAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNX
YXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFD
MjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVy
ZUluUGljdHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMw
MDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMx
NzgyLDYgKzMxODIxLDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZv
cm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMw
MDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1
QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0Ex
NiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4
MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTksNiAr
MzE5OTksOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlcklt
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlG
NiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBk
YXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUz
MDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXgg
NjRkZmYyZDk4NGVmNzJkZDllYmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0ZTQ5MGFiNGQ4MWJk
NmZmMTI4ZTI1YTc3Njc0MWQ5ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAg
ICAgIEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAg
IGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAg
ICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7
CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRl
QXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
SW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwg
bG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0
byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNf
Y2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJp
dG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXgg
ZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2Mx
MTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0
ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0
U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBG
SVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJl
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4
YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyAr
OTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAg
ICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxl
cmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFn
ZSgpIGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAg
IG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVy
LT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9j
b3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5n
ZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRl
eCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgx
ODAzM2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNp
emUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNr
LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29u
c3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJl
cGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAg
Ly8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIg
Z2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3Vz
ZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlz
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigp
ICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlM
aXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5k
aXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBT
dHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlM
aXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFz
VGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250
ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkp
CisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxh
eUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4
NSwxMSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVy
KCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNp
emUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5k
b3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBk
b2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAor
ICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBv
biBjYW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxh
eUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJh
d2luZ0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZv
ciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9
IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2Vz
UmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUo
c2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9k
ZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAg
IHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2Rl
OjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7Cisg
ICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlm
IChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVy
KCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0
ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0
aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0
NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4
YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyAr
MTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAK
LSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9u
YWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApp
bmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThm
ZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0
bWFwLmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJp
dG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdh
YmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNm
ZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1h
cD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
KQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1
dG8gYnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAt
MjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigp
IGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxl
cmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1
Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0
MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJl
Y3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZm
CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkK
IHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNB
Y2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZm
ZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRl
cm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVy
bjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBl
YXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29u
dGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQp
OworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9F
bGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01v
ZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXko
Ym9vbCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92
ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3Bs
YXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1
cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1T
dHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRp
c3BsYXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICgh
ZGlzcGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0
LT5hc1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0
YWNrKCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNyZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQg
c3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRh
KEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOwor
ICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5
LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZs
b2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAog
ewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBj
YW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2
LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkp
OwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5
dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYg
KCFieXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAg
ICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBk
YXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAz
LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwg
ZGlydHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpM
b2dpY2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7
CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxv
YXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1
ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
SW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3Qp
OwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlm
IChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJj
ZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZl
cjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgo
KSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdo
dCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0p
OworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEu
aGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5
c3RlbSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgK
aW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFm
NTAwZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAt
MjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQg
c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxp
c3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVw
bGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQog
ICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQ
cm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHBy
b3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0
ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJ
bWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBz
eSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFn
ZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURh
dGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQg
c2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZs
b2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVy
YXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdk
OGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThj
NDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
OwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFj
Y2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0
aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0
bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEw
YWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJk
YTdhYmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2Uo
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAg
ICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0Nv
bnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9I
ZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVU
b0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Cisg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQo
KSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAog
ICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkg
ewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1h
dCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJl
KCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9y
bWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5m
byh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAt
PmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0
Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAg
ICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6Oklt
YWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICBy
ZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQK
ICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQo
dGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVs
KSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9y
bVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50
ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFz
LT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUg
U1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdl
KHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9u
dENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01T
b3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpA
QCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdl
KGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKElt
YWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0
Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxS
VUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBG
SVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5
IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAw
Y2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1
YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBS
ZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBU
aGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3Ip
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEz
MDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRh
ODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENo
cm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRk
ZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5k
KQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxh
dGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2
OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJh
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JI
aWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNr
ZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAg
dm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJp
dmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmll
d3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZh
ZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIK
ICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJT
ZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgog
CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVu
ZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3Mg
bnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNz
TGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNo
b3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUx
Li5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYg
ZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWlu
dFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNj
YWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2Fs
ZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAt
aW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25z
b2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3Bw
CmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUx
ZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNp
emUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNp
emUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFn
ZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBz
b3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFn
ZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
aW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNTVhNzAwNWU0
Mjg1YWI0NzdmOTM5YmU4Y2U2YWVhYjU2MjA2ZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fp
cm8uY21ha2UKQEAgLTEzLDcgKzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRp
b25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZi
MGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93
X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3Mg
SG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAg
IHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0
ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAg
LTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dAppbmRleCA0MjFkZmJkOTU3NTRjNDYyNzU3Yjc4ZGJmYTQxMDI1NDMyYWYwYjdkLi5kMjNi
YjAyM2U3ZDc4NDBhZWJhYTQxNGY5OWYwYmMwYzFmMmNkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QYXRoQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2Fl
Zjg1NDFkZWUwNjJiZmUwNTQxNmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4
X3QgeworICAgIFByZW11bHRpcGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZkNWJh
MjAwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
Y2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6
dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJhY2tl
bmQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1
ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdD
b250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKwor
ICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlzaWNh
bEltYWdlQnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKaW5kZXggZjU4NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4u
MzViZDU4YzNkMTJmZjg0YzBlNjY0MmY4MTgyNzA5OWNlODM3ZTI4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MCw3
ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQo
KSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9
CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFl
MDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3NGRk
Mzc0ZWVhMWQ0Mjg0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5k
ZXggY2VlYTFkYTQwZWIzMmZmNzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNiZTRh
YzZiODg0MzY0YzU1NDM5N2Y3ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTEyMiwxNyArMTIzLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFs
aWduCiB9OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAg
VW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9j
YXRpb24gcmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUu
Ci0gICAgQWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biB7Ci0gICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmlu
ZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNv
cmU6OkJsZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUp
OwogYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUm
KTsKQEAgLTE0Myw3ICsxMzMsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRS
dWxlKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IGMwMTI2MzcwY2I4NjU5
MjdhMzJiZjExZjYxNDg2ZDcxYWY3YjQ3NTguLjRlMmJlNzFjNzQxYzU1ZjU2YzBhZDA0NmE3OTdl
NTBhMDk3MTg4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7
Ci1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICog
TWF4Q2xhbXBlZExlbmd0aDsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6
OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
KTsKK30KIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6
U1JHQiwgY29udGV4dCk7Cit9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICgh
c3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxl
IGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBz
dWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJp
bmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKKworc3Rh
dGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0IGZs
b2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7
CiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKIHsKQEAgLTEwNSw5NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVj
dC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShD
RykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0
YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNr
ZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKSkKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25T
aXplKEZsb2F0U2l6ZSBzaXplKSBjb25zdAotewotICAgIHJldHVybiBzaXplOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09
IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4g
bGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNw
YWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdi
TFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5Owot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9y
ID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAg
ICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2Ug
aWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMg
Y29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29s
b3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cp
Ci0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFz
aygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6
ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
bHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxl
bmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8
IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBh
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEg
PSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAy
NTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEp
OwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5j
ZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdp
dGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJp
Y0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9y
bUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwg
Ym9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewot
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUg
Y29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAg
ICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBh
bmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAog
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpAQCAtMjA0LDYzICsxMjUsMjcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QKIAogICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAKLSAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEs
IGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywg
LXJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29t
cGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3Bh
Y2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNw
YWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRo
ZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNp
emUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUo
c2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFu
c2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlv
biB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNp
emUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXI7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoY29udGV4
dC5zY2FsZUZhY3RvcigpLCB0aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0
dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNpZiAhVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5
Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZv
a2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJl
ZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBw
b2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICog
aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50
b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmco
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVy
biAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRl
eCAzYmRlZTRlZTAwZWQxN2FlMzQzYjJmNmE4ZGRkMDA5Mzg5YzJlNmJmLi5jNjBiNzVkNGZiZmJh
NWQyYmQ0NTBiMTNhNzUzMTMwZmM2YmNjYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE3MCArMjcsODEg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2luY2x1
ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1w
ZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNs
YXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkg
ewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRv
bid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1
ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNlcnZl
UmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsKK25hbWVzcGFjZSBEaXNwbGF5TGlz
dCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9S
VCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBj
bGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50
ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNl
OjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBD
cmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29w
eSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgLy8gQ3JlYXRlIGFuIGlt
YWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVz
b2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNv
bnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKLQotICAg
IC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsg
fQotCi0gICAgRmxvYXRTaXplIHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKSBjb25z
dDsKLQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1
dGlvblNjYWxlOyB9CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBp
bmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9y
IGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShj
b25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24g
dGhlIGZhc3RlciBjb3B5SW1hZ2UgTW9kZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlm
IGl0IHN1cHBvcnRzIHRoZSBEb250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9y
IHJldHVybiBDb3B5QmFja2luZ1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFj
a2luZ1N0b3JlQ29weSBmYXN0Q29weUltYWdlTW9kZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgZW51bSBDb29yZGluYXRlU3lz
dGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0gfTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUq
IHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KIAotICAgIHZvaWQgcHV0Qnl0ZUFy
cmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZm
ZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRy
YW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKICAgICAKLSAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1v
cnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFs
TWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQot
I2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9p
ZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNl
LCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRl
ZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHND
bGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMg
RmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9h
dFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0g
ICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8v
IFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXpl
KCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3Vs
dC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Pik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1h
cD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRh
dGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2lj
YWwpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29s
LCBib29sKSBjb25zdCA9IDA7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7CiAKLSAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFz
aygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xh
c3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1h
Z2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXpl
IG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0
aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nl
c3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBr
bm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsK
LSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RX
aW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Kiwg
Ym9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCi0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwo
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzJiZGY2
Yzk2NGQ1OTVlODQyYTNiNjFmZTYzYjc5NTVkYjU5MTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9sb2dp
Y2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFsU2l6ZSkK
KyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdo
dCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4
cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXpl
IGludGVybmFsU2l6ZSA9IEludFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJS
b3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxz
aXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYg
KG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAg
ICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1f
aW50ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAg
IHJldHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5
LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4
X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYg
KCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBs
dW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlh
IC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBs
dW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1
bWluYW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQor
CitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0
SW1hZ2VEYXRhQXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENs
aXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsK
KyAgICBhcmVhICo9IHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5h
bFNpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBz
cmNSZWN0KTsKKyAgICBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBw
ZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRYKC1zcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAg
ICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgp
ICE9IHNyY1JlY3Quc2l6ZSgpKQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQ
dXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBl
ZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsg
SW50UG9pbnQ6Onplcm8oKSwgc3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJz
ZWN0aW9uKGRhdGFSZWN0LCBzcmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RD
bGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChz
cmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3Jj
UmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Qu
c2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJl
Y3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3Qu
aW50ZXJzZWN0KGJ1ZmZlclJlY3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0
UmVjdC5zaXplKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhl
bCkKK3sKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsx
XTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBz
cmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9V
bnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhl
bCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8
fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxp
ZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVz
dENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1
NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAv
IGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxw
aGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChz
cmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQo
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50
OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUp
IHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3Jt
YXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1h
dCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEu
CisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1Owor
ICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAg
ICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3Rvciko
Q29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3Rh
dGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAgQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAor
ICAgIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3Qg
Ynl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
c2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0
ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0
LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
c3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNB
bHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRl
c3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsK
KyAgICAgICAgY29weUltYWdlUGl4ZWxzU2xvdzxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3c8
Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNvcHlJbWFn
ZVBpeGVsc1Nsb3c8Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg1ODQwZmI0OWEzMmM1NWIzNzM4ZGQ3NjU4OTUxNWFjYmRmZWFm
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xh
c3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9y
ZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5Lgor
ICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0
aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7
CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4
X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGluYXRlU3lz
dGVtIDogdWludDhfdCB7CisgICAgTG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307CisKK2Ns
YXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW1hZ2VCdWZm
ZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJ
bnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9Cisg
ICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2Nh
bGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
U3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1l
bW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2Fm
ZUdldCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1
cm4gMDsgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlLCBDb2xvclNwYWNlKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyBy
ZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29y
ZGluYXRlU3lzdGVtKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJ
bWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0
KSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3Jj
Um93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxT
aXplOworICAgIEludFNpemUgbV9pbnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9u
U2NhbGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZi
ZDEyYWJlNTQzYzNmMjAzNGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2
OTRkMzgxYWNiYzkyNjBkYmI0N2U5ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlz
aWNhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mPEltYWdlQnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAg
IGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6
Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBi
YWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAg
ICB9CisKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVh
bCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5n
ZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQt
PmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkg
PyBlbnN1cmVCYWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3Vy
ZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsg
fQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUo
KTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAx
OyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVu
c3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAg
IHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1
cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsg
fQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5
QmVoYXZpb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tl
bmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFj
ZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJM
KG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFj
a2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0
YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRG
b3JtYXQsIHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29u
c3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3Jk
aW5hdGVTeXN0ZW06OkxvZ2ljYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7
CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBk
YXRhU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlw
bHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmExMTU5ZmZlOGRkMjBhMTdiZTMyMDBi
N2FlMTkxZDU5M2U4NDI3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAo
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisj
ZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJEKQor
dXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIFVT
RShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShDQUlS
TykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIEFjY2VsZXJhdGVkUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDsKKyNlbHNlCit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0g
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFn
ZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1
ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRm
b3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY0ZjAwODYxODVjZjIyODViYmYyNTU4MmY5OTcyMzlmNmU5ZDdlZTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdC
YWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisK
K1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tl
bmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdC
YWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdp
bmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRv
dy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0
KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0
ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3Rl
OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQ
bGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
aW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NzFiOTJkNTg0ZmVlOGY0YWY3YTg1OTY0ZWFhYmMxY2VkNTAxNzMxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3Mg
SW50U2l6ZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUo
KTsKKworICAgIHN0YXRpYyBSZW5kZXJpbmdCYWNrZW5kJiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgCisgICAgdmlydHVhbCB+UmVuZGVy
aW5nQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01v
ZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iY2MzOTg4ZmQ2NDNkYTcwNDQxZTUzMzhiMTZhMTFiMDU0NjMxMzg0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIHsKKyAgICBBY2NlbGVyYXRlZCwKKyAgICBVbmFj
Y2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3Qs
CisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAKaW5kZXggNDA0MWIzZjgxMDc2NzhjNTZhY2RiMGM1MzNhMDk4NmY3ZTY0NTU5Ni4u
NjEyZjllOWQyMmQ2NzFmNjhkNTY1ZjEyNDQ5NGVjMzMyZDVmOTQ1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTgzLDcgKzgzLDcg
QEAgcHVibGljOgogICAgICAgICBjbGVhclNjcmF0Y2hCdWZmZXIoKTsKIAogICAgICAgICAvLyBT
aGFkb3dCbHVyIGlzIG5vdCB1c2VkIHdpdGggYWNjZWxlcmF0ZWQgZHJhd2luZywgc28gaXQncyBP
SyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShyb3VuZGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogICAgIH0KIApAQCAtNTkzLDcgKzU5Myw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTYyMSw3ICs2MjEs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNl
dFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRS
ZWN0JiBmdWxsUmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaG9sZVJlY3QsIGNvbnN0IExh
eWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZl
ckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6
ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02ODUsNyArNjg1LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnMKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0
U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obGF5
ZXJJbWFnZVByb3BlcnRpZXMpOwotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxh
eWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1h
Z2VCdWZmZXIuZ2V0KCk7CiAjZW5kaWYKIApAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uCiAjaWYgVVNFKENHKQogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNo
QnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxz
ZQotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxh
dGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1hZ2VCdWZmZXIuZ2V0KCk7CiAj
ZW5kaWYKIApAQCAtODg0LDEyICs4ODQsMTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hhZG93
QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGEKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0
ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJsdXJMYXll
ckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRo
KCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJl
Y3QsIHsgfSk7CisgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdC5zaXplKCksIGJsdXJS
ZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1h
Z2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKQEAgLTkx
Miw3ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiAgICAgYWRqdXN0Qmx1clJh
ZGl1cyh0cmFuc2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFVu
YWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggNjJjNzlmMTNhMWM3MjRkZGYzN2E5
NDY0ZjgzMmNkNmY3NzllMDdkOC4uODBhMDI1ZThlNmNhODhhNmI0N2ZjN2ZkYzVlNWM1ZTI1MGY5
ZmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgZW51bSBQYXRo
RHJhd2luZ1N0eWxlIHsKIAogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRm
b3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdl
LCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNp
emUsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJm
YWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9
IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAg
ICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9h
dFJlY3Qocm91bmRlZEludFBvaW50KGxheWVyT3JpZ2luKSwgbGF5ZXJTaXplKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgbGF5ZXJTaXplKSwgeyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVP
cGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAg
fQogfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZl
cihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1CiAvLyBGSVhN
RTogVGhpcyBpcyBtb3N0bHkgc2FtZSBhcyBkcmF3U2hhZG93TGF5ZXJCdWZmZXIsIHNvIHdlIHNo
b3VsZCBtZXJnZSB0d28uCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93SW1hZ2UoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgU2hh
ZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllcklt
YWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRp
dmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmds
b2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xOTEsNyArMTkxLDcgQEAg
c3RhdGljIHZvaWQgZmlsbFNoYWRvd0J1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBzYXZlKHBsYXRmb3JtQ29udGV4dCk7CiAK
LSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKQorICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgc3Vy
ZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2luLCBleHBhbmRlZEludFNpemUobGF5ZXJT
aXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCmluZGV4IDliMDI1ZTE0NzY3MzUyZTE0YWQ0OGY4NjdiMDQ1ODVlZTgwMzQxMzQu
LjRlMWJmMmI0MzY3ZjM0MzU5ZDg1NGViNzhjMjIwMmRmNTdiMjc0NzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZQogICAgIH0KIAogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAg
ICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5n
ZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cAppbmRleCA5Yzc2ZTI5MTJmODFmYzk0YWRiNWM0ODQ0NTI3MTM0NjBkY2ZiMjhmLi4yOWEwZWM0
OTk0ZjM2MTVkODdiMWJiNGUxZTMzZDc2ODgwN2NiYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5jcHAKQEAgLTQxMSw3ICs0MTEsNyBAQCBJbnRSZWN0IEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1h
Z2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3Bs
YXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk2NTdlM2IyOTllZDZl
YjRjNWNjMzVkYjk1MzI0NTc4Nzc3NWI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzgxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLSNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0
ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPGNhaXJv
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUg
IkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlm
Ci0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxl
cG94eS9nbC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
LSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2Vu
ZGlmCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlQnVmZmVyRGF0YTo6
SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KDApCi0gICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgICwgbV9j
b21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0gICAgLCBtX3RleHR1cmUoMCkKLSNlbmRpZgot
ewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIG1fbmljb3NpYUxheWVyID0gTmlj
b3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKLSNlbHNlCi0gICAgICAgIG1fcGxhdGZv
cm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19Ci0KLUltYWdlQnVmZmVyRGF0YTo6fkltYWdl
QnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIEdMQ29udGV4dCogcHJl
dmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCkt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0
dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGlmIChwcmV2aW91
c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQo
KTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19BTElHTk1FTlQsIDEpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwg
R0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2Uo
KSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKLSAgICBjYWlyb19z
ZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7
Ci19Ci0KLSNpZiAhVVNFKE5JQ09TSUEpCi1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gSW1hZ2VCdWZmZXJEYXRhOjpwcm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVm
ZmVyRGF0YTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgR0xDb250ZXh0KiBwcmV2aW91
c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLQotICAgIGlmICghbV9jb21w
b3NpdG9yVGV4dHVyZSkgewotICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAg
ICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgICAgICAgICBw
cm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkQmxlbmQsIEdMX1JHQkEpKTsKLSAgICAgICAgICAgIH07Ci0jaWYgVVNFKE5JQ09TSUEpCi0g
ICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0g
ICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhl
IGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNh
c2VzCi0gICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5k
ZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAot
ICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgotICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAg
ICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7Ci0gICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOwotCi0gICAg
aWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLSNlbmRpZgotCi12b2lkIGNsZWFyU3VyZmFjZShj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOwot
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwot
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNy
ZWF0ZUNhaXJvR0xTdXJmYWNlKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0g
ICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBXZSBtdXN0IGdlbmVy
YXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkg
Zm9yIGV4dHJhY3RpbmcgaXQKLSAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCi0g
ICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLQotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0KLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBs
ZXZlbCAqLywgR0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCAvKiBi
b3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgY2Fpcm9fZGV2
aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7Ci0KLSAgICAvLyBUaHJlYWQt
YXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMu
Ci0gICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7Ci0K
LSAgICBtX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdGV4dHVyZSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIGNsZWFyU3VyZmFjZShtX3N1cmZhY2Uu
Z2V0KCkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fp
cm9TdXJmYWNlQ29weShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgYXV0byBjb3B5
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0Iz
MiwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSkpOwotCi0gICAgYXV0
byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFp
bnQoY3IuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0g
Q0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0gICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQoc3VyZmFjZSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKLSAgICAgICAgcmV0
dXJuIHN1cmZhY2U7Ci0KLSAgICByZXR1cm4gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlKTsKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAg
ICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1
cyhzdXJmYWNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLQotICAgIGF1dG8g
cGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKLSAg
ICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KHN1cmZhY2UuZ2V0KCkpICoKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLU5hdGl2ZUlt
YWdlUHRyIEltYWdlQnVmZmVyOjpuYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGF0YS5tX3N1cmZhY2UuZ2V0KCk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vz
cykKLSAgICA6IG1fZGF0YShJbnRTaXplKHNpemUpLCByZW5kZXJpbmdNb2RlKQotICAgICwgbV9s
b2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZXJy
b3IuCi0KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICog
c2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihtX3Jlc29sdXRp
b25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRv
bWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2Nh
bGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQpOwotICAgIG1fZGF0YS5tX3NpemUgPSBtX3NpemU7Ci0KLSAgICBpZiAobV9zaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZCkgewotICAg
ICAgICBtX2RhdGEuY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLSAgICAgICAgaWYgKCFtX2RhdGEu
bV9zdXJmYWNlIHx8IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkp
ICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyaW5n
TW9kZSA9IFVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0
byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmlu
Z01vZGUgPT0gVW5hY2NlbGVyYXRlZCkKLSNlbHNlCi0gICAgQVNTRVJUKG1fZGF0YS5tX3JlbmRl
cmluZ01vZGUgIT0gQWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0gICAgewotICAgICAgICBzdGF0aWMg
Y2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7Ci0KLSAgICAgICAgaW50IHN0
cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIs
IG1fc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgdm9pZCogc3VyZmFjZURhdGE7Ci0gICAgICAgIGlm
ICghdHJ5RmFzdFplcm9lZE1hbGxvYyhtX3NpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVl
KHN1cmZhY2VEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEubV9z
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7Ci0gICAgICAgIGNh
aXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCAmc19zdXJm
YWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsgZmFzdEZyZWUoZGF0YSk7
IH0pOwotICAgIH0KLQotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOyAgLy8g
Y3JlYXRlIHdpbGwgbm90aWNlIHdlIGRpZG4ndCBzZXQgbV9pbml0aWFsaXplZCBhbmQgZmFpbC4K
LQotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCks
IG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkp
OwotICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9k
YXRhLm1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0g
ICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6
ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1h
Z2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLm1fY29udGV4
dDsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKQotewotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Is
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICAvLyBjb3B5Q2Fpcm9JbWFnZVN1cmZh
Y2UgaW5oZXJpdHMgc3VyZmFjZSdzIGRldmljZSBzY2FsZSBmYWN0b3IuCi0gICAgaWYgKGNvcHlC
ZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gQml0bWFwSW1hZ2U6
OmNyZWF0ZShjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwot
Ci0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBv
biBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+KG1fZGF0YS5tX3N1cmZhY2UpKTsKLX0KLQotQmFja2luZ1N0b3JlQ29weSBJ
bWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlQnVm
ZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChkZXN0aW5h
dGlvbkNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAgICAgICBpZiAoJmRlc3RpbmF0
aW9uQ29udGV4dCA9PSAmY29udGV4dCgpKQotICAgICAgICAgICAgc3VyZmFjZSA9IGNhaXJvU3Vy
ZmFjZUNvcHkoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RpbmF0aW9uQ29u
dGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgY29uc3QgYXV0
byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsK
LSAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRp
b25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGNvbnRl
eHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBz
dXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RSZWN0LCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUgY29sb3Ig
c3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRh
U3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgp
KTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdo
dCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRy
PHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhl
bCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJl
bXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihs
b29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAgICAgKnBp
eGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX2RhdGEubV9z
dXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUu
aGVpZ2h0KCkpOwotfQotCi1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjb3B5U3VyZmFjZVRvSW1h
Z2VBbmRBZGp1c3RSZWN0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBjYWlyb19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlwZSA9IGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUoc3VyZmFjZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW1hZ2Us
IHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRhdGE7Ci0gICAgLy8gb3RoZXJ3
aXNlIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBzdXJmYWNlIGltYWdlCi0gICAgaWYgKHN1cmZhY2VU
eXBlID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7
Ci0gICAgCi0gICAgcmVjdC5zZXRYKDApOwotICAgIHJlY3Quc2V0WSgwKTsKLSAgICByZXR1cm4g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHByZW11bHRpcGxpZWQ+Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsUmVj
dCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIC8v
IFRoZSBhcmVhIGNhbiBvdmVyZmxvdyBpZiB0aGUgcmVjdCBpcyB0b28gYmlnLgotICAgIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qu
d2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0g
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQo
KSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
Q2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keCA9IDA7
Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQocmVjdC54KCksIHJlY3Qud2lkdGgoKSwgZW5keCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUg
YWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keSA9IDA7Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQo
cmVjdC55KCksIHJlY3QuaGVpZ2h0KCksIGVuZHkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHggPiBzaXplLndp
ZHRoKCkgfHwgZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwo
KTsKLQotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAg
ICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAg
b3JpZ2lueCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCi0gICAg
ICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3Jp
Z2lueDsKLQotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsK
LSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAg
ICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQot
ICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBv
cmlnaW55OwotCi0gICAgLy8gTm90aGluZyB3aWxsIGJlIGNvcGllZCwgc28ganVzdCByZXR1cm4g
dGhlIHJlc3VsdC4KLSAgICBpZiAobnVtQ29sdW1ucyA8PSAwIHx8IG51bVJvd3MgPD0gMCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1
cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVk
IHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhp
cyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChvcmlnaW54LCBvcmlnaW55LCBu
dW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1
cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KGRhdGEubV9zdXJmYWNlLmdl
dCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3Vy
ZmFjZS5nZXQoKSwgcmVzb2x1dGlvblNjYWxlLCByZXNvbHV0aW9uU2NhbGUpOwotICAgIG9yaWdp
bnggPSBpbWFnZVJlY3QueCgpOwotICAgIG9yaWdpbnkgPSBpbWFnZVJlY3QueSgpOwotICAgIGlm
IChpbWFnZVN1cmZhY2UgIT0gZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhp
cyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLgotICAgICAgICBJbnRSZWN0IGxvZ2ljYWxBcmVhID0gaW50ZXJzZWN0aW9uKGxvZ2ljYWxS
ZWN0LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdo
dCgpKSk7Ci0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIGltYWdlU3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgtbG9naWNhbEFyZWEueCgp
LCAtbG9naWNhbEFyZWEueSgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsQXJlYS5zaXpl
KCkpLCBJbnRTaXplKCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VT
dXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRh
KCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFn
ZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0
LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0
eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHgg
KyBvcmlnaW54OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZy
b21QcmVtdWx0aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlv
biBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSAoKnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCByZWQgPSAoKnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWdu
ZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11
bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3Jl
ZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1
ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
bHVlOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9
Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9n
aWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNv
bHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJ
bWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9
PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9u
U2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFs
dWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5
RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewot
ICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lz
dGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0g
YmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3Jl
UmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6
OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSog
cGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29v
cmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0
b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJu
IGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNr
aW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2lu
Z1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3Vy
Y2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9p
bnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VS
ZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChk
ZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFT
U0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291
cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VS
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291
cmNlUmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgp
ICsgbG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBB
U1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAg
aW50IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7
Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291
cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0g
ICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1
bW5zID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNj
YWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkg
KyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERl
c3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49
IDApOwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9y
aWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZ
KCkpOwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNl
UmVjdC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkg
KyBsb2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhl
aWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNh
bE51bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXpl
IG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3Rl
bS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZl
ZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChk
ZXN0eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZp
Y2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VS
ZWN0LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBj
b25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRl
c1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsg
Kyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNp
Z25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4Owot
Ci0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZy
b21Db2xvcigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBw
aXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQp
IHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3Vy
ZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBj
YWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9n
aWNhbERlc3R4LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93
cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsK
LSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90
aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgp
LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNp
emUobG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxE
ZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKLSAgICB9Ci19Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQotc3RhdGljIGNhaXJvX3N0YXR1
c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0
b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKLSAgICAgICAg
cmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICByZXR1cm4gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0KQot
ewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsg
Ly8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotCi0gICAgcmV0dXJuIGNh
aXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0
cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29k
ZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGVuY29kZWRJbWFn
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFy
PiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNv
ZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlOwotICAgIGlmICghaW1hZ2Ug
fHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29kZWRJbWFnZSkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZW5jb2RlZEltYWdlOwotfQotCi0jZW5kaWYKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmICFVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQotewotICAgIEFT
U0VSVChtX3RleHR1cmUpOwotCi0gICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNv
bnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4K
LSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKLSAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgc3RhdGljX2Nh
c3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJl
LCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX3NpemUsIHRhcmdldFJlY3QsIG1hdHJp
eCwgb3BhY2l0eSk7Ci19Ci0jZW5kaWYKLQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiBtX2RhdGEubV9uaWNvc2lh
TGF5ZXIuZ2V0KCk7Ci0jZWxzZQotICAgIGlmIChtX2RhdGEubV90ZXh0dXJlKQotICAgICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxJbWFnZUJ1ZmZlckRhdGEqPigmbV9kYXRhKTsKLSNlbmRpZgotI2Vu
ZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUg
cmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKLSAgICBpZiAocHJlbXVsdGlw
bHlBbHBoYSB8fCBmbGlwWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2Rh
dGEubV90ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHQ0dMZW51bSBiaW5k
VGV4dHVyZVRhcmdldDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgYmluZFRleHR1cmVUYXJn
ZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+
IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOwotICAgIGNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHVpbnQzMl90IGZibzsKLSAgICBnbEdlbkZyYW1lYnVmZmVy
cygxLCAmZmJvKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsK
LSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9kYXRhLm1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCksIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVU
YXJnZXQsIDApOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAg
ICBnbEZsdXNoKCk7Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgcmV0
dXJuIHRydWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9Q
QVJBTShkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxwaGEpOwotICAgIFVOVVNFRF9QQVJB
TShmbGlwWSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMWZiMmZlZTk4MGY4OTJhMmQyYjVjNzQ5ZWJlZWNlNGJm
MTdjODI3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGls
aXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxT
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1f
c3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0
YXR1cyhtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJl
ZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkp
KTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Km1fY29udGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVz
UGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNr
aW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0g
YWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAg
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9
CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJm
YWNlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNh
aXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5n
ZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAg
ICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAg
ICAgIGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRp
dmVJbWFnZShjb3B5QmVoYXZpb3IpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2Ug
dGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcElt
YWdlOjpjcmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOworfQorCitSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwg
b3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlC
YWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJ
bWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3Jl
OjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChz
cmNDb2xvclNwYWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAg
ICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9
IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpT
UkdCKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9y
U3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNv
bG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJn
YkxVVCk7CisgICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdC
KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNl
UmdiTFVUPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29s
b3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAg
YXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAg
ICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30K
KworU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1l
VHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJh
c2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNl
NjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1h
Z2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7
CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sK
KyAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCk7CisgICAgY2Fp
cm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGE7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAgIGltYWdlRGF0YS5hcHBlbmQo
cGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgor
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwor
CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBo
YUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0
LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNy
Y1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3Jk
aW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAg
c3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNy
Y1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNy
ZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0
UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNj
YWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisg
ICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkg
KyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngo
KSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywg
c3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJh
eTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBh
cnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVjdCBz
cmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAgICAg
ICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNyY1Jl
Y3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJlY3Qg
c3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJ
bWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQsIHNy
Y1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RC
eXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IDQgKiBzcmNTaXplU2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9
IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5w
dXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAg
ICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6
OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAg
ICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwg
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0Lmhl
aWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENB
SVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzgyOWFmZjM2
NTI0ZDA4MThjMTQzODAzYWQ2NDhjZDJjM2VlOTc1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5k
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKKworICAg
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBv
dmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShD
b2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJy
aWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkg
b3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
Jik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpIHsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJv
U3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygp
IGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZv
cm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmKTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bV9zdXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsg
bnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZTkxMDBmNzRlYTBhZWNmMTAyMWMwMzM4NDk5ZDczMTE2YWU4NDc5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lu
Y2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJF
UE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+
CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBP
WFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJT
dXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVy
bmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byog
Y29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
CisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2Ug
dGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBhIHBy
ZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRleHR1
cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1
cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
IGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwor
CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEs
IGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVy
ICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90
KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJl
bmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAg
IGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAg
YXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1
cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCB0ZXh0dXJlLCBpbnRlcm5hbFNp
emUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZh
Y2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5l
dyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSwgdGV4dHVyZSkpOwor
fQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0ZXh0dXJl
KQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQorICAgICwg
bV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lm
IFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVy
OjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZh
Y3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgor
fQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVT
RShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5k
aWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0Ojpj
dXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYg
KG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVy
ZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Cisj
ZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3Vz
QWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIq
IEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkK
KyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAgIGlmIChtX3RleHR1
cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZ
KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAi
U2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9u
IGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8
IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Cisg
ICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIGJp
bmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9D
VUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNy
ZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVp
bnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5h
bGZvcm1hdCwgMCwgMCwgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVp
Z2h0KCksIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOworICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEZsdXNoKCk7Cisg
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250
ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFy
aW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxT
aXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1f
Y29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3Jf
dGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFs
U2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFz
KG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQor
eworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgY3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAg
ICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5Lmxv
Y2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9p
bnRlcm5hbFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAg
ICAgICAgICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRv
d25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFM
YXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCpt
X3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBi
ZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3
aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZy
YW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJh
bWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0
b3IgYnVmZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5n
ZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9j
b21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFp
bnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4
dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
K30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IG9wYWNpdHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkg
Y2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBi
YWNrIGFmdGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0
ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZh
Y2UuZ2V0KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5k
cmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1faW50
ZXJuYWxTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5Yjc4ZWEwMDFlNzhkMGNhYjc3YjRhMDNkNzExZjc0
Mzg0ZjU5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9y
bUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIH5JbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0
dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxp
cFkpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lk
IGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0
Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5
OworI2VuZGlmCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFj
ZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9j
b21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7
IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIFVTRShDQUlSTykg
JiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGMzZmJlNTNj
NGE1YzJiMDIxM2YxYjk1MWEyNTc1NzU0NmU4ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sK
KyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7CisKKyAg
ICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zv
cl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAg
dm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGludGVybmFs
U2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJm
YWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRl
cm5hbFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJf
ZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZv
aWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihu
ZXcgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKwor
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFH
RSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxv
b2tVcFRhYmxlKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaW50IHN0cmlkZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHVuc2ln
bmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJp
ZGUgKiB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2ljYWxTaXplLndpZHRo
KCk7IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKKyAgICAg
ICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4
ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29s
b3IucmVkKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLCBsb29rVXBUYWJsZVtw
aXhlbENvbG9yLmJsdWUoKV0sIHBpeGVsQ29sb3IuYWxwaGEoKSk7CisgICAgICAgICAgICAqcGl4
ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5n
ZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjcyMDNhZjRmMTUyMmYzMzQwMzU2YzAxMjFmZjFlOTE2MzVhYmQ5ZAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgewor
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisK
K3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYp
OworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJh
eTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2OTIz
ZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1ZmZl
ckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVTRShD
QUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVm
UHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVk
ZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZvcm1M
YXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29u
c3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyRGF0
YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBsYXRm
b3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBSZW5k
ZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZm
ZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRv
ckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3Vy
ZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxjYWly
b190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxOaWNv
c2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0jZW5k
aWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKLSNl
bmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJP
KQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWly
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzI0M2I2M2M1NDZjNzJhNzQ0ZmVhMTEz
OTczOTY4ODJlMzJiN2E1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKQEAgLTAsMCAr
MSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlclV0aWxpdGllc0NhaXJvLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWly
b1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxj
YWlyby5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiR1Jl
ZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShH
VEspCisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwg
Y29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICgh
cmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0
YSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKKyAg
ICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBib29sIGVuY29kZUlt
YWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rv
cjx1aW50OF90Piogb3V0cHV0KQoreworICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVU
eXBlID09ICJpbWFnZS9wbmciKTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Ig
bm93LgorCisgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFn
ZSwgd3JpdGVGdW5jdGlvbiwgb3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKwor
VmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIFZlY3Rvcjx1aW50
OF90PiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2Us
IG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1
cm4gZW5jb2RlZEltYWdlOworfQorCisjZWxzZQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1
ZmZlclNpemUpCit7CisgICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlw
ZXMgY29tZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCisgICAgLy8gaHR0cDov
L2RldmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNh
dmluZy5odG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2CisKKyAgICBTdHJpbmcgdHlwZSA9
IG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7CisgICAgaWYgKHR5cGUgIT0gImpw
ZWciICYmIHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAm
JiB0eXBlICE9ICJibXAiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdk
a1BpeGJ1Zj4gcGl4YnVmOworICAgIGlmICh0eXBlID09ICJqcGVnIikgeworICAgICAgICAvLyBK
UEVHIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0
ZXMgdGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCisgICAgICAgIC8v
IGNvbXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qg
c3VwcG9ydCBhbHBoYS4KKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFj
ZTsKKyAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKSB7CisgICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZGF0YShzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCisg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisg
ICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAor
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJm
YWNlU2l6ZShzdXJmYWNlKTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWly
b19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7CisgICAgICAgICAgICBj
YWlyb19wYWludChjci5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcGl4YnVmID0gYWRvcHRH
UmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1
cmZhY2UpKTsKKyAgICBpZiAoIXBpeGJ1ZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
R1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBx
dWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAg
U3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpx
dWFsaXR5ICogMTAwLjAgKyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZl
cihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0Zjgo
KS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0Zjgo
KS5kYXRhKCksIE5VTEwpOworICAgIH0gZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9f
YnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUu
dXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKKworICAgIHJldHVybiAhZXJy
b3I7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBH
VW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7CisgICAgZ3NpemUgYnVmZmVyU2l6ZTsKKyAgICBp
ZiAoIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBidWZmZXJT
aXplKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURh
dGE7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAg
IHJldHVybiBpbWFnZURhdGE7Cit9CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oR1RLKQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NhaXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RlMzNjN2NhMDk2Y2FkODkyMjYzNzM5
Yzc1Zjk1YjIwZmVkYzAzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitWZWN0b3I8dWlu
dDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNDk2ZWNhMzI0ZDNlNGRhMjJm
Y2E1OTk5OGViNWVmNWVlNzNkMjA5YS4uNzIyZWVmZmU2YzllNWZkMjg2NmJlMjcyODdhNDcwMjEw
MGNiZmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25z
dCBGbG9hdFJlY3QmIGRlCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGJ1ZmZlci5zaXpl
Rm9yRGVzdGluYXRpb25TaXplKGRlc3RSZWN0LnNpemUoKSk7CisgICAgRmxvYXRTaXplIGJ1ZmZl
ckRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTZmMTk2NGQwOTU1MmJkMWEyN2Zj
MGQyMjgwOWQ4YTNkYTZiNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVT
RShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+
Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdl
SU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0
aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFz
ZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShD
T0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNs
dWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMg
QVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9w
dGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVS
KEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1h
Z2VCdWZmZXIpOwotCi1zdGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tpbmdTdG9yZVNpemUs
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKLXsKLSAgICBmbG9hdCB4TWFnbmlmaWNhdGlv
biA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpIC8gaW50ZXJu
YWxTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxm
bG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRlcm5hbFNpemUuaGVpZ2h0KCk7
Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0aCgpICogeE1hZ25pZmljYXRp
b24sIGxvZ2ljYWxTaXplLmhlaWdodCgpICogeU1hZ25pZmljYXRpb24pOwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBMQVRGT1JNKENP
Q09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7Ci0gICAgY2Fz
ZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENHQml0bWFwQ29u
dGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJ
T1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAgICAgICAgY29s
b3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAg
ICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlID0g
YWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JT
cGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsK
LSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVy
aW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRp
YmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIo
c2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwg
c3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFw
aGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBz
aXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFj
ZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXplKHNp
emUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3Vj
Y2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgZmxv
YXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwot
ICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVp
Z2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxv
d2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhl
aWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5n
ID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkg
PD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGludCwgUmVjb3Jk
T3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29y
ZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQotICAgIC8vIFBy
ZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hl
Y2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndp
ZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUu
aGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6
ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgoKSB8fCBoZWln
aHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAgICAgICBhY2NlbGVyYXRlUmVu
ZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFVuYWNj
ZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7
Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2Vs
ZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUo
RmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpKTsKLSAgICAg
ICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2Rh
dGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVu
c3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRl
eHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwg
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vs
c2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlm
ICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAv
LyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGgu
Ci0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0
YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0g
ICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFT
U0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQot
I2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAg
ICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7
Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25z
dCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNp
emVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2
b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdl
IHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91
Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2Rh
dGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAg
ICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2Rh
dGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkp
OwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBj
b250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7
Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUp
OwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBp
bWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJl
bmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZv
ckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXplKSBjb25zdAotewotICAg
IHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNpemUsIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29u
c3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZy
b20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRh
IHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRl
cm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAg
ICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZh
Y2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdl
QnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFs
Qnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAg
IGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3Rh
bEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJu
YWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1v
cnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52
b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2Fy
ZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdz
IHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9u
bHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgot
ICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBi
ZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2Rh
dGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7
Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZl
cjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3Vy
ZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZGF0
YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAot
ewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0K
LXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nh
cnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIGlmIChp
bWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJv
dW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy53aWR0
aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMg
UmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFp
blB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBs
b2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJl
c29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29s
dXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2Fy
eShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBj
b250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lk
dGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAg
ICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNv
cHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVj
dChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBp
bWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNwYWNlKGxvZ2ljYWxTaXplLCBi
YWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXpl
SW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYg
KCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVS
ZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFs
U2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0
aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRT
aXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRT
aXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6
ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
OwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25T
Y2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUs
IGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5
SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLVJl
dGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1
cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2Uo
SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsK
LSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1
ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25z
dAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9y
KSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFn
ZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
LCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1Bl
clJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBt
X2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3Jl
OgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdl
KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5j
cmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdl
QnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGlt
YWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNl
OjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1Jl
Y3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1h
Z2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZm
ZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAg
aWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5n
U3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5
LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0g
ICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVz
dGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0g
JmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAg
ICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3Rv
cmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5Lgot
ICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
YWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9u
cyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFn
ZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAg
ICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0
UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPElt
YWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29w
eS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBh
dHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
LmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0
LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQot
Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYg
KGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQo
KTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0
ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAg
ICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBt
X2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNS
ZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwot
fQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAg
ICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29u
dGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAg
ICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGlu
YXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNv
dXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VT
aXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0
YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVj
dCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNo
ZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3Jl
YXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gICAg
aWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0KCku
ZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotc3RhdGljIGlubGluZSBDRlN0
cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9S
TShXSU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIo
InB1YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAg
Ci1zdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBp
T1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAg
cmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNl
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBp
cyB0aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFs
bCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUg
dG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQ
TkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwot
ICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21w
dXNlcnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1p
bWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkK
LSAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVH
SUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsK
LSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBD
RlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJl
ZiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3Rp
bmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5h
dGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFy
eVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAm
JiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAg
ICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVz
dGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51
bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1
YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxv
c3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXBy
ZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihD
RkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlL
ZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQot
Ci0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJs
YWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1h
dGgKLSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0g
dG8gd29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdl
dCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURl
c3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5n
IGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAg
VmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQ
dHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1
cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0
YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIo
Y2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQot
Ci1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBx
dWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRh
LmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRh
dGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICBy
ZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1SZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNv
bnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsK
LQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwot
ICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAo
Q0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3Qg
aGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBv
biB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAg
ICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBs
b2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5v
dWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgYXV0byBk
YXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0
ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKLSAgICAg
ICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCks
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgp
LCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1h
Z2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUg
PT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsK
LSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAg
ICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGlu
dGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNh
bFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENH
Q29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAg
ICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAs
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAg
ICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzaXplRm9yRGVzdGluYXRpb25TaXpl
KGxvZ2ljYWxTaXplKCkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQo
KSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNp
emVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9
Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRp
LmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsK
LQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwot
ICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0g
a0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRh
KCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAg
ICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3Mg
ZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBv
c2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53
aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRh
LnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVk
IGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAg
ICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAy
NTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0g
PSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsg
MV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxw
aGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgZGF0
YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1
ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQo
KSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAw
KSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291
cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAg
YXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVm
YXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwg
cXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURh
dGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVh
bGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAg
ICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1h
Z2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUs
IHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICBy
ZXR1cm4geyB9OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEo
KSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMGI2Nzc2MmJjZGIwNGM5OGQ3Nzk5ZWU0YzYyNTU0MGRk
MjdkNjBhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisj
aW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQoKQorewor
ICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0KCkudHJh
bnNsYXRlKDAsIC1tX2ludGVybmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dCgpLmFwcGx5
RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOworfQorCitzdGF0aWMgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYg
aW1hZ2UsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYg
KENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbnRlcm5hbFNp
emUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBpbnRlcm5h
bFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSkpOworICAgIHJldHVybiBpbWFn
ZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxp
bmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIGlm
IChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNl
c3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIGF1
dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXpl
LndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgo
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7
CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1v
ZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9h
dFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOworICAgICAgICBGbG9hdFNp
emUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGlt
YWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKwor
ICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEJp
dG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZp
b3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAg
TmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVy
biBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBt
X2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZl
UmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNp
bmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05h
dGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25T
Y2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsK
KyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChh
dXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8g
Q29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZGVzdENv
bnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJl
Y3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Cit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0
ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdl
ID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9y
ZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAgYXV0byB1dGkgPSB1dGlG
cm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBl
Z1VUSSgpKSkgeworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWws
IHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAg
ICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSwgQ29v
cmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBzaXplX3QgZGF0YVNpemUg
PSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAg
ICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0
YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0Rh
dGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRh
KCksIGRhdGFTaXplLCBudWxscHRyKSk7CisgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1h
Z2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4
LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NH
Qml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQ
cm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAg
ICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9u
ID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgw
LCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4
dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAg
IGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCks
IHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlw
ZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRh
VmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHks
IHByZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCks
IG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVS
QVRFKQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWdu
ZWQgYnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgdkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisgICAgCisgICAgdkltYWdlQnVmZmVyLmhl
aWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAg
IHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUu
d2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAg
dkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZv
cm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXIm
IGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgewor
ICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAg
ICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJH
QkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAg
ICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RB
bHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
KyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAg
ICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAg
ICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlE
YXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorCisgICAg
aWYgKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICAvLyBTd2Fw
IHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdC
ODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1
bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0
LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRT
aXplJiBzaXplKQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQg
JiYgc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGNvcHlJbWFn
ZVBpeGVsc1VuYWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNC
eXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRl
c3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVm
ZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4
ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RB
bHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbHNlCit2b2lkIEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNp
emUpCit7CisgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZChzcmNBbHBoYUZvcm1hdCwg
c3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQs
IGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQwNzY3YzE4NzMwMmMyNWJmZmQ1OWJjYTZlMGMw
ZmM3ZDAwZjE0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCYWNrZW5kIDogcHVibGljIEltYWdl
QnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4g
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRT
aXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisg
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkp
OyB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsK
KyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1
c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZvaWQg
c2V0dXBDb250ZXh0KCk7CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3Jj
Um93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM0YTdmNjU0ZGE1NTM2OTZiZjMxNjY0Njk1MTMyZWViNTk1OTcyYzYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cp
CisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisvLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAt
PiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCisjZGVmaW5lIFVTRV9BUkdCMzIgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKKworI2lmIFVTRV9BUkdCMzIKK2NvbnN0ZXhwciBjb25zdCBDR0Jp
dG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZp
cnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9y
bWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9IENvbG9yRm9ybWF0OjpCR1JBOworI2Vsc2UKK2NvbnN0
ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3Q7Citjb25zdGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENv
bG9yRm9ybWF0ID0gQ29sb3JGb3JtYXQ6OlJHQkE7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUg
aW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBp
bnRlcm5hbFNpemUud2lkdGgoKTsKKworICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbnRlcm5hbFNp
emUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRh
KSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGludGVybmFsU2l6ZS5oZWlnaHQoKSAq
IGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVt
Qnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZShkYXRhLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCA4
LCBieXRlc1BlclJvdywgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBEZWZhdWx0Qml0
bWFwSW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRl
eHQuZ2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQq
LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2Fz
dDx2b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFz
ZUltYWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQ
cm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92
aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRh
KQorICAgICwgbV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9j
b250ZXh0KFdURk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNT
RVJUKG1fZGF0YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENv
bnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSkpOworICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVy
biBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2ludGVybmFsU2l6ZS53aWR0
aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5dGVzUGVyUm93KCksCisgICAg
ICAgICAgICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcElu
Zm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgMCwgdHJ1ZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6
ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6
ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jv
d3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpOworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBD
b2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRl
c3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYg
bV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJl
Y3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNy
Y1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8
fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihtX2RhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBCYWNrZW5kQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENv
bG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXpl
KCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW50U2l6ZSBzcmNTaXplU2NhbGVk
ID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNv
bHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVkLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRl
c3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNyY1NpemVTY2FsZWQsIHNy
Y1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICAK
KyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhKSArIGRlc3RS
ZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplU2NhbGVkLndpZHRoKCk7CisgICAgdWlu
dDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5
dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgQmFja2VuZENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVj
dC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wN2M4MDAzMDA3
MjczMGZhMDg3YmYzNTQxM2Q2MzlhODA4N2ZmYzE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aApAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVi
bGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIE5hdGl2ZUltYWdl
UHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwg
Q29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVm
PiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworICAgIHVuc2lnbmVk
IGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLndpZHRoKCk7
IH0KKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+
IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1f
Y29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYzAz
MWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVT
RShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVk
QXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJy
YXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUp
Ci0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0j
aW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lP
U3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBh
bmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNF
X0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNp
ZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25z
dCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAg
QVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdklt
YWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVz
dCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5u
ZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEs
IEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZk
ZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlC
dWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYg
ZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwot
Ci0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFj
ZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBt
YXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4
ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0
LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1Bl
clJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFT
U0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0g
d2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1
dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0
OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0
OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2
SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5V
U0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9Q
QVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJB
VEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcs
IGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVz
dWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcp
IHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWln
aHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElP
U3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQu
ZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNl
LT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVy
YXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJl
Y3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0
RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3Vs
dERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHgg
PSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAg
IGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBz
aXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAg
IHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwot
ICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgp
OwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAg
ICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAg
ZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBv
cmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAg
ICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0g
b3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0
eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAo
b3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkg
PSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3Rk
OjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwot
ICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9
IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55
OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVH
ZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRl
c3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3Mg
PSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAg
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAg
ICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICog
NDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2
SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdl
dCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRh
dGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAg
ICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0Lmhl
aWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRl
c3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYg
VVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0
KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAg
aWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsr
eSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0
KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAg
ICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBV
U0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50
IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgICAgICBp
ZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93
c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAg
ICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRl
c3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNy
Y1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7
Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNl
eCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93
c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0g
c3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9
IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVsw
XTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAg
ICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBz
cmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
ICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdl
dCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3Jj
LmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAg
ZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRl
c3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAg
ICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAg
ICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJ
bWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRoICogNCku
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAob3V0
cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewot
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkg
ewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7
IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAg
ICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChi
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RS
b3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kp
IHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgp
OyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAg
ICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NF
UlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0
KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgp
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkg
KyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkp
OwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmln
aW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2Vk
PGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1h
eFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAg
ICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdp
bnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxp
bnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51
bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhl
aWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NF
UlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAg
Q2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNl
UmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0
KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0
aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHVp
bnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJv
dyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVu
ZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAg
ZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0eSAqIGRl
c3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxF
UkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0g
ICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNy
Yy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMg
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50
OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAg
ICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qu
aGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNp
ZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0
KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51
bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lm
IFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBh
cyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICBpZiAoc291
cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNy
Y1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3Jj
Um93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNl
eCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClb
MF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVsw
XTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJmYWNlOjpM
b2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9
IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
ICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IGNv
bnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVz
dDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0
LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBp
ZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRv
IEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jv
d3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9
IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93
cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTVhNTRhZDkx
MTc5NTNjYTVlNjk2ZGEwN2U2ZTBkZjY4MTQzZDU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQot
I2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7
Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBl
ZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFj
a2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0
ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5
IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsK
LSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0Jp
dG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRv
QkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
IGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25z
dCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQwNjE1M2I2MDVhYTU5NTE1OTMzOGE1YzZiZDNh
ZWY1MjM1NDY0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjA1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIK
KworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAg
ICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaW50ZXJuYWxT
aXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBp
bnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUs
IGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAo
IXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29u
dGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RX
aW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOworICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQg
c2VuZFJpZ2h0KQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5k
UmlnaHQpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdl
QnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAg
IEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRS
aWdodCkKKyAgICA6IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50
ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIElPU3VyZmFjZTo6Y3JlYXRl
RnJvbVNlbmRSaWdodChXVEZNb3ZlKHNlbmRSaWdodCksIGNhY2hlZENHQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UpKSkKK3sKK30KKworTWFjaFNlbmRSaWdodCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmNyZWF0ZVNlbmRSaWdodCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+
Y3JlYXRlU2VuZFJpZ2h0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5l
bnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRl
cygpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVy
Um93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQor
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNy
ZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lu
a0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2Uo
KSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2lu
dGVybmFsU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBj
b25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJl
YSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2Fs
U2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOworCisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50
OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFz
ZUFkZHJlc3MoKSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgp
LCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAg
ICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRS
ZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJh
eSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVk
LCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3Jj
UmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEo
KSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisK
KyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgSU9TdXJm
YWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBzcmNS
ZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7
CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBvdXRwdXRG
b3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0
UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3Jj
U2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVj
dDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2Fs
ICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2Fs
ZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAg
SW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXpl
U2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVj
dCk7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFj
Y2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIGRlc3RSZWN0Lnko
KSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93
cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsg
c3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscyhpbnB1dEZvcm1h
dCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVz
UGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIC8vIEZvcmNlIHJlY3Jl
YXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRo
aXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwg
MCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cp
ICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTUxMjcwMmZiZWM4YWYxNzEwYTY0N2E5ZDIyYjI1YjU3Y2NlZTc5ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpICYm
IChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSU9TdXJmYWNlOworCitjbGFzcyBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVi
bGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFs
U2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRS
aWdodCk7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBNYWNoU2VuZFJpZ2h0IGNyZWF0ZVNlbmRSaWdo
dCgpIGNvbnN0OworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBtZW1v
cnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgp
IG92ZXJyaWRlIHsgcmV0dXJuIG1lbW9yeUNvc3QoKTsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIg
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3Zl
cnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7ICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+JiYpOworICAgIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICB1bnNpZ25lZCBieXRl
c1BlclJvdygpIGNvbnN0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJm
YWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAm
JiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4IDg5ZDA0Mzlj
MjEwZGI1MDFhYzkzOWViMTE0MTQ4ODFlZWVjNjViMjQuLmQwOTEzOWYwMWJkMzM2ZjI4NDhhZWE1
MjZhNGY5ZjgwMGVlNzg1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCkBAIC0yNiw3
ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5o
IgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJp
dGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgUExBVEZPUk0o
Q09DT0EpCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCisjZW5kaWYKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00MSw0ICs1MiwxNDAgQEAgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklz
QmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpCiAgICAgcmV0
dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK0NGU3RyaW5nUmVmIGpwZWdVVEkoKQorewor
I2lmICFQTEFURk9STShDT0NPQSkKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKKyNlbmRpZgorICAgIHJldHVybiBrVVRUeXBl
SlBFRzsKIH0KKworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IHJldHVybiBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7CisjZWxz
ZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIg
aXMgdGhyZWFkc2FmZS4KKworICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBh
bGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBl
IHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KKyAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQg
UE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgorICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsK
KyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29t
cHVzZXJ2ZS5naWYiKTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSht
aW1lVHlwZSwgImltYWdlL3BuZyIpKQorICAgICAgICByZXR1cm4ga1VUVHlwZVBORzsKKyAgICBp
ZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikp
CisgICAgICAgIHJldHVybiBqcGVnVVRJKCk7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5n
QVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikpCisgICAgICAgIHJldHVybiBrVVRUeXBl
R0lGOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGtVVFR5cGVQTkc7
CisjZW5kaWYKK30KKworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmlu
Z1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRh
KQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9u
Q3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7CisgICAgaWYgKCFkZXN0aW5hdGlvbikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
aW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFs
aXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgLy8g
QXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRp
b24uCisgICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNy
ZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkp
KTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29t
cHJlc3Npb25RdWFsaXR5OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9u
UXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rp
b25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxs
QmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAgfQorCisgICAg
Ly8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZv
ciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKKyAg
ICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29y
ay4KKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1h
Z2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDRkRh
dGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIEFTU0VSVChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwor
CisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Cisg
ICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBr
Q0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEo
KS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAg
IGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAvLyBKUEVHcyBk
b24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9z
aXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndp
ZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7CisgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXplKTsKKyAgICAgICAgdW5zaWduZWQg
Y2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgeworICAgICAgICAgICAgdW5zaWduZWQgYWxw
aGEgPSBkYXRhW2kgKyAzXTsKKyAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKKyAg
ICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsK
KyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1
NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9
IGRhdGFbaSArIDBdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAx
XTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBo
YU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgorICAgICAgICBkYXRh
ID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAgIH0KKworICAgIHZlcmlmeUltYWdlQnVm
ZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgp
KTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDAp
KTsKKyAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3Vy
Y2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlk
ZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisKKyAgICBh
dXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZh
dWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBx
dWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRh
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRh
OworICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5n
dGgoZGF0YSksIGJhc2U2NERhdGEpOworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAi
O2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VE
YXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1
YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Cisg
ICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENG
RGF0YVJlZiBjZkRhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgZGF0YS5h
cHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7
CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdl
RGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBx
dWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENH
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCmluZGV4IDE2MTI4YTE5YWJkMWZiODNhYjMxYTExNWM2
ODk1MDQ5MWQ0MTk1NTIuLjg0YzU3ZDJmZWU5MzM4ZWQ1ZTBlZmM0YThlMzM2NWExOWE4MDIwNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKQEAgLTI1LDggKzI1LDMxIEBACiAKICNwcmFnbWEg
b25jZQogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKKwogV0VCQ09SRV9FWFBPUlQgdWludDhf
dCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90
IGJ1ZmZlclNpemUpOwogCi19CitDRlN0cmluZ1JlZiBqcGVnVVRJKCk7CitSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYpOworCiti
b29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRh
UmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdl
RGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7
CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7CitWZWN0b3I8dWludDhf
dD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDgwZjZiMTg3MjUyMjk2OGVhN2Q5NTc2Yjdl
MDA1NjMzMzI1ODgyM2MuLjI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9S
QU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAppbmRleCAyNDNjNDhiOTUx
YjE3NGI2YjI0YmFjNTM2NGM5YTA0ZmY5NjljZGIzLi40Y2MwZmEzZjc5NzI3ZWI5ZGVlZGM0YWQw
ZTExNzM0ZGFiMjE0YTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMTAwLDEwICsxMDAsNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21TdXJmYWNlKElPU3Vy
ZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlKENHSW1hZ2VSZWYpOwogICAg
IAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9FWFBPUlQgfklPU3Vy
ZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92ZVRvUG9vbChzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYxNjBjMDgxMDEw
OTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJkMTRmZGY0NTBm
YzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0V2luZG93Lmgi
CiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2lt
cG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQg
IlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5o
PgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVk
UG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9T
dXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRh
LnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JC
aXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90
IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRlc1BlclBpeGVs
KQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgK
aW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNhMTE0OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3
MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgK
QEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhd
LmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QpOwogCiAg
ICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAg
LTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29k
ZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwogCiB9IC8vIFdlYkNv
cmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0OwotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWYx
Y2UyNzM1NDUwYmRhYzNiYmRmMTFhMzA4NWQ5YTdmM2M5ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlM
aXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBE
aXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3
aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplKQorICAgICAgICA6IG1fY29u
dGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlz
cGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxT
aXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICB9KQorICAgIHsKKyAgICB9CisKKyAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERy
YXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgIH0KKyAgICBEaXNwbGF5TGlzdCYgZGlz
cGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxp
c3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNv
bnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICB7CisgICAgICAgIG1fdHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKKyAgICAgICAg
bV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlcGxh
eURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisgICAgeworICAgICAg
ICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOwor
ICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAgICAgICAgIG1fcmVw
bGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7Cisg
ICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3Jh
cGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0Owor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAg
ICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OworfTsKKworfSAvLyBE
aXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCBlNjE0MWJk
ZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1Li5hZjNhYWRlMmEzMzJjYzEwYTk2MTNm
MjEyNjE3MTdkZDFkODU4YjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTI4NiwxMyArMjg2
LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAg
ICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3
aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJ
bnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7
Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRvIHBpeGVsQXJyYXkg
PSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCwgJnBpeGVs
QXJyYXlEaW1lbnNpb25zKTsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VS
ZWN0KTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3Rv
cjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CiAKKyAgICBJbnRT
aXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCk7Cisg
ICAgcGl4ZWxBcnJheURpbWVuc2lvbnMuc2NhbGUocmVzdWx0SW1hZ2UtPnJlc29sdXRpb25TY2Fs
ZSgpKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZ
UEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNv
bG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVj
dCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpwaXhlbEFycmF5LCBpbWFnZVJlY3Quc2l6
ZSgpLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3Bw
CmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1NjE4ZThmZGRkODRlY2IuLjI1ZDU3YWYw
NmMwMWE3Yzc4YTdmYjk0N2Q0MDU4MDA0ZWE3MTcyZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKQEAg
LTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKQogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3
b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCiAgICAgSW50UmVjdCBzaGFkb3dBcmVh
KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQ
aXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93
QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0p
OworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSwgQ29vcmRpbmF0
ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKICAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJh
eS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRo
KCkpOwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5zaXplKCksIHNo
YWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRl
U3lzdGVtKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBzaGFkb3dBcmVhLnNpemUoKSwg
c2hhZG93QXJlYSwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsK
IAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJh
dG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3QoRmxv
YXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3IpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgK
aW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1MjdhNTYyNzM1M2RmNDQ5Ni4uZGQzNWNjNjVi
MTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03MSw3ICs3MSw3IEBAIHBy
aXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX3NvdXJjZUltYWdlOwog
ICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1f
YWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBV
bmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGUgeyBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAgZmxvYXQgbV9maWx0ZXJTY2FsZSB7IDEg
fTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1
MDc0YTJmOTcyYjU5MGZhLi41YzhiM2I0ZGUwYWZhNzE0NThjZGNmNmM2YmMwZmZkMmNjYmQxNDMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZp
bHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlv
blJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmICht
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+
cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRp
b25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0
KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBv
aW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDQzLDcgKzQ0Myw3IEBAIHZv
aWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5
JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
IHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZm
ZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVm
ZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7
CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpAQCAtNDY5LDcgKzQ2OSw3IEBAIHZvaWQg
RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYg
ZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkg
ewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZl
ci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VC
dWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7
CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhYjVhMGQ1MGY4Y2UxYWFmNjUzNWRlZWM5NDBiODVkYzU1MTdl
NGIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91
dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCi17Ci0gICAgLy8gTGlzdCBv
ZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUgR2RrUGl4YnVm
IGRvY3VtZW50YXRpb24uCi0gICAgLy8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBp
eGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhidWYtc2F2ZS10
by1idWZmZXJ2Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2Yg
ImltYWdlIik7Ci0gICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBuZyIgJiYgdHlw
ZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOwotICAgIGlmICh0
eXBlID09ICJqcGVnIikgewotICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBj
aGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVu
Y29kZSBhIFBvcnRlci1EdWZmCi0gICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFj
ayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KLSAgICAgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKLSAgICAgICAgaWYgKGNhaXJvX3N1cmZh
Y2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAg
ICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVf
Zm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAg
ICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsKLSAgICAgICAg
ICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlS
T19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2Uu
Z2V0KCkpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwg
c3VyZmFjZSwgMCwgMCk7Ci0gICAgICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVm
KG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGl4YnVmID0gYWRvcHRH
UmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKLSAgICBpZiAoIXBpeGJ1ZikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAm
JiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJp
bmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUpKTsKLSAg
ICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0
UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwg
InF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwotICAgIH0gZWxz
ZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZl
ci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0
cigpLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGEgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChpbWFnZURhdGEu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
YmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1hZ2VEYXRhLmRhdGEoKSwgaW1hZ2VEYXRh
LnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsg
IjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
cjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIEdVbmlxdWVPdXRQdHI8Z2No
YXI+IGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAgIGlmICghZW5jb2RlSW1hZ2Uo
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVy
U2l6ZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VE
YXRhOwotICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKLSAg
ICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNE
TGF5ZXIuY3BwCmluZGV4IDRjNGM0MjY5NjEyNzFjN2I3YTE5ZDI5NmE5NDAwZWZkYzBmYWM5YWUu
Ljc1NzAwM2IxZjExZGY0YjI3NjZiNDA5ZTgyMmNkOGI0MjBmYjRhNWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNE
TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEv
dGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgR0MzRExh
eWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKICAgICBJbnRTaXplIHRleHR1cmVTaXplKG1fY29u
dGV4dC5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0Lm1fY3VycmVudEhlaWdodCk7CiAgICAgVGV4
dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IG1fY29udGV4dC5jb250ZXh0QXR0cmlidXRlcygp
LmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDA7CiAjaWYgVVNFKEFOR0xF
KQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZXh0
dXJlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKaW5kZXggN2QyY2VmZDYy
NjFkZWUyYTM5YTg5ZDEwMTcwMmViNTAyNTJmNGY1ZS4uZjAzOTEzODA2MGQzNDQzNGU2Y2RkYmY5
NmVhNjRjMzAxYTYzNTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcApAQCAtMzgsNyArMzgsNyBAQCB2
b2lkIEJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXImLCBHcmFwaGlj
c0xheWVyKiBzb3VyY2VMYXllciwgYwogewogICAgIC8vIE1ha2luZyBhbiB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZCBidWZmZXIgaGVyZSBpcyBPSyBiZWNhdXNlIHRoaXMgY29kZQogICAg
IC8vIGlzbid0IHVzZWQgYnkgYW55IHBsYXRmb3JtcyB0aGF0IHJlc3BlY3QgdGhlIGFjY2VsZXJh
dGVkIGJpdC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cAppbmRleCAxYzY2YWQ3OWNlNDBjMTQ1NThmNjY1MjUyYjI1ZTNiYjdkZWQxNmJkLi44OTdjZTQw
ZDA0YzdlMGFkMWVhMTkyY2I5MTA2MTlmOGY5MjIyNGNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcApAQCAt
NDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZTo6aW1h
Z2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIG1faW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IGQ1Yjkx
YjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0NTguLjhmNTBlNTc1NzFkN2IzODUwMGVl
ZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmls
dGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAogICAgIGVuc3VyZUxheWVyRmlsdGVy
cygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmlj
ZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNF
bmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIG1fZmlsdGVycy0+
YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRl
cmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdN
b2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogfQogCiB2
b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5YTJkNDQ2NGRmNWNiN2IzYTQ0MTkz
YmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5ODRiNWQyYjUyMWE2OTkxYzYxNTIyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAtMTgxLDE0ICsx
ODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUo
SW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICBJbnRSZWN0IG1hcmdpblJlY3Qg
PSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBhdXRvIGludGVydmFscyA9IG1ha2VVbmlx
dWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJlY3QuaGVpZ2h0KCksIC1tYXJnaW5SZWN0
LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUg
dW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUo
KSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsKICAgICAgICAg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
OwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQuZHJhd0lt
YWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAKLSAg
ICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXIt
PmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5z
aXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0g
aW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJh
eUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFy
cmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JBLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBw
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNkMjk3NzViODQ2ZjA1OWQ1YTJjYTcxM2Uu
LjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFjZTcxN2VjNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6
YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgYwogCiAgICAg
aWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0LmlzRW1wdHko
KSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxk
IG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRo
ZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAgICAgY2xpcHBl
ck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgVW5hY2NlbGVyYXRl
ZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBD
b2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7
CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2M2MzZTQ5NjBiZDRlM2JkYmQ4NzQ5MmE5
MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFiYTkzOGQwZDllMjYzNGQ4ZTgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRl
CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxlLmhlaWdo
dCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+c2hlYXJG
cmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
ID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2Nl
bGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
ID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAg
ICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3JtLCBDb2xv
clNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAgIGlmICghc291
cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRhTWFwLmNv
bnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBH
cmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0YS5zaGVhckZy
ZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZmlsdGVyRGF0YS5z
b3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGlj
QnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0g
PDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RBcHBseVJlc291
cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCAxNzg3ZTE4YzJkY2VmNWJkZjk5
MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5Nzg3MjIwNDY1YmM2YWVjMGI1ODA0YzQ1
NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBib29sIFJlbmRlclNW
R1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBj
b25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHls
ZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxl
LmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8g
Q29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQjsKICAgICAgICAgLy8gRklY
TUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxw
aGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVU
cmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOworICAgICAgICBt
YXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1
ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgICAgICBpZiAoIW1hc2tlckRhdGEt
Pm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgyMTQxMWFkZTc3NTA4NTYxNjg4NTZlZDIy
YjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4ZDNhNzlmYjQ5NWRkZDRmMGY0M2Q5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0yMTgsNyArMjE4
LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
Ly8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGZsYWcsIHNvIGl0
J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBhbGxvY2F0ZSBp
bWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggNTMy
Njc4ZjM3NjAzM2MzYzAwZjlmNmJkNWEzMGMzODY5MGUzMzRiZi4uMGFiOTIwMTYyNGU4NjBhMGQ5
Y2MwZjA3MTlmYTYzMTVmMmYxNTYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC0xNyw2ICsxNyw3
IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dlYktpdF9ERVJJVkVE
X1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQktJVF9ESVJ9IgogICAgICIke1dFQktJ
VF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzIgogICAgICIke1dF
QktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIiCiAgICAgIiR7V0VCS0lUX0RJUn0v
TmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAppbmRleCBlZGZiNmUxZTA1ZTU2NDAwOGI3ZDU3YTg3NDUzNzhjNDNk
NjZjZjk2Li43YTUyMTQyNWZmOTMxNzJiNWFiN2UxZGMyNDIwYWZlNjVjOTc2ZjU4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNSw2ICsx
NSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW9kZWxzLnB5CiAk
KEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJ
UikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KICQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJj
ZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMiw2ICsxMDQsNyBAQCAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNvbm5lY3Rpb24ubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25uZWN0
aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRnVsbFNj
cmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9E
SVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUv
d2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5pbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXggZGZiYzBl
ZmU2Yjg0NzI2Zjk2Yzg5ODI4Y2Q4M2QwZWQ3NTkwNWEwNi4uOTBkOTExMWZkMTBlODYzNDViN2Vm
NGZmNTNiMTU5YTBjMzEyY2FjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIwLDEyIEBAICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NQcm94eU1lc3NhZ2VzUmVw
bGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVn
aW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlc1JlcGxpZXMuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VC
dWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXNS
ZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2Fn
ZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAtMTQyLDYgKzE0OCw5IEBAICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlhUmVzb3VyY2VN
YW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVz
c2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVyLmNwcAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5n
Q29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzUmVwbGllcy5oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2Vi
S2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTI5MDkzMDk3Y2Q5YmRlYjM0NWExOWE1ZDM3
ZmU1N2E1NDBkZWI3MC4uOGM3NTNkMTZmNDBkZmRkY2ZlMTc0NWJhYTVmZTU5YmYyOTY4NzdlNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUsNyBAQCBWUEFUSCA9IFwK
ICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9t
YWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisgICAgJChXZWJLaXQyKS9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy93
ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAogICAgICQoV2ViS2l0Mikv
TmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBAIFZQQVRIID0gXAogICAg
ICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9tZWRpYSBcCisgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktp
dDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0lj
b25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhQ2FjaGUgXApAQCAt
MTQwLDYgKzE0Miw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFBsdWdpblByb2Nlc3ND
b25uZWN0aW9uTWFuYWdlciBcCiAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5IFwKICAgICBQbHVnaW5Q
cm94eSBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXIgXAorICAgIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkgXAogICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgXAogICAgIFJlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkgXApA
QCAtMTQ3LDYgKzE1MSw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFJlbW90ZU1lZGlh
UmVjb3JkZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciBcCiAgICAg
UmVtb3RlT2JqZWN0UmVnaXN0cnkgXAorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBc
CiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXAogICAgIFJlbW90ZVdlYkluc3BlY3Rv
clByb3h5IFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JVSSBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggNjIw
YjQxZjI4ZDY2NzZhM2RlMTdmNDc2YjJkZjM4OGZmZjY0NzcwZC4uYTM3MWNmMjNkYTc3ZmE3NmUz
ZTQwM2RkYzJkM2FkYjY2MTkwMWM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTYwLDUyICsxNjAsNjgg
QEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmxpYldl
YlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNw
YXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRl
Y29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChkZWNvZGVyLm1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAg
ICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZy
b21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZl
TWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJlY2Vp
dmVSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZl
TWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNz
YWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9
CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgp
LmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIs
IHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwg
ZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAjZW5kaWYKIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFz
ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAg
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gbnVsbHB0cjsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBmNDg1OTY0ZDQ2YzUyZTMzOGQyYWJlNGY3NjVkZGNi
NWE5NGEwNzkwLi4wMjcwMzdmZTk5NDY0MDlmMDZjMjNiZjZjZWNkMzc4NTNhNTZlN2I4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2lu
Y2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
TWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+
CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNs
dWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25J
RC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDcsMTggKzQ5LDIwIEBAIGNsYXNzIFVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MK
ICAgICA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CisgICAg
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAgICAs
IElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M+IGNyZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vz
c0lkZW50aWZpZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQp
OwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQor
ICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVy
biBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7
IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lk
ZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9p
ZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nl
c3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQ
cm9jZXNzSWRlbnRpZmllcjsgfQogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlcigpOwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTc3
LDE0ICs4MSwyMSBAQCBwcml2YXRlOgogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQK
ICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwotICAgIHZvaWQgZGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1l
KSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+
JikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgYm9vbCBkaXNwYXRjaE1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0
cjxJUEM6OkVuY29kZXI+Jik7CisKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tl
bmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCiAgICAgUmVmUHRyPExvZ2dlcj4gbV9s
b2dnZXI7CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgUmVm
PEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBt
X21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRp
YVJlc291cmNlTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk7CkBAIC05Niw2ICsxMDcsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRG
T1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaWJXZWJS
VENDb2RlY3NQcm94eT4gbV9saWJXZWJSVENDb2RlY3NQcm94eTsKICNlbmRpZgorICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
Lm1lc3NhZ2VzLmluCmluZGV4IDNkNDBhNTcxMmUwMmQxNDlkMTRmOTJmNTZlNDQ1MzQ2YzAxMjIx
ZDguLjkzMmMwMTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJjNTI1OWJhNGQ3MDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5IEBACiAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgeworbWVzc2Fn
ZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7Cisg
ICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlUmVu
ZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNWYyN2M4
ZmEzZTdiODUwZTEzN2JhZTMyZWRkYjhhNzE1ZTg0NmY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5j
bHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6
OlJlbW90ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRl
bnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
KGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAg
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30K
KworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQorewor
ICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5t
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90
ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChh
dXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNv
bm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJl
bW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0
IHNlbmRSaWdodCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3Jl
YXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKSwgbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4
dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaENvbnRl
eHQoZGlzcGxheUxpc3QpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpT
ZXRGbHVzaElkZW50aWZpZXIoZmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
YTE2YTE0M2U3N2IyMjJjMzU1MThkM2Q1NjZmZjNhOWU1YTIxYmNiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJp
Z2h0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRl
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgor
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSwgTWFjaFNlbmRSaWdodCk7CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
cik7CisgICAgdmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdlQnVm
ZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGFl
NzhlMmNlNGFiOTUxOWI2NWFiODRiNGQ3MmRkZWI1ZWM5NThjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2Vz
IC0+IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBGbHVz
aENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBX
ZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjgxMDM3MWRlM2FlOTA2NDE3MTVl
ZDFjODkxNmMyNDQ1ZDdjZThhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L1BoeXNpY2FsSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5IDogcHVibGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBw
dWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1h
Z2VCdWZmZXIgPSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAg
ICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIElt
YWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgbnVsbHB0ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKKyAgICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1
bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RG
TW92ZShiYWNrZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAg
IHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCks
IG1fYmFja2VuZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCks
IG1fYmFja2VuZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNyZWF0ZVNlbmRSaWdodCgpKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIo
QmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOworICAgICAg
ICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmZs
dXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Njc4N2VlZmEyMmYwYzQ2MDkxMDhiNWJm
YjRkNzdlOTc3NDBiNjJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3Rl
QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWY0MGZmY2U5YjE5Njk5MWZkZjk5NGY4MjRlZDY5MjNhMDg4NGY3MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgi
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlN
ZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikp
OworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIo
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAg
ICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCks
ICp0aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30K
KworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAg
cmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdl
QnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
ID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOworICAgIGlmICghZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01v
ZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5
OjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJy
ZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFn
ZUJ1ZmZlck1hcC5hZGQoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVy
KSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAg
ICAvLyBDcmVhdGVTdXJmYWNlIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZv
cmUgdGhpcyBvbmUuCisgICAgaWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVm
ZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM5OTM4YmVlNTExZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkK
KyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVz
c2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KCk7CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6
TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVJ
bWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3Bh
Y2UsIEltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIo
SW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFz
aE1hcDxJbWFnZUJ1ZmZlcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcj4+OworICAgIEltYWdlQnVmZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vh
a1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4
N2Y4MDJjMzZmZDk1N2JjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2Fn
ZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1
ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVy
SWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0
L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpp
bmRleCBmOGJjZTE0NTUwN2RmNDllODllZDRmNzE5ODc2ZTEwYmY3MDk2YmRlLi5lZDllMTc3ZGIz
ZmUxNjA3ZWNhZDMzNTdiYjkzNjM1ODM1MTAyZWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJr
aXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nv
bm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3Bh
dGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXIn
CiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZ
TkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBk
ZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBm
cm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNlbmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcnLAor
ICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbicsCisgICAgICAgICdXZWJD
b3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMSw2ICsyMTQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5u
b3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAg
ICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2Vydmlj
ZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0yMTgsMTAgKzIyMiwxMyBAQCBkZWYgdHlwZXNfdGhh
dF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2Vydmlj
ZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2
ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVD
aGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyJywK
KyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZp
ZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRD
RW5jb2RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZp
ZXInLApAQCAtNzYyLDEzICs3NjksMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihy
ZWNlaXZlcik6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBhc3luY19tZXNzYWdlcy5hcHBl
bmQobWVzc2FnZSkKIAotICAgIGlmIGFzeW5jX21lc3NhZ2VzOgorICAgIGlmIGFzeW5jX21lc3Nh
Z2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRS
SUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlJXNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKVxu
JyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1
dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9S
RUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogCiAgICAgICAg
IHJlc3VsdCArPSBbYXN5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZv
ciBtZXNzYWdlIGluIGFzeW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0
cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIp
KVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAg
ICAgICAgaWYgKHJlY2VpdmVyLnN1cGVyY2xhc3MpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgICVzOjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTtcbicgJSAo
cmVjZWl2ZXIuc3VwZXJjbGFzcykpCiAgICAgICAgIGVsc2U6CkBAIC03NzcsMTMgKzc4NywxNiBA
QCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTtcbicpCiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJ31cbicpCiAKLSAgICBpZiBzeW5jX21lc3NhZ2VzOgorICAgIGlmIHN5bmNfbWVz
c2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FU
VFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZVN5bmMlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+JiByZXBseUVuY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUg
aWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNl
ICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKTtcbicpCiAgICAgICAgIHJlc3VsdCArPSBbc3luY19tZXNzYWdlX3N0YXRlbWVudChy
ZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gc3luY19tZXNzYWdlc10KKyAgICAgICAg
aWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVU
RSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoU3luY01lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKSlcbicpCisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgVU5VU0VEX1BBUkFNKGRlY29kZXIpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpO1xuJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggMzQ4MmQwNTBlNGJlZmMxMDJlMzE2ZDAx
OThiMDA0ZWY2MDg0NTFiZS4uM2NlMjE0OTAzNTZiNzVjNmU5ZWE0NjNmMGUxNmY3YTM3NzI2NTA0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0F1dG9wbGF5RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CkBAIC03OTcs
NiArNzk4LDI2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U2Vy
aWFsaXplZEF0dGFjaG1lbnREYXRhPiB7CiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24+IHsKKyAg
ICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlw
bGljYXRpb24sCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlw
bGllZCwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsCisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
OjpSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1vdGUK
KyAgICA+OworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xv
clNwYWNlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKICAgICBXZWJDb3JlOjpD
b2xvclNwYWNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggMzA2Y2QxZTY5MzU2NjFhZDQxYzA2MDkyODQ4YmY5
YWYzNmIxYjcyNi4uMzUyZTM0MWU2NDI1OTI0N2U1YjYxZjUzODM2NTMyODYwZTU1ZDQ5MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CkBAIC0zMSw2ICszMSw4IEBAIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQ
bGF5ZXJQcm94eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZS5jcHAK
IEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZUxvYWRlci5jcHAKIEdQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIuY3BwCitHUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiAKIE5ldHdvcmtQcm9j
ZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
QWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTE0LDYgKzUxNiw4IEBAIFdlYlByb2Nlc3MvR1BVL21l
ZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1Jl
bW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL0dQVS9tZWRp
YS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xp
YldlYlJUQ0NvZGVjcy5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJp
dmF0ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJvdmlkZXIuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2Vi
S2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggOTM5ZmIxNzFiNzFlOGMyZjJmMjNlMDMyMjA2YjBh
YjE3Yzk4YWI5OS4uY2ZmNDVhMjg1YWE4YjU1YWQ2NDcwMjE4MzA3M2M5NTM1MTNmODM1OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dApAQCAtNjMyLDEwICs2MzIsMTQgQEAgV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVy
aXZlZCBTb3VyY2VzCiBFZGl0YWJsZUltYWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAK
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNz
Q29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNl
aXZlci5jcHAKIEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQ
cm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc01lc3NhZ2VSZWNlaXZlci5j
cHAKK1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1l
c3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VX
b3JrZXJGZXRjaFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZDhiNmRlZjIxNzhjZjI4ZjNlYWVl
MGU3YjZiYWE0ZmQxNjczNTA4Li5kYzMxOGM3ZWE2ZDdmNjcyZmE2Zjk1ZjI4NzM5MjYzNDFhYjc3
ZTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTM5NjEsOCArMzk2MSwyNiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyog
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dL
VG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3Vj
aEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0
dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEy
MjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9s
aWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRN
b3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8q
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlC
MjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFn
ZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE5MjNB
RDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4
NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJN
YWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBp
Y2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4
QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJl
bW90ZUltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbW90ZUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVy
Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNzIzQjM4NDIx
MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdE
NDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURh
dGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRh
U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAw
QzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9y
ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURh
dGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzkzLDYg
KzY0MTEsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzky
MzEyRjIzOUIzQjBDMDA5NTk4RTIgLyogbWVkaWEgKi8sCisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAw
QTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1
Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBH
UFVQcm9jZXNzQ29ubmVjdGlvbi5oICovLApAQCAtNjQwOSw2ICs2NDI4LDcgQEAKIAkJCQkyRDlG
QjIwNDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5
RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICov
LAorCQkJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAog
CQkJCTQxNzIxOThFMjNCNjMzQ0EwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMy
Mzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJ
CTJEOUZCMjAwMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgg
Ki8sCkBAIC03NzgyLDYgKzc4MDIsMzggQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOwogCQl9OworCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVy
aW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3Bw
ICovLAorCQkJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmggKi8sCisJCQkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8q
IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRUE2MjNBRDRG
MzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3
MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cCAqLywKKwkJCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmggKi8sCisJCQkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVu
ZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQkJF
NDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0g
UEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcg
LyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLywKKwkJCQk3MjFGMUU5QjIzQUQzNkQw
MDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8sCisJCQkJNzJCQkU0MEYyM0FC
MDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3MkJCRTQxMDIz
QUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxNDIz
QUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJ
NzIzNUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAq
LywKKwkJCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oICovLAorCQkJCTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJp
bmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQy
MUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCAxOGU5MzZkZTMyMzA3NzBmMjQzNjFiNmFi
YWE4ZTE3ZTRkMmU1YWMwLi4xODhmYWMyMGExZTkyM2RmNjJiYjFhMzgwNTUwYWFhNGY5NGQ4ZTM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmNwcApAQCAtNjAsMjkgKzYwLDM1IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCi17Ci19Ci0KLXZvaWQgR1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29u
bmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBjYXB0dXJlTWFuYWdlciA9
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2FwdHVyZU1hbmFn
ZXI+KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
R1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFU
Rk9STShDT0NPQSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5k
aXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vz
c0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+
JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3Bh
dGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwor
dm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkK
K3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggMzFjNjEwNDY2OWYyZjAy
ZmZhNDQwZmViODgwOTI2Yzc0YWUyNmFjZi4uNmQxYjgzZGU1ODM2YWZhZTIxYWZjMzRmNThhMjJl
NWQ2ZDMyM2M3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQ
cm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXJNYXAuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vz
c0Nvbm5lY3Rpb24oKTsKICAgICAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7
IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1h
cCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0K
IAogcHJpdmF0ZToKICAgICBHUFVQcm9jZXNzQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246Oklk
ZW50aWZpZXIpOwpAQCAtNTMsMTAgKzU1LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDOjpDb25u
ZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNo
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdl
YiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2
ZXJNYXA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVj
ZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNz
YWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1t
ZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNz
Q29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMmJiZGQ4NjM0
MDUyMDVhZGE3ZWYzY2M3Mzg0NjAxOWZiMTk5M2IzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2VudW0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlm
aWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMDdlYWY5NDRiYTM4ZjBhOTk0YTViZTUyNDE5NTlmNGFjODhhNTky
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDM1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBl
IHsgfTsKK3VzaW5nIEltYWdlQnVmZmVySWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1h
Z2VCdWZmZXJJZGVudGlmaWVyVHlwZT47CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNTFiNGNlODBmN2IxYTZlY2JjODJiZTQ2NWQ5YTgxZmQx
ZDM5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSZW1vdGVJ
bWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1l
c3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitS
ZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEg
TWVzc2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1l
c3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xl
dG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsK
KyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRp
Zmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpDcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcik7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZm
ZXIoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4K
KyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVj
ZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxlYXNlSW1h
Z2VCdWZmZXIobV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6c2lu
Z2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9CisK
K3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7
Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsK
KyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVz
c2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQ+KG1faW1h
Z2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2Fp
dGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6
d2FpdFNldEZsdXNoSWRlbnRpZmllcigpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29u
bmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlz
cGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRl
bnRpZmllcj4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9u
OjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJlbW90
ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2VuZCgpCit7CisgICAgY29uc3RleHByIGNv
bnN0IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOworICAgIGZvciAodW5zaWduZWQgd2FpdHND
b3VudCA9IE1heFdhaXRzQ291bnQ7ICFpc0JhY2tlbmRDcmVhdGVkKCkgJiYgd2FpdHNDb3VudC0t
OyApCisgICAgICAgIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKworICAgIGZvciAo
dW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7IGlzUGVuZGluZ0ZsdXNoKCkgJiYg
d2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKK30KKwor
dm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBtX3JlY2VpdmVkRmx1c2hJZGVu
dGlmaWVyID0gZmx1c2hJZGVudGlmaWVyOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpy
ZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpGbHVzaENvbnRleHQoZGlzcGxheUxpc3QsIG1fc2VudEZsdXNoSWRl
bnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICBlbnN1cmVVcGRhdGVkQmFj
a2VuZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NmI1NmUzMWQwY2FmMjA2ZWU1MDZjOTc5NjkwNWI3ODQwYTQ5YjhhYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1
ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBS
ZW1vdGVJbWFnZUJ1ZmZlcgorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAs
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIH5SZW1vdGVJbWFn
ZUJ1ZmZlcigpOworCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3Nh
Z2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBCbG9ja2Vy
cworICAgIGJvb2wgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworICAgIGJvb2wgd2Fp
dFNldEZsdXNoSWRlbnRpZmllcigpOworCisgICAgdm9pZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgp
OworICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElk
ZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQorCisgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCkgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRGbHVzaElk
ZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOyAgICAgICAgCisgICAgdm9pZCBy
ZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
Jik7CisKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIg
eyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBJbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKKyAgICBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWY4Nzc1NTdjMGFhOGM4YTkwNTA0YTEzNTgwZGE1OTFhYTViZmM1ZAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3Nh
Z2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29y
ZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkKKyAgICB2b2lk
IFNldEZsdXNoSWRlbnRpZmllcihXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZs
dXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1
NzFjN2FkODA0YzJjNDFmZWQxNmNiMTA2YzY2ZDA5Zjc0MDM1MWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyIDogcHVibGljIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJs
aWMgUmVtb3RlSW1hZ2VCdWZmZXIgeworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFz
ZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxj
dWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KG5ldyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAg
ICAgIDogQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJ
bWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIEFTU0VSVCghbV9iYWNrZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2Vu
ZFR5cGU6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQo
KTsgfQorCisgICAgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsK
KyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNo
Q29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3Rl
SW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRp
c3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29u
dGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE3MzJhNTViMGIyZWI3ODQyMzdlODJlYjg1MWIwYjk0YjkyNzc5ZjYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXIg
PSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZGM5NjQ5ZTdlZWEwYTFiMDY3NWNkYmY4MTg2N2U0Y2Y3YWMyZGM3Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9
CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQorewor
ICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQo
TWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVsZWFzZSB0
aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7
CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6
OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZUFjY2VsZXJh
dGVkUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBmMzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0
NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAg
OiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7
CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNzYWdl
U2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBj
b25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVyaW5nQmFja2VuZAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kikg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworICAg
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
eyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0
NjVmYjhjNmY3N2Y3ZmRlMzhmNjhjYmIwNzUyNDZjOTk0ZGIxZDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNp
bmcgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyVHlwZT47CisKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKaW5kZXggNDZkMTE5
ODc3MmM1MWI4YWQ5MGVmOGExNzEzMjFmZmNlMjkwZmNmOS4uYjAyOTIxZTA2MWE2MGUzMzUwODg3
ZTdiMDg5MzI0ZWFiOGVhM2Y1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCkBAIC00Miw2ICs0Miw4IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwogc3RhdGlj
IHdlYnJ0Yzo6V2ViS2l0VmlkZW9EZWNvZGVyIGNyZWF0ZVZpZGVvRGVjb2Rlcihjb25zdCB3ZWJy
dGM6OlNkcFZpZGVvRm9ybWF0JiBmb3JtYXQpCiB7CiAgICAgaWYgKGZvcm1hdC5uYW1lICE9ICJI
MjY0IikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggOGU0YzkzNzVkN2I4Y2MxMGZmYTAwODAz
ZDQ4MjE3M2JlNWEzNTU4YS4uNzcyNmZlOTQ4YTIyNzliYmY5MzlmMDY0NGY2NDU2ODJlZDZiNzk4
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTEwMiw2ICsxMDIsMTAgQEAKICNpbmNsdWRl
IDxXZWJDb3JlL01vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3VyYXRpb24uaD4KICNlbmRpZgog
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTg4MSwxNSArODg1LDIyIEBAIEdy
YXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5
KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkg
Y29uc3QKIHsKICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEo
KSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KKyNlbmRpZgogCitzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJp
bmdCYWNrZW5kKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgcmV0dXJu
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CiAjZW5kaWYKK30KIAogdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIp
CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
V2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZmRhMzM4ZWNmYTY4NTVlMWMxZDYwODUwZTQ3MWY2
Nzk0ZWQxYzJjZC4uNGRlZGZlZTc4NDExNjVlNTc3ZDk0MDMyMzU1MWI0ZjUzYjJkMWRmNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaApAQCAtMjMxLDYgKzIzMSw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRy
PFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKwogICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdz
IGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRl
eHRNZW51Q2xpZW50Lm1tCmluZGV4IGVmMDM1MDM0MmJiODIyNDZjZDE5ZjM1NGQ5YmNjMDI5MWYy
OTA0M2QuLjI0MDdmMTA2OWI1N2ZiZjY1OTQ4ODc1NDEyOGNlOGZhYjFlY2JiZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51
Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0yMDIsNyArMjAyLDcgQEAgUmV0YWluUHRyPE5TSW1h
Z2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBp
Y2tlckl0ZW0KICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZl
bHkgYSBzbmFwc2hvdCwgYW5kIHdpbGwgYmUgcGFpbnRlZCBpbiBhbiB1bmFjY2VsZXJhdGVkIGZh
c2hpb24gaW4gbGluZSB3aXRoIEZyYW1lU25hcHNob3R0aW5nLgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwg
VW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG5pbDsKIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDc1Yjg5MWRkOTZlZjU4NGU5NjFlNzY1ZjQzMWRlMTAyYWE1YjJiNmMuLjZmOGQ1MWQ1ODQxMzVj
MWMxNGY4NzI2YjlkNjkzM2ZmMDYzNzczYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAyMC0w
MS0wOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkaXNwbGF5bGlzdHMvY2FudmFzLWRpc3Bs
YXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDEtMDkgIE1pZ3VlbCBHb21leiAgPG1hZ29t
ZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkIFdQRSBnYXJkZW5pbmc6IHJlYmFz
ZWxpbmUgc2V2ZXJhbCB0ZXN0cyBhZnRlciByMjU0MDQ0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4
IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1
NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyAr
MSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChj
aGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFn
cyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgw
MDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4
dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1
MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387283</attachid>
            <date>2020-01-09 15:39:01 -0800</date>
            <delta_ts>2020-01-09 18:21:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200109153859.patch</filename>
            <type>text/plain</type>
            <size>464600</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0MjU4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTBjNDEwNjY3ZTM1Nzhm
NDY3NmFlZDcyZmJiNTRmMThiODJkODhlNC4uNDNmZDZmMmUzYjAyMGFjZGExNmYzMGI1NDYxMzAy
OThkMmU3MDY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1OCBAQAorMjAyMC0wMS0wOSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworCisg
ICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNoeSBmb3IgSW1hZ2VCdWZmZXI6CisKKyAg
ICAgICAgSW1hZ2VCdWZmZXIKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgIHRlbXBsYXRl
PEJhY2tlbmRUeXBlPgorICAgICAgICAgICAgKy0gUGh5c2ljYWxJbWFnZUJ1ZmZlciAgICAgIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCAgICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAg
ICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICAgICAgICAgICAgfCAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAor
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFj
a2VuZFR5cGU+ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgICAgICAgKy0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciAtLS0tLSsgICBSZW1vdGVJbWFn
ZUJ1ZmZlciAtLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAg
ICAgICAgfCAgICAgICB8ICB0ZW1wbGF0ZTxCYWNrZW5kVHlwZT4gICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICArLSBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyIC0rICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSAtKworICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5IC0tLS0tLS0tLS0tLS0tKworCisKKyAgICAgICAgVGhpcyBpcyB0aGUgY2xhc3MgaGll
cmFyY2h5IGZvciBJbWFnZUJ1ZmZlckJhY2tlbmQ6CisKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQK
KyAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAgICB8ICAgICAgIHxfXyBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAgICAgICAgICAgIHwgICAgICAgfAorICAg
ICAgICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAg
ICAgICAgICB8X18gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHxfXyBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAgIEFzIGFuIGV4YW1wbGUsIGlmIEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUyBpcyBlbmFibGVkLCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkKKyAgICAg
ICAgd2lsbCBjcmVhdGUgdGhlc2UgSW1hZ2VCdWZmZXJzIGZvciBVU0UoQ0cpIHBsYXRmb3Jtcy4K
KworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAgICAgUGh5
c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAg
ICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4K
KyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHk8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFr
ZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGlu
Z3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5n
c0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRl
ZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9y
bU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29j
b2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1w
SW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJ
bWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0
bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRD
YW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250
ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNl
dFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJp
dG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAg
ICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVD
b21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdl
MkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAg
ICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0
V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVk
IGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVC
dWZmZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRv
THVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29udmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlD
b3N0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50
ZXJuYWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNp
bmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3
Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVy
dFRvTHVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChX
ZWJDb3JlOjpjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdl
YkNvcmU6OmNvcHlGdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3Jt
VGV4dHVyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNh
bEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVu
c3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9k
ZS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNjcmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGls
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhU
aWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0xheWVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhaXJvOjpkcmF3U2hhZG93SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmZp
bGxTaGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRv
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJu
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0
b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xl
YXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6d3JpdGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBp
eGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29w
eU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0ZXNQZXJS
b3cgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dElt
YWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VUSSk6Cisg
ICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
REZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBs
YXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAgICAgICAo
Tmljb3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3Vs
YXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlS
ZXNvdXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisKIDIwMjAt
MDEtMDkgIHlvdWVubiBmYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW90
ZVZpZGVvU2FtcGxlIHNob3VsZCBiZSBhYmxlIHRvIHN1cHBvcnQgY2FudmFzIHZpZGVvIHNhbXBs
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggMzIzZTViYjA2NDU1NDlmNzQwODI1MWVmNzBiNjViZjc1ZjQ2NjEwOS4u
NDM2ZDIzODFkZWE0MTYxYzIzZGE5ZDI3NmQ3MDc1NjQ1NTc0ZGU2ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw5NSBAQAorMjAyMC0wMS0wOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2
ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0
OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNz
YWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQgZnJv
bSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmguCisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAgICAqIEdQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5OjpSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgor
ICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVz
c2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VS
ZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Ondh
aXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2Vz
LmluOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
RGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwOgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAx
LTA5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViS2l0
VGVzdFJ1bm5lciBsZWFrcyBvYmplY3RzIGluIGEgdG9wLWxldmVsIGF1dG9yZWxlYXNlUG9vbCB0
aGF0J3MgbmV2ZXIgY2xlYXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDgxYjYw
N2U0Yzc2OWEwZjE1OTRjYmE1YWE3ZjU0ZGQzNWU3MGNjOGIuLmVmOGMyYzZlZmYxY2VmZDViOTU4
MzM2MjJmZWVlYTUxZGNiMjYzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMC0wMS0wOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51
Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIw
LTAxLTA4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVk
dWNlIGJpbmFyeSBzaXplIGJ5IHB1cmdpbmcgQysrIHR5cGUgaW5mb3JtYXRpb24gaW4gT2JqZWN0
aXZlLUMgZmllbGRzIGFuZCBwYXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3
ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5M2I5OTY0ZTc3Li45OTM3MGJiNGI3YjgzMTU1N2YzNjA4
N2EyMmEzOGYxM2NkOWJhZDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
YW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0
Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250
cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hN
b25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIu
aApAQCAtMTA3Myw3ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTcgQEAg
c2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1N
ZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRU
cmFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZp
ZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3Vy
Y2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2Zi
NmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xp
cGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAK
QEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6
OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1
dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcElt
YWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsg
bnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1B
cHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5
NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2Qx
NjkxOTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDQxMTIxNTU3YWU2ZjM1ZGI5YWQ1
ZjRjMWU4YWNjY2EwODY2M2U2ZmIuLjdhMjA5YTg2N2QzZTFhMTQwZGIyMDM0NDVlZDNhZGVlMjc2
ODhlNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBw
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
aW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9y
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTQ1M2Q4OTA5N2U2ODZiMmMzMzUyYmFk
NjZlZTcxMjM0N2MxNjZiNS4uNGYwM2VjMjNkOGM0MGZiOTZhMmU1NzcwMWUzNjZhYjAxNGNlY2Zj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VT
b3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQg
Yi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVl
NGJiOTQzMWFlY2I0YmNjYzI4YmQyLi45N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFl
NTJkZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJl
ZnJlc2hNb25pdG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0
aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VH
dGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJv
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDZlMjhiNTdkYzc0NGM5ODJlYWU3MTAxYTYyMmJiMTc5MGJjOWZiNzIuLmRjMTUz
NjBiZmE1ZDg1Mjc2YTA3NWM0NjFjZjZlOGFkYTVmNjZkZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBA
QAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2Mjky
NTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJ
CTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkw
Mjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBw
YWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4
QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRh
dGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQky
MkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0Fs
dEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVt
ZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
SXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQu
aCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5
MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAg
LTIxMzQsMTAgKzIxMzIsMjEgQEAKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxs
KSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyog
U1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYw
MEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVy
dHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJF
NDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIz
MEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUlt
YWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjND
MTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8q
IFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1
NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAv
KiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxl
bmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJ
CTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRl
Q2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JF
RUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEy
M0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1h
Z2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYy
M0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4
MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmlu
Z0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVz
c2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAg
LTY1NDEsOSArNjU1MCw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVu
dFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAy
OTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0
YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1
QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdl
RXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEds
eXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMSw4ICs5
NjA3LDExIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVj
dEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1h
dGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkz
NkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91
Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5
MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg7IHBhdGggPSAuLi9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
WFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
MjMsNyArOTYzMiwyMCBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhU
c1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8q
IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkz
RTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIz
QUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdC
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAv
KiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUx
OCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjg3
LDcgKzEyNzA5LDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5
MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTY2ODYsNiArMTY3MDcsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZC
Q0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlC
MDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkND
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJD
RDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODg1
LDYgKzI0OTA3LDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1
MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYy
Qjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjQ4OTQsOSArMjQ5MTcsMTIgQEAKIAkJCQk5
MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2
RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJ
CQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVy
Q0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRh
dGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNB
QUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuY3BwICovLApAQCAtMjQ5OTIsNiArMjUwMTgsNyBAQAogCQkJCTRCN0FFNDkyMjE3
N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1
QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2
OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2
QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0
MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUND
MTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywK
QEAgLTI1MDgzLDcgKzI1MTEwLDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyog
SW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyog
SW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVj
b2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rl
ci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAq
LywKQEAgLTI1MTQwLDYgKzI1MTY4LDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcg
LyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQ
YXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5o
ICovLAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVy
LmggKi8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5o
ICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3Vy
Y2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1U
ZXh0VHJhY2suaCAqLywKQEAgLTI1MTQ5LDYgKzI1MTc5LDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1
NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYy
IC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4
RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdE
NDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3
RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3
RjkgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAv
KiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJv
dW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0Js
dXIuY3BwICovLApAQCAtMjg5OTAsNiArMjkwMjMsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3Qzcw
MDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQw
QzQwNjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAw
RDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0Uw
OEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRl
eHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2ODQsNiArMjk3MTgsOCBAQAog
CQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIz
QzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJl
Y29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyog
RGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDI5Miw4ICszMDMyOCwx
MCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAv
KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAq
LywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcw
MEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIz
NUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBF
NjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQy
NTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250
cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzYzLDYgKzMxODAxLDcgQEAK
IAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNX
YXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFD
MjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVy
ZUluUGljdHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMw
MDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMx
NzgyLDYgKzMxODIxLDcgQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZv
cm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMw
MDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1
QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0Ex
NiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4
MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NTksNiAr
MzE5OTksOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlcklt
YWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlG
NiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBk
YXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5
RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUz
MDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXgg
NjRkZmYyZDk4NGVmNzJkZDllYmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0ZTQ5MGFiNGQ4MWJk
NmZmMTI4ZTI1YTc3Njc0MWQ5ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0
IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAg
ICAgIEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAg
IGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAg
ICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7
CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRl
QXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
SW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VE
YXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwg
bG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0
byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNf
Y2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJp
dG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXgg
ZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2Mx
MTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0
ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0
U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBG
SVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJl
KQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4
YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyAr
OTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAg
ICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAot
ICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxl
cmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFn
ZSgpIGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAg
IG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVy
LT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9j
b3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5n
ZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRl
eCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgx
ODAzM2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxD
YW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJh
bWVMb2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNp
emUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFC
TEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNr
LmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29u
c3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJl
cGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAg
Ly8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIg
Z2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJD
b21wb3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVu
dDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhU
TUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3Vz
ZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNE
aXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlz
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93
bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxh
eUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigp
ICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlM
aXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5k
aXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBT
dHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlM
aXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFz
VGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250
ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkp
CisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxh
eUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4
NSwxMSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVy
KCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNp
emUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5k
b3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBk
b2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAor
ICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBv
biBjYW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxh
eUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJh
d2luZ0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZv
ciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9
IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2Vz
UmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUo
c2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9k
ZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAg
IHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2Rl
OjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7Cisg
ICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJl
bmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlm
IChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVy
KCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0
ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0
aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0
NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4
YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyAr
MTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAK
LSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9u
YWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApp
bmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThm
ZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0
bWFwLmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRp
YyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJp
dG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdh
YmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBA
IEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNm
ZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1h
cD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVy
KQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAg
cmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1
dG8gYnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAt
MjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigp
IGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxl
cmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1
Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZh
czo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0
MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJl
Y3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZm
CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkK
IHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNB
Y2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZm
ZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8
Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRl
cm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVy
bjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBl
YXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29u
dGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQp
OworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9F
bGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01v
ZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXko
Ym9vbCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92
ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3Bs
YXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAg
ICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1
cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1T
dHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRp
c3BsYXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICgh
ZGlzcGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0
LT5hc1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0
YWNrKCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNyZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQg
c3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRh
KEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOwor
ICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5
LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZs
b2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAog
ewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGlj
IE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBj
YW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2
LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkp
OwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5
dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYg
KCFieXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAg
ICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBk
YXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAz
LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0
IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQg
ZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwg
ZGlydHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpM
b2dpY2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7
CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxv
YXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAg
SW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1
ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
SW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+
KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3Qp
OwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlm
IChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJj
ZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZl
cjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgo
KSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdo
dCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0p
OworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEu
aGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5
c3RlbSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsg
Ly8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgK
aW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFm
NTAwZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAt
MjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQg
c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxp
c3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVw
bGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQog
ICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQ
cm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHBy
b3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0
ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBv
c2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJ
bWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBz
eSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFn
ZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5
LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGly
dHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURh
dGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQg
c2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZs
b2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVy
YXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdk
OGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThj
NDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
Qml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRl
cmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
OwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFj
Y2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0
aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJl
bmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0
bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEw
YWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJk
YTdhYmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVu
dW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2Uo
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+
IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAg
ICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0Nv
bnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQo
R0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9I
ZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVU
b0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Cisg
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQo
KSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAog
ICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkg
ewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1h
dCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJl
KCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9y
bWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5m
byh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAt
PmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0
Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAg
ICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6Oklt
YWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICBy
ZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQK
ICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50
ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQo
dGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVs
KSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZl
cigpOwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9y
bVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50
ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRl
eHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFz
LT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNl
cHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xl
bnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUg
U1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdl
KHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9u
dENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01T
b3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpA
QCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRl
c3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdl
KGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKElt
YWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0
Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxS
VUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBG
SVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5
IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAw
Y2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1
YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBS
ZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0
ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVj
dChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBU
aGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3Ip
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQs
IGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEz
MDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRh
ODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENo
cm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRk
ZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5k
KQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxh
dGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBt
X2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2
OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJh
ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JI
aWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNr
ZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAg
dm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJp
dmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmll
d3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRh
YmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQu
aAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZh
ZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
Q2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIK
ICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVk
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9s
bFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJT
ZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgog
CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVu
ZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3Mg
bnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgog
ICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNz
TGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NM
YXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNo
b3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUx
Li5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYg
ZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWlu
dFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNj
YWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2Fs
ZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAt
aW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25z
b2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3Bw
CmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUx
ZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29s
ZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNp
emUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNp
emUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFn
ZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBz
b3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFn
ZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UK
aW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNTVhNzAwNWU0
Mjg1YWI0NzdmOTM5YmU4Y2U2YWVhYjU2MjA2ZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fp
cm8uY21ha2UKQEAgLTEzLDcgKzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRp
b25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZi
MGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93
X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3Mg
SG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAg
IHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0
ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAg
LTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dAppbmRleCA0MjFkZmJkOTU3NTRjNDYyNzU3Yjc4ZGJmYTQxMDI1NDMyYWYwYjdkLi5kMjNi
YjAyM2U3ZDc4NDBhZWJhYTQxNGY5OWYwYmMwYzFmMmNkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QYXRoQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2Fl
Zjg1NDFkZWUwNjJiZmUwNTQxNmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4
X3QgeworICAgIFByZW11bHRpcGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZkNWJh
MjAwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
Y2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6
dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJhY2tl
bmQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1
ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdD
b250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
cmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKwor
ICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlzaWNh
bEltYWdlQnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKaW5kZXggZjU4NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4u
MzViZDU4YzNkMTJmZjg0YzBlNjY0MmY4MTgyNzA5OWNlODM3ZTI4MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MCw3
ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJh
dGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQo
KSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVy
biBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9
CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFl
MDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3NGRk
Mzc0ZWVhMWQ0Mjg0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5k
ZXggY2VlYTFkYTQwZWIzMmZmNzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNiZTRh
YzZiODg0MzY0YzU1NDM5N2Y3ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJh
Z21hIG9uY2UKIAorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVs
ZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KQEAgLTEyMiwxNyArMTIzLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFs
aWduCiB9OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAg
VW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9j
YXRpb24gcmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUu
Ci0gICAgQWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biB7Ci0gICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmlu
ZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNv
cmU6OkJsZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUp
OwogYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUm
KTsKQEAgLTE0Myw3ICsxMzMsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRS
dWxlKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IGMwMTI2MzcwY2I4NjU5
MjdhMzJiZjExZjYxNDg2ZDcxYWY3YjQ3NTguLjRlMmJlNzFjNzQxYzU1ZjU2YzBhZDA0NmE3OTdl
NTBhMDk3MTg4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRS
ZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7
Ci1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICog
TWF4Q2xhbXBlZExlbmd0aDsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6
OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
KTsKK30KIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6
U1JHQiwgY29udGV4dCk7Cit9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICgh
c3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxl
IGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9
CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBz
dWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJp
bmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKKworc3Rh
dGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0IGZs
b2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7
CiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKIHsKQEAgLTEwNSw5NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVj
dC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShD
RykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0
YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNr
ZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNF
KERJUkVDVDJEKSkKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25T
aXplKEZsb2F0U2l6ZSBzaXplKSBjb25zdAotewotICAgIHJldHVybiBzaXplOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09
IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4g
bGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNw
YWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5l
YXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdi
TFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5Owot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9y
ID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFy
cmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAg
ICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2Ug
aWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMg
Y29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29s
b3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cp
Ci0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFz
aygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6
ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
bHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxl
bmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8
IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBh
ID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEg
PSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAy
NTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEp
OwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5j
ZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdp
dGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJp
Y0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9y
bUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwg
Ym9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewot
ICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUg
Y29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAg
ICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBh
bmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAog
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZl
cihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpAQCAtMjA0LDYzICsxMjUsMjcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBG
bG9hdFJlY3QmIHJlY3QKIAogICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpj
b21wYXRpYmxlQnVmZmVyU2l6ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAKLSAgICBhdXRvIGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEs
IGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywg
LXJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29t
cGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3Bh
Y2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNw
YWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRo
ZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNp
emUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0g
ICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUo
c2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFu
c2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlv
biB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNp
emUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCku
ZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXI7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0
KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoY29udGV4
dC5zY2FsZUZhY3RvcigpLCB0aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0
dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNpZiAhVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5
Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZv
a2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJl
ZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBw
b2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICog
aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50
b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmco
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVy
biAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRl
eCAzYmRlZTRlZTAwZWQxN2FlMzQzYjJmNmE4ZGRkMDA5Mzg5YzJlNmJmLi5jNjBiNzVkNGZiZmJh
NWQyYmQ0NTBiMTNhNzUzMTMwZmM2YmNjYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICog
Q29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE3MCArMjcsODEg
QEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNs
dWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgorI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2luY2x1
ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1w
ZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0
UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3Bl
bkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNs
YXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkg
ewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRv
bid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1
ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNlcnZl
UmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsKK25hbWVzcGFjZSBEaXNwbGF5TGlz
dCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9S
VCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBj
bGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50
ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFj
ZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQp
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNl
OjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBD
cmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29w
eSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgLy8gQ3JlYXRlIGFuIGlt
YWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVz
b2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNv
bnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0JikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKLQotICAg
IC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNv
bnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsg
fQotCi0gICAgRmxvYXRTaXplIHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKSBjb25z
dDsKLQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1
dGlvblNjYWxlOyB9CisgICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBp
bmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9y
IGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXpl
JiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShj
b25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0
IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xh
bXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxl
QnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24g
dGhlIGZhc3RlciBjb3B5SW1hZ2UgTW9kZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlm
IGl0IHN1cHBvcnRzIHRoZSBEb250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9y
IHJldHVybiBDb3B5QmFja2luZ1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFj
a2luZ1N0b3JlQ29weSBmYXN0Q29weUltYWdlTW9kZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgZW51bSBDb29yZGluYXRlU3lz
dGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0gfTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUq
IHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmly
dHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0KIAotICAgIHZvaWQgcHV0Qnl0ZUFy
cmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZm
ZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRy
YW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKICAgICAKLSAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1v
cnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFs
TWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpu
dWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFn
ZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFu
c2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9
Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZm
aW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQot
I2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZp
cnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNp
bmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29u
c3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9p
ZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMg
bWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3
aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZ
VEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRH
TE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNl
LCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlv
bnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRl
ZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVl
ZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHND
bGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMg
RmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9h
dFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0g
ICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2
aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8v
IFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXpl
KCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3Vs
dC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Pik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1h
cD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRh
dGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2lj
YWwpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxh
eWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29s
LCBib29sKSBjb25zdCA9IDA7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9
IGRlZmF1bHQ7CiAKLSAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFz
aygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xh
c3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZElt
YWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJp
ZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1h
Z2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXpl
IG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0
aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nl
c3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBr
bm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsK
LSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RX
aW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Kiwg
Ym9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCi0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwo
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKLQog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzJiZGY2
Yzk2NGQ1OTVlODQyYTNiNjFmZTYzYjc5NTVkYjU5MTAxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9sb2dp
Y2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFsU2l6ZSkK
KyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JT
cGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9u
U2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdo
dCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4
cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXpl
IGludGVybmFsU2l6ZSA9IEludFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJS
b3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxz
aXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYg
KG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAg
ICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1f
aW50ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAg
IHJldHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5
LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZz
ZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4
X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYg
KCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVs
QXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBs
dW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlh
IC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBs
dW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1
bWluYW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQor
CitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0
SW1hZ2VEYXRhQXJyYXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENs
aXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsK
KyAgICBhcmVhICo9IHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAg
ICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIEludFJlY3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5h
bFNpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBz
cmNSZWN0KTsKKyAgICBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBw
ZWQuc2l6ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRYKC1zcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAg
ICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgp
ICE9IHNyY1JlY3Quc2l6ZSgpKQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAg
ICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQ
dXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBl
ZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsg
SW50UG9pbnQ6Onplcm8oKSwgc3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJz
ZWN0aW9uKGRhdGFSZWN0LCBzcmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RD
bGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChz
cmNSZWN0LngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3Jj
UmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Qu
c2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJl
Y3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3Qu
aW50ZXJzZWN0KGJ1ZmZlclJlY3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0
UmVjdC5zaXplKCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRU
b1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhl
bCkKK3sKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsx
XTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBz
cmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9V
bnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3Qq
IHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhl
bCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8
fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxp
ZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVz
dENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1
NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAv
IGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxw
aGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBk
ZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChz
cmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQo
Q29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50
OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUp
IHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3Jt
YXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1h
dCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEu
CisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1Owor
ICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAg
ICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3Rvciko
Q29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3Rh
dGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1Nsb3coCisgICAgQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAor
ICAgIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3Qg
Ynl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
c2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0
ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0
LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQ
ZXJSb3c7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4
ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpZiAo
c3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNB
bHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRl
c3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsK
KyAgICAgICAgY29weUltYWdlUGl4ZWxzU2xvdzxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlw
bGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1Nsb3c8
Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNvcHlJbWFn
ZVBpeGVsc1Nsb3c8Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjg1ODQwZmI0OWEzMmM1NWIzNzM4ZGQ3NjU4OTUxNWFjYmRmZWFm
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xh
c3MgSW1hZ2U7CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9y
ZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5Lgor
ICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0
aGUgY29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7
CisgICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4
X3QgeworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGluYXRlU3lz
dGVtIDogdWludDhfdCB7CisgICAgTG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307CisKK2Ns
YXNzIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SW1hZ2VCdWZm
ZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBJ
bnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9Cisg
ICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2Nh
bGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9y
U3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1l
bW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2Fm
ZUdldCgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgeyByZXR1
cm4gMDsgfQorCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9
IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlLCBDb2xvclNwYWNlKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyBy
ZXR1cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIHB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmLCBDb29y
ZGluYXRlU3lzdGVtKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRm
b3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJ
bWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0
KSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3Jj
Um93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxT
aXplOworICAgIEludFNpemUgbV9pbnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9u
U2NhbGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZi
ZDEyYWJlNTQzYzNmMjAzNGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2
OTRkMzgxYWNiYzkyNjBkYmI0N2U5ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlz
aWNhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3Vt
ZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjpp
c19iYXNlX29mPEltYWdlQnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAg
IGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6
Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBi
YWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAg
ICB9CisKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVh
bCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5n
ZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQt
PmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3Jt
IGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkg
PyBlbnN1cmVCYWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9
CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3Vy
ZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsg
fQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5z
dXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUo
KTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAx
OyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVu
c3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAg
IHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1
cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsg
fQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5
QmVoYXZpb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tl
bmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0
aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAg
ICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwg
b3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFj
ZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJM
KG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRh
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6
bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFj
a2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0
YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRG
b3JtYXQsIHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29u
c3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3Jk
aW5hdGVTeXN0ZW06OkxvZ2ljYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7
CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBk
YXRhU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0
dXJlKHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlw
bHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmExMTU5ZmZlOGRkMjBhMTdiZTMyMDBi
N2FlMTkxZDU5M2U4NDI3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAo
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisj
ZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJEKQor
dXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIFVT
RShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShDQUlS
TykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIEFjY2VsZXJhdGVkUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDsKKyNlbHNlCit1c2luZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0g
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFn
ZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+
OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1
ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRm
b3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY0ZjAwODYxODVjZjIyODViYmYyNTU4MmY5OTcyMzlmNmU5ZDdlZTcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5k
ZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVD
bGllbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdC
YWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisK
K1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tl
bmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdC
YWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdp
bmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRv
dy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0
KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gQWNjZWxlcmF0
ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3Rl
OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQ
bGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVm
ZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAg
ICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
aW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NzFiOTJkNTg0ZmVlOGY0YWY3YTg1OTY0ZWFhYmMxY2VkNTAxNzMxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
CkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRl
ICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3Mg
SW50U2l6ZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUo
KTsKKworICAgIHN0YXRpYyBSZW5kZXJpbmdCYWNrZW5kJiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgCisgICAgdmlydHVhbCB+UmVuZGVy
aW5nQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01v
ZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iY2MzOTg4ZmQ2NDNkYTcwNDQxZTUzMzhiMTZhMTFiMDU0NjMxMzg0
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIHsKKyAgICBBY2NlbGVyYXRlZCwKKyAgICBVbmFj
Y2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3Qs
CisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5jcHAKaW5kZXggNDA0MWIzZjgxMDc2NzhjNTZhY2RiMGM1MzNhMDk4NmY3ZTY0NTU5Ni4u
NjEyZjllOWQyMmQ2NzFmNjhkNTY1ZjEyNDQ5NGVjMzMyZDVmOTQ1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTgzLDcgKzgzLDcg
QEAgcHVibGljOgogICAgICAgICBjbGVhclNjcmF0Y2hCdWZmZXIoKTsKIAogICAgICAgICAvLyBT
aGFkb3dCbHVyIGlzIG5vdCB1c2VkIHdpdGggYWNjZWxlcmF0ZWQgZHJhd2luZywgc28gaXQncyBP
SyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICAg
ICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocm91bmRlZFNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShyb3VuZGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIHJl
dHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogICAgIH0KIApAQCAtNTkzLDcgKzU5Myw3IEBAIHZv
aWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dX
aXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0Um91bmRlZFJl
Y3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTYyMSw3ICs2MjEs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNl
dFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRS
ZWN0JiBmdWxsUmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgaG9sZVJlY3QsIGNvbnN0IExh
eWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZl
ckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6
ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02ODUsNyArNjg1LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNv
bnMKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0
U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0obGF5
ZXJJbWFnZVByb3BlcnRpZXMpOwotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxh
eWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1h
Z2VCdWZmZXIuZ2V0KCk7CiAjZW5kaWYKIApAQCAtNzM5LDcgKzczOSw3IEBAIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgY29uCiAjaWYgVVNFKENHKQogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNo
QnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxz
ZQotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxh
dGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1hZ2VCdWZmZXIuZ2V0KCk7CiAj
ZW5kaWYKIApAQCAtODg0LDEyICs4ODQsMTIgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hhZG93
QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGEKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0
ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVj
dCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJsdXJMYXll
ckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRo
KCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJl
Y3QsIHsgfSk7CisgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdC5zaXplKCksIGJsdXJS
ZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1h
Z2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKQEAgLTkx
Miw3ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAogCiAgICAgYWRqdXN0Qmx1clJh
ZGl1cyh0cmFuc2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFVu
YWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggNjJjNzlmMTNhMWM3MjRkZGYzN2E5
NDY0ZjgzMmNkNmY3NzllMDdkOC4uODBhMDI1ZThlNmNhODhhNmI0N2ZjN2ZkYzVlNWM1ZTI1MGY5
ZmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Q2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0xNzQsNyArMTc0LDcgQEAgZW51bSBQYXRo
RHJhd2luZ1N0eWxlIHsKIAogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRm
b3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdl
LCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3QgRmxvYXRTaXplJiBsYXllclNp
emUsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJm
YWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9
IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAg
ICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9h
dFJlY3Qocm91bmRlZEludFBvaW50KGxheWVyT3JpZ2luKSwgbGF5ZXJTaXplKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQoKSwgbGF5ZXJTaXplKSwgeyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVP
cGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAg
fQogfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZl
cihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1CiAvLyBGSVhN
RTogVGhpcyBpcyBtb3N0bHkgc2FtZSBhcyBkcmF3U2hhZG93TGF5ZXJCdWZmZXIsIHNvIHdlIHNo
b3VsZCBtZXJnZSB0d28uCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93SW1hZ2UoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgU2hh
ZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllcklt
YWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRp
dmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmds
b2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xOTEsNyArMTkxLDcgQEAg
c3RhdGljIHZvaWQgZmlsbFNoYWRvd0J1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZv
cm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBzYXZlKHBsYXRmb3JtQ29udGV4dCk7CiAK
LSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKQorICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBsYXRmb3JtQ29udGV4dCwgc3Vy
ZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2luLCBleHBhbmRlZEludFNpemUobGF5ZXJT
aXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCmluZGV4IDliMDI1ZTE0NzY3MzUyZTE0YWQ0OGY4NjdiMDQ1ODVlZTgwMzQxMzQu
LjRlMWJmMmI0MzY3ZjM0MzU5ZDg1NGViNzhjMjIwMmRmNTdiMjc0NzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZQogICAgIH0KIAogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAg
ICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5n
ZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cAppbmRleCA5Yzc2ZTI5MTJmODFmYzk0YWRiNWM0ODQ0NTI3MTM0NjBkY2ZiMjhmLi4yOWEwZWM0
OTk0ZjM2MTVkODdiMWJiNGUxZTMzZDc2ODgwN2NiYTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dEltcGxDYWlyby5jcHAKQEAgLTQxMSw3ICs0MTEsNyBAQCBJbnRSZWN0IEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcygpCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1h
Z2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3Bs
YXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzk2NTdlM2IyOTllZDZl
YjRjNWNjMzVkYjk1MzI0NTc4Nzc3NWI5Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzgxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2luY2x1ZGUgIkNhaXJvVXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKLSNpbmNsdWRlICJNSU1FVHlw
ZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYXR0
ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPGNhaXJv
Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyR0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUg
IkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgotI2VuZGlm
Ci0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlIDxl
cG94eS9nbC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4K
LSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVm
ZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgotI2Vu
ZGlmCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltYWdlQnVmZmVyRGF0YTo6
SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KDApCi0gICAgLCBtX3NpemUoc2l6ZSkK
LSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgICwgbV9j
b21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0gICAgLCBtX3RleHR1cmUoMCkKLSNlbmRpZgot
ewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIG1fbmljb3NpYUxheWVyID0gTmlj
b3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKLSNlbHNlCi0gICAgICAgIG1fcGxhdGZv
cm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19Ci0KLUltYWdlQnVmZmVyRGF0YTo6fkltYWdl
QnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCkK
LSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIEdMQ29udGV4dCogcHJl
dmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCkt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgZ2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0
dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGlmIChwcmV2aW91
c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6
OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9y
bURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQo
KTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGdsR2VuVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVS
RV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19BTElHTk1FTlQsIDEpOwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwg
R0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xf
VU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYo
Y2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2Uo
KSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKLSAgICBjYWlyb19z
ZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7
Ci19Ci0KLSNpZiAhVVNFKE5JQ09TSUEpCi1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eT4gSW1hZ2VCdWZmZXJEYXRhOjpwcm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
cGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVm
ZmVyRGF0YTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAgR0xDb250ZXh0KiBwcmV2aW91
c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLQotICAgIGlmICghbV9jb21w
b3NpdG9yVGV4dHVyZSkgewotICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAg
ICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgICAgICAgICBw
cm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
QnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkQmxlbmQsIEdMX1JHQkEpKTsKLSAgICAgICAgICAgIH07Ci0jaWYgVVNFKE5JQ09TSUEpCi0g
ICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0g
ICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAg
ICB9Ci0KLSAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhl
IGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNh
c2VzCi0gICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5k
ZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAot
ICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgotICAgIGNhaXJvX3NldF9zb3VyY2Vf
c3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAg
ICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7Ci0gICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOwotCi0gICAg
aWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLSNlbmRpZgotCi12b2lkIGNsZWFyU3VyZmFjZShj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOwot
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwot
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNy
ZWF0ZUNhaXJvR0xTdXJmYWNlKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0g
ICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBXZSBtdXN0IGdlbmVy
YXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkg
Zm9yIGV4dHJhY3RpbmcgaXQKLSAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCi0g
ICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIs
IEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLQotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0KLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBs
ZXZlbCAqLywgR0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCAvKiBi
b3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgY2Fpcm9fZGV2
aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7Ci0KLSAgICAvLyBUaHJlYWQt
YXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMu
Ci0gICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7Ci0K
LSAgICBtX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdGV4dHVyZSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIGNsZWFyU3VyZmFjZShtX3N1cmZhY2Uu
Z2V0KCkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fp
cm9TdXJmYWNlQ29weShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgYXV0byBjb3B5
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0Iz
MiwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSkpOwotCi0gICAgYXV0
byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0
X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3Nl
dF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFp
bnQoY3IuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0g
Q0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0gICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQoc3VyZmFjZSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKLSAgICAgICAgcmV0
dXJuIHN1cmZhY2U7Ci0KLSAgICByZXR1cm4gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlKTsKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAg
ICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7Ci0KLSAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1
cyhzdXJmYWNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLQotICAgIGF1dG8g
cGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKLSAg
ICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KHN1cmZhY2UuZ2V0KCkpICoKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLU5hdGl2ZUlt
YWdlUHRyIEltYWdlQnVmZmVyOjpuYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGF0YS5tX3N1cmZhY2UuZ2V0KCk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vz
cykKLSAgICA6IG1fZGF0YShJbnRTaXplKHNpemUpLCByZW5kZXJpbmdNb2RlKQotICAgICwgbV9s
b2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxl
KQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZXJy
b3IuCi0KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICog
c2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihtX3Jlc29sdXRp
b25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRv
bWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2Nh
bGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQpOwotICAgIG1fZGF0YS5tX3NpemUgPSBtX3NpemU7Ci0KLSAgICBpZiAobV9zaXplLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZCkgewotICAg
ICAgICBtX2RhdGEuY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLSAgICAgICAgaWYgKCFtX2RhdGEu
bV9zdXJmYWNlIHx8IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkp
ICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyaW5n
TW9kZSA9IFVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0
byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmlu
Z01vZGUgPT0gVW5hY2NlbGVyYXRlZCkKLSNlbHNlCi0gICAgQVNTRVJUKG1fZGF0YS5tX3JlbmRl
cmluZ01vZGUgIT0gQWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0gICAgewotICAgICAgICBzdGF0aWMg
Y2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7Ci0KLSAgICAgICAgaW50IHN0
cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIs
IG1fc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgdm9pZCogc3VyZmFjZURhdGE7Ci0gICAgICAgIGlm
ICghdHJ5RmFzdFplcm9lZE1hbGxvYyhtX3NpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVl
KHN1cmZhY2VEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEubV9z
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7Ci0gICAgICAgIGNh
aXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCAmc19zdXJm
YWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsgZmFzdEZyZWUoZGF0YSk7
IH0pOwotICAgIH0KLQotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOyAgLy8g
Y3JlYXRlIHdpbGwgbm90aWNlIHdlIGRpZG4ndCBzZXQgbV9pbml0aWFsaXplZCBhbmQgZmFpbC4K
LQotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCks
IG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkp
OwotICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9k
YXRhLm1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0g
ICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRl
ZmF1bHQ7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6
ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1h
Z2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLm1fY29udGV4
dDsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKQotewotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Is
IFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICAvLyBjb3B5Q2Fpcm9JbWFnZVN1cmZh
Y2UgaW5oZXJpdHMgc3VyZmFjZSdzIGRldmljZSBzY2FsZSBmYWN0b3IuCi0gICAgaWYgKGNvcHlC
ZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gQml0bWFwSW1hZ2U6
OmNyZWF0ZShjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwot
Ci0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBv
biBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+KG1fZGF0YS5tX3N1cmZhY2UpKTsKLX0KLQotQmFja2luZ1N0b3JlQ29weSBJ
bWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29weUJh
Y2tpbmdTdG9yZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlQnVm
ZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlvbkNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChkZXN0aW5h
dGlvbkNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAgICAgICBpZiAoJmRlc3RpbmF0
aW9uQ29udGV4dCA9PSAmY29udGV4dCgpKQotICAgICAgICAgICAgc3VyZmFjZSA9IGNhaXJvU3Vy
ZmFjZUNvcHkoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RpbmF0aW9uQ29u
dGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgY29uc3QgYXV0
byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlvbkNvbnRleHQuc3RhdGUoKTsK
LSAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRp
b25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGNvbnRl
eHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBz
dXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RSZWN0LCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1h
Z2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUgY29sb3Ig
c3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRh
U3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgp
KTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXplLmhlaWdo
dCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRy
PHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhl
bCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJl
bXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihs
b29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAgICAgKnBp
eGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX2RhdGEubV9z
dXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUu
aGVpZ2h0KCkpOwotfQotCi1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBjb3B5U3VyZmFjZVRvSW1h
Z2VBbmRBZGp1c3RSZWN0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICBjYWlyb19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlwZSA9IGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUoc3VyZmFjZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYW4gaW1hZ2Us
IHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRhdGE7Ci0gICAgLy8gb3RoZXJ3
aXNlIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBzdXJmYWNlIGltYWdlCi0gICAgaWYgKHN1cmZhY2VU
eXBlID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7
Ci0gICAgCi0gICAgcmVjdC5zZXRYKDApOwotICAgIHJlY3Quc2V0WSgwKTsKLSAgICByZXR1cm4g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwg
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXRlbXBsYXRlIDxBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHByZW11bHRpcGxpZWQ+Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBsb2dpY2FsUmVj
dCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIC8v
IFRoZSBhcmVhIGNhbiBvdmVyZmxvdyBpZiB0aGUgcmVjdCBpcyB0b28gYmlnLgotICAgIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qu
d2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0g
VWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQo
KSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8g
Q2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keCA9IDA7
Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQocmVjdC54KCksIHJlY3Qud2lkdGgoKSwgZW5keCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUg
YWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keSA9IDA7Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQo
cmVjdC55KCksIHJlY3QuaGVpZ2h0KCksIGVuZHkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHggPiBzaXplLndp
ZHRoKCkgfHwgZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwo
KTsKLQotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAg
ICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAg
b3JpZ2lueCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHggPiBzaXplLndpZHRoKCkpCi0gICAg
ICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gb3Jp
Z2lueDsKLQotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsK
LSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAg
ICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHkgPiBzaXplLmhlaWdodCgpKQot
ICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBv
cmlnaW55OwotCi0gICAgLy8gTm90aGluZyB3aWxsIGJlIGNvcGllZCwgc28ganVzdCByZXR1cm4g
dGhlIHJlc3VsdC4KLSAgICBpZiAobnVtQ29sdW1ucyA8PSAwIHx8IG51bVJvd3MgPD0gMCkKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1
cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVk
IHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhp
cyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChvcmlnaW54LCBvcmlnaW55LCBu
dW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZVN1
cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KGRhdGEubV9zdXJmYWNlLmdl
dCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3Vy
ZmFjZS5nZXQoKSwgcmVzb2x1dGlvblNjYWxlLCByZXNvbHV0aW9uU2NhbGUpOwotICAgIG9yaWdp
bnggPSBpbWFnZVJlY3QueCgpOwotICAgIG9yaWdpbnkgPSBpbWFnZVJlY3QueSgpOwotICAgIGlm
IChpbWFnZVN1cmZhY2UgIT0gZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhp
cyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLgotICAgICAgICBJbnRSZWN0IGxvZ2ljYWxBcmVhID0gaW50ZXJzZWN0aW9uKGxvZ2ljYWxS
ZWN0LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdo
dCgpKSk7Ci0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIGltYWdlU3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgtbG9naWNhbEFyZWEueCgp
LCAtbG9naWNhbEFyZWEueSgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsQXJlYS5zaXpl
KCkpLCBJbnRTaXplKCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgfQotCi0gICAgdW5z
aWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VT
dXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRh
KCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFn
ZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0
LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0
eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBp
bnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHgg
KyBvcmlnaW54OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZy
b21QcmVtdWx0aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlv
biBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSAoKnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCByZWQgPSAoKnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWdu
ZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11
bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3Jl
ZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1
ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBi
bHVlOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9
Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9n
aWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNv
bHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJ
bWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9
PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9u
U2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFs
dWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5
RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewot
ICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lz
dGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0g
YmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3Jl
UmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6
OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSog
cGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29v
cmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0
b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJu
IGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNr
aW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUs
IG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2lu
Z1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3Vy
Y2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9p
bnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VS
ZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChk
ZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFT
U0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291
cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VS
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291
cmNlUmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgp
ICsgbG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBB
U1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAg
aW50IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7
Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291
cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0g
ICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1
bW5zID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNj
YWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkg
KyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERl
c3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49
IDApOwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9y
aWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZ
KCkpOwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNl
UmVjdC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkg
KyBsb2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhl
aWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNh
bE51bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXpl
IG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3Rl
bS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZl
ZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChk
ZXN0eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZp
Y2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VS
ZWN0LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBj
b25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRl
c1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsg
Kyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNp
Z25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4Owot
Ci0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZy
b21Db2xvcigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBw
aXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93
c1tiYXNleF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQp
IHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBz
cmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3Vy
ZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBj
YWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9n
aWNhbERlc3R4LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93
cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsK
LSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90
aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgp
LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNp
emUobG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxE
ZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKLSAgICB9Ci19Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQotc3RhdGljIGNhaXJvX3N0YXR1
c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRh
LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0
b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKLSAgICAgICAg
cmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICByZXR1cm4gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0KQot
ewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsg
Ly8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgotCi0gICAgcmV0dXJuIGNh
aXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0
cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29k
ZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGVuY29kZWRJbWFn
ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFy
PiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNv
ZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlOwotICAgIGlmICghaW1hZ2Ug
fHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29kZWRJbWFnZSkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZW5jb2RlZEltYWdlOwotfQotCi0jZW5kaWYKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmICFVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQotewotICAgIEFT
U0VSVChtX3RleHR1cmUpOwotCi0gICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNv
bnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4K
LSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKLSAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgc3RhdGljX2Nh
c3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJl
LCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX3NpemUsIHRhcmdldFJlY3QsIG1hdHJp
eCwgb3BhY2l0eSk7Ci19Ci0jZW5kaWYKLQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBs
YXRmb3JtTGF5ZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybiBtX2RhdGEubV9uaWNvc2lh
TGF5ZXIuZ2V0KCk7Ci0jZWxzZQotICAgIGlmIChtX2RhdGEubV90ZXh0dXJlKQotICAgICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxJbWFnZUJ1ZmZlckRhdGEqPigmbV9kYXRhKTsKLSNlbmRpZgotI2Vu
ZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtIHRhcmdldCwgUGxhdGZv
cm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUg
cmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKLSAgICBpZiAocHJlbXVsdGlw
bHlBbHBoYSB8fCBmbGlwWSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtX2Rh
dGEubV90ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHQ0dMZW51bSBiaW5k
VGV4dHVyZVRhcmdldDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKLSAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgYmluZFRleHR1cmVUYXJn
ZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+
IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOwotICAgIGNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwotICAgIHVpbnQzMl90IGZibzsKLSAgICBnbEdlbkZyYW1lYnVmZmVy
cygxLCAmZmJvKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsK
LSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRB
Q0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9kYXRhLm1fdGV4dHVyZSwgMCk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1fc2l6ZS53aWR0
aCgpLCBtX3NpemUuaGVpZ2h0KCksIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVU
YXJnZXQsIDApOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKLSAg
ICBnbEZsdXNoKCk7Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgcmV0
dXJuIHRydWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9Q
QVJBTShkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIFVOVVNFRF9QQVJBTShpbnRlcm5hbGZvcm1h
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxwaGEpOwotICAgIFVOVVNFRF9QQVJB
TShmbGlwWSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMDQ5MGVlZGE4Mjg5NDA2NmI2OTNmNzlhYmE2N2FlMWM4
ZmZjN2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGls
aXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxT
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1f
c3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0
YXR1cyhtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJl
ZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkp
KTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0
ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6
Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Km1fY29udGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVz
UGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3Ip
IGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNr
aW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0g
YWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAg
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9
CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJm
YWNlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNh
aXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5n
ZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2Nv
bnRlbnQobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAg
ICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAg
ICAgIGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRp
dmVJbWFnZShjb3B5QmVoYXZpb3IpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2Ug
dGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcElt
YWdlOjpjcmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOworfQorCitSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5
TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwg
b3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlC
YWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJ
bWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVj
dCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3Jl
OjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChz
cmNDb2xvclNwYWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAg
ICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9
IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpT
UkdCKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9y
U3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWlu
dDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAg
ICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNv
bG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7Cisg
ICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJn
YkxVVCk7CisgICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdC
KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNl
UmdiTFVUPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29s
b3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAg
YXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAg
ICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30K
KworU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1l
VHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJh
c2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNl
NjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsg
YmFzZTY0RGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdl
TUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1h
Z2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7
CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sK
KyAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCk7CisgICAgY2Fp
cm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGE7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAgIGltYWdlRGF0YS5hcHBlbmQo
cGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgor
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwor
CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBo
YUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0
LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNy
Y1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3Jk
aW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAg
c3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNy
Y1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNy
ZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0
UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNj
YWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRl
c3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisg
ICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3Qq
IHNyY1Jvd3MgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkg
KyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngo
KSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywg
c3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJh
eTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBh
cnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVjdCBz
cmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAgICAg
ICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNyY1Jl
Y3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJlY3Qg
c3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJ
bWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQsIHNy
Y1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RC
eXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IDQgKiBzcmNTaXplU2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9
IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3Jj
UmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5w
dXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAg
ICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6
OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAg
ICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVz
dFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdo
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzgyOWFmZjM2NTI0
ZDA4MThjMTQzODAzYWQ2NDhjZDJjM2VlOTc1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgK
QEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKKworICAgIFJl
ZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
KSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRl
OworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3Zl
cnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpIHsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29s
b3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNv
bnN0IEludFNpemUmKTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9z
dXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsgbnVs
bHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wZTkxMDBmNzRlYTBhZWNmMTAyMWMwMzM4NDk5ZDczMTE2YWU4NDc5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBz
ZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2luY2x1
ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJFUE9Y
WSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+Cisj
ZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBPWFkp
CisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJTdXJm
YWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3Ig
PSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRv
cihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNyLmdl
dCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3Vs
YXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFs
U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogY29u
dGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hh
cmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhl
cmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBhIHByZS1l
eGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRleHR1cmVz
KDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUp
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworCisg
ICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIGlu
dGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICov
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90KiBk
ZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJlbmVz
cyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAgIGNh
aXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAgYXV0
byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUo
ZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCB0ZXh0dXJlLCBpbnRlcm5hbFNpemUu
d2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vf
c3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSwgdGV4dHVyZSkpOworfQor
CitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0ZXh0dXJlKQor
ICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQorICAgICwgbV90
ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVT
RShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpj
cmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3Rv
cnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgorfQor
CitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShO
SUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5kaWYK
KworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmco
KS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1f
dGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkK
KyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5k
aWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0
aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIElt
YWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAgIGlmIChtX3RleHR1cmUp
CisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
Q0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dM
ZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQor
eworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2lu
Y2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZh
Y3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZs
aXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmluZFRleHR1cmVUYXJnZXQ7CisgICAg
c3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIGJpbmRU
ZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJF
X01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0
ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVpbnQz
Ml90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICBnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJE
KEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90
ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5h
dGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZv
cm1hdCwgMCwgMCwgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0
KCksIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOworICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEZsdXNoKCk7CisgICAg
Z2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250ZXh0
ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5n
R0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBn
bEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVy
ZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9D
TEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhlbFN0
b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVS
RV8yRCwgMCAsIEdMX1JHQkEsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29t
cG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBt
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6
ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1f
Y29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQorewor
ICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50
KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgY3JlYXRlQ29t
cG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAg
ICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2so
KSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0
dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9pbnRl
cm5hbFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAg
ICAgICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25j
YXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXll
ci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3Bs
YXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBn
cmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRo
IHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1l
IHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUu
IFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3Ig
YnVmZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQo
KSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21w
b3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQo
bV9jb21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkK
KyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30K
KyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9w
YWNpdHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hh
bmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNr
IGFmdGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0g
R0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2Uu
Z2V0KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3
VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1faW50ZXJu
YWxTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5Yjc4ZWEwMDFlNzhkMGNhYjc3YjRhMDNkNzExZjc0Mzg0
ZjU5Y2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsOTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVT
RShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisj
aWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVy
VGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxh
eWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CisgICAg
V1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIH5JbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJl
KEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdD
R0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkp
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGNy
ZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBv
dmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9y
bUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8
Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVmUHRy
PFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5Owor
I2VuZGlmCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsK
KyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9jb21w
b3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7IDAg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIFVTRShDQUlSTykgJiYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGMzZmJlNTNjNGE1
YzJiMDIxM2YxYjk1MWEyNTc1NzU0NmU4ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNvbG9yLmgi
CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAg
ICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7CisKKyAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93
aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAgdm9p
ZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGludGVybmFsU2l6
ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNl
RGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5h
bFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0
YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQq
IGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcg
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFj
ZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3Jt
VHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tV
cFRhYmxlKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHVuc2lnbmVk
KiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUg
KiB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2ljYWxTaXplLndpZHRoKCk7
IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKKyAgICAgICAg
ICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwp
OworICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3Iu
cmVkKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLCBsb29rVXBUYWJsZVtwaXhl
bENvbG9yLmJsdWUoKV0sIHBpeGVsQ29sb3IuYWxwaGEoKSk7CisgICAgICAgICAgICAqcGl4ZWwg
PSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQo
KSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjcyMDNhZjRmMTUyMmYzMzQwMzU2YzAxMjFmZjFlOTE2MzVhYmQ5ZAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKK3By
aXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOwor
CisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8u
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2OTIzZmRi
Zjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1ZmZlckRh
dGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVTRShDQUlS
TykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAi
UGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Owot
Ci1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRl
eHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZvcm1MYXll
cgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3Qg
SW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyRGF0YSgp
OwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBsYXRmb3Jt
Q29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBSZW5kZXJp
bmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5l
ZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJz
SWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1
ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFj
ZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxjYWlyb190
PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxOaWNvc2lh
OjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0jZW5kaWYK
LSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBw
ZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
LCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKLSNlbmRp
ZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQot
Ci0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGMyODQxOGNjMDlmMDJiNDVkMGU0MjVlNjNk
YTFlNTEwZDMzZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKQEAgLTAsMCArMSwx
MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWly
by5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiR1JlZlB0
ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShHVEsp
CisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29u
c3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghcmVp
bnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwg
bGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKKyAgICBy
ZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBib29sIGVuY29kZUltYWdl
KGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1
aW50OF90Piogb3V0cHV0KQoreworICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBl
ID09ICJpbWFnZS9wbmciKTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93
LgorCisgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwg
d3JpdGVGdW5jdGlvbiwgb3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPikKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2Rl
ZEltYWdlOworICAgIGlmICghaW1hZ2UgfHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwg
JmVuY29kZWRJbWFnZSkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGVuY29kZWRJ
bWFnZTsKK30KKworI2Vsc2UKKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQor
eworICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZy
b20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIu
Z25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNn
ZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5z
dWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBl
ICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAi
Ym1wIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBp
eGJ1ZjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0
IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9E
YXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUg
c291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxw
aGEuCisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7CisgICAgICAg
IGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQ
RV9JTUFHRSkgeworICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3Vy
ZmFjZSksCisgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAgICAgICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3Vy
ZmFjZSk7CisgICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1
cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcGFpbnQo
Y3IuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1
cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisgICAgICAg
IHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Cisg
ICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmluZyBxdWFs
aXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEw
MC4wICsgMC41KSk7CisgICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdl
dCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAm
ZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBO
VUxMKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhi
dWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRh
KCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOworfQorCitW
ZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1ZU91dFB0
cjxnY2hhcj4gYnVmZmVyOworICAgIGdzaXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFlbmNvZGVJ
bWFnZShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGlt
YWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gaW1h
Z2VEYXRhOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZTMzYzdjYTA5NmNhZDg5MjI2MzczOWM3NWY5NWIyMGZl
ZGMwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEo
Y2Fpcm9fc3VyZmFjZV90KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENB
SVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDQ5NmVjYTMyNGQzZTRkYTIyZmNhNTk5OThlYjVl
ZjVlZTczZDIwOWEuLjcyMmVlZmZlNmM5ZTVmZDI4NjZiZTI3Mjg3YTQ3MDIxMDBjYmZjNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlvblNpemUgPSBidWZmZXIuc2l6ZUZvckRlc3RpbmF0
aW9uU2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlv
blNpemUgPSBkZXN0UmVjdC5zaXplKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
ID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAKICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU2ZjE5NjRkMDk1NTJiZDFhMjdmYzBkMjI4MDlkOGEz
ZGE2Yjc1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysg
L2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8u
aD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5j
bHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5j
bHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8cGFsL3Nw
aS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3Ig
dGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0j
ZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZl
cik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsK
LQotc3RhdGljIEZsb2F0U2l6ZSBzY2FsZVNpemVUb1VzZXJTcGFjZShjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNraW5nU3RvcmVTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUpCi17Ci0gICAgZmxvYXQgeE1hZ25pZmljYXRpb24gPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKSAvIGludGVybmFsU2l6ZS53aWR0
aCgpOwotICAgIGZsb2F0IHlNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCkpIC8gaW50ZXJuYWxTaXplLmhlaWdodCgpOwotICAgIHJldHVy
biBGbG9hdFNpemUobG9naWNhbFNpemUud2lkdGgoKSAqIHhNYWduaWZpY2F0aW9uLCBsb2dpY2Fs
U2l6ZS5oZWlnaHQoKSAqIHlNYWduaWZpY2F0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAo
c2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRy
PENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBD
R0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBz
d2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4
dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xv
clNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQot
ICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBD
R0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFr
OwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dD
b250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYg
KCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsK
LSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAg
ICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsK
LSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUs
IDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsK
LQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBT
ZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4
dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAg
cmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JT
cGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwg
bV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxz
ZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdp
ZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBz
Y2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQot
ICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0
aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhw
cmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50
U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmlu
Z01vZGUgPT0gQWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9z
aXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3
aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4g
aGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVn
ZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWdu
ZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAg
ICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAq
IG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBp
ZiAod2lkdGgudW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdl
dCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZh
bHNlOwotI2Vsc2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKTsK
LSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAgUmV0
YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVuZGVy
aW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAg
RmxvYXRTaXplIHVzZXJCb3VuZHMgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSh3
aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpKSk7Ci0gICAgICAgIG1fZGF0YS5z
dXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNp
emUodXNlckJvdW5kcyksIGNvbG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2Up
IHsKLSAgICAgICAgICAgIGNnQ29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9y
bUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAg
ICAgICAgICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIHVzZXJCb3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX2RhdGEuc3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAg
IFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4
dCkKLSAgICAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2Nh
dGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQot
ICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IElt
YWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUu
aGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAo
IW1fZGF0YS5kYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJH
QjMyCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0
YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0g
ICAgICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5k
YXRhLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEu
Y29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxl
YXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAg
ICAgICAgICAgIEltYWdlQnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEp
KTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBz
IHRoZSBkYXRhLgotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5k
YXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51
bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFj
Z0NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQg
PSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0K
LSAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRy
YW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRl
eHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1
Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNhY2hlZENHQ29sb3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2Rl
LCBob3N0V2luZG93LCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVy
KCkgPSBkZWZhdWx0OwotCi1GbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlv
blNpemUoRmxvYXRTaXplIGRlc3RpbmF0aW9uU2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2Nh
bGVTaXplVG9Vc2VyU3BhY2UoZGVzdGluYXRpb25TaXplLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZSwgaW50ZXJuYWxTaXplKCkpOwotfQotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAg
Ly8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhy
ZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3Mg
aGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkg
YmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQncyBz
YWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5
IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAg
ICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVj
YXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRh
LnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwot
ICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhl
aWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3Vy
cmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQg
d2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFj
Y2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2ln
bmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdz
IHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3Rh
bEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2Up
Ci0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVy
biAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQo
KSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
aWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3Vy
ZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBDR0Nv
bnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VS
ZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYgKENH
SW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgo
KSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3Vu
ZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJ
bWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRz
LmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFn
ZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUs
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2Nh
bGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0
KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFk
b3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2lj
YWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3Bh
Y2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29u
dGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAg
ICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5V
c2VyU3BhY2UgPSBzY2FsZVNpemVUb1VzZXJTcGFjZShsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3Jl
U2l6ZSwgaW50ZXJuYWxTaXplKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQu
Z2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNl
KSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUo
V1RGTW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9
PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9n
aWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBw
cmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5r
SW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5h
bFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2luZ1N0
b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9h
dCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05h
dGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6
ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgp
Ci17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi1SZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKQotICAg
ICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6
Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQotICAg
IHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENG
KENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZl
R2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRhLmRhdGFQ
cm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAg
ICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2Uo
KTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAo
IWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJh
dyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+
bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VC
dWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJv
bUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0
IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdl
dCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25z
KTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8g
RHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICBlbHNl
Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
LQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05h
dGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkg
fHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYg
KFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJh
d2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAg
ICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJp
bmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGlt
YWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9
IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0
ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNm
b3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVj
dCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxT
aXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRp
bmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJy
YXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJu
YWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2Us
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQot
ICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBz
Y2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9
PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBz
b3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2lu
dCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAg
ICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlm
IGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCku
Ci0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5
NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZs
b2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBl
Z1VUSSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQotICAg
IHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBl
ZyIpOwotI2VuZGlmCi0gICAgcmV0dXJuIGtVVFR5cGVKUEVHOwotfQotICAgIAotc3RhdGljIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVzZSB0aGUg
Q29yZVNlcnZpY2VzIHZlcnNpb24/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBVVElG
cm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2Fm
ZS4KLQotICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBv
cnRlZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxp
YWJseSBpcyBmb3VuZC4KLSAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBh
bmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgotICAgIHN0YXRpYyBjb25zdCBD
RlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBzdGF0aWMg
Y29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYi
KTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImlt
YWdlL3BuZyIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZVBORzsKLSAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCi0gICAgICAgIHJl
dHVybiBqcGVnVVRJKCk7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1p
bWVUeXBlLCAiaW1hZ2UvZ2lmIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlR0lGOwotCi0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0jZW5kaWYKLX0K
LQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYg
dXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKLXsK
LSAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0
ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdl
UHJvcGVydGllczsKLSAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAm
JiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8vIEFwcGx5
IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgot
ICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7Ci0g
ICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNz
aW9uUXVhbGl0eTsKLSAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxp
dHkuZ2V0KCk7Ci0gICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5
Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tz
LCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIH0KLQotICAgIC8vIFNl
dHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBF
RyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCi0gICAgLy8g
aW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCi0K
LSAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2Us
IGltYWdlUHJvcGVydGllcy5nZXQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZp
bmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIFN0cmluZyBkYXRhVVJMKENG
RGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIFZlY3RvcjxjaGFy
PiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBD
RkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIg
KyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1zdGF0aWMgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKLXsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENG
RGF0YUdldExlbmd0aChjZkRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotU3RyaW5nIElt
YWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJl
c2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWlt
ZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBl
LCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRhdGFW
ZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRyPENGRGF0
YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBhdXRv
IHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQo
dXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwodXRp
LmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxw
aGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJs
YWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICghcHJl
bXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBz
aXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUo
KS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0
aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRp
cGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICghZGF0
YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1hZ2Ug
PSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9y
U3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25l
U2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpbWFnZSA9
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRC
bGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29u
dGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6
ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShsb2dpY2FsU2l6
ZSgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3Bh
Y2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0
byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVh
bGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1
cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZE
YXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBhdXRv
IHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQo
dXRpKTsKLQotICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxw
aGFMYXN0OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1
YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZl
Q2FwYWNpdHkoc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBw
cmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZm
ZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFb
aSArIDNdOwotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsg
MF07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOwotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgICAgIGRhdGEgPSBwcmVtdWx0
aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgfQotCi0gICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwotICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAs
IGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOwotICAgIGlm
ICghZGF0YVByb3ZpZGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gaW1h
Z2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQo
KSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0
bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwg
MCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLQotICAgIGF1dG8gY2ZEYXRh
ID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsK
LSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNm
RGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1v
dmUoY2ZEYXRhKTsKLX0KLQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAg
ICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAg
ICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJk
YXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291
cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17
Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkK
LSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsK
LX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsK
LSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNo
Q29udGV4dCgpOwotICAgIHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjBiNjc3NjJiY2RiMDRjOThkNzc5OWVlNGM2MjU1NDBkZDI3ZDYwYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFj
Y2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0
KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAt
bV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxl
RmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdl
UmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25z
dCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRoKCkp
IHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJu
YWxTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVX
aXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXplLndpZHRo
KCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0
YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQo
UmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdl
LmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Cisg
ICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0
UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6
ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShj
b250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVz
ZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWlt
YWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6
Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNH
QmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdl
UHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVz
b2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0
bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6
ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdl
KFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgp
LCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9u
cykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVj
dFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5n
U3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdO
YXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0
U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
IHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworfQorCitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOworICAgIAorICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVm
ZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVs
dGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsK
KyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZl
IHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHByZW11bHRp
cGxpZWREYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSksIENvb3JkaW5hdGVTeXN0
ZW06OkxvZ2ljYWwpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2lj
YWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNp
emUpOworICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6
ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVP
cmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0
KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlm
IChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5
QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAg
YXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNp
emUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUo
KS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0
KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgp
LmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBj
ZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZN
b3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7Cisg
ICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJl
c29sdXRpb24pKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7
CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRp
YyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVy
Um93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9C
dWZmZXIgdkltYWdlQnVmZmVyOworICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0
aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZm
ZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOwor
ICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZl
ci5kYXRhID0gcm93czsKKyAgICByZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFn
ZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQorewor
ICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNT
RVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChk
ZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQ
ZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlm
IChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFn
ZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdklt
YWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xv
ckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFu
bmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwg
MSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3Qs
ICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9y
Rm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFj
Y2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFn
ZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywg
c2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0
ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJh
dGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQs
IGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxw
aGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAg
IGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9y
bWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRkMDc2N2MxODczMDJjMjViZmZkNTliY2E2ZTBjMGZjN2QwMGYxNDcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tl
bmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1h
Z2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2lu
ZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsgfQorCisgICAg
U3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICB2b2lkIHNldHVwQ29udGV4
dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xv
ckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBk
ZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJv
d3MsIGNvbnN0IEludFNpemUmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jNGE3ZjY1NGRhNTUzNjk2YmYzMTY2NDY5NTEzMmVlYjU5NTk3MmM2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJl
c2FtcGxpbmcgaXMgb3B0aW1pemVkLgorI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19G
QU1JTFkpCisKKyNpZiBVU0VfQVJHQjMyCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERl
ZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMySG9zdDsKK2NvbnN0ZXhwciBjb25zdCBDb2xvckZvcm1hdCBCYWNrZW5k
Q29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdDo6QkdSQTsKKyNlbHNlCitjb25zdGV4cHIgY29uc3Qg
Q0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0OworY29uc3RleHByIGNvbnN0IENvbG9yRm9ybWF0IEJhY2tlbmRDb2xvckZvcm1hdCA9
IENvbG9yRm9ybWF0OjpSR0JBOworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHZvaWQqIGRhdGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXpl
LndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgp
LCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisK
KyAgICBzaXplX3QgbnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJv
dzsKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKwor
ICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwg
aW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJS
b3csIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsK
KyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsK
KworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9p
ZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRh
dGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEp
KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBX
VEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYg
ZGF0YVByb3ZpZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQp
CisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1f
ZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZN
b3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQ
cm92aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9
CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQo
KSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Cisg
ICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAK
KyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlKAorICAgICAgICAgICAgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRl
cm5hbFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2Fj
aGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQ
cm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERl
ZmF1bHQpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0
ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0
ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRl
c1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAg
ICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6
OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJS
b3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlv
blNjYWxlICE9IDEpCisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0
OworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVk
LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5k
YXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93
cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0
UmVjdC54KCkgKiA0OworICAgIAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQ
ZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4obV9kYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVj
dENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQmFja2VuZENvbG9yRm9ybWF0LCBzcmNC
eXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6
UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAg
IHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7
CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxl
ICE9IDEpIHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0K
KworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAg
ICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVk
LCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBkZXN0UmVjdC55KCkgKiBk
ZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZVNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jv
d3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyAr
IHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAg
IGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEJhY2tlbmRD
b2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDdjODAwMzAwNzI3MzBmYTA4N2Jm
MzU0MTNkNjM5YTgwODdmZmMxOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2Vu
ZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0
aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsK
KyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3Qg
SW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBieXRlc1BlclJv
dygpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisKKyAgICB2
b2lkKiBtX2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92
aWRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdh
NTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5l
cy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUg
PEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRp
c3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEku
aD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAt
PiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpKQotc3RhdGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1
ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMu
ZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3Ig
IT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAz
LCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEg
ZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07
Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBr
dkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShj
b25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0g
ICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChr
dkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFu
bmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JB
LCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAy
LCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAm
ZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUp
ICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQot
Ci1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5w
dXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0
KTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAg
IHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJv
dzsKLSAgICBzcmMuZGF0YSA9IGlucHV0OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAg
IGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0
LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJ
bWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFn
cyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShp
bnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0
KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lk
dGggKiBoZWlnaHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAg
IHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFj
a2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6Okxv
Y2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9j
ay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJS
b3coKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRh
dGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZykgY29uc3QKLXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9
IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgp
OwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRp
YWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1
bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhY
KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54
KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgp
IHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnpl
cm9GaWxsKCk7Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVz
dHggPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAo
b3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHgg
PSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3Rk
OjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0g
ICAgaWYgKGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBz
aXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0g
ICAgCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAg
IENoZWNrZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAw
KSB7Ci0gICAgICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7
Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4o
ZGVzdGgudW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5k
eS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdo
dCgpOwotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAg
ICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0
YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2ln
bmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYg
KCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51
bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZl
ciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMu
cm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93
czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53
aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIK
LSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQot
ICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0Owot
ICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGgg
KiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsK
LSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgot
ICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2Ug
aW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICog
MjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3Jj
Um93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJh
c2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFz
ZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9B
UkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdl
dCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAx
XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFz
ZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1ti
YXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAg
ICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5
dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkg
KiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0g
ICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3Jj
Um93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGgg
PSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVH
ZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAg
ZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11
bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBj
b25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdl
UGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90
IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxw
aGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBk
ZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
fQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
dXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJl
Y3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0g
ICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVj
a2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVj
dC54KCkpOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRf
VU5VU0VEKHNpemUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NF
UlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVH
ZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHgg
PSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAg
IEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hl
Y2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNl
UmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9p
bnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnku
dW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50
PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgp
KTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAg
IENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8
aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBo
ZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNS
b3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54
ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVp
bnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewot
ICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
ICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAg
c3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0g
aGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jv
d3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0
LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRl
c3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0Iz
MgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQot
ICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
I2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7
ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQo
KTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAg
ICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMy
Ci0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGlt
YWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4
ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXgg
KyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nl
c3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5i
eXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRl
c3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdklt
YWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwot
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93
Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVp
bnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAg
IGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBk
ZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAg
ICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAg
ICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAg
ICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNl
eCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNl
eCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsg
Ml07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jh
c2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5
NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJ
bWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0j
aW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBz
dHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJf
dCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNl
OwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93Owot
ICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdh
cmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJp
dG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsK
LQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBm
b3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZh
Y2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291
cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYg
c291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kMDYxNTNiNjA1YWE1OTUxNTkzMzhhNWM2YmQzYWVmNTIzNTQ2NGI3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisj
aW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFw
aGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
YWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAg
aWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJ
bnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7CisgICAgaWYgKGludGVy
bmFsU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGludGVybmFsU2l6ZS5oZWlnaHQo
KSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4g
aW50ZXJuYWxTaXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXpl
ID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYg
KGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNp
emUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNn
Q29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAg
ICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRl
eHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChz
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShz
dXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNlbmRSaWdodCkK
K3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSkpOwor
fQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9z
dXJmYWNlKTsKKyAgICBzZXR1cENvbnRleHQoKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCisgICAg
OiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmln
aHQoV1RGTW92ZShzZW5kUmlnaHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSkp
Cit7Cit9CisKK01hY2hTZW5kUmlnaHQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVh
dGVTZW5kUmlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZVNlbmRS
aWdodCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhp
Y3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVz
aENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNv
c3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKwor
dW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgp
OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2Uo
V1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAg
IGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUs
IGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVH
ZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgo
KSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkp
OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29s
b3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2Fs
U2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0
U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRl
U3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgIHNyY1Jl
Y3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50UmVjdCBzcmNSZWN0
Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVH
ZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3Qp
OworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQu
d2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0UmVj
dC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFjZTo6TG9ja2Vy
IGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgc3JjUmVjdENsaXBwZWQu
eSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29w
eUltYWdlUGl4ZWxzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9y
Rm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgb3V0cHV0Rm9ybWF0LCBDb2xv
ckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgp
KTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQg
PSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29s
dXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVz
dFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3Jj
UmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworCisgICAg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICBJT1N1cmZhY2U6
OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpS
ZWFkV3JpdGUpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0
ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSA0ICogc3JjU2l6ZS53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5k
YXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlw
cGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoaW5wdXRGb3JtYXQsIENvbG9yRm9y
bWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJ
T1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vz
c2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1MTI3
MDJmYmVjOGFmMTcxMGE2NDdhOWQyMmIyNWI1N2NjZWU3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNlbmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsK
KworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVycmlkZSB7
IHJldHVybiBtZW1vcnlDb3N0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAg
IAorICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKyAg
ICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBj
b25zdDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAppbmRleCA4OWQwNDM5YzIxMGRiNTAxYWM5
MzllYjExNDE0ODgxZWVlYzY1YjI0Li5kMDkxMzlmMDFiZDMzNmYyODQ4YWVhNTI2YTRmOWY4MDBl
ZTc4NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcApAQCAtMjYsNyArMjYsMTggQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgi
CiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2lu
Y2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDEsNCArNTIsMTQwIEBAIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChj
b25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQogICAgIHJldHVybiAqKHVpbnQ4
X3QqKWxhc3RCeXRlOwogfQogCitDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sKKyNpZiAhUExBVEZP
Uk0oQ09DT0EpCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZT
VFIoInB1YmxpYy5qcGVnIik7CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQRUc7CiB9CisK
K1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gVVRJ
RnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOworI2Vsc2UKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNh
ZmUuCisKKyAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBw
b3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVs
aWFibHkgaXMgZm91bmQuCisgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywg
YW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KKyAgICBzdGF0aWMgY29uc3Qg
Q0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7CisgICAgc3RhdGlj
IGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lm
Iik7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJp
bWFnZS9wbmciKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7CisgICAgaWYgKGVxdWFsTGV0
dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQorICAgICAgICBy
ZXR1cm4ganBlZ1VUSSgpOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSht
aW1lVHlwZSwgImltYWdlL2dpZiIpKQorICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBrVVRUeXBlUE5HOworI2VuZGlmCit9
CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAgICBp
ZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhE
YXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVy
dGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVh
bGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBj
b21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAg
ICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7CisgICAgICAg
IGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVh
bGl0eTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0
KCk7CisgICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRl
KDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NG
VHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOworICAgIH0KKworICAgIC8vIFNldHRpbmcg
a0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFn
ZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCisgICAgLy8gaW4gdGhl
IGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisgICAgQ0dJ
bWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVBy
b3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShk
ZXN0aW5hdGlvbi5nZXQoKSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRh
dGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1dG8g
dXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1
dGkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBo
YUxhc3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsK
KyAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVh
bCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBh
biBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Ag
b2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291
cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVD
YXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHBy
ZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZl
ciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtp
ICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAg
YnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAg
ICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAw
XTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAg
ICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExh
c3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRp
cGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5v
dWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0
byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwg
ZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYg
KCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFn
ZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgp
LCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAw
LCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwor
ICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZE
YXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92
ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNl
NjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBi
YXNlNjREYXRhKTsKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiAr
IGJhc2U2NERhdGE7Cit9CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7Cisg
ICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAg
ICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAi
ZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZE
YXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0
YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVy
biBkYXRhOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorewor
ICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisg
ICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFkNDE5
NTUyLi44NGM1N2QyZmVlOTMzOGVkNWUwZWZjNGE4ZTMzNjVhMTlhODAyMDRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oCkBAIC0yNSw4ICsyNSwzMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lm
IFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXpl
KTsKIAotfQorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpOworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmKTsKKworYm9vbCBlbmNvZGVJ
bWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8
dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29u
c3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1
bWVudEltYWdlLmNwcAppbmRleCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMyNTg4
MjNjLi4yODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudElt
YWdlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIyNGJh
YzUzNjRjOWEwNGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRhYjIx
NGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmgKQEAgLTEwMCwxMCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYsIENH
Q29sb3JTcGFjZVJlZik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAgICAKLSNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRy
PElPU3VyZmFjZT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2
ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFj
ZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAi
SU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdl
QnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNj
cmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwx
MyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElP
U3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRT
dXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsK
LX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJm
YWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5l
Qnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBp
bnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2
NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4
YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyAr
MTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAg
ICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigp
OwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBp
dGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUx
LDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYg
ZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBj
b25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5n
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlmMWNlMjczNTQ1MGJk
YWMzYmJkZjExYTMwODVkOWE3ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVy
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3Qg
eworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdy
YXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBH
cmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmlu
ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4
dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkg
eyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5
TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlM
aXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wg
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlz
cGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlz
dChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rp
c3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJl
cGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAgaWYg
KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3BsYXlM
aXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBtX2Rp
c3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4
dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBtX3Ry
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxpc3QK
K30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2Fi
NjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3ZGQx
ZDg1OGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2b2lk
IEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdElt
YWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFn
ZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNp
emUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5z
aW9ucyk7CisgICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAgICAg
aWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZh
bHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50U2l6ZSBwaXhlbEFy
cmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVsQXJy
YXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CisKICAg
ICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046
CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVz
dWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50
KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VS
ZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2
NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3OGE3
ZmI5NDdkNDA1ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMgKzEw
MCwxMyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAg
IC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQg
Y29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgp
LCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9
IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxw
dHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRv
IHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJh
Y2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwg
c2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAotICAg
IHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJ
bnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7Cisg
ICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEs
IEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAKICAgICByZXN1
bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNl
SW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
YWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThj
NWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAx
NTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9hdFNp
emUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJh
bnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRl
ZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1
OTBmYS4uNWM4YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcApAQCAtMjc5LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6
OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJh
eSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxz
ZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
ZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAg
ICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRlckVm
ZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRp
b24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAg
IC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAg
ICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAg
ICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAg
ICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9u
LCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAg
Ly8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAg
IGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAg
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAg
ICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYWI1YTBkNTBmOGNlMWFhZjY1MzVkZWVjOTQwYjg1ZGM1NTE3ZTRiMS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0g
KgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+
JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQotewotICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVk
IGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0
aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxl
L2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgot
Ci0gICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwot
ICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYi
ICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAianBl
ZyIpIHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhl
IDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0
ZXItRHVmZgotICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdl
IHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG5ld1N1cmZhY2U7Ci0gICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBl
KHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAgICAgICAgICAgbmV3
U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgQ0FJ
Uk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNp
emUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7Ci0gICAgICAgICAgICBuZXdTdXJm
YWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JH
QjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0g
ICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAs
IDApOwotICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNl
LmdldCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1
cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAo
dHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkg
PD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIo
c3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Ci0gICAgICAgIGdka19w
aXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVm
ZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5Iiwg
cXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
Z2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCks
ICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7
Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVS
TChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhID0g
dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoaW1hZ2VEYXRhLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7
Ci0gICAgYmFzZTY0RW5jb2RlKGltYWdlRGF0YS5kYXRhKCksIGltYWdlRGF0YS5zaXplKCksIGJh
c2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17
Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7
Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBp
bWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGlt
YWdlRGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcApp
bmRleCA0YzRjNDI2OTYxMjcxYzdiN2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFlLi43NTcwMDNiMWYx
MWRmNGIyNzY2YjQwOWU4MjJjZDhiNDIwZmI0YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0MzRExheWVyLmNwcApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEdDM0RMYXllcjo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpCiAgICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJy
ZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWlnaHQpOwogICAgIFRleHR1cmVNYXBwZXJH
TDo6RmxhZ3MgZmxhZ3MgPSBtX2NvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwOwogI2lmIFVTRShBTkdMRSkKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZSh0ZXh0dXJlU2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCmluZGV4IDdkMmNlZmQ2MjYxZGVlMmEzOWE4
OWQxMDE3MDJlYjUwMjUyZjRmNWUuLmYwMzkxMzgwNjBkMzQ0MzRlNmNkZGJmOTZlYTY0YzMwMWE2
MzU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9CaXRtYXBUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBCaXRtYXBU
ZXh0dXJlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFwcGVyJiwgR3JhcGhpY3NMYXllciogc291
cmNlTGF5ZXIsIGMKIHsKICAgICAvLyBNYWtpbmcgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxl
cmF0ZWQgYnVmZmVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0aGlzIGNvZGUKICAgICAvLyBpc24ndCB1
c2VkIGJ5IGFueSBwbGF0Zm9ybXMgdGhhdCByZXNwZWN0IHRoZSBhY2NlbGVyYXRlZCBiaXQuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRh
cmdldFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlm
ICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggMWM2
NmFkNzljZTQwYzE0NTU4ZjY2NTI1MmIyNWUzYmI3ZGVkMTZiZC4uODk3Y2U0MGQwNGM3ZTBhZDFl
YTE5MmNiOTEwNjE5ZjhmOTIyMjRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTQ1OCw3ICs0NTgs
NyBAQCBJbWFnZUJ1ZmZlciogTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyKCkg
Y29uc3QKICAgICBpZiAobV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXIuZ2V0KCk7CiAKLSAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0
dXJlU2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCBkNWI5MWIyNjg2YWUyNjFl
YjUzYzA2ODliZWVjNjJmNTVlM2ZiNDU4Li44ZjUwZTU3NTcxZDdiMzg1MDBlZWQ3YmNkYTZiM2E2
NDJhYmY3OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAg
LTY5MDUsNyArNjkwNSw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5n
U3RyYXRlZ3koKQogICAgIH0KICAgICAKICAgICBlbnN1cmVMYXllckZpbHRlcnMoKTsKLSAgICBt
X2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8g
QWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVy
KHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRp
bmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJM
YXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZS5jcHAKaW5kZXggOTE0MjAyOWEyZDQ0NjRkZjVjYjdiM2E0NDE5M2JlMjg2M2MxZWQy
YS4uOTM1YTZlZTllNzZmZjQ0MDJmOTg0YjVkMmI1MjFhNjk5MWM2MTUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKQEAgLTE4MSwxNCArMTgxLDE0IEBAIHN0
ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFn
ZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgSW50UmVjdCBtYXJnaW5SZWN0ID0gc25hcHBlZElu
dFJlY3QobWFyZ2luUik7CiAgICAgYXV0byBpbnRlcnZhbHMgPSBtYWtlVW5pcXVlPFJhc3RlclNo
YXBlSW50ZXJ2YWxzPihtYXJnaW5SZWN0LmhlaWdodCgpLCAtbWFyZ2luUmVjdC55KCkpOwogICAg
IC8vIEZJWE1FICgxNDk0MjApOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9u
YWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxl
cmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogCiAgICAgaWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAgICAgICAg
aWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2Us
IEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJ
bnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQocGl4ZWxBcnJheSk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBw
aXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9
IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApp
bmRleCAwOGU0OTI4MmFkOTNiY2FjZDI5Nzc1Yjg0NmYwNTlkNWEyY2E3MTNlLi4xZDc3YjYzYzZm
ZTI4MzEyYWUxMWVkODI1YjUyM2FhY2U3MTdlYzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0x
NDIsNyArMTQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBp
bmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGMKIAogICAgIGlmIChzaG91bGRD
cmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAg
ICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBi
cmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2guCi0gICAgICAgIGNsaXBwZXJNYXNrSW1hZ2Ug
PSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJz
b2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFVuYWNjZWxlcmF0ZWQsICZjb250ZXh0
KTsKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6
U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwogICAgICAgICBp
ZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHAKaW5kZXggNzViNTliNjNjM2U0OTYwYmQ0ZTNiZGJkODc0OTJhOTMyZjQzMTYxYi4u
MTJlN2YxNWQ2MzJkNzZkOTlmNmJhYmE5MzhkMGQ5ZTI2MzRkOGU4MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5j
cHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGVmZmVj
dGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAg
ZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRl
VHJhbnNmb3JtKTsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVy
LnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBV
bmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVy
LnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogICAgIGF1dG8gc291
cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRl
ckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6TGlu
ZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMp
IHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVu
ZGVyZXIpKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVy
Ojpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAg
ICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVU
cmFuc2Zvcm0pOwogICAgICAgICB9CiAgICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhp
Y0J1ZmZlci5yZXNldCgpOworICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51
bGxwdHI7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJT
VkdSZXNvdXJjZUZpbHRlciAiIDw8IHRoaXMgPDwgIiBwb3N0QXBwbHlSZXNvdXJjZSBkb25lXG4i
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZU1hc2tlci5jcHAKaW5kZXggMTc4N2UxOGMyZGNlZjViZGY5OTI0NzRjZmMwMjJi
NTE2NmFkNTg0OC4uMTIwYzU3YjU2OTc4NzIyMDQ2NWJjNmFlYzBiNTgwNGM0NTVjZDgyOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1h
c2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZU1hc2tlci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1h
c2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUK
ICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHls
ZSgpOwogICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVy
cG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6
OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzAp
OiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2Vs
ZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcs
IHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29u
dGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBj
b2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWlu
dFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2Up
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCmluZGV4IGI4MjE0MTFhZGU3NzUwODU2MTY4ODU2ZWQyMmI2MmVhNmI1Y2Qz
ZDkuLjk3ODY3YWFkM2MyN2I1YjUzOGQzYTc5ZmI0OTVkZGQ0ZjBmNDNkOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApAQCAtMjE4LDcgKzIxOCw3IEBAIE5hdGl2
ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFw
aGljc0NvbnRleHQqKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIENhaXJvIGRv
ZXMgbm90IHVzZSB0aGUgYWNjZWxlcmF0ZWQgZHJhd2luZyBmbGFnLCBzbyBpdCdzIE9LIHRvIG1h
a2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCks
IFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogICAgIGlmICghYnVmZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0
cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDUzMjY3OGYzNzYwMzNj
M2MwMGY5ZjZiZDVhMzBjMzg2OTBlMzM0YmYuLjBhYjkyMDE2MjRlODYwYTBkOWNjMGYwNzE5ZmE2
MzE1ZjJmMTU2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApAQCAtMTcsNiArMTcsNyBAQCBzZXQoV2Vi
S2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJ
Un0vaW5jbHVkZSIKICAgICAiJHtXRUJLSVRfRElSfSIKICAgICAiJHtXRUJLSVRfRElSfS9HUFVQ
cm9jZXNzIgorICAgICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCIK
ICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVRfRElSfS9O
ZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlu
cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmls
ZWxpc3QKaW5kZXggZWRmYjZlMWUwNWU1NjQwMDhiN2Q1N2E4NzQ1Mzc4YzQzZDY2Y2Y5Ni4uN2E1
MjE0MjVmZjkzMTcyYjVhYjdlMWRjMjQyMGFmZTY1Yzk3NmY1OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUsOCBAQCAkKEpB
VkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NSSVBU
Q09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
R1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgor
JChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMv
Y29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1l
c3NhZ2VzLmluCkBAIC0xMDIsNiArMTA0LDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9D
YWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElS
KS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVy
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVs
bFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAk
KFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJX
ZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dl
YnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IGRmYmMwZWZlNmI4NDcyNmY5
NmM4OTgyOGNkODNkMGVkNzU5MDVhMDYuLjkwZDkxMTFmZDEwZTg2MzQ1YjdlZjRmZjUzYjE1OWEw
YzMxMmNhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNm
aWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2Fn
ZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVy
UHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTE0Miw2ICsxNDgsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3Nh
Z2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
T2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJl
Z2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVw
bGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9y
TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IGUyOTA5MzA5N2NkOWJkZWIzNDVhMTlhNWQzN2ZlNTdhNTQwZGVi
NzAuLjhjNzUzZDE2ZjQwZGZkZGNmZTE3NDViYWE1ZmU1OWJmMjk2ODc3ZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJL
aXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAk
KFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAg
ICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIp
L1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUg
XAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2Ug
XAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0MCw2ICsxNDIs
OCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1h
bmFnZXIgXAogICAgIFBsdWdpblByb2Nlc3NQcm94eSBcCiAgICAgUGx1Z2luUHJveHkgXAorICAg
IFJlbW90ZUltYWdlQnVmZmVyIFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1h
bmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwKQEAgLTE0Nyw2ICsx
NTEsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFu
YWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVj
dFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90
ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAg
ICAgUmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDYyMGI0MWYyOGQ2Njc2
YTNkZTE3ZjQ3NmIyZGYzODhmZmY2NDc3MGQuLmEzNzFjZjIzZGE3N2ZhNzZlM2U0MDNkZGMyZDNh
ZGI2NjE5MDFjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE2MCw1MiArMTYwLDY4IEBAIExpYldlYlJU
Q0NvZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQ
cm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRS
ZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYg
ZGVjb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewog
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAg
ICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdl
YlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVs
c2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRS
ZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2Vy
TWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vz
cyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1l
c3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
V2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFt
ZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVk
aWFSZWNvcmRlck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
ID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9t
V2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRy
PElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5
RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZl
U3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogI2lm
IEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFt
ZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJl
cGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWVzc2Fn
ZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCBy
ZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdC
YWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKQoreworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAg
QVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgKaW5kZXggZjQ4NTk2NGQ0NmM1MmUzMzhkMmFiZTRmNzY1ZGRjYjVhOTRhMDc5MC4u
MDI3MDM3ZmU5OTQ2NDA5ZjA2YzIzYmY2Y2VjZDM3ODUzYTU2ZTdiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0y
OCwxMyArMjgsMTUgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25u
ZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVw
bGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUg
IkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNs
dWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKQEAgLTQ3LDE4ICs0OSwyMCBAQCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFu
YWdlclByb3h5OwogCiBjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJs
aWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENh
bk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5l
Y3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVy
LCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0
dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1l
c3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdl
UmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9n
cHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJv
Y2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9
CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAg
ICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50
aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03NywxNCArODEsMjEg
QEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBk
aWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOwor
ICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNl
IG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAg
ICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNz
PiBtX2dwdVByb2Nlc3M7CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVj
ZWl2ZXJNYXA7CiAgICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9j
ZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5OwpAQCAtOTYsNiArMTA3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkg
JiYgVVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJv
eHk+IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5p
bgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEy
MmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1t
ZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3Jl
YXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tl
bmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVmMjdjOGZhM2U3Yjg1MGUx
MzdiYWUzMmVkZGI4YTcxNWU4NDZmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBA
IC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90
ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisg
ICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcykpCisgICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mg
PSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUlt
YWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0
byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2Vp
dmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRv
VUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkK
KyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQp
Cit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
K30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlM
aXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVu
dGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExNmExNDNlNzdi
MjIyYzM1NTE4ZDNkNTY2ZmYzYTllNWEyMWJjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Cisg
ICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2Vu
ZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25z
dCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRl
OworCisgICAgdm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hT
ZW5kUmlnaHQpOworCisgICAgdm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZp
cnR1YWwgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmKSA9IDA7CisKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjBhZTc4ZTJjZTRhYjk1
MTliNjVhYjg0YjRkNzJkZGViNWVjOTU4YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVz
c2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0KFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4MTAzNzFkZTNhZTkwNjQxNzE1ZWQxYzg5MTZjMjQ0
NWQ3Y2U4YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbElt
YWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1Ymxp
YyBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90
ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0g
V2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFz
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJh
c2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIs
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
fQorCisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxC
YWNrZW5kVHlwZT4mJiBiYWNrZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2Vu
ZCkpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQt
PmludGVybmFsU2l6ZSgpLCBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQt
PmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5jcmVhdGVTZW5kUmlnaHQoKSk7CisgICAgfQorCitw
cml2YXRlOgorICAgIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmICghZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNh
bEltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIu
cmVwbGF5KCk7CisgICAgICAgIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQo
KTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNDY3ODdlZWZhMjJmMGM0NjA5MTA4YjViZmI0ZDc3ZTk3NzQw
YjYyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VC
dWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVk
UGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
PEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNDBmZmNlOWIx
OTY5OTFmZGY5OTRmODI0ZWQ2OTIzYTA4ODRmNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuY3BwCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1
bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9
CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNz
YWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29u
bmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mg
PSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRy
OworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmll
cikKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50
aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxv
Z2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlm
ICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAu
YWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2
b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdl
QnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRl
U3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25l
LgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jOTkzOGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFj
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSgpOworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
OyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAv
LyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNl
aXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VC
dWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsK
KyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5
NTdiYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0w
LDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29y
ZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNw
YWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
CisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggZjhiY2Ux
NDU1MDdkZjQ5ZTg5ZWQ0ZjcxOTg3NmUxMGJmNzA5NmJkZS4uZWQ5ZTE3N2RiM2ZlMTYwN2VjYWQz
MzU3YmI5MzYzNTgzNTEwMmVjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBw
YXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJwor
V0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2Un
CiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNP
VU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19B
VFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3Ro
YXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsK
ICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JT
cGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAn
V2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRp
ZmllcicsCkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zvcndh
cmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllcicsCisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VX
b3JrZXJKb2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNs
aWVudERhdGEnLApAQCAtMjE4LDEwICsyMjIsMTMgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2Jl
X2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdp
c3RyYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNXU2VydmVyQ29ubmVjdGlv
bklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAor
ICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisgICAgICAgICdX
ZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkxheWVySG9z
dGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90
ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKKyAgICAg
ICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0
OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2
MiwxMyArNzY5LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgog
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2Up
CiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNl
aXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2
ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9S
RUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4n
KQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9S
RUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0g
W2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBp
biBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5U
U19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChy
ZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1
cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc3LDEzICs3ODcsMTYgQEAgZGVmIGdlbmVy
YXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9
XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgog
ICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQg
JXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVw
bHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVy
Lmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0
cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4n
KQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1l
c3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVy
Lmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VE
X1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNF
RF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURf
UEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oCmluZGV4IDM0ODJkMDUwZTRiZWZjMTAyZTMxNmQwMTk4YjAwNGVmNjA4
NDUxYmUuLjNjZTIxNDkwMzU2Yjc1YzZlOWVhNDYzZjBlMTZmN2EzNzcyNjUwNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9B
dXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtNzk3LDYgKzc5OCwyNiBA
QCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRh
Y2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFs
dWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAor
ICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAg
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsK
K307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNj
ZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307
CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewog
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CmluZGV4IDMwNmNkMWU2OTM1NjYxYWQ0MWMwNjA5Mjg0OGJmOWFmMzZiMWI3MjYu
LjM1MmUzNDFlNjQyNTkyNDdlNWI2MWY1MzgzNjUzMjg2MGU1NWQ0OTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApA
QCAtMzEsNiArMzEsOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHku
Y3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNr
QXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJh
Y2tlci5jcHAKQEAgLTUxNCw2ICs1MTYsOCBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBs
YXllclByaXZhdGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBs
YXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1J
TUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVk
aWFSZXNvdXJjZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2Rl
Y3MuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCiBX
ZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByb3ZpZGVyLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDkzOWZiMTcxYjcxZThjMmYyZjIzZTAzMjIwNmIwYWIxN2M5OGFiOTku
LmNmZjQ1YTI4NWFhOGI1NWFkNjQ3MDIxODMwNzNjOTUzNTEzZjgzNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXND
b2NvYS50eHQKQEAgLTYzMiwxMCArNjMyLDE0IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KIC8vIERlcml2ZWQgU291cmNl
cwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAorR1BVUHJvY2Vzc0Nvbm5lY3Rpb25N
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBH
UFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJ
bWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNz
YWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVk
aWFSZWNvcmRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2VyRmV0Y2hU
YXNrTWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWQ4YjZkZWYyMTc4Y2YyOGYzZWFlZTBlN2I2YmFhNGZk
MTY3MzUwOC4uZGMzMThjN2VhNmQ3ZjY3MmZhNmY5NWYyODczOTI2MzQxYWI3N2U4NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTYx
LDggKzM5NjEsMjYgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rp
b25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBX
S1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9u
R2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFBNjc2
QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbSAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0
dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMy
MzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNE
aXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5ODIz
QUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QjIzQUQzNkQwMDBC
REFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFG
RjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIz
NUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhD
MDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1
ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEwMjNBQjA0OEIw
MEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFn
ZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMTIzQUIwNzYz
MDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU4
MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVD
MkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUUyM0I1
NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBX
S1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRl
cm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjM5Myw2ICs2NDExLDcgQEAK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0Iw
QzAwOTU5OEUyIC8qIG1lZGlhICovLAorCQkJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBS
ZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJy
dGMgKi8sCiAJCQkJMkQ3RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0
aW9uLmNwcCAqLywKIAkJCQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uaCAqLywKQEAgLTY0MDksNiArNjQyOCw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5
RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFj
ICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjFG
MUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4
RTIzQjYzM0NBMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5
RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIz
NzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzc4
Miw2ICs3ODAyLDM4IEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRTlB
MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLywKKwkJCQk3
MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovLAor
CQkJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcg
LyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzJENUMyRUMyM0I0
QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJ
NzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
ICovLAorCQkJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MkJCRTQwRTIzQUIwNDU4
MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOwor
CQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8q
IEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIz
QyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8sCisJCQkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYx
MjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTQyM0FCMEFGMTAwQTYx
MjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTYwMjND
MTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJC
QkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywK
KwkJCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8sCisJCQkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLywKKwkJCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERF
RjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5jcHAKaW5kZXggMThlOTM2ZGUzMjMwNzcwZjI0MzYxYjZhYmFhOGUxN2U0ZDJl
NWFjMC4uMTg4ZmFjMjBhMWU5MjNkZjYyYmIxYTM4MDU1MGFhYTRmOTRkOGUzNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5j
cHAKQEAgLTYwLDI5ICs2MCwzNSBAQCB2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9z
ZShJUEM6OkNvbm5lY3Rpb24mKQogewogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZl
cmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQotewotfQotCi12b2lkIEdQVVByb2Nlc3NDb25u
ZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNo
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
cikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6
OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAg
ICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyPigpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogY2FwdHVyZU1hbmFnZXIgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyPigpKQogICAg
ICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3Mo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2VuZGlmCiAjaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0Ep
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJX
ZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5saWJXZWJSVENDb2RlY3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9u
OjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNv
ZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCit7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IDMxYzYxMDQ2NjlmMmYwMmZmYTQ0MGZlYjg4
MDkyNmM3NGFlMjZhY2YuLjZkMWI4M2RlNTgzNmFmYWUyMWFmYzM0ZjU4YTIyZTVkNmQzMjNjNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIApAQCAtNDYsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgfkdQVVByb2Nlc3NDb25uZWN0aW9u
KCk7CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9j
b25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VS
ZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAKIHByaXZhdGU6
CiAgICAgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyKTsK
QEAgLTUzLDEwICs1NSwxNSBAQCBwcml2YXRlOgogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xp
ZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2
b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZp
bmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpT
dHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+Jik7CisKICAgICAvLyBUaGUgY29ubmVjdGlvbiBmcm9tIHRoZSB3ZWIgcHJvY2VzcyB0
byB0aGUgR1BVIHByb2Nlc3MuCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9u
OworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCBk
MzZmOGEwOTVmNmE3N2JiYjZjYWM4ODNhNjUxZTg0Y2U5ZDY0YjMwLi41N2ZlY2RlOWRmMjdjNzM5
YTZjYmYwMjY5ODA2NTkyYjVlMjE3OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAg
LTIyLDcgKzIyLDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4g
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24geworbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24g
V2FudHNEaXNwYXRjaE1lc3NhZ2UgewogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjJiYmRkODYzNDA1MjA1YWRhN2Vm
M2NjNzM4NDYwMTlmYjE5OTNiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5o
CkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJU
eXBlPjsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjA3ZWFmOTQ0YmEzOGYwYTk5NGE1YmU1MjQxOTU5ZjRhYzg4YTU5MjIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
SW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2lu
ZyBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVySWRl
bnRpZmllclR5cGU+OworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40YTUxYjRjZTgwZjdiMWE2ZWNiYzgyYmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1
ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VC
dWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpCisgICAgOiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNl
aXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2
ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2Fn
ZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZm
ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50
NjQoKSwgKnRoaXMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOworfQorCitSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKCkKK3sKKyAg
ICAvLyBVbi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7
CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisK
KyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9
CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVu
c3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBS
ZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29s
IFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAg
ICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJu
IGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRl
bnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNN
ZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVz
aElkZW50aWZpZXIoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRp
YXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0
V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZl
cjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25l
ZCBNYXhXYWl0c0NvdW50ID0gMzsKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhX
YWl0c0NvdW50OyAhaXNCYWNrZW5kQ3JlYXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAg
ICB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdh
aXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQt
LTsgKQorICAgICAgICB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZs
dXNoSWRlbnRpZmllcjsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QpCit7CisgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6Rmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZiNTZlMzFkMGNh
ZjIwNmVlNTA2Yzk3OTY5MDViNzg0MGE0OWI4YWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
aApAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
cklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJN
ZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFj
aFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW1hZ2VC
dWZmZXIKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXIoKTsK
KworcHJvdGVjdGVkOgorICAgIFJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAgLy8g
SVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gQmxvY2tlcnMKKyAgICBib29s
IHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKyAgICBib29sIHdhaXRTZXRGbHVzaElk
ZW50aWZpZXIoKTsKKworICAgIHZvaWQgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICBib29s
IGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9
IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6
OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCYWNr
ZW5kQ3JlYXRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0Rmx1c2hJZGVudGlmaWVyKElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsgICAgICAgIAorICAgIHZvaWQgcmVtb3RlRmx1c2hD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworCisgICAg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyIHsgSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmODc3NTU3YzBh
YThjOGE5MDUwNGExMzU4MGRhNTkxYWE1YmZjNWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1v
dGVJbWFnZUJ1ZmZlciBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUg
cGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpCisgICAgdm9pZCBTZXRGbHVzaElk
ZW50aWZpZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZp
ZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NTcxYzdhZDgwNGMy
YzQxZmVkMTZjYjEwNmM2NmQwOWY3NDAzNTFlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1
YmxpYyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUlt
YWdlQnVmZmVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlz
dEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKKyAgICB7CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlSW50ZXJu
YWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPihuZXcgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VE
aXNwbGF5TGlzdEltYWdlQnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXIo
c2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVJbWFn
ZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmlnaHQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBB
U1NFUlQoIW1fYmFja2VuZCk7CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVh
dGUobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHNlbmRSaWdodCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQmFja2VuZENy
ZWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAg
IEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmICghbV9iYWNrZW5kKQorICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyJj4oKnRoaXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgICAgIHJl
dHVybiBtX2JhY2tlbmQuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdDo6
RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVy
OjpyZW1vdGVGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5TGlzdC5j
bGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzMy
YTU1YjBiMmViNzg0MjM3ZTgyZWI4NTFiMGI5NGI5Mjc3OWY2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KwordXNpbmcgUmVtb3RlQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZGRjOTY0OWU3ZWVhMGExYjA2NzVjZGJmODE4NjdlNGNmN2FjMmRjNwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBDcmVh
dGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9u
KCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dp
dGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2Nl
bGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3Jt
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBicmVh
azsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdl
QnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5ZDFmNDRjMDUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1
ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDogcHVibGljIFdl
YkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVy
CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAg
ICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDY1ZmI4YzZmNzdm
N2ZkZTM4ZjY4Y2JiMDc1MjQ2Yzk5NGRiMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLmgKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllclR5cGU+OworCit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCmluZGV4IDQ2ZDExOTg3NzJjNTFiOGFk
OTBlZjhhMTcxMzIxZmZjZTI5MGZjZjkuLmIwMjkyMWUwNjFhNjBlMzM1MDg4N2U3YjA4OTMyNGVh
YjhlYTNmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRj
L0xpYldlYlJUQ0NvZGVjcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93
ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcApAQCAtNDIsNiArNDIsOCBAQAogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIHN0YXRpYyB3ZWJydGM6Oldl
YktpdFZpZGVvRGVjb2RlciBjcmVhdGVWaWRlb0RlY29kZXIoY29uc3Qgd2VicnRjOjpTZHBWaWRl
b0Zvcm1hdCYgZm9ybWF0KQogewogICAgIGlmIChmb3JtYXQubmFtZSAhPSAiSDI2NCIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVh
MzU1OGEuLjc3MjZmZTk0OGEyMjc5YmJmOTM5ZjA2NDRmNjQ1NjgyZWQ2Yjc5ODUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJD
aHJvbWVDbGllbnQuY3BwCkBAIC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9N
b2NrV2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CkBAIC04ODEsMTUgKzg4NSwyMiBAQCBHcmFwaGljc0xheWVy
RmFjdG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9
CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBS
ZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3Bs
YXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAg
ICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAg
IHJldHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJ
RCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJl
bmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgp
IGNvbnN0Cit7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tl
bmQ6OmNyZWF0ZSgpOwogI2VuZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hS
b290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5oCmluZGV4IGZkYTMzOGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFmNjc5NGVkMWMyY2Qu
LjRkZWRmZWU3ODQxMTY1ZTU3N2Q5NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKQEAgLTIzMSw2ICsyMzEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpE
aXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3Jl
OjpQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KCkgY29uc3QgZmluYWw7CisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29t
cG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVu
dC5tbQppbmRleCBlZjAzNTAzNDJiYjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3
ZjEwNjliNTdmYmY2NTk0ODg3NTQxMjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVu
dUNsaWVudC5tbQpAQCAtMjAyLDcgKzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250
ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNo
b3QsIGFuZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxp
bmUgd2l0aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0
ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAg
ICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3NWI4OTFkZDk2
ZWY1ODRlOTYxZTc2NWY0MzFkZTEwMmFhNWIyYjZjLi42ZjhkNTFkNTg0MTM1YzFjMTRmODcyNmI5
ZDY5MzNmZjA2Mzc3M2I5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMDkgIFNhaWQg
QWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1l
bnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhw
ZWN0ZWQudHh0OgorCiAyMDIwLTAxLTA5ICBNaWd1ZWwgR29tZXogIDxtYWdvbWV6QGlnYWxpYS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBXUEUgZ2FyZGVuaW5nOiByZWJhc2VsaW5lIHNldmVy
YWwgdGVzdHMgYWZ0ZXIgcjI1NDA0NC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3
MmFjY2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2
YmZiMzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2Fu
dmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAK
KyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdz
IDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikK
KyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNo
YWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEw
LDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387302</attachid>
            <date>2020-01-09 18:21:06 -0800</date>
            <delta_ts>2020-01-11 09:09:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200109182110.patch</filename>
            <type>text/plain</type>
            <size>457664</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1OCBAQAorMjAyMC0wMS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVu
dCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBhbGxv
dyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVkZWQg
dG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20gdGhl
IGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4KKwor
ICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3aW5n
Q29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworCisgICAg
ICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNoeSBmb3IgSW1hZ2VCdWZmZXI6CisKKyAgICAg
ICAgSW1hZ2VCdWZmZXIKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJh
Y2tlbmRUeXBlPgorICAgICAgICAgICAgKy0gUGh5c2ljYWxJbWFnZUJ1ZmZlciAgICAgIERpc3Bs
YXlMaXN0OjpEcmF3aW5nQ29udGV4dCAgICAgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgICAgICAg
ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAg
ICAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFja2Vu
ZFR5cGU+ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICAgICAgICAgKy0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciAtLS0tLSsgICBSZW1vdGVJbWFnZUJ1
ZmZlciAtLS0tLS0tLS0tLS0tKworICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAg
ICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAg
ICAgfCAgICAgICB8ICB0ZW1wbGF0ZTxCYWNrZW5kVHlwZT4gICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgfCAgICAgICArLSBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyIC0rICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSAtKworICAgICAgICAgICAgICAg
fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAg
ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fAorICAgICAgICAgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgICAgICAgICAg
ICAgICAgICAgfAorICAgICAgICAgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5IC0tLS0tLS0tLS0tLS0tKworCisKKyAgICAgICAgVGhpcyBpcyB0aGUgY2xhc3MgaGllcmFy
Y2h5IGZvciBJbWFnZUJ1ZmZlckJhY2tlbmQ6CisKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5k
CisgICAgICAgICAgICB8CisgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJDR0JhY2tlbmQKKyAg
ICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgICAgICB8ICAgICAgIHxfXyBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAgICAgICAgICAgIHwgICAgICAgfAorICAgICAg
ICAgICAgICAgIHwgICAgICAgfF9fIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICB8X18gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQKKyAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAg
ICAgICB8X18gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHxfXyBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAgIEFzIGFuIGV4YW1wbGUsIGlmIEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUyBpcyBlbmFibGVkLCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkKKyAgICAgICAg
d2lsbCBjcmVhdGUgdGhlc2UgSW1hZ2VCdWZmZXJzIGZvciBVU0UoQ0cpIHBsYXRmb3Jtcy4KKwor
ICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAgICAgUGh5c2lj
YWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAgICAg
IE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBXZWJQcm9jZXNzOiBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4KKyAg
ICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgorCisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NE
YXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsaXBib2FyZEl0ZW1CaW5kaW5nc0Rh
dGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZWRlZCk6
CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybU1h
Yy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2Eu
dHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpkdW1wSW1h
Z2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OnJlYWRJbWFn
ZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UpOgorICAgICAgICAqIGh0bWwv
Q3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tUGFpbnRDYW52
YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0
MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9JbWFnZUJpdG1h
cC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXApOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVDb21w
b3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAq
IGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkIGNvbnN0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1h
Z2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBodG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNv
bnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBhZ2Uv
Q2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6CisgICAgICAg
ICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzbmFwc2hv
dEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Ib3N0V2lu
ZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdl
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVuZGVyaW5nTW9kZSBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHA6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZm
ZXJTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjp0b0JHUkFEYXRhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVt
aW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29u
dmVydFRvTHVtaW5hbmNlTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6cGxhdGZvcm1MYXllciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29u
c3VtaW5nKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNmb3JtIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJu
YWxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9O
YXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJ
bnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29u
c3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRv
THVtaW5hbmNlTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNy
ZWF0ZUdldEltYWdlRGF0YUFycmF5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJD
b3JlOjpjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvcHlGdW5jdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
Y29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4
dHVyZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1
ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyOjpQaHlzaWNhbElt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OmVuc3Vy
ZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tl
bmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcmF0Y2hCdWZmZXI6OmdldFNjcmF0Y2hCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRoVGlsaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0xheWVyQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhaXJvOjpkcmF3U2hhZG93SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmZpbGxT
aGFkb3dCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpj
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
OjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0Rh
dGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJT
dXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dh
cEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmg6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwLgorICAgICAgICAo
V2ViQ29yZTo6d3JpdGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBpeGVs
c0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
b3B5SW1hZ2VQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Ynl0ZXNQZXJSb3cg
Y29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y3JlYXRlU2VuZFJpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRp
dmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAg
ICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW06
CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlE
aXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVy
RWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwOgorICAgICAgICAoTmlj
b3NpYTo6R0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgICogcGxhdGZvcm0vbW9jay9N
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6Y2FsY3VsYXRl
Q2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KToK
KyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNv
dXJjZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSk6CisKIDIwMjAtMDEt
MDkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgVGV4
dCBtYW5pcHVsYXRpb24gY29udHJvbGxlciBzaG91bGQgbm90IG9ic2VydmUgY2hhbmdlcyBpbiBu
ZXcgcmVwbGFjZW1lbnQgZWxlbWVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2aXNpb24g
MjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTAxNSw2ICsxMDE1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVS
UwogICAgIHBsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmgKICAgICBwbGF0
Zm9ybS9nYW1lcGFkL1BsYXRmb3JtR2FtZXBhZC5oCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9B
bHBoYVByZW11bHRpcGxpY2F0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktp
dEJyaWRnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQXVkaW9UcmFja1ByaXZhdGUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTEwMjQsNiArMTAyNSw3IEBAIHNl
dChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJh
eS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlS
ZWZyZXNoTW9uaXRvckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJl
c2hNb25pdG9yTWFuYWdlci5oCkBAIC0xMDczLDcgKzEwNzUsNyBAQCBzZXQoV2ViQ29yZV9QUklW
QVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRh
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2Jz
ZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEw
NSwxMyArMTEwNywxNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0
aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxh
dGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1BsYXRmb3JtVGV4dFRyYWNrLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRp
bWVSYW5nZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9T
dHJpbmdUcnVuY2F0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaApJbmRleDog
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCShyZXZpc2lvbiAyNTQzMTcpCisrKyBT
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIsOCArMTMyLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9v
bC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzcs
OSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1h
Yy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQko
cmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UJKHdv
cmtpbmcgY29weSkKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRQogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhp
Y3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApJ
bmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CShyZXZpc2lvbiAyNTQzMTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yODgs
OCArMjg4LDkgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBv
b2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpJbmRleDogU291cmNlL1dlYkNvcmUv
U291cmNlc0dUSy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50
eHQJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw2IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xv
ckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9EaXNwbGF5UmVmcmVzaE1vbml0b3JHdGsu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1
ZmZlckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5jcHAKIAogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NE
YXRhU291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5j
LWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAkocmV2aXNpb24g
MjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJv
YXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NCw3ICsy
ODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsCiAKICAgICAg
ICAgYXV0byBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgYml0
bWFwSW1hZ2UtPnNldERhdGEoV1RGTW92ZShidWZmZXJUb1Nhbml0aXplKSwgdHJ1ZSk7Ci0gICAg
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5z
aXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewogICAgICAgICAgICAgbV9kYXRh
ID0geyBudWxsU3RyaW5nKCkgfTsKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjQ1LDggKzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5
MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAv
KiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAw
MDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQky
MjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBE
MEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMjREOTEyOTIxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEz
Q0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjRE
OTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2
MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5
QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkx
NSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oICovOyB9OwpAQCAtMjEzNCwxMCArMjEzMiwyMSBA
QAogCQk3MjE0NDMzMjIyM0VDODVGMDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEy
NDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIxRjFFQTcyM0FENTBB
MTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjND
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJ
bWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRp
b25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDIzMjNBQzQ5M0Uw
MEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjM4MjZBODIzQzFGNThCMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzODI2QTYyM0Mx
RjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIyMzAw
RjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3RjAw
QTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0
RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3
RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQjA5OTAxMjNDMDkyM0Mw
MDczQjlDQiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIwMjNBQzJC
NzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIElt
YWdlQnVmZmVyQ0dCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjEyM0FDMkNENzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJC
QkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDI3MjNBQ0IzRTAw
MEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyog
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyRDVDMkVBMjNCNEMwRjgwMEY2N0Q0MyAvKiBSZW5kZXJp
bmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc1NTNDRkU4MTA4RjQ3
M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4RjQ3M0YwMEVBMjgxRSAvKiBU
aW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFD
IC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oICovOyB9
OwogCQk3NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRUM3MEQwQ0U3MkQw
MDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9OwpAQCAtNjU0MSw5ICs2NTUwLDYgQEAK
IAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lv
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50UmVn
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5
RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMjky
QjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VC
dWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5
QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhE
ZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjRE
OTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjAxLDggKzk2MDcsMTEgQEAKIAkJNzFFRkNF
REUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0Rjk5QjAwOTIyQ0M3
IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDI4MEQxMjNCQTkzN0IwMDZGNDc2NyAvKiBJbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEy
RkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmlt
YXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQz
NDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZB
NjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgyNkMxMjNDNTY1
ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgcGF0aCA9IC4uL0FscGhh
UHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQz
MjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBF
WFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXgu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYyMyw3ICs5NjMyLDIwIEBACiAJ
CTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA3MjNBQUNENTIw
MEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIElt
YWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBC
MDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVD
MkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMy
RTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJGMUFEOUYxQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRGcmFnRGVwdGguY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2ODcsNyArMTI3MDksNiBAQAogCQlC
MkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5
cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAw
MDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0Zv
bnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0
NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdG
b250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY4Niw2ICsx
NjcwNyw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBE
aXNwbGF5TGlzdC5oICovLAorCQkJCTcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5
TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLApAQCAtMjQ4ODUsNiArMjQ5MDcsNyBAQAogCQlC
Mjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENv
bG9yQ0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50
Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5j
cHAgKi8sCkBAIC0yNDg5NCw5ICsyNDkxNywxMiBAQAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdG
MjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3
QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLywKIAkJCQlBODBENjcwNzBFOUU5REVC
MDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywKLQkJCQlC
MkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCi0JCQkJMjI5
MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKLQkJCQky
MkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKKwkJCQk3
MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovLAor
CQkJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICov
LAorCQkJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDYyM0FBQ0NCQTAw
QTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovLAogCQkJCUNENTg5NDkz
MjE4NzQwNjQwMDRGNDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlD
RDNFMjFEQjIxODMzRjUxMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oICovLAog
CQkJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCkBA
IC0yNDk5Miw2ICsyNTAxOCw3IEBACiAJCQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1
c3RvbVBhaW50SW1hZ2UuaCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFz
aEFycmF5LmggKi8sCiAJCQkJNTU1MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0
aW9ucy5oICovLAorCQkJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggKi8sCiAJCQkJNDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlS
ZWZyZXNoTW9uaXRvci5jcHAgKi8sCiAJCQkJNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERp
c3BsYXlSZWZyZXNoTW9uaXRvci5oICovLAogCQkJCTJEMjlFQ0MxMTkyRUNDODMwMDk4NEI3OCAv
KiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwICovLApAQCAtMjUwODMsNyArMjUxMTAs
OCBAQAogCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5o
ICovLAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8s
CiAJCQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJ
MjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcy
MDI4MEQxMjNCQTkzN0IwMDZGNDc2NyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJ
CQlDRDE5RkVBNzFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlD
RDE5RkVBNjFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1
NjIxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUxNDAsNiArMjUx
NjgsOCBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmgg
Ki8sCiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJ
CUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQkUzRkUy
M0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQy
MzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAogCQkJCTA1NjJG
OTYwMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0Ix
OURCMzNEQzAwMzg3NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJ
CTA3Mjg0N0UyMTZFQkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAt
MjUxNDksNiArMjUxNzksOSBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdp
b24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1w
bGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1Nh
bXBsZS5oICovLAorCQkJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFj
a2VuZC5oICovLAorCQkJCTcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2Rl
LmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAq
LywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJ
CQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCkBAIC0yODk5
MCw2ICsyOTAyMyw3IEBACiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZp
ZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEz
NCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQkI1Qzg4MUQ1RDZG
NDUwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyMzgyNkMyMjNDNTZGNzkwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRp
dmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4
QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U3
QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yOTY4NCw2ICsyOTcxOCw4IEBACiAJCQkJMTEyRkIzNTIyMzlDMjND
NDAwODcwNTRBIC8qIERpc3BsYXlJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0
N0U2MzIyNzc0MjVBMDBDN0JDQjAgLyogRGlzcGxheUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCQkU0MjcyM0FDQjNFMDAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQjA5OTAxMjNDMDkyM0MwMDczQjlDQiAvKiBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RE
NTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
NUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjkyLDggKzMwMzI4LDEwIEBACiAJCQkJN0M3OTAzQjMx
Rjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVy
aW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJE
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdGMTM1
MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTIy
QkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCQkU0MjEyM0FDMkNENzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MjAyM0FDMkI3NzAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2
MzMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
MUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBp
biBIZWFkZXJzICovLAogCQkJCUNEM0UyMUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAy
MjIgLyogSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBp
biBIZWFkZXJzICovLApAQCAtMzE3NjMsNiArMzE4MDEsNyBAQAogCQkJCUE1NTRCNUYzMUUzODM5
M0EwMDFENEUwMyAvKiBQZXJmb3JtYW5jZVVzZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAvKiBQZXJpb2RpY1dhdmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTQ5RDVEQzJFMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjNDIC8q
IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEQkMxQjU2MjM0N0Iz
RDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFEMkM4MkI3MjM2QTNGNkEwMDU1RDZDNSAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUQyRjhFMDYyMzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJ
blBpY3R1cmVXaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3ODIsNiArMzE4MjEsNyBAQAog
CQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3Jt
RXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdD
NjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MTIzQzE5
NUE4MDAyNjI2MzMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTM1QzQ3NjgwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDU2MkY5NjExNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUY1NDRGNzg5MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9y
bUxvY2FsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTk1OSw2ICszMTk5OSw4IEBACiAJCQkJQkNF
QTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVz
b3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkQ1QzJFQTIzQjRDMEY4MDBG
NjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzODI2QTgy
M0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1
NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUI1OTVGRjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDMxNykK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyMSw4ICs5MjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUg
PSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVy
LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lk
dGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6
ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZm
ZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJ
bnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7
CiAgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXph
dGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTI3ODUsMTMgKzI3ODUsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFVuYWNjZWxlcmF0ZWQs
IHJlc29sdXRpb25TY2FsZSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAgICAgaWYgKCFidWZmZXIp
IHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwg
bG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0
KSwgSW50UG9pbnQoKSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIEludFNpemUobG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxI
ZWlnaHQpLCBJbnRQb2ludCgpKTsKIAogICAgICAgICBhdXRvIGJpdG1hcCA9IEltYWdlQml0bWFw
OjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIHN0YXRpY19jYXN0PGJvb2w+KG9yaWdpbkNsZWFu
KSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6
aW1hZ2UKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBpbnRvIEltYWdlQnVmZmVyLgogICAgIC8v
IEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxs
eSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIXRleHR1
cmUpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzLDcgKzkzLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgp
IAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgbV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5h
Y2NlbGVyYXRlZCwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7CisgICAgbV9jb3BpZWRC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZCk7CiAgICAgaWYgKCFtX2NvcGllZEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKQEAgLTEwMiw3ICsxMDIsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGll
ZEltYWdlKCkgCiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAg
IG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVy
LT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9j
b3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5n
ZXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2Fu
dmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNjAsNiArNjEsMTAgQEAKICNpbmNsdWRlIDx3
dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lm
IFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjZW5kaWYKKwog
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAiQ2FudmFzQ2FwdHVyZU1lZGlhU3Ry
ZWFtVHJhY2suaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgpAQCAtMzQ1LDkgKzM1MCw2IEBA
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW0KIAogICAgIG1fY29udGV4
dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBkb2N1bWVudCgpLmlu
UXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERy
YXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4
dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7
Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5
ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAg
IGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKQEAgLTgxOCwzOSArODIwLDI3
IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUKIAogdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5
TGlzdERyYXdpbmcpCiB7Ci0gICAgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2Vz
RGlzcGxheUxpc3REcmF3aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlz
cGxheUxpc3REcmF3aW5nID0gdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlM
aXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52
YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KQogewotICAgIGlmICh0cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7Ci0KLSAgICBpZiAoaXM8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAm
JiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdD
b250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0
KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlz
dEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdD
b250ZXh0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlz
cGxheUxpc3QoKS5hc1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3Ry
aW5nIEhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlz
dDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4
dCgpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpKQor
ICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlM
aXN0KCktPmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBAIC04ODUs
MTEgKzg3NSwyNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlCiAg
ICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gQWNj
ZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3Vt
ZW50KCkudmlldygpICYmIGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52
aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKyAgICAKKyAgICAvLyBGSVhN
RTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgor
ICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVk
KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRy
YXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKwor
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc1JlbW90ZURyYXdp
bmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlJlbW90ZTsK
KyAgICBlbHNlIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdN
b2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxp
c3RBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAg
ICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAg
IHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2Rl
LCAxLCBDb2xvclNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkg
JiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKKwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRl
eHQtPmlzMmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJl
bWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsx
NjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKIAot
ICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRpb25h
bDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1h
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDkgKzYxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwKTsKIAogI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gQWNjZWxl
cmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVy
aW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVy
UmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZm
ZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNlbmRpZgog
CiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUoSW50U2l6ZSBzaXplKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAkocmV2aXNpb24gMjU0MzE3
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjYsNyArMTI2LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4g
T2Zmc2NyZQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51bGxw
dHIgfSB9OwogCiAgICAgICAgIGlmICghbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIpCi0gICAgICAg
ICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIFVuYWNjZWxlcmF0ZWQpLCB0cnVlIH0pIH07CisgICAgICAgICAgICByZXR1cm4geyBJ
bWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpLCB0cnVlIH0pIH07CiAKICAgICAgICAgYXV0byBidWZmZXIg
PSB0YWtlSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgaWYgKCFidWZmZXIpCkBAIC0yNDMsNyArMjQz
LDcgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyKAogICAgIGlmICgh
d2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3Jl
ZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYQogICAgIGlmIChzaXplKCkuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBzZXRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCkpOworICAgIHJl
dHVybiBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cmVzZXQo
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xODA2LDcgKzE4MDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRS
ZWN0IENhbnZhc1JlbmRlcmluCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50
UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZm
ZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJh
dGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwg
aXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYg
YnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBF
eGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhCiAgICAgICAgIHJldHVybiBS
ZWZQdHI8Q2FudmFzUGF0dGVybj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoQml0bWFwSW1hZ2U6
OmNyZWF0ZShXVEZNb3ZlKG5hdGl2ZUltYWdlKSksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNs
ZWFuKSB9OwogI2VuZGlmCiAKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5nQ29udGV4
dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBBY2NlbGVyYXRlZCk7CisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4
dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCkBAIC0yMDc1LDIxICsyMDc1LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpzZXRUcgogICAgICAgICBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5yZW1vdmUodGhp
cyk7CiB9CiAKLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5TGlz
dEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3JlY29yZGluZ0NvbnRleHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1f
cmVjb3JkaW5nQ29udGV4dC0+ZGlzcGxheUxpc3QuYXNUZXh0KGZsYWdzKTsKLX0KLQotU3RyaW5n
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERp
c3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBhdXRvKiBkaXNwbGF5
TGlzdCA9IGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLmdldCh0aGlzKTsKLSAgICBpZiAoIWRpc3Bs
YXlMaXN0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+YXNU
ZXh0KGZsYWdzKTsKLX0KLQogY29uc3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OlN0YXRlLCAxPiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygp
CiB7CiAgICAgcmVhbGl6ZVNhdmVzKCk7CkBAIC0yMTU5LDEwICsyMTQ0LDEwIEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW4KIAogRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9h
dCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4g
Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5
LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRh
Pj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwg
ZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBi
ZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4i
KSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4g
Q2FudmFzUmVuCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUlt
YWdlRGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1
ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNv
b3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0
LCBjb29yZGluYXRlU3lzdGVtKTsKICAgICBpZiAoIWJ5dGVBcnJheSkgewogICAgICAgICBTdHJp
bmdCdWlsZGVyIGNvbnNvbGVNZXNzYWdlOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRM
aXRlcmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBz
aXplIHdhcyAiKTsKQEAgLTIyMTgsMTAgKzIyMDMsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQg
ZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0
KQogewotICAgIHB1dEltYWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0sIGR4LCBkeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0
KTsKKyAgICBwdXRJbWFnZURhdGEoZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgZHgs
IGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwogfQogCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRh
dGEsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lk
dGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVks
IGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVy
KiBidWZmZXIgPSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0y
MjQ1LDcgKzIyMzAsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
CiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2Fz
dDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xp
cFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50
ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZl
cjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZm
ZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJl
Y3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dp
Y2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwog
ICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0
IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbQogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAoIXNv
dXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0YS5k
YXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6ZShk
YXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zm
c2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmRhdGEuZGF0YSgpLCBJbnRT
aXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50KGRl
c3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKIAogICAgIGRpZERyYXcoZGVzdFJlY3QsIENh
bnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNs
aXAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBT
dHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsK
LSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAog
ICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcx
LDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVs
bENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZs
b2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJ
bWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZs
b2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1
dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURh
dGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0
YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBm
bG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAg
IGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dC5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkg
KzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGlj
IFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGlj
IFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUg
PSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVf
cHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVu
dCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDCiAKIGJvb2wgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0Ojppc0FjY2VsZXJhdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5n
TW9kZSA9PSBBY2NlbGVyYXRlZDsKKyAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFw
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTM5LDcgKzM5MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCCiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAo
aW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRH
TDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgaWYgKCF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgU291cmNlSFRNTFZpZGVvRWxlbWVu
dCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZp
ZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQog
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0g
dmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdl
KHZpZGVvLmdldCgpLCBEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghaW1hZ2Up
CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ1MDAsNyArNDUwMCw3IEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgICAgICYmIHR5cGUgPT0gR3JhcGhp
Y3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUlu
dGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7
CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAh
dGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAgICAgICAgIGlmIChi
dWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJnZXQsIHRl
eHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXItPmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewogICAgICAgICAgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSwgdHlwZSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtNDUwOCw3ICs0NTA4
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QgogICAgICAgICB9
CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpA
QCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QgogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZv
cm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwg
bGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+
YnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgp
LCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZ
KSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9y
bVRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBj
YW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ2MjIsNyArNDYyMiw3IEBA
IEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEIKICAgICAgICAgfQogCiAg
ICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5
SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRv
SW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKCFp
bWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRleEltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ2NDcsNyArNDY0Nyw3IEBAIFJlZlB0cjxJbWFnZT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZToKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBv
aW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwg
c3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OgogICAgIH0KIAogICAgIC8vIEZJ
WE1FICgxNDk0MjMpOiBTaG91bGQgdGhpcyBJbWFnZUJ1ZmZlciBiZSB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZD8KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICBBU1NFUlQobV9idWZmZXJzLnNpemUoKSA+IDApOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAko
cmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQ
dHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhCiAgICAgSW50UmVjdCBwYWludGlu
Z1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkpOwogCiAgICAgLy8gRklY
TUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1h
Z2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBkZXZp
Y2VTY2FsZUZhY3RvcikpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAJKHJldmlz
aW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50
aWxNb3VzZU1vCiAgICAgbV9jbGllbnQuc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGhp
ZGRlblVudGlsTW91c2VNb3Zlcyk7CiB9CiAKK1JlbmRlcmluZ0JhY2tlbmQqIENocm9tZTo6c2hh
cmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tl
bmQpCisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZCA9IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kLmdldCgpOworfQorCiBQ
bGF0Zm9ybURpc3BsYXlJRCBDaHJvbWU6OmRpc3BsYXlJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fZGlzcGxheUlEOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCShyZXZpc2lvbiAyNTQzMTcpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4
Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSBvdmVycmlk
ZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlk
ZTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25z
dCBvdmVycmlkZTsKKyAgICAKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUg
eyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCBvdmVycmlkZTsK
QEAgLTE5NSw2ICsxOTcsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAg
ICAgYm9vbCBtX2lzRGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2VTdXBwcmVzc2VkIHsgZmFs
c2UgfTsKICNlbmRpZgorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tl
bmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMjU0MzE3KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdHJh
YmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRl
ICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgpA
QCAtMzAzLDYgKzMwNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVm
cmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJ
RCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29u
c3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFw
aGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIq
KSA9IDA7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAko
cmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IHNuYXBzaG90RnJhCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlv
bnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNl
aWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVk
LCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3Qu
eCgpLCAtaW1hZ2VSZWN0LnkoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25z
b2xlQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25z
b2xlQ2xpZW50LmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlQ29uc29sZUNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Niw3ICszNzYsNyBAQCB2
b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6CiAgICAgICAgICAgICAgICAg
YXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qg
c291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLT5kYXRh
KCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJM
ID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQkocmV2aXNpb24gMjU0MzE3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTEzLDcgKzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRQog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9SZWZQdHJDYWlyby5oCiApCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Ib3N0V2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9z
dFdpbmRvdy5oCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9I
b3N0V2luZG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAor
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBSZW5kZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0
V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmly
dHVhbCBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAw
OworICAgIAogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAg
IHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUs
NSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBIb3N0V2luZG93X2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXND
YWlyby50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291
cmNlc0NhaXJvLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsMTAgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0SW1wbENhaXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
by5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRp
cGxpY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAg
IFVucHJlbXVsdGlwbGllZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5k
VHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgOiBwdWJsaWMgUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
IHsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZm
ZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBs
YXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBj
b25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIo
V1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4
dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQq
IGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVy
biBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2
b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChCYXNlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1MCw3ICszNTAs
NyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29u
dGV4dChib29sKTsKICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25z
dDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAkocmV2aXNpb24gMjU0MzE3
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0
aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHJl
dmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9u
Y2UKIAorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgog
I2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAg
LTEyMiwxNyArMTIzLDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9
OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2Nl
bGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24g
cmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAg
QWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0g
ICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21w
b3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJs
ZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9v
bCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAg
LTE0Myw3ICsxMzMsNiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgV2luZFJ1bGUpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKLVdFQkNPUkVf
RVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCShy
ZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5j
bHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExl
bmd0aCA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFt
cGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRl
cmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBob3N0V2luZG93KTsKK30KIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVyKTsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwg
Q29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Cit9CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2Vzcykp
OwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisK
KyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNw
b25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1
ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1h
Z2VCdWZmZXI7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4
dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdl
QnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJn
ZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29u
dGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0j
ZW5kaWYKKworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3Rh
dGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENs
YW1wZWRMZW5ndGg7CiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKQEAgLTEwNSw5NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFn
ZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29uc3QKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9j
YXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYm
ICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBj
b25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMu
Ci0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShESVJF
Q1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShG
bG9hdFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENv
bG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RD
b2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVh
clJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdC
ICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAg
ICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9
IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNS
R0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChk
c3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAg
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0g
aSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29t
cG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVp
bnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1p
bmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQot
ewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7
Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWlu
YW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgo
KTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhl
bEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0
ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVt
KHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0
ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIg
KiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjAp
OwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAg
ICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0
LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBs
YXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXll
ciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwot
fQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2ws
IGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRl
eHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8g
cmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJ
bnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXIKIAogICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAK
LSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNj
YWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQot
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFn
ZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRv
IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUs
IDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXpl
LCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUg
ZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNj
YWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0Uo
RElSRUNUMkQpCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUo
KSwgJmNvbnRleHQsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJl
dHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0
aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCi17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNv
bnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAg
Ly8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5k
ZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVy
LT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAg
ICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJs
ZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5
RXF1YWwoY29udGV4dC5zY2FsZUZhY3RvcigpLCB0aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3Io
KSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAK
LSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1
ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5r
SW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgp
IG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVl
ZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93Lgot
ICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vz
bid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUo
KS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVm
ZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFn
ZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQog
ewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmgJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTI3LDE3MCArMjcsODEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVy
RGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFj
a2VuZC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50
U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFz
cyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVtIEJh
Y2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJz
ZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tpbmdT
dG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OwotCi1lbnVt
IGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsKK25hbWVz
cGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xhc3MgSW1h
Z2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdlQnVmZmVy
LCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIp
OwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1
cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNw
YWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNp
ZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3Bh
Y2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2Vu
ZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUg
Y29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBvbmUu
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0
IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAg
Ly8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQsIHdp
dGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRo
ZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAorICAgIC8v
IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3
aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0YXRp
YyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBi
b29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUp
OworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7Cisg
ICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNp
emUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0
UmVjdCYpOworCiAgICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgYm9vbCBpc0NvbXBhdGli
bGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIAotICAgIFdFQkNP
UkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfklt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9m
IHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgp
ID0gMDsKIAotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSkg
Y29uc3Q7CisgICAgdmlydHVhbCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdD
b250ZXh0KCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdp
bmdDb250ZXh0KCkgeyB9CiAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJh
c2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXpl
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CisgICAg
CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPElt
YWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotICAg
IFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBz
aW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1
dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24gdGhl
IGZhc3RlciBjb3B5SW1hZ2UgTW9kZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlmIGl0
IHN1cHBvcnRzIHRoZSBEb250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9yIHJl
dHVybiBDb3B5QmFja2luZ1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFja2lu
Z1N0b3JlQ29weSBmYXN0Q29weUltYWdlTW9kZSgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExv
Z2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGlu
YXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lz
dGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OworICAgIHN0YXRpYyBOYXRpdmVJ
bWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4p
OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uo
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEs
IC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIHZvaWQgcHV0
Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0g
PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmND
b2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSA9IDA7CiAKLSAgICBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0Owot
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7Ci0KLSNpZiBVU0UoQ0FJUk8p
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgotCi0jaWYg
IVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2
b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3Qs
IDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllcigpIGNvbnN0OwotCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBz
aXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogY3VycmVu
dCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhh
dCB0aGV5IG9ubHkgd29yawotICAgIC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJH
QkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xP
YmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RG
OjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9
IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUg
SW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBl
ci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsK
LSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9h
dFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRT
aXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50
U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQgPSBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3Rl
bTo6TG9naWNhbCkgPSAwOwogCi1wcml2YXRlOgotI2lmIFVTRShDRykKLSAgICAvLyBUaGUgcmV0
dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhlIGludGVybmFsU2l6ZSgpLiBJZiB5
b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8vIGltYWdlLCBjcm9wIHRoZSByZXN1bHQuCi0gICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAg
IHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IHNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBm
bHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciog
cGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZv
cm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9v
bCkgY29uc3QgPSAwOwogICAgIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJl
Y3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAg
ICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBw
YXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXpl
JiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgc3Rh
dGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsK
IAotICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAg
ICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0
ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7Ci0gICAg
ZnJpZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3Mg
R3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKLQotcHJp
dmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwot
ICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsK
LQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRo
ZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4g
aXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShD
RykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJv
b2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNj
ZXNzKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJ
bWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpID0gMDsKIH07CiAKLSNpZiBVU0UoQ0cpCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFn
ZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
OwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLSNlbmRpZgotCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZm
ZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CisgICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICwgbV9pbnRlcm5hbFNpemUo
aW50ZXJuYWxTaXplKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQor
ICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0ludFNpemUgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNl
aWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2Fs
ZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFz
Y2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAg
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLndpZHRoKCkpOworICAg
IGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1
bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1Bl
clJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJu
IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisKK1JlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9p
bnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUpOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWlu
YW5jZVJlY3QsIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgIGlmICghc3JjUGl4ZWxB
cnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9
IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQg
PSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsK
KyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMp
OworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdWludDhf
dCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3Qg
ZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhf
dCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICAKKyAg
ICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIx
KSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhl
bE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBsdW1pbmFuY2VS
ZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6
TG9naWNhbCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRS
ZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hl
Y2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3Jj
UmVjdC53aWR0aCgpOworICAgIGFyZWEgKj0gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJl
YS5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBh
cnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5z
YWZlR2V0KCkpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVy
bygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9u
KGJ1ZmZlclJlY3QsIHNyY1JlY3QpOworICAgIGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygp
LCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisg
ICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0Lnko
KSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3QueSgpKTsKKworICAgIGlmIChk
ZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmls
bCgpOworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEludFJlY3Qm
IHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0
IGRhdGFSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNTaXplIH07CisgICAgc3JjUmVjdENs
aXBwZWQgPSBpbnRlcnNlY3Rpb24oZGF0YVJlY3QsIHNyY1JlY3QpOworICAgIAorICAgIGRlc3RS
ZWN0ID0gc3JjUmVjdENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludCk7Cisg
ICAgCisgICAgaWYgKHNyY1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0
UmVjdC54KCkgLSBzcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAg
ICAgICBkZXN0UmVjdC5zZXRZKGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpKTsKKworICAgIElu
dFJlY3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsK
KyAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYnVmZmVyUmVjdCk7CisKKyAgICBzcmNSZWN0Q2xpcHBl
ZC5zZXRTaXplKGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5
UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwg
Y29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWlu
dDhfdCogZGVzdFBpeGVsKQoreworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JG
b3JtYXQpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClb
MF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwt
PiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsx
XSA9IHNyY1BpeGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRl
c3RQaXhlbFszXSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVBy
ZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwg
Y29uc3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWlu
dDhfdCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAg
ICBpZiAoIWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGll
ZFRvUHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xv
ckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNy
Y1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4
ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsy
XSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwt
PiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsK
KyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVz
dFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsz
XSA9IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRv
UHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCog
c3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVs
KQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhIHx8
IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0g
ZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxb
Ml0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMg
QkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAo
KmNvcHlGdW5jdG9yKShDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1
aW50OF90Kik+CitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzU2xvdygKKyAgICBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHNyY1Jvd3MsCisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
eCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1bmN0b3Io
c3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0Um93c1t4
XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBz
cmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAg
ICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNTbG93PGNvcHlQcmVtdWx0aXBs
aWVkVG9QcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jv
d3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUlt
YWdlUGl4ZWxzU2xvdzxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xv
ckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5
dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgY29weUltYWdlUGl4ZWxzU2xvdzxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wu
aCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZTsKKworZW51bSBC
YWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vi
c2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5n
U3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51
bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gOiB1aW50OF90IHsKKyAgICBObywKKyAgICBZZXMs
Cit9OworCitlbnVtIGNsYXNzIENvbG9yRm9ybWF0IDogdWludDhfdCB7CisgICAgUkdCQSwKKyAg
ICBCR1JBCit9OworCitlbnVtIGNsYXNzIENvb3JkaW5hdGVTeXN0ZW0gOiB1aW50OF90IHsKKyAg
ICBMb2dpY2FsLAorICAgIEJhY2tpbmdTdG9yZQorfTsKKworY2xhc3MgSW1hZ2VCdWZmZXJCYWNr
ZW5kIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckJhY2tlbmQoKSA9IGRlZmF1
bHQ7CisgICAgCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50
ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAg
ICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgeyB9CisKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsg
cmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0
dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0
dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1
dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsK
KworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAg
IHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5n
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsK
KworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2Up
IHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCB7IHJldHVybiB7IH07IH0KKworICAg
IHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24sIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYs
IGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYsIENvb3JkaW5hdGVTeXN0ZW0pIHsgfQor
ICAgIAorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJl
KEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7Cisg
ICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRS
ZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0OworCisgICAgc3Rh
dGljIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQs
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9y
Rm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25z
dCBJbnRTaXplJik7CisKKyAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBt
X2ludGVybmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNw
YWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5o
CShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlckRhdGEuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmIFVTRShDRykKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xp
bmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2Vu
ZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsK
K3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNh
bEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEltYWdlQnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+
Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYg
KCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1v
dmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0
cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJh
Y2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAg
ICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVz
aENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFm
ZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNp
emUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5h
bFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVz
b2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5
Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmV4dGVybmFs
TWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNv
cHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkg
eworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1h
Z2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1h
Z2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1
dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+
dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2Fs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24p
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25z
dF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2Fs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVy
Jj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5w
dXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRl
U3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1M
YXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29sIGNvcHlU
b1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGlu
YXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5h
bGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZm
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIK
KworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgor
I2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVT
RShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYgKFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpKQordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2lu
ZyBBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFBoeXNp
Y2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgQWNjZWxl
cmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRl
ZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIg
PSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNr
ZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQo
KSk7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRS
ZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1
cm4gaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAq
aG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5n
QmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmlu
Z01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0g
QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9k
ZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VC
dWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6CisgICAgICAg
IGltYWdlQnVmZmVyID0gQWNjZWxlcmF0ZWRQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwor
ICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0
OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQ
bGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNr
ZW5kLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSG9zdFdp
bmRvdzsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW50U2l6ZTsKKworY2xhc3MgV0VCQ09S
RV9FWFBPUlQgUmVuZGVyaW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIHN0YXRpYyBSZW5kZXJp
bmdCYWNrZW5kJiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGNvbnN0IEhvc3RXaW5kb3cqID0gbnVs
bHB0cik7CisgICAgCisgICAgdmlydHVhbCB+UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsK
KyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIHsKKyAgICBBY2NlbGVyYXRlZCwKKyAgICBVbmFj
Y2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3Qs
CisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuY3BwCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsNyArODMs
NyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRjaEJ1ZmZlcigpOwogCiAgICAgICAgIC8v
IFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2NlbGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdz
IE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAg
ICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5h
Y2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAg
cmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAgfQogCkBAIC01OTMsNyArNTkzLDcgQEAg
dm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3coY29uc3QgQQogCiB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBj
b25zdCBGbG9hdFJvdW5kZWRSZWN0JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9w
ZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBk
cmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
ZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxl
cmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhw
YW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJu
OwogCkBAIC02MjEsNyArNjIxLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dp
dGhvdXRUaQogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmco
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSZWN0JiBmdWxsUmVjdCwgY29uc3Qg
RmxvYXRSb3VuZGVkUmVjdCYgaG9sZVJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBs
YXllckltYWdlUHJvcGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVy
KQogewotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJ
bnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEp
OworICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRT
aXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02
ODUsNyArNjg1LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbgog
ICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3Jh
dGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllcklt
YWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJ
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1
ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVy
OjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaQogI2lmIFVTRShDRykKICAgICBhdXRvKiBsYXllcklt
YWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0
ZVNpemUpOwogI2Vsc2UKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllcklt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVm
ZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZvaWQgU2hhZG93Qmx1
cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUIKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVj
dCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRh
ID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1
dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGJsdXJMYXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBi
bHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1
dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QsIHsgfSk7CisgICAgbGF5ZXJJbWFnZS5w
dXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5
ZXJEYXRhLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVy
OjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0
IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKQEAgLTkxMiw3ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdTaGFkb3dMYXllcihjb25zdCBBCiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5z
Zm9ybSk7CiAKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFu
ZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRl
ZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRl
ZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBz
dGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBs
YXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQm
IGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3Rh
dGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5h
dGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFn
ZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9p
bnQobGF5ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXll
clNpemUpLCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0
YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODIsNyArMTgy
LDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmbwogLy8gRklYTUU6
IFRoaXMgaXMgbW9zdGx5IHNhbWUgYXMgZHJhd1NoYWRvd0xheWVyQnVmZmVyLCBzbyB3ZSBzaG91
bGQgbWVyZ2UgdHdvLgogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0ltYWdlKFBsYXRmb3JtQ29udGV4
dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFNoYWRv
d1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFn
ZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZl
SW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwg
eyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9i
YWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTkxLDcgKzE5MSw3IEBAIHN0
YXRpYyB2b2lkIGZpbGxTaGFkb3dCdWZmZXIoUGxhdGZvcm1Db24KIHsKICAgICBzYXZlKHBsYXRm
b3JtQ29udGV4dCk7CiAKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJ
bWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBsYXRm
b3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2luLCBleHBhbmRl
ZEludFNpemUobGF5ZXJTaXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291cmNlOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0
Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBUb0ltYWdlQnVmZmVyKAogICAgIH0KIAogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQor
ICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNv
bnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMSw3ICs0MTEsNyBAQCBJbnRSZWN0IEdyYXBoaWNzQ29u
dGV4dEltcGxDYWlybzo6Y2xpcEJvCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpj
bGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1hZ2UoKSkK
KyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihtX3BsYXRmb3Jt
Q29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw3
ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5j
bHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgot
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5o
IgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlND
SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+
Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgot
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNpZiBVU0UoTElC
RVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8RUdML2VnbC5o
PgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYgVVNFKExJQkVQ
T1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlm
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
SW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkKLSAg
ICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAsIG1fdGV4
dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgbV9u
aWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwotI2Vsc2UK
LSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQotSW1hZ2VC
dWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJpbmdNb2Rl
ICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09T
SUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+
KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNlbmRpZgotCi0g
ICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQo
KTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNo
YXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV90ZXh0
dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAg
ICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgot
Ci0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVD
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lk
IEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0gICAgYXV0byog
Y29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
Ci0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xCaW5k
VGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VE
R0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
VCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGds
UGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
LCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29tcG9zaXRvclN1
cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250
ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0
b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jb21w
b3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQo
KSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJP
X0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0cjxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwotfQotI2VuZGlm
Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKLXsKLSAgICBH
TENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwot
Ci0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0ZUNvbXBvc2l0
b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAg
IFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOwot
ICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1h
cHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZSwgVGV4
dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAgICAgfTsKLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnBy
b3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclBy
b3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNv
dWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0
aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29u
dGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBj
b3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCi0gICAg
Y2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2Uu
Z2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQo
KSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JD
ci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2VuZGlmCi0KLXZv
aWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19P
UEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQotCi12b2lkIElt
YWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1dG8qIGNvbnRl
eHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJp
bmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAg
IC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJl
IGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20gYSBwcmUtZXhp
c3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRl
cmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwot
ICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xf
Q0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RF
WFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0gICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1hZ2UyRChHTF9U
RVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsK
LQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBu
b24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShk
ZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZh
Y2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwg
bV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgY2xlYXJT
dXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkK
LXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShD
QUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0
aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZh
Y2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkp
KTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJD
RSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAw
KTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29weTsKLX0KLQot
c3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdl
KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAgICAgJiYgY2Fp
cm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FM
UEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWlyb1N1cmZhY2VD
b3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURh
dGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJm
YWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNh
aXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2VE
YXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1
cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGltYWdlRGF0
YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1hZ2VCdWZmZXI6
OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5k
b3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSksIHJlbmRlcmlu
Z01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2Fs
ZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJs
eSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYobV9y
ZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9
IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhN
RTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBp
ZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJ
bnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVk
V2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6ZTsKLQotICAg
IGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IEFj
Y2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotICAg
ICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgICAgICBt
X2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBm
YWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAo
bV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQotI2Vsc2UKLSAgICBBU1NF
UlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLSAgICB7
Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsK
LQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lkKiBzdXJmYWNl
RGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5oZWlnaHQoKSAq
IHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0g
ICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBD
QUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBzdHJp
ZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkg
eyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3Rh
dHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAg
ICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNldCBtX2luaXRp
YWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUobV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNy
LmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2RhdGEubV9wbGF0
Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5J
bWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gY3JlYXRlQ29t
cGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
ICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5r
SW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJuIGltYWdlQnVm
ZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIC8vIGNv
cHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNjYWxlIGZhY3Rv
ci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0gICAgICAgIHJl
dHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9z
dXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBh
c3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkpOwotfQotCi1C
YWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0gICAg
cmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3
Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17
Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAg
ICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAgICAgICAgICBz
dXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAgICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2Nv
cGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwot
ICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9u
Q29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29u
dGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVh
bGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNo
YWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAgICBDYWlybzo6
ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1f
c2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25z
KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0gICAgLy8gRklY
TUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRlZCBjYW52YXNl
cy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJmYWNlLmdldCgp
KSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVu
c2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVp
bnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7Ci0gICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewotICAgICAgICAg
ICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9yIHBpeGVsQ29s
b3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAgICAgICAgcGl4
ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVl
KCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3IuYWxwaGEoKSk7
Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENv
bG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVj
dGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgo
KSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
LCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBl
ID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVh
ZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0
YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UK
LSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAg
ICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZ
KDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlS
T19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVt
cGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IElu
dFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRv
byBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0Owot
ICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAg
ICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgot
ICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53
aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3Zl
cmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBp
ZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAg
fHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAg
cmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBp
bnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1v
cmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNp
emUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29s
dW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAg
ICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9
IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+
IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBu
dW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVk
LCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwg
bnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUg
b2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVt
LgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVk
IHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9y
aWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3Qo
ZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2
aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25T
Y2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdl
UmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkg
ewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRl
cnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwg
bG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRv
QW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXpl
KC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCks
IGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFE
c3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dz
ID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cg
PSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiAoeSAr
IG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4Kysp
IHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQq
IHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxp
bmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBvbmUKLSAgICAg
ICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAg
ICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAg
ICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0gcmVkOwotICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0g
YWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93Owot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+
Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZmZXI6
OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VCdWZm
ZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0g
ICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0
LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQot
dGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9yZVVuaXQoY29u
c3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5h
dGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lz
dGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFn
ZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJh
Y2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAg
ICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAg
IHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9n
aWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dp
Y2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
SW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGlu
YXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNp
b25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNp
emUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6
ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxlZFNv
dXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBiYWNr
aW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0KGRl
c3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJl
Y3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQb2lu
dCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9u
U2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAg
IEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBpbnQgb3JpZ2lu
eCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxlZERlc3RQb2lu
dC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERlc3R4ID0gbG9n
aWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAgQVNTRVJUKGRl
c3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NF
UlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRTb3VyY2VSZWN0
Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRT
b3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2FsRGVzdFBvaW50
LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5keCA8PSBtX3Np
emUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKLSAgICBp
bnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0eDsKLQotICAg
IGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gc2Nh
bGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBsb2dpY2Fs
RGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKTsKLSAg
ICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXplLmhlaWdodCgp
KTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8PSBzY2Fs
ZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERlc3RQb2ludC55
KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVuZHkgPSBsb2dp
Y2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBBU1NFUlQo
ZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRlc3R5
OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNhbERlc3R5Owot
Ci0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3Rv
cmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2Nh
bGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIElu
dFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0gICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0ltYWdl
QW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAgIGNh
aXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9u
U2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVjdC54KCk7Ci0g
ICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxEYXRhID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0aCgpOwotICAg
IGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJmYWNl
LmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsg
b3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJw
cmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0eSkp
OwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAg
ICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSBy
b3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OnBy
ZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1
bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNp
Z25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0g
c3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd3Nb
YmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNleCAr
IDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAy
NTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpwaXhl
bCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAg
ICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAg
Ly8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1hZ2VT
dXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNvbHVt
bnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9u
IGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0RnJv
bU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJmYWNl
LmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxvZ2lj
YWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VS
ZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkpLCBD
QUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLX0KLQotI2lmICFQTEFURk9STShHVEspCi1z
dGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0gICAgaWYgKCFyZWlu
dGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBs
ZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOwotICAgIHJl
dHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2Uo
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVp
bnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUg
PT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cu
Ci0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3
cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOwotfQotCi1TdHJp
bmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAg
ICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwot
Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJ
bWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0
dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1W
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAg
Y2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7
Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2Rl
ZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7
Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4
dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3Qm
IHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9w
YWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hh
bmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNr
IGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0g
R0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2Uu
Z2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3
VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwg
dGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVy
KiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVu
ZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJu
IG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3Rl
eHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2Rh
dGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZl
cjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0g
aW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJl
IGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwot
ICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0g
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RF
WFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAg
ICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWly
b19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29u
dGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0g
ICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAg
IGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZG
RVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJl
LCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRl
eHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwg
MCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4
dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJB
TUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygx
LCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdl
dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7
Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0x
ICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWly
b09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
CisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKworI2lm
IFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQor
ICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2Up
KQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX3N1cmZhY2UuZ2V0KCkpID09
IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBtX3BsYXRmb3JtQ29udGV4
dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3Jt
Q29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
Ojpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwordW5zaWdu
ZWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9
CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChj
b3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6IHsKKyAgICAgICAgYXV0
byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFU
X0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNl
LmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFj
ZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNv
cHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19P
UEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0
KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgp
KTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAgICBjYXNlIERvbnRDb3B5QmFj
a2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2Uo
KSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yOworICAgIGlmIChj
YWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9U
WVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQobV9zdXJmYWNlLmdldCgpKSA9
PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250
Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAgICAgIGNvcHlCZWhhdmlvciA9IENvcHlC
YWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwor
fQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5SW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sK
KyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9u
IGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weU5hdGl2ZUlt
YWdlKGNvcHlCZWhhdmlvcikpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9u
UXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVh
bGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RD
b250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJh
Y2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3Rp
bmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVz
dGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAm
Y29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAg
ICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwg
aW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNw
YWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRlc3RDb2xv
clNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJH
QiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0g
Q29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JH
QikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAm
JiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgeworICAg
ICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9
IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAg
ICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHNS
R0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtp
XSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxh
dGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChk
ZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25z
dCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7CisgICAgICAgICAg
ICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9
IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNv
bXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1
aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgaWYg
KGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAiZGF0YTosIjsKKworICAg
IFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2Uu
ZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKKworICAgIHJldHVybiAi
ZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2Us
IG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBhdXRvIHN1cmZhY2UgPSBjYWly
b1N1cmZhY2VDb2VyY2VUb0ltYWdlKCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNl
LmdldCgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgaWYgKGNhaXJv
X3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQorICAgICAgICByZXR1cm4gaW1hZ2VEYXRh
OworCisgICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZh
Y2UuZ2V0KCkpOworICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgorICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOworCisgICAgcmV0dXJuIGltYWdlRGF0YTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0Nv
bG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dz
LCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0
ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVz
dFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYg
bV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jl
c29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJl
Y3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNy
Y1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8
fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25l
ZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4
X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisgICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBz
cmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQ
aXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIENv
bG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0
Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVz
dFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEludFNpemUgc3JjU2l6
ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsK
KyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYm
IG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50
UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2Nh
bGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7
CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAg
ICB1aW50OF90KiBkZXN0Um93cyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJm
YWNlLmdldCgpKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0Lngo
KSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplU2NhbGVk
LndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RD
bGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKwor
ICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpS
R0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywg
ZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGly
dHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCks
IGRlc3RSZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKKworICAgIFJl
ZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9u
KSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRl
OworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3Zl
cnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpIHsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0OworCisgICAgc3RhdGljIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29s
b3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNv
bnN0IEludFNpemUmKTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9z
dXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsgbnVs
bHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisK
KyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBV
U0UoRUdMKQorI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UK
KyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWds
Lmg+CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVT
RShPUEVOR0xfRVMpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0
aWMgaW5saW5lIHZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sK
KyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkp
OworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIp
OworICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNp
emUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25T
Y2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlz
cGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVy
ZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5n
IGl0CisgICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRl
eHR1cmUKKyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19BTElHTk1FTlQsIDEpOworCisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAg
LyogbGV2ZWwgKi8sIEdMX1JHQkEsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUu
aGVpZ2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
KworICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwor
CisgICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5v
bi1JbnRlbCBkcml2ZXJzLgorICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRl
dmljZSwgRkFMU0UpOworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3Vy
ZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCB0ZXh0dXJlLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSk7
CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19T
VUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJm
YWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChz
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShz
dXJmYWNlKSwgdGV4dHVyZSkpOworfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJm
YWNlLCB1aW50MzJfdCB0ZXh0dXJlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9n
aWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZN
b3ZlKHN1cmZhY2UpKQorICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0g
Tmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9y
bUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eSk7CisjZW5kaWYKKyNlbmRpZgorfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNv
bnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZh
bGlkYXRlQ2xpZW50KCk7CisjZW5kaWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVD
b250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFy
ZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0
Q3VycmVudCgpOworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJl
cygxLCAmbV90ZXh0dXJlKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBp
ZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9j
b21wb3NpdG9yVGV4dHVyZSk7CisjZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRl
eHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
Cit9CisKK1BsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QK
K3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7Cisj
ZWxzZQorICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisg
ICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
ZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNv
bHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJl
bW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlm
IChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0g
YmluZFRleHR1cmVUYXJnZXQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RF
WFRVUkVfMkQ6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJl
VGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1
c2gobV9zdXJmYWNlLmdldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNv
bnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIHVpbnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygx
LCAmZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAg
ICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hN
RU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJp
bmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdl
MkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9pbnRlcm5hbFNpemUud2lkdGgo
KSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCksIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRl
eHR1cmVUYXJnZXQsIDApOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAw
KTsKKyAgICBnbEZsdXNoKCk7CisgICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVy
KCkKK3sKKyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisKKyAgICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1
cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
IGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUik7CisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAg
ICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1faW50ZXJuYWxTaXpl
LndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05F
RF9CWVRFLCAwKTsKKworICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19n
bF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlS
T19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6
ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNy
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAg
ICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJ
QVNfTk9ORSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3
YXBCdWZmZXJzSWZOZWVkZWQoKQoreworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250
ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1
cmUpIHsKKyAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8g
cHJveHlPcGVyYXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tI
b2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5l
eHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9j
b21wb3NpdG9yVGV4dHVyZSwgbV9pbnRlcm5hbFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxk
QmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAgICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAg
ICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAg
ICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9
CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1
ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2Vz
CisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJl
ZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAg
IC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3Vy
ZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBj
YWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NP
VVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYg
KHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7
CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFr
ZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCog
cHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9f
c3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVy
R0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJH
TDo6U2hvdWxkQmxlbmQsIG1faW50ZXJuYWxTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNp
dHkpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykg
JiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNFKE5J
Q09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgi
CisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kCisjaWYg
VVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5k
aWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CisgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIH5JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigp
IGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVt
IHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGlu
dGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYm
KTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBv
c2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsK
KyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJv
eHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6
Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKKyAgICBSZWZQ
dHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4
dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7IDAgfTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNl
bGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamlu
ZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykKKworI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0
V2luZG93KikKK3sKKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURh
dGFLZXk7CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3Jt
YXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRlcm5hbFNpemUud2lk
dGgoKSk7CisgICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFs
bG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVybmFsU2l6ZS53
aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZh
Y2Vfc2V0X3VzZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFj
ZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7
CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwg
aW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFj
ZSkpKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAg
ICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NF
UlQoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4
X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaW50IHN0
cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKTsgKyt5KSB7Cisg
ICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRh
dGFTcmMgKyBzdHJpZGUgKiB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2lj
YWxTaXplLndpZHRoKCk7IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93
ICsgeDsKKyAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBs
aWVkQVJHQigqcGl4ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRh
YmxlW3BpeGVsQ29sb3IucmVkKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLCBs
b29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0sIHBpeGVsQ29sb3IuYWxwaGEoKSk7CisgICAg
ICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xl
KG1fc3VyZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxT
aXplLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENBSVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQg
OiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29r
VXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgJKHJldmlzaW9u
IDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyRGF0YUNhaXJvLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltYWdlQnVm
ZmVyRGF0YUNhaXJvX2gKLSNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotCi0jaWYgVVNF
KENBSVJPKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJS
ZWZQdHJDYWlyby5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBl
clBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShOSUNPU0lBKQotI2luY2x1ZGUgIk5pY29zaWFDb250
ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAotI2Vsc2UKLSAgICA6IHB1YmxpYyBQbGF0Zm9y
bUxheWVyCi0jZW5kaWYKLSNlbmRpZgotewotcHVibGljOgotICAgIEltYWdlQnVmZmVyRGF0YShj
b25zdCBJbnRTaXplJiwgUmVuZGVyaW5nTW9kZSk7Ci0gICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJE
YXRhKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci0gICAgUGxh
dGZvcm1Db250ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwotICAgIEludFNpemUgbV9zaXplOwotICAgIFJl
bmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSAgICB2b2lkIGNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0KLSNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgdm9pZCBzd2FwQnVmZmVy
c0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2VuZGlmCi0gICAgdm9pZCBjcmVhdGVDb21wb3Np
dG9yQnVmZmVyKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2NvbXBvc2l0b3JT
dXJmYWNlOwotICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmU7Ci0gICAgUmVmUHRyPGNh
aXJvX3Q+IG1fY29tcG9zaXRvckNyOwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgUmVmUHRyPE5p
Y29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxzZQotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKLSNl
bmRpZgotI2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVy
ZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYsIGZsb2F0IG9wYWNpdHkpOwotI2VuZGlmCi0gICAgdWludDMyX3QgbV90ZXh0dXJlOwot
I2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pCi0KLSNlbmRpZiAvLyBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRh
dGFDYWlyby5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMj
Ci1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisKKyNpZiBV
U0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJHUmVmUHRyR3Rr
LmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworI2lmICFQTEFURk9STShHVEspCisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCB3
cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5z
aWduZWQgbGVuZ3RoKQoreworICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhf
dD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIENB
SVJPX1NUQVRVU19XUklURV9FUlJPUjsKKyAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7
Cit9CisKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0KQoreworICAgIEFT
U0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsgLy8gT25seSBQ
Tkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgorCisgICAgcmV0dXJuIGNhaXJvX3N1cmZh
Y2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0cHV0KSA9PSBD
QUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3Vy
ZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPikK
K3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlOworICAgIGlmICghaW1hZ2UgfHwg
IWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgcmV0dXJuIGVuY29kZWRJbWFnZTsKK30KKworI2Vsc2UKKworc3RhdGlj
IGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+
JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQoreworICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVk
IGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0
aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxl
L2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgor
CisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwor
ICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYi
ICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKKyAgICBpZiAodHlwZSA9PSAianBl
ZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhl
IDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0
ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdl
IHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCisgICAgICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG5ld1N1cmZhY2U7CisgICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBl
KHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgeworICAgICAgICAgICAgbmV3
U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgQ0FJ
Uk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEludFNp
emUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7CisgICAgICAgICAgICBuZXdTdXJm
YWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JH
QjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Cisg
ICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAs
IDApOworICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICB9CisgICAg
ICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNl
LmdldCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1
cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAo
dHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkg
PD0gMS4wKSB7CisgICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIo
c3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7CisgICAgICAgIGdka19w
aXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVm
ZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5Iiwg
cXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Z2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCks
ICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7
CisKKyAgICByZXR1cm4gIWVycm9yOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19z
dXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHkpCit7CisgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVmZmVyOworICAgIGdzaXpl
IGJ1ZmZlclNpemU7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsIHF1YWxp
dHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0
b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgp
LCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCisjZW5kaWYgLy8gIVBM
QVRGT1JNKEdUSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENB
SVJPKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDYWlyby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fp
cm9fc3VyZmFjZV90KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0lt
YWdlQnVmZmVyKAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlvblNpemUgPSBidWZmZXIuc2l6ZUZvckRl
c3RpbmF0aW9uU2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0
aW5hdGlvblNpemUgPSBkZXN0UmVjdC5zaXplKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCShub25leGlzdGVudCkKQEAgLTEsNjU0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRh
LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
LSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5o
PgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29y
ZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRp
ZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJ
T1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2Vu
ZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0Iz
MiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJ
T1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9I
RUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6
ZVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKLXsKLSAgICBm
bG9hdCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXpl
LndpZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRp
b24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRl
cm5hbFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0
aCgpICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdodCgpICogeU1hZ25pZmljYXRp
b24pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNl
OwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0Nv
bnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JT
cGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAg
YnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3Vy
ZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3Bh
Y2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAg
ICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShj
Z0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9y
U3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JH
QkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
cihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVy
aW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUg
ZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNj
YWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAg
OiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9u
U2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFu
IGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUg
KiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRp
b25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRv
bWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2Nh
bGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWln
aHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBh
Y2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBp
ZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAg
cmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBD
aGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAg
Q2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0j
ZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0
ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVy
Zmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlm
IChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9T
dXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNp
emUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAg
ICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5k
ZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JT
cGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRl
eHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IHNpemVG
b3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5z
YWZlR2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZSht
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7
Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0g
bV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAg
ICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0
KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0
cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwot
I2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJl
bmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9u
LWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5n
KSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1h
bGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJv
dy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0
YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcElu
Zm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVy
MzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0
ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5m
bykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNv
bnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6
OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBD
cmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUlt
YWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsK
LSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVh
dGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJ
bWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNp
emUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3Io
bV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVm
ZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6
IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGlt
YWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19
Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJ
bWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25T
aXplKSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlv
blNpemUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNp
ZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVy
OjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9r
ZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVm
dWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBz
YWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBv
aW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNl
IGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVj
dGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9k
YXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNo
YXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1f
ZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUo
KS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1
ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9y
eUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5k
IHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5k
IGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2Ug
dGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0
aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZh
Y2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50
ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJm
YWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3ND
b250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAg
IHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVz
aENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9y
bUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91
bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
KSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1
cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtl
KDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGlt
YWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2Nh
bGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGludGVy
bmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlv
biA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9w
cGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNl
IHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
MCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dp
Y2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRl
eHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0g
ICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNw
YWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUpOwotICAgICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6
Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGlt
YWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7
Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQot
ICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UK
LSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92
ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1
dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5h
bFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxT
aXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0
YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVm
ZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZl
cikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0
aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1h
Z2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNr
aW5nU3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQot
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFn
ZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZh
Y2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92
ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxD
R0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsK
LSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3
aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6
Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwg
MzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1f
ZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFw
Q29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9
IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1h
Z2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNl
KSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJU
KGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJl
c29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNp
emU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJ
bnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1
ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsK
LSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29u
dGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RD
b250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIs
IG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBz
cmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0K
LSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlm
ICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUlt
YWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5l
ZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUp
KQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6Omdl
dFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhl
bEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25z
dAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAg
Zmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChj
b29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5z
aW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0K
LSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVy
OjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUq
IHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAg
IHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlE
aW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUo
KTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0
ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXpl
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7
Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
ICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0K
LSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6
ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcg
dGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJ
T1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBp
cyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQot
ICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQot
c3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtV
VFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VU
VHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9t
SW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJ
WE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQ
TEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRl
Q0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMg
dW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5k
b3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252
ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBu
b3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0v
NjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNU
UigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lG
ID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBr
VVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAg
ICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShD
R0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAh
ZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFk
b3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7
Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0
YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFs
KHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0
eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8g
dGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFs
aXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1i
ZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NH
SW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2
b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9w
ZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFj
a2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMg
d291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1
dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZElt
YWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAg
ICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwot
fQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5j
b2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0
RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJh
c2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFS
ZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5k
KENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAg
IHJldHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRv
Q0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICBy
ZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwi
X3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAo
YXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1
cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChNSU1F
VHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlw
ZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlN
RVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGll
ZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAg
ICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1h
bnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxpZWRE
YXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2lj
YWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2Fs
U2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJ
bWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXpl
KTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3Jl
YXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUs
IG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dp
Y2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3Jk
ZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAo
bV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJh
Y2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nh
cnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1
dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRM
YXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dC
bGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgp
LCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5o
ZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzaXpl
Rm9yRGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAgICAgICBDR0NvbnRleHREcmF3
SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFj
ZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsK
LSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRl
eHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3Jl
YXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFn
ZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0
YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAg
ICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlN
RVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5m
byBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciog
ZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVs
dGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsK
LSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZl
IHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBz
aXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAo
IXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEo
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBd
ICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSAr
IDFdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFb
aSArIDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJb
aSArIDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRh
dGFbaSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhh
SW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hh
bm5lbC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0K
LSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgo
KSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICog
c291cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShz
b3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgp
LCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFs
cGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50
RGVmYXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFi
bGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2Uu
Z2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0
YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291
cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0
KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRh
KHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3Rvcihk
YXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0
YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHls
ZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0Fj
Y2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1faW50ZXJuYWxT
aXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jl
c29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplKQoreworICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdl
KSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWln
aHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5S
ZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5h
bFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRy
PEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxD
R0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAx
IHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAg
ICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50
ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihD
R0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUu
aGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigp
LCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJv
KCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFj
ZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQo
KSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBp
bWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZN
b3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsK
KyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0g
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIG1fbG9naWNhbFNpemUsIG1faW50ZXJu
YWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJ
bWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2Fs
U2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
RmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQuc2Nh
bGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZl
SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9u
dENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2Uo
aW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0
aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRq
dXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250
ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3Rv
cmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25z
KTsKK30KKworUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWlt
ZVR5cGUpKTsKKyAgICAKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBl
KG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRh
OworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8v
IEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxs
eSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRS
ZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2Fs
KTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndp
ZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZl
cklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAg
ICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIp
KTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgp
LndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUo
KS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0
IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxz
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2Uu
Z2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwg
c1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Cisg
ICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVD
b3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkp
OworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgw
LCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpLCBpbWFn
ZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJ
bWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENG
KENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICgh
ZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgp
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEp
OworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7Cisg
ICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIGlmIChhdXRv
IGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkK
KyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVy
biAiZGF0YTosIl9zOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCitzdGF0aWMgaW5saW5lIHZJ
bWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcih1bnNpZ25lZCBieXRlc1BlclJvdywgdWludDhf
dCogcm93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB2SW1hZ2VfQnVmZmVyIHZJbWFn
ZUJ1ZmZlcjsKKyAgICAKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8dklt
YWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVmZmVyLndpZHRoID0g
c3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2SW1hZ2VC
dWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0YSA9IHJv
d3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNv
cHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3Jj
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBz
cmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sKKyAgICBpZiAoc3Jj
QWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNDb2xv
ckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQoZGVzdEFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworCisgICAgICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JG
b3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xv
ckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRp
cGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0g
ZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8
LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsK
KyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFw
LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgaWYg
KHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBk
ZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZChz
cmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBk
ZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93
cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNy
YyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAg
IHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBk
ZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBo
YUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3QpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJ
bWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQs
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1
aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0
ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0
Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1h
Z2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRl
OworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQo
KSk7IH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAg
IHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCisgICAgdm9p
ZCBzZXR1cENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGNvcHlJbWFnZVBpeGVs
cygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBz
cmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwg
Q29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIENBIHVzZXMgQVJHQjMy
IGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXpl
ZC4KKyNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQorCisjaWYgVVNFX0FS
R0IzMgorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7
Citjb25zdGV4cHIgY29uc3QgQ29sb3JGb3JtYXQgQmFja2VuZENvbG9yRm9ybWF0ID0gQ29sb3JG
b3JtYXQ6OkJHUkE7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0
Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKK2NvbnN0ZXhwciBj
b25zdCBDb2xvckZvcm1hdCBCYWNrZW5kQ29sb3JGb3JtYXQgPSBDb2xvckZvcm1hdDo6UkdCQTsK
KyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVu
c2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAqIGludGVybmFsU2l6ZS53aWR0aCgpOworCisgICAgaWYg
KCF0cnlGYXN0Q2FsbG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZh
bHVlKGRhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGRhdGEpICYgMykpOworCisgICAgc2l6ZV90IG51bUJ5dGVz
ID0gaW50ZXJuYWxTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFsU2l6ZS53aWR0aCgp
LCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNoZWRDR0NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYgKCFjZ0NvbnRleHQp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBjb25zdCBhdXRvIHJl
bGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewor
ICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgfTsKKworICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIGRhdGEsIG51bUJ5dGVzLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOwor
fQorCitJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCog
ZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJD
R0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3Zl
KGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VS
VChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdT
dG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgCisgICAgY2FzZSBEb250Q29weUJh
Y2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAg
ICAgICAgIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCA4
LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAg
ICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorICAg
IAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBj
b25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJl
YSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2Fs
U2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJv
dygpOworCisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+
KG1fZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBt
X2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIEludFJlY3Qg
c3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29v
cmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAg
ICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qg
c3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0g
Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoc3JjUmVjdFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRl
c3RSZWN0KTsKKyAgICBpZiAoIWFycmF5IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0
U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsg
ZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAK
KyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhf
dCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSkgKyBzcmNSZWN0
Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisK
KyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIEJhY2tlbmRDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3Ms
CisgICAgICAgIG91dHB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJv
dywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXks
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sK
KyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVj
dFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0
ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNy
Y1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2Nh
bGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1Jl
Y3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VE
YXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0
Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIAorICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihtX2RhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNyY1Np
emVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0YSgpICsg
c3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkg
KiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwgQ29sb3JG
b3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBCYWNrZW5kQ29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNH
QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFj
aFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6Cisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCisgICAgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgTmF0aXZlSW1hZ2VQdHIgY29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBv
dmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGlu
YXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYsIHN0
ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYpOworCisgICAgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3coKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQorCisg
ICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9kYXRh
UHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCShub25leGlzdGVudCkK
QEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJE
YXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lm
IFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2Vu
ZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUg
IklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8
cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0Iz
MiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6
ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQgdW5wcmVtdWx0aXBs
eUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVy
JiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7
Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdC
QTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1
cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4
X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FS
R0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0
IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NF
UlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0
aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8
LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAg
IGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19
Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJE
YXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgc2l6
ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJU
KGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwot
ICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3Jj
LnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9IGlucHV0OwotCi0g
ICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0
LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIGRl
c3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4
KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShv
dXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRo
KTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19
Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0gICAgaWYgKCFhY2Nl
bGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBk
YXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICB0cmFu
c2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgs
IGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7
Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQo
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xh
bXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAg
IHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7
Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENo
ZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSBy
ZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4
LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhl
aWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0gICAgaW50IG9yaWdp
bnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0
dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHcg
Kz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9
IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwg
c2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0KCkgPiBzaXpl
LndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+
IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdpbnkgPSByZWN0Lnko
KTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVp
Z2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3RoICs9IG9yaWdpbnk7
Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0K
LSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0
KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkp
Ci0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQg
PSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8
fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAK
LSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVp
bnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsg
ZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4
X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAg
ICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3Jj
Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVy
Um93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91
dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGgg
PSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZl
ciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAg
ICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRl
c3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBk
ZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZm
ZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYg
KG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
IHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAg
ICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0
LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jh
c2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9y
ZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsg
MV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3Jj
Um93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vs
c2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5z
YWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0K
LSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51
bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9j
aygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJS
b3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0
OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAg
ICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9
IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVy
IGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAg
ZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAg
ICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBC
R1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwg
MCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMs
ICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAg
aWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0K
LSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVu
c2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0g
eCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwot
ICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFz
ZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBz
cmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51
bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNl
eCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAz
XTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNl
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRT
aXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChz
b3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbngg
PSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+
KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VSVChkZXN0eC51bnNh
ZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4LnVuc2FmZUdldCgp
IDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsK
LSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0g
ICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkp
ICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNp
emUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53
aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENo
ZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRl
c3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAg
ICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2Fm
ZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZ
KCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9p
bnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQo
KSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VS
ZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAg
ICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgo
KTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55
ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlm
ICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZl
R2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0
YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9
IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVm
ZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0g
ICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAg
ZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9
IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZm
ZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRl
ciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAg
ICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCAr
IDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAg
ICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRl
c3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNy
Y1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZh
Y2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBk
ZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93
cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChk
ZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53
aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVu
c2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAg
ICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2
SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQo
KTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVz
dC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJv
d3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3Jj
LCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5u
ZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0g
PSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdC
ODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNl
Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykg
ewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVp
bnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEg
PSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4
ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93
cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
KQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgJKHJldmlzaW9uIDI1NDMxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBz
dHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0Rh
dGFQcm92aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFw
SW5mbzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVj
dCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBD
aGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xv
clNwYWNlUmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1
ZmZlcnMuCi0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRh
UHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVy
YXRlZCBJbWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFj
ZTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVy
YXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7
Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBj
b25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxldGVkOiBz
dm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisK
KyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7CisgICAg
aWYgKGludGVybmFsU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGludGVybmFsU2l6
ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50
ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7
CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBp
bnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFz
dXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2lu
ZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
V1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0IHNl
bmRSaWdodCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwg
aW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJp
Z2h0KSkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1
ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBB
U1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRleHQoKTsKK30KKworSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdodCBzZW5kUmln
aHQpCisgICAgOiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBJT1N1cmZhY2U6OmNyZWF0ZUZy
b21TZW5kUmlnaHQoV1RGTW92ZShzZW5kUmlnaHQpLCBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xv
clNwYWNlKSkpCit7Cit9CisKK01hY2hTZW5kUmlnaHQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjcmVhdGVTZW5kUmlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNy
ZWF0ZVNlbmRSaWdodCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5z
dXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
Om1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMo
KTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKwor
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1h
Z2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVh
dGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJ
bnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0
ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkp
CisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRl
cm5hbFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitWZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29u
c3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEo
KS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNp
emUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3co
KTsKKworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhf
dCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VB
ZGRyZXNzKCkpOworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJS
b3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwg
bV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAg
ICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50UmVj
dCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkg
PSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBlZCwg
ZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1Jl
Y3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkg
KyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisg
ICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIElPU3VyZmFj
ZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgc3JjUmVj
dENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0Owor
CisgICAgY29weUltYWdlUGl4ZWxzKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgb3V0cHV0Rm9y
bWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJl
Y3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNy
Y1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbnRTaXplIHNyY1Np
emVTY2FsZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7
CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAm
JiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIElu
dFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNj
YWxlZCwgc3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3Qp
OworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICBJ
T1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nl
c3NNb2RlOjpSZWFkV3JpdGUpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBkZXN0UmVjdC55KCkg
KiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZS53aWR0aCgpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3Mg
PSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNy
Y1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoaW5wdXRGb3JtYXQs
IENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0
aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlz
IGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAs
IDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAm
JiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNsdWRlIDx3
dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElPU3Vy
ZmFjZTsKKworY2xhc3MgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdl
QnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50
U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgV0VCQ09SRV9FWFBPUlQgTWFjaFNl
bmRSaWdodCBjcmVhdGVTZW5kUmlnaHQoKSBjb25zdDsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJp
ZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVf
dCBleHRlcm5hbE1lbW9yeUNvc3QoKSBvdmVycmlkZSB7IHJldHVybiBtZW1vcnlDb3N0KCk7IH0K
KworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lu
a0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQgZHJhd0NvbnN1bWlu
ZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisK
KyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOyAgICAKKyAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQp
OworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdDsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw3ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYg
UExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs1MiwxNDAgQEAgdWludDhfdCB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbgogICAgIHJldHVybiAqKHVpbnQ4X3QqKWxhc3RCeXRlOwog
fQogCitDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAg
c3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVn
Iik7CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQRUc7Cit9CisKK1JldGFpblB0cjxDRlN0
cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1p
bWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCisKKyAgICAvLyBG
SVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVu
IGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQu
CisgICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxy
ZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VU
VHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5n
UmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7CisKKyAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKKyAg
ICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQorICAgICAgICByZXR1cm4ganBlZ1VUSSgp
OworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdl
L2dpZiIpKQorICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBrVVRUeXBlUE5HOworI2VuZGlmCit9CisKK2Jvb2wgZW5jb2Rl
SW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1
dGkgfHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRp
b24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwg
MSwgMCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAo
Q0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYg
KnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFs
aXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICBhdXRvIGNvbXByZXNz
aW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwg
a0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtl
eSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAg
Y29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGlt
YWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1
ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlW
YWx1ZUNhbGxCYWNrcykpOworICAgIH0KKworICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5h
dGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9w
ZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCisgICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rp
b25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisgICAgQ0dJbWFnZURlc3RpbmF0aW9u
QWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkp
OworICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQo
KSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VE
YXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1J
TUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRpRnJvbUlt
YWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJ
bWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5z
aWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpw
ZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVs
LCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAg
ICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwor
ICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRh
Lmdyb3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxp
ZWREYXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9
IDQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAg
ICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9
IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAx
XSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAg
ICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0
aGUgYWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEo
KTsKKyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBz
b3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJj
ZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNv
dXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZh
dWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVu
ZGVyaW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2Rl
SW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQor
CitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRh
R2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAg
ICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9
CisKK1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0
YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRh
dGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOwogfQor
CitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZE
YXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCitW
ZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRh
dGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBk
YXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCAr
MjUsMzEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBX
RUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qg
dm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdV
VEkoKTsKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJik7CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdS
ZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworCitT
dHJpbmcgZGF0YVVSTChDRkRhdGFSZWYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5n
IGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KTsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRh
UmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCShyZXZp
c2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZE
b2N1bWVudEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4K
ICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFj
ZS5oCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwLDEwICsxMDAsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21T
dXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlKENHSW1h
Z2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZUJ1ZmZl
cihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9F
WFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92
ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0JKHJldmlz
aW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lP
U3VyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAiSG9z
dFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZm
ZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgi
CiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bv
b2woc3RkOjp1bmlxdWVfcAogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJm
YWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRl
RnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIp
Ci17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0K
LSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNl
KEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0
ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQg
d2lkdGggPSBzaXplLndpZHRoKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAkocmV2aXNp
b24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZv
aWQgY2xlYXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCBy
ZW1vdmVJdGVtc0Zyb21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25h
bDxEaXNwbGF5TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7
CiAKIH0gLy8gV2ViQ29yZQotCi11c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3Q7Ci0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1
ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xh
c3MgRHJhd2luZ0NvbnRleHQgeworcHVibGljOgorICAgIERyYXdpbmdDb250ZXh0KGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUpCisgICAgICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0Nv
bnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlx
dWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3ND
b250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBBZmZpbmVUcmFuc2Zv
cm0oKSk7CisgICAgICAgIH0pCisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhp
cykubV9jb250ZXh0OyAgfQorICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJu
IG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBj
b25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QqIHJl
cGxheURpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXlEaXNwbGF5TGlzdC5nZXQo
KTsgfQorCisgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KQorICAgIHsKKyAgICAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0
LnJlc2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5TGlz
dC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXBsYXllciBy
ZXBsYXllcihkZXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAgIGlmIChtX3RyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJl
cGxheWVyLnJlcGxheSh7IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9kaXNwbGF5TGlz
dC5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQgbV9jb250
ZXh0OworICAgIERpc3BsYXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRy
PERpc3BsYXlMaXN0PiBtX3JlcGxheURpc3BsYXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSB7IGZhbHNlIH07Cit9OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4Ojpw
bGF0Zm9ybUFwcGx5U29mdHdhcgogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJ
bWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNp
b25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgIGF1dG8gcGl4
ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxv
YXRzKG1fdmFsdWVzKTsKIAorICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1
bHRJbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBwaXhlbEFycmF5RGltZW5zaW9ucy5zY2FsZShy
ZXN1bHRJbWFnZS0+cmVzb2x1dGlvblNjYWxlKCkpOworCiAgICAgc3dpdGNoIChtX3R5cGUpIHsK
ICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsKQEAg
LTMxMSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXko
KnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBp
eGVsQXJyYXksIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUm
IHR5cGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
RHJvcFNoYWRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8g
SW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJl
Y3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwot
ICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0Fy
ZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdl
KHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVh
LnNpemUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1Bp
eGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0Fy
ZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0
b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93
QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkJh
Y2tpbmdTdG9yZSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3No
YWRvd0NvbG9yKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzEs
NyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9z
b3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJp
bmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1fZmls
dGVyU2NhbGUgeyAxIH07CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCShyZXZpc2lvbiAy
NTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRl
ckVmZmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZl
ciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9u
UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRCeXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlv
blJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3Qp
OwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCpt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9p
bnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVy
biBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00NDMsNyArNDQzLDcgQEAgdm9p
ZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bAogICAgIGlmICghbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZy
b20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsK
LSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVz
dWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBAIC00Njks
NyArNDY5LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdQogICAg
IGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVy
IGEgY29udmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdl
QnVmZmVyUmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJ
bnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1h
Z2VCdWZmZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAJKG5vbmV4
aXN0ZW50KQpAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSWdh
bGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgot
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRp
ZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91
dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCi17Ci0gICAgLy8gTGlzdCBv
ZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUgR2RrUGl4YnVm
IGRvY3VtZW50YXRpb24uCi0gICAgLy8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBp
eGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhidWYtc2F2ZS10
by1idWZmZXJ2Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2Yg
ImltYWdlIik7Ci0gICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBuZyIgJiYgdHlw
ZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOwotICAgIGlmICh0
eXBlID09ICJqcGVnIikgewotICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBj
aGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVu
Y29kZSBhIFBvcnRlci1EdWZmCi0gICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFj
ayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KLSAgICAgICAgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKLSAgICAgICAgaWYgKGNhaXJvX3N1cmZh
Y2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7Ci0gICAg
ICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVf
Zm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKLSAgICAgICAg
ICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsKLSAgICAgICAg
ICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlS
T19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAg
ICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2Uu
Z2V0KCkpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwg
c3VyZmFjZSwgMCwgMCk7Ci0gICAgICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVm
KG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGl4YnVmID0gYWRvcHRH
UmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKLSAgICBpZiAoIXBpeGJ1ZikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAm
JiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJp
bmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUpKTsKLSAg
ICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0
UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwg
InF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwotICAgIH0gZWxz
ZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZl
ci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0
cigpLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZl
cjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBp
bWFnZURhdGEgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChpbWFnZURhdGEu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
YmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1hZ2VEYXRhLmRhdGEoKSwgaW1hZ2VEYXRh
LnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsg
IjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
cjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIEdVbmlxdWVPdXRQdHI8Z2No
YXI+IGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAgIGlmICghZW5jb2RlSW1hZ2Uo
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVy
U2l6ZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VE
YXRhOwotICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKLSAg
ICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi19CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCwwICMjCi1uYXRpdmUKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
M0RMYXllci5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgR0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVk
KCkKICAgICBJbnRTaXplIHRleHR1cmVTaXplKG1fY29udGV4dC5tX2N1cnJlbnRXaWR0aCwgbV9j
b250ZXh0Lm1fY3VycmVudEhlaWdodCk7CiAgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFn
cyA9IG1fY29udGV4dC5jb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8gVGV4dHVyZU1hcHBlckdM
OjpTaG91bGRCbGVuZCA6IDA7CiAjaWYgVVNFKEFOR0xFKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXpl
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50
cyhUZXh0dQogewogICAgIC8vIE1ha2luZyBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRl
ZCBidWZmZXIgaGVyZSBpcyBPSyBiZWNhdXNlIHRoaXMgY29kZQogICAgIC8vIGlzbid0IHVzZWQg
YnkgYW55IHBsYXRmb3JtcyB0aGF0IHJlc3BlY3QgdGhlIGFjY2VsZXJhdGVkIGJpdC4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0
UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAJKHJldmlz
aW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsNyArNDU4LDcgQEAgSW1hZ2VC
dWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbQogICAgIGlmIChtX2ltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkwNSw3ICs2OTA1LDcgQEAg
dm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdAogICAgIH0KICAgICAKICAg
ICBlbnN1cmVMYXllckZpbHRlcnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRl
cmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCku
YWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVk
KTsKKyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VT
Y2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5h
YmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCShyZXZpc2lv
biAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTgxLDE0ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBl
PiBTaGFwZTo6Y3JlYXRlUmFzdAogICAgIEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBwZWRJbnRS
ZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0ZXJTaGFw
ZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsKICAgICAv
LyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFs
bHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJh
dGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGljc0NvbnRl
eHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAgICAgIGlm
IChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJ
bnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOworICAg
ICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50
UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4
ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAz
OyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwCiAKICAgICBpZiAo
c2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7
CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90
IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNv
bnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAm
Y29udGV4dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9y
U3BhY2U6OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAg
ICAgICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmls
dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBs
eVJlc291CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNjYWxl
LmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0YS0+
c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkg
PyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRl
SW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNmb3Jt
LCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAgIGlm
ICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJEYXRh
TWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVIKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNh
dENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIucmVzZXQoKTsKKyAgICBm
aWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwogCiAgICAgTE9HX1dJVEhf
U1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0
aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2Vy
LmNwcAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcg
QEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdQogICAgICAgICBjb25z
dCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAg
IENvbG9yU3BhY2UgY29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09
IENvbG9ySW50ZXJwb2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDog
Q29sb3JTcGFjZTo6U1JHQjsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2Ug
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2lu
ZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAg
ICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVu
YWNjZWxlcmF0ZWQsIGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBT
VkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1
dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNv
bnRleHQpOwogICAgICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0lt
YWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
U1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTgsNyArMjE4LDcgQEAgTmF0aXZlSW1h
Z2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNjZWxlcmF0ZWQgZHJhd2luZyBmbGFn
LCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVm
ZmVyLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKSAvLyBmYWlsZWQgdG8gYWxs
b2NhdGUgaW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCShyZXZp
c2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDk1IEBACisyMDIwLTAxLTA5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVy
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5
NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6
CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICog
RGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5k
KToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAoV2Vi
S2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBjb25z
dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
aC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICogR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Ojpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk6
OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICogR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4K
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVh
c2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBjb25z
dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4uCisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2Vp
dmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVz
c2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29u
bmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRp
Zmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVz
c2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmguCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmguCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6CisKIDIw
MjAtMDEtMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgQWRvcHQgVEFSR0VUX09TX01BQ0NBVEFMWVNUIGluIG1vcmUgcGxhY2VzCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ01h
a2VMaXN0cy50eHQJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0
cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3LDYgKzE3LDcgQEAgc2V0KFdlYktpdF9JTkNMVURF
X0RJUkVDVE9SSUVTCiAgICAgIiR7V2ViS2l0X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUi
CiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2VzcyIKKyAg
ICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQiCiAgICAgIiR7V0VC
S0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nl
c3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9Db29raWVz
IgpJbmRleDogU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC0xNSw2ICsxNSw4IEBAICQoSkFWQVNDUklQ
VENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW8KICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9I
RUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BV
UHJvY2Vzcy5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIp
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJL
aXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlci5tZXNzYWdlcy5pbgpAQCAt
MTAyLDYgKzEwNCw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvQ2FjaGUvV2ViQ2FjaGUK
ICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJREJDb25u
ZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRnVs
bFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKyQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5pbgpJbmRl
eDogU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CShy
ZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54
Y2ZpbGVsaXN0CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNiArMTIwLDEyIEBAICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdl
cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Q
cm94eU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVz
c2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlSW1hZ2VCdWZmZXJNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzUmVwbGllcy5oCkBAIC0x
NDIsNiArMTQ4LDkgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYgog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0
UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5
TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3Jv
bGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2Fn
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApJbmRleDogU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViS2l0MikvR1BVUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21h
YyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21lZGlhIFwKKyAgICAkKFdlYktpdDIpL0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL3dl
YnJ0YyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9O
ZXR3b3JrUHJvY2Vzcy9Db29raWVzIFwKQEAgLTUyLDYgKzUzLDcgQEAgVlBBVEggPSBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIFwKICAgICAkKFdlYktpdDIpL1dlYlBy
b2Nlc3MvR1BVIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwKKyAgICAk
KFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNv
bkRhdGFiYXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCkBAIC0x
NDAsNiArMTQyLDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1Z2luUHJvY2Vzc0Nv
bm5lY3Rpb25NYW5hZ2VyIFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkgXAogICAgIFBsdWdpblBy
b3h5IFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlciBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eSBcCiAgICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBcCiAgICAgUmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSBcCkBA
IC0xNDcsNiArMTUxLDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUmVtb3RlTWVkaWFS
ZWNvcmRlck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwKICAgICBS
ZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwK
ICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9y
UHJveHkgXAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAkocmV2
aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNiArMzEsOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJv
eHkuCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNr
QXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJh
Y2tlci5jcHAKQEAgLTUxNCw2ICs1MTYsOCBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBs
YXllclByaXZhdGVSCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2Fj
aGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJj
ZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCiBX
ZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCiBXZWJQcm9jZXNz
L0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByb3ZpZGVyLmNwcApJbmRleDogU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC02MzIsMTAgKzYzMiwxNCBAQCBXZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90CiAvLyBEZXJpdmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1h
Z2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVy
LmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3Nh
Z2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAog
TGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3Rl
TWVkaWFSZWNvcmRlck1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5h
Z2VyTWVzc2FnZVJlY2VpdmVyLmNwcAogU2VydmljZVdvcmtlckZldGNoVGFza01lc3NhZ2VSZWNl
aXZlci5jcHAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTYwLDUyICsxNjAsNjggQEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5l
Y3Rpb25Ub1dlYgogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZy
b21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCku
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAg
dXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90
ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBsaWJXZWJSVENDb2RlY3NQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9p
ZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlF
bmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHko
KS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
ciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoKnRoaXMsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVy
aW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOwor
ICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29u
bmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1Jl
cGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRl
ICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdl
UmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIK
KyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNv
cmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5j
bHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCkBAIC00NywxOCArNDksMjAgQEAgY2xhc3MgVXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVi
bGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpDb25u
ZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgdmly
dHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogCiAgICAgSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2Fn
ZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2VzcyYgZ3B1UHJvY2VzcygpIHsgcmV0dXJuIG1f
Z3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlBy
b2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsg
fQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVuc2lvbihGdW5jdGlvbjx2b2lkKCk+JiYpOwog
ICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0gICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZp
ZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVu
dGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXImIHJlbW90ZU1lZGlhUmVz
b3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXImIGxvZ2dlcigpOwpAQCAtNzcsMTQgKzgxLDIx
IEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQg
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52
YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
JikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsK
KyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlTmFtZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICAgICBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKIAog
ICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICBSZWY8R1BVUHJvY2Vz
cz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJl
Y2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJv
Y2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUmVzb3VyY2VN
YW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eT4gbV9yZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eTsKQEAgLTk2LDYgKzEwNyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIFVTRShMSUJXRUJSVEMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVjc1By
b3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1l
c3NhZ2VzLmluCShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgkod29ya2luZyBjb3B5KQpAQCAt
MjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5n
QmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIo
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAg
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9
CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sK
KyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+
bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdl
QnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAo
YXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5j
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgTWFjaFNlbmRSaWdo
dCBzZW5kUmlnaHQpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc2VuZFJpZ2h0KSksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRl
eHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250
ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUg
Ik1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4K
KyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVz
c2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6
CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpOwor
Citwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVj
dGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50
NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ly8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1vdGVD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQpOworCisgICAgdm9p
ZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jiwg
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNo
Q29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7CisK
KyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUwpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Lm1lc3NhZ2VzLmluCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisj
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyUHJveHkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHku
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVy
PEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVzaW5n
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxC
YWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6Om1fYmFja2Vu
ZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0
ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGlt
YWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kLCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZl
cklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VQaHlzaWNh
bEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
CisgICAgeworICAgICAgICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNrZW5k
LT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBtX2JhY2tlbmQtPnJl
c29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5jcmVh
dGVTZW5kUmlnaHQoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbG9jYWxGbHVzaENv
bnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlz
dCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXRlbUNvdW50KCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJl
cGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3Bs
YXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIEJhc2VQaHlzaWNh
bEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZUFjY2VsZXJhdGVkUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEFjY2Vs
ZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIo
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgp
KQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAo
KS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJ
bnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAg
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQo
KSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisg
ICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGlt
YWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlu
cyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5k
ZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoK
KyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVBY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZm
ZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
ICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAg
IG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFz
ZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
Cit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2
ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdl
QnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xh
c3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2Fn
ZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNy
ZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisgICAg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6
CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VT
ZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNv
bnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisK
KyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVy
LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZl
ck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW4JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZm
ZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZl
cklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdl
cy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21l
c3NhZ2VzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZy
b20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAn
V2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2Fu
dHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJl
Y2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50
ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1
LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZQogICAgIHJldHVy
biBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNlbmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcn
LAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbicsCisgICAgICAgICdX
ZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmll
cicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMSw2ICsyMTQsNyBAQCBkZWYgdHlwZXNfdGhhdF9j
YW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlCiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmll
cicsCiAgICAgICAgICdXZWJDb3JlOjpQb2ludGVySUQnLAogICAgICAgICAnV2ViQ29yZTo6UHJv
Y2Vzc0lkZW50aWZpZXInLAorICAgICAgICAnV2ViQ29yZTo6UmVuZGVyaW5nTW9kZScsCiAgICAg
ICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3Jl
OjpTZXJ2aWNlV29ya2VySm9iSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNl
V29ya2VyT3JDbGllbnREYXRhJywKQEAgLTIxOCwxMCArMjIyLDEzIEBAIGRlZiB0eXBlc190aGF0
X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmUKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3Jr
ZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNXU2VydmVyQ29u
bmVjdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdl
SUQnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisgICAg
ICAgICdXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Okxh
eWVySG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0
ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywK
KyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29k
ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywK
QEAgLTc2MiwxMyArNzY5LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2
ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1l
c3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBv
ciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRF
KToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAo
cmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExF
R0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09V
TlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1
bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVz
c2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0
ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicp
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAg
IGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2Vp
dmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc3LDEzICs3ODcsMTYgQEAgZGVm
IGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2Vz
IG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJV
VEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVy
PiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykp
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5o
YXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2
ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
VU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBV
TlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0F1dG9wbGF5RXZlbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2Uu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CkBAIC03OTcs
NiArNzk4LDI2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZToKIAog
bmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
CisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+
IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5
TGlzdEFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0
LAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMg
PSBFbnVtVmFsdWVzPAogICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UsCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI1NDMx
NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTM5NjEsOCArMzk2MSwyNiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3
RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRo
ID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdl
c3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1l
ID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hB
Y3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rp
c3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVT
aW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVy
UHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTkyM0FEMkZENjAw
QkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYz
MyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29s
b3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUlt
YWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdl
QnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJF
NzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRD
ODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdL
V2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dl
YnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUx
ODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0
ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdL
V2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02MzkzLDYgKzY0MTEsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
IAkJCQkwNzkyMzEyRjIzOUIzQjBDMDA5NTk4RTIgLyogbWVkaWEgKi8sCisJCQkJNzJCQkU0MEUy
M0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2
MTI2MTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAg
LyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVB
NUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5oICovLApAQCAtNjQwOSw2ICs2NDI4LDcgQEAK
IAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3
NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8q
IG1lZGlhICovLAorCQkJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNr
ZW5kICovLAogCQkJCTQxNzIxOThFMjNCNjMzQ0EwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJ
MkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3Bw
ICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmggKi8sCkBAIC03NzgyLDYgKzc4MDIsMzggQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcg
LyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkuY3BwICovLAorCQkJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90
ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjQyM0MxQTA0MTAw
MjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYx
RUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAq
LywKKwkJCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcCAqLywKKwkJCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlw
YXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CisJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUVBOTIzQUQ3QkRG
MDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLywKKwkJCQk3MjFGMUU5
QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8sCisJCQkJNzJC
QkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3
MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3
MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4g
Ki8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2
N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
N0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAJKHJldmlzaW9uIDI1NDMx
NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOgogewogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9u
OjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdS
ZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQotewotfQotCi12b2lkIEdQVVByb2Nlc3ND
b25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3Bh
dGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVj
b2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAg
ICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8UmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogY2FwdHVyZU1hbmFnZXIgPSBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyPigpKQog
ICAgICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nl
c3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09D
T0EpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpM
aWJXZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9j
ZXNzOjpzaW5nbGV0b24oKS5saWJXZWJSVENDb2RlY3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIEdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNN
ZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCit7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gMjU0MzE3KQorKysg
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAj
aW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlv
bigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1f
Y29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdl
UmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiBwcml2YXRl
OgogICAgIEdQVVByb2Nlc3NDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllcik7
CkBAIC01MywxMCArNTUsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNs
aWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBm
aW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNl
IG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAorICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3Mg
dG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlv
bjsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiAyNTQzMTcpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3
IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3ND
b25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0
Y2hNZXNzYWdlIHsKIAogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1h
Z2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyVHlwZT47CisKK30KSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVt
IEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlm
aWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfQpJ
bmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMu
aCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUlt
YWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdl
UmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6TWVzc2FnZVJl
Y2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1l
c3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdl
QnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRv
VUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNy
ZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7
CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1h
cCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMp
OworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZl
cihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0
X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwor
Ym9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7
CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmds
ZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJl
dHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6
UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZD4obV9pbWFnZUJ1ZmZl
cklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZT
eW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0
Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9u
ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVy
PihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVy
cnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VC
dWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sKKyAgICBjb25zdGV4cHIgY29uc3QgdW5z
aWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0g
TWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0ZWQoKSAmJiB3YWl0c0NvdW50LS07ICkKKyAg
ICAgICAgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworCisgICAgZm9yICh1bnNpZ25l
ZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgaXNQZW5kaW5nRmx1c2goKSAmJiB3YWl0c0Nv
dW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNoSWRlbnRpZmllcigpOworfQorCit2b2lkIFJl
bW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIg
PSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZs
dXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVy
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVz
c2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVz
c2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6
CisgICAgflJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFn
ZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KCk7CisgICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9
CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0
dWFsIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBNYWNoU2VuZFJpZ2h0KSA9
IDA7CisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAg
ICB2b2lkIHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7ICAg
ICAgICAKKyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdl
QnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9Owor
ICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAg
ICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOwor
ICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4JKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisj
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIK
KyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1h
Z2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNp
Y2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlm
aWVyKFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQor
fQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1
c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5
cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAs
IFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIE1hY2hTZW5kUmlnaHQgc2VuZFJpZ2h0KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tlbmQg
PSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzZW5kUmlnaHQpKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNr
ZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0
X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFj
a2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAgIHZv
aWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlM
aXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAgICAg
ICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAg
ICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmbHVzaERy
YXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGZsdXNoQ29udGV4dCgpOwor
ICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90
ZUFjY2VsZXJhdGVkUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXI8QWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZD47CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpJbmRleDogU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30K
KworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7Cisg
ICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChN
ZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRo
ZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsK
KworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6
UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0
ZWRQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAg
ICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbmRl
cmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgfQorICAgIAorICAgIHJl
dHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisj
aW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L1JlbmRlcmluZ0JhY2tlbmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQKKyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5k
CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1l
c3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7
CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3Nh
Z2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW5kZXJp
bmdCYWNrZW5kCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0
IFdlYkNvcmU6Okhvc3RXaW5kb3cqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5l
cmF0ZSgpIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitlbnVtIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXJUeXBlPjsKKworfQorCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAJKHJldmlzaW9uIDI1NDMx
NykKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVj
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAKIAogbmFtZXNwYWNlIFdlYktp
dCB7CiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCiBzdGF0aWMgd2VicnRjOjpXZWJLaXRW
aWRlb0RlY29kZXIgY3JlYXRlVmlkZW9EZWNvZGVyKGNvbnN0IHdlYnJ0Yzo6U2RwVmlkZW9Gb3Jt
YXQmIGZvcm1hdCkKIHsKICAgICBpZiAoZm9ybWF0Lm5hbWUgIT0gIkgyNjQiKQpJbmRleDogU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Nb2NrV2ViQXV0aGVudGlj
YXRpb25Db25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CkBAIC04ODEsMTUgKzg4NSwyMiBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hy
b21lQ2xpZW50OjpnCiB9CiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExB
WV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdB
cmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hN
b25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVu
ZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJl
dHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJu
IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOwogI2VuZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21l
Q2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxh
eWVyKQogewpJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAkocmV2aXNpb24gMjU0MzE3KQorKysgU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2Vi
Q29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
V2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5n
QmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxs
b3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKSW5kZXg6IFNvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDMxNykKKysrIFNvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAx
LTA5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRN
ZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3Vy
cmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDkgIFRpbSBIb3J0b24g
IDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQgVEFSR0VUX09TX01B
Q0NBVEFMWVNUIGluIG1vcmUgcGxhY2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5t
bQkocmV2aXNpb24gMjU0MzE3KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3ICsy
MDIsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6CiAgICAgICAg
IHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFu
ZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0
aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYg
KCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1NDMx
NykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDIwLTAxLTA5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9j
YW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0wOSAgQnJlbnQgRnVs
Z2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjUzNjYy
KTogTGFyZ2UgRGF0YSBVUkxzIGFyZSBub3QgYmVpbmcgaGFuZGxlZCBwcm9wZXJseQpJbmRleDog
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1s
aXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMjU0MzE3KQorKysgTGF5b3V0VGVzdHMvZGlzcGxh
eWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcgKzEsMTEgQEAKICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0
ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFu
Z2UtZmxhZ3MgMTA1MDkxMikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29s
b3IgI0M4MDAwMCkKKyAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0
CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNp
emUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387432</attachid>
            <date>2020-01-11 09:09:42 -0800</date>
            <delta_ts>2020-01-11 09:56:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200111090941.patch</filename>
            <type>text/plain</type>
            <size>490101</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Mzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM1MWQ3NGM4ZGRhNmM2
ODdjMjY2MzdmMDM0ZTAyMzhhYjQyZDMwMS4uZTJmYWQ0ZGY5NmU0YzU2ZTJiN2I1OTdiMzFmZjZk
MmE5YjM1YTg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2OSBAQAorMjAyMC0wMS0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworICAg
ICAgICAgICAgLS0gU2hhcmluZyB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIGRhdGEKKworICAgICAg
ICBUaGlzIGlzIHRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIEltYWdlQnVmZmVyOgorCisgICAgICAg
IEltYWdlQnVmZmVyCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNr
ZW5kVHlwZT4KKyAgICAgICAgICAgICstIFBoeXNpY2FsSW1hZ2VCdWZmZXIgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQgICAgIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRU
eXBlPiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgICstIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgLS0tLS0rICAgUmVtb3RlSW1hZ2VCdWZm
ZXIgLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAg
ICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAg
IHwgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciAtKyAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgLSsKKyAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
KyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgICAgICAgICstIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eSAtLS0tLS0tLS0tLS0tLSsKKworCisgICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNo
eSBmb3IgSW1hZ2VCdWZmZXJCYWNrZW5kOgorCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZAor
ICAgICAgICAgICAgfAorICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAg
ICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAg
Ky0tIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgfCAgICAgICB8ICAg
ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwg
ICAgICAgKy0tIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorICAgICAgICAgICAg
fCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZAorICAgICAg
ICAgICAgfCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZAorICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAg
ICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAg
IEFzIGFuIGV4YW1wbGUgZm9yIHRoZSBwbGF0Zm9ybXMsIHdoaWNoIHVzZSBDRywgSW1hZ2VCdWZm
ZXI6OmNyZWF0ZSgpIHdpbGwgCisgICAgICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9m
IEltYWdlQnVmZmVyOgorCisgICAgICAgICAgICBJbi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAg
ICAgICAgICAgICBVbmFjY2VsZXJhdGVkOiAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAgICAgICBBY2NlbGVyYXRlZDogICAgUGh5c2lj
YWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAgICAg
IE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJhdGVk
OiAgCisgICAgICAgICAgICAgICAgICAgICAgICBXZWJQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQVVByb2Nlc3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+CisKKyAgICAgICAgICAgICAgICBBY2Nl
bGVyYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPgorICAg
ICAgICAgICAgICAgICAgICAgICAgR1BVUHJvY2VzczogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5PEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4KKworICAgICAgICAq
IEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJv
YXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRp
emVEYXRhSWZOZWVkZWQpOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAg
ICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlQ29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZm
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3Bs
YXlMaXN0QXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2Nl
bGVyYXRlZCBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6Cisg
ICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQg
Y29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6
c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICog
cGxhdGZvcm0vSG9zdFdpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29weVJlY3RUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5RnVuY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1h
Z2VCdWZmZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2lj
YWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZl
cjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OmRyYXdTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5
ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1
ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpzZXR1cENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkpOgor
ICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVZlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcDoKKyAgICAgICAg
KE5pY29zaWE6OkdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAyMDIw
LTAxLTEwICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10g
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0VGFibGVDZWxsQm94IHNob3VsZCB0YWtlIEhv
cml6b250YWxDb25zdHJhaW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA5YWYzOTk5OWQ1OGYzNjcwNzRkNDdjNTU1
ZGU0ZTE5NGE0ZGE1NDRlLi40YzYxOTkzMDE4NWJkNzg3ZmU4NmJhNTM5Yjc2NjllN2RiYTE0NTE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAyMC0wMS0xMSAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMg
cmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQp
OgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToK
KyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5
bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1
c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNl
dEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpy
ZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAx
LTEwICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEF1
ZGlvIGZyb20gbm9uLWZyb250bW9zdCB0YWIgY29udGludWVzIHdoZW4gYXBwIGlzIGJhY2tncm91
bmRlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDMxZDgyMjQwYjE5ODA5MWE1ZWMy
ZmRhOWZlZTYwMGE2YzljNzdjYjcuLjVmNTcyMWNmNzZmYzgyZjQ1MWI0NWFjY2ViNDUwZGJlZmE3
MzJmZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAy
MC0wMS0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisg
ICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJDb250
ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZv
ckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIwLTAxLTA5ICBUaW0gSG9y
dG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEFkb3B0IFRBUkdFVF9P
U19NQUNDQVRBTFlTVCBpbiBtb3JlIHBsYWNlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5kZXggMjk2ZGVh
NzgzMWJlZTQ5Y2YwMDRhNjgyZGQyNWU4OTNiOTk2NGU3Ny4uODVhN2JjMDJmZDA3NWFmM2U4MDU3
YTNkNzhkMjgwZjc2YTgxNGZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMDE1LDYgKzEwMTUs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0v
Z2FtZXBhZC9HYW1lcGFkUHJvdmlkZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL2dhbWVwYWQvUGxh
dGZvcm1HYW1lcGFkLmgKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGlj
YXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9BdWRpb1RyYWNrUHJpdmF0ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaApAQCAtMTAyNCw2ICsxMDI1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29u
dHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5LmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xp
ZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2Vy
LmgKQEAgLTEwNzMsNyArMTA3NSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCYWNraW5nU3RvcmUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VGcmFtZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNlcnZlci5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oCkBAIC0xMTA1LDEzICsxMTA3LDE4IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNh
bEltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlh
UmVzb3VyY2VMb2FkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNr
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9T
YW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Jv
dW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVt
QmluZGluZ3NEYXRhU291cmNlLmNwcAppbmRleCA0NjQxZDU4MDhhNTI3ZWM2ZTMwZDFjZmI2ZTgw
YjIzMWRkNTZkNmIwLi43NDY1ZDBlNmE4NjY4NzM4ZjRlYmRjNTc0ZjkyNmM3NDg4ZTdhYTRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcApAQCAt
Mjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZTo6Q2xp
cGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlCiAKICAgICAgICAgYXV0byBi
aXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICAgICAgYml0bWFwSW1hZ2Ut
PnNldERhdGEoV1RGTW92ZShidWZmZXJUb1Nhbml0aXplKSwgdHJ1ZSk7Ci0gICAgICAgIGF1dG8g
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5zaXplKCksIFVu
YWNjZWxlcmF0ZWQpOworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewogICAgICAgICAgICAgbV9kYXRhID0geyBudWxs
U3RyaW5nKCkgfTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlCmluZGV4IGY3MTI5MjdjYzkxOGYzYWIwZmU3MDhhOGFjMDE3YmQwZjNjZjk0MGQu
LjVlNTQyNmMxMTRkM2FjZjUwYjQ3MThiY2NmNDZhMzdjMmNjYWY5ODIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtMTMyLDggKzEzMiw5IEBAIGVsc2UgKCkKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291
cmNlQ0dXaW4uY3BwCkBAIC0xNzYsNyArMTc3LDkgQEAgZWxzZSAoKQogCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVu
dEltYWdlLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBjMDNjZTZiNTEzMTgyMWEwMWNjN2Q2NjUzZDE2OTE5
MWRiYjc5YTgxLi4wYjJiY2NjNWI1NjY2MDM1NDUyMzdiZDVhYzAzNWFjMTFiNGQyYzdjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjg5LDggKzI4OSwxMCBAQCBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRH
TENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTUyNSw3ICs1MjcsOSBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
T1N1cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDExMjE1NTdhZTZmMzVkYjlhZDVmNGMx
ZThhY2NjYTA4NjYzZTZmYi4uN2EyMDlhODY3ZDNlMWExNDBkYjIwMzQ0NWVkM2FkZWUyNzY4OGU2
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKQEAgLTE4NjksNiArMTg2OSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNz
L0hFVkNVdGlsaXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JY29uLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlRGVjb2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTE4ODgsNiArMTg4OSw3IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVS
YW5nZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tl
bmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBlNDUzZDg5MDk3ZTY4NmIyYzMzNTJiYWQ2NmVl
NzEyMzQ3YzE2NmI1Li40ZjAzZWMyM2Q4YzQwZmI5NmEyZTU3NzAxZTM2NmFiMDE0Y2VjZmNmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI4OCw4ICsyODgsOSBAQCBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRh
dGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAor
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJj
ZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDcyMDVlMjBkM2FiNGUzOWZiZWU0YmI5
NDMxYWVjYjRiY2NjMjhiZDIuLjk3ZjMzNmU3YzVjOWU4ZDBkYTI1ZTJiZDRlNjFhZDcxYWU1MmRm
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC04NCw3ICs4NCw2IEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9Db2xvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9EaXNwbGF5UmVmcmVz
aE1vbml0b3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2RrQ2Fpcm9VdGlsaXRpZXMu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKLXBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUd0ay5j
cHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggOWJiODQzMTQ1MzlhZDA5NTE0NjMxYjIxMzA2MTZhZjYwYmE5YTFjMy4uNTM2MGY0N2M4
Njc5YjEyZjg4NWM3OTIwMDJkOTczY2MyZTI0ZjFiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ1LDggKzY0NSw2IEBACiAJ
CTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1
MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI1
QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUg
LyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjhDMjg0
NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5
RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5
cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQu
aCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVt
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oICov
OyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk5
MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oICovOyB9OwpAQCAtMjEz
MCwxNCArMjEyOCwyNiBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9u
RWZmZWN0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcxRTJDNDI0MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4
MjIwODdFNzIwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVy
SUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0
MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzIwMTc1NEEyM0M5NjlERjAwNDE4ODFGIC8qIFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3MjAxNzU0ODIzQzk2OTNFMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjE0NDMzMTIyM0VDODU0MDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyMTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0Iy
QTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJv
cGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjFGMUVBNzIzQUQ1
MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwNjIzQUFDQ0JBMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8q
IEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09w
dGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjMyM0FDNDkz
RTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2MzMgLyog
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjM4MjZBNjIz
QzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzgyNkMyMjNDNTZGNzkwMDQ5RjdGOSAvKiBB
bHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRDMzMDFBM0E4QjIz
MDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3MjRFRTU1MDFEQzgwRDdG
MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3
MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RjFE
QzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCMDk5MDEyM0MwOTIz
QzAwNzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjNDIC8qIFBoeXNpY2FsSW1h
Z2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjAyM0FD
MkI3NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjcyM0FDQjNF
MDAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAv
KiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRl
cmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhG
NDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8q
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMw
QUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87
IH07CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcy
RDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC02NTQyLDkgKzY1NTIsNiBA
QAogCQkyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnRSZWdpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjQwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVn
aW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViRXZlbnRS
ZWdpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIy
OTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFn
ZUJ1ZmZlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjgwMTM1MzY0RkUw
MDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNEQ5MTI4RjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlw
aERlZkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
VkdBbHRHbHlwaERlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
NEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDIsOCArOTYwOSwxMiBAQAogCQk3MUVG
Q0VERTIwMkIzOUM3MDBEN0M0MTEgLyogSlNBbmltYXRpb25FZmZlY3RDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBbmltYXRpb25FZmZlY3RDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5MjJD
QzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8qIFBs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VC
dWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDI4MEQxMjNC
QTkzN0IwMDZGNDc2NyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJvcGVy
dHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaDsgcGF0aCA9IC4uL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVG
MTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJC
MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTYyNCw3ICs5NjM1LDIwIEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdC
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVHNSR0IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVBNkEwMDAwNDQyRTggLyog
RVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRzUkdCLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2QTAwMDA0NDJFOCAvKiBF
WFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdCLmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0Mg
LyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQaHlzaWNhbEltYWdlQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDAwMjNBQUM0QzEwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA2MjNBQUNDQkEw
MEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVm
ZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDky
M0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyMzIzQUM0
OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0
Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDI2
MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tl
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNS
R0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNFWFRzUkdCLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIxQTJFOEQyRjAwNEM1NjJB
IC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0VYVHNS
R0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFEOUYxQTM5MDRDMzAwMDE0
RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBFWFRGcmFnRGVwdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI2
ODgsNyArMTI3MTIsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NU
eXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NU
eXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTAxNTk1MEFGNkNENTMw
MDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTEw
QjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9u
dEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0Zv
bnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTIwQ0VG
MEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNjY4OCw2ICsxNjcxMSw3IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwRkU1
RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICovLAogCQkJCTBGRTVGQkNC
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJCTcyQkJFNDI2MjNBQ0Iw
OUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8sCiAJCQkJMEZFNUZC
Q0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3BwICovLAogCQkJCTBGRTVG
QkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggKi8sCiAJCQkJMEZFNUZC
Q0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLApAQCAtMjQ4
ODcsNiArMjQ5MTEsNyBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTcyMzgyNkMxMjNDNTY1
ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8sCiAJCQkJMEZDRjMzMjMw
RjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCkBAIC0yNDg5Niw5ICsyNDkyMSwxMiBAQAogCQkJ
CTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJ
CTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLywK
IAkJCQlBODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlQ0cuaCAqLywKLQkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZm
ZXJDRy5jcHAgKi8sCi0JCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmNwcCAqLywKLQkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCAqLywKKwkJCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MEMyM0FBRUIxRTAw
QTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MDcy
M0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJ
CQkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oICovLAogCQkJCUNENTg5NDkzMjE4NzQwNjQwMDRGNDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmNwcCAqLywKIAkJCQlDRDNFMjFEQjIxODMzRjUxMDBFNjZGNTUgLyogSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oICovLAogCQkJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFn
ZURlY29kZXJDRy5jcHAgKi8sCkBAIC0yNDk5NCw2ICsyNTAyMiw3IEBACiAJCQkJNEI3QUU0OTIy
MTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywKIAkJCQlBOENCNDEwMjBF
ODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1MTMwMDAxRTdDQ0NDQTAw
QTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAorCQkJCTcyQTA3QzQ1MjNCRUVEOUYwMEFG
QTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCiAJCQkJNDlGQzdBNEYxNDQ0QUY1
RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8sCiAJCQkJNDlBRjJENjgx
NDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICovLAogCQkJCTJEMjlF
Q0MxMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwICov
LApAQCAtMjUwODUsNyArMjUxMTQsOCBAQAogCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAv
KiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAv
KiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIElt
YWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YS5oICovLAorCQkJCTcyMDI4MEQxMjNCQTkzN0IwMDZGNDc2NyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VE
ZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTczOTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNv
ZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0NDMDRDIC8qIEltYWdlRnJhbWUuY3Bw
ICovLApAQCAtMjUxNDIsNiArMjUxNzIsOSBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFG
NyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8q
IFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJu
LmggKi8sCisJCQkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZm
ZXIuaCAqLywKKwkJCQk3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oICovLAorCQkJCTcyMDE3NTQ4MjNDOTY5M0UwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0
Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAwMzg3NkQ3IC8qIFBsYXRmb3Jt
TWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0UyMTZFQkM1QjAwMDQzQ0ZBNCAv
KiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjUxNTEsNiArMjUxODQsOSBAQAogCQkJCUJD
QUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdB
Mzk4MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3
N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTcyRDVDMkU5MjNC
NDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFNjIz
QjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyMzgyNkE2MjND
MUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JG
RTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAz
MUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEyRjVFQTFCMDAwRDkxOTAg
LyogU2hhZG93Qmx1ci5jcHAgKi8sCkBAIC0yODk5Myw2ICsyOTAyOSw3IEBACiAJCQkJQkNGN0U0
OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVUcmFuc2Zvcm0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTgzQkI1Qzg4MUQ1RDZGNDUwMDVBNzFGNCAvKiBBbGxEZXNjZW5kYW50
c0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkMyMjNDNTZGNzkwMDQ5RjdG
OSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRURBMTJE
NzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJBRDAwOThCM0ZBIC8qIEFs
dGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTY4OCw2ICsy
OTcyNSw4IEBACiAJCQkJMTEyRkIzNTIyMzlDMjNDNDAwODcwNTRBIC8qIERpc3BsYXlJbmxpbmVS
ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0N0U2MzIyNzc0MjVBMDBDN0JDQjAgLyogRGlz
cGxheUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJD
QSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MjcyM0FDQjNFMDAw
QTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyQjA5OTAxMjNDMDkyM0MwMDczQjlDQiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJ
dGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUw
MDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjk2
LDggKzMwMzM1LDEwIEBACiAJCQkJN0M3OTAzQjMxRjg2Rjk1QzAwNDYzQTcwIC8qIEltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE4RUFENEQxRkE5MTM4
MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCBp
biBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MjEyM0FDMkNENzAw
QTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0
MjAyM0FDMkI3NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2MzMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0UyMURE
MjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRvbkVs
ZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdBMSAv
KiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3NjcsNiAr
MzE4MDgsNyBAQAogCQkJCUE1NTRCNUYzMUUzODM5M0EwMDFENEUwMyAvKiBQZXJmb3JtYW5jZVVz
ZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTgxRkI1MTUyMEY5M0IwMDNBN0E3NSAv
KiBQZXJpb2RpY1dhdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RDVEQzJFMEY0MjNBNzMwMDhG
MjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAvKiBQaWN0dXJlSW5QaWN0
dXJlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkM4MkI3MjM2QTNGNkEwMDU1RDZD
NSAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUQyRjhF
MDYyMzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5kb3cuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzE3ODYsNiArMzE4MjgsOCBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFD
NCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3
N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMgLyogUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc1NEEyM0M5NjlERjAwNDE4ODFGIC8q
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzVDNDc2
ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwNTYyRjk2MTE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjU0NEY3ODkxNUNGQjJBODAwQUYzM0E4IC8qIFBsYXRmb3JtTG9jYWxl
LmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTYzLDYgKzMyMDA3LDggQEAKIAkJCQlCQ0VBNDg3NjA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RjJG
MDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVySW1hZ2VSZXNvdXJjZVN0
eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVDMkVBMjNCNEMwRjgwMEY2N0Q0MyAv
KiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZBODIzQzFGNThC
MDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTU2QzdDNEIy
MjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlcklubGluZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8qIFJlbmRlckl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDY0ZGZmMmQ5ODRlZjcyZGQ5ZWJhNTEwMjQw
NjEwZmMxOGUyMWQ5NDcuLmZhNGU0OTBhYjRkODFiZDZmZjEyOGUyNWE3NzY3NDFkOWVmNzc5OTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcApAQCAtOTIxLDggKzkyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSA9IGJ1
ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdl
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgp
LCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0g
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJl
Y3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKICAg
ICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjc4
NSwxMyArMjc4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShG
bG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgVW5hY2NlbGVyYXRlZCwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBpZiAoIWJ1ZmZlcikgewog
ICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEsIEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNpemUobG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJ
bnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgSW50U2l6ZShsb2dpY2FsV2lkdGgs
IGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCksIEludFBvaW50KCkpOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6OmNy
ZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4pIH0p
OwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGU1YjhhYjQ2OWNlYzRiYzA1OGM0MzdkMTk5
NTA0MGI1MDIxYzc0MzEuLjJmYTUzYWEzOGMxZmNjMTE3MzU2YWY5ZjE1NWQwMTVkNDQzN2YwY2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKQEAgLTExNiw3
ICsxMTYsNyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAgLy8gVHJhbnNmb3JtIElt
YWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQyNCk6IFRoaXMgYnVmZmVy
IHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgYXV0byB0
ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBh
dXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAgcmV0dXJuICZJbWFnZTo6
bnVsbEltYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFp
bnRDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAK
aW5kZXggZjRiNzcwN2U5N2E4ZmU1MWY4ZTI1Nzc1OGFkZTRiNmRkZmY1MDJlNS4uNjVkNDY0ZmRk
N2Q1ODhlYzczMTYxNmI3NDAzN2E4NDI4ZWVmMzFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50
Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCAxLCBDb2xvclNwYWNlOjpTUkdC
LCBudWxscHRyKTsKKyAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1fY29waWVkQnVm
ZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTAyLDcgKzEwMiw3IEBAIEltYWdl
KiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgICAgICBtX2NvbnRl
eHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAgbV9kZXN0aW5hdGlvbkdy
YXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBtX2NvcGllZEltYWdlID0gbV9jb3BpZWRC
dWZmZXItPmNvcHlJbWFnZShtX2NvcGllZEJ1ZmZlci0+ZmFzdENvcHlJbWFnZU1vZGUoKSwgUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZl
ci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMjNkOWIzNGU4NDhmNmQwMWQzNGE5ZGFm
ZmJhMzA1MGZjN2E3MTMxNi4uOTA5MzNlMjNhYzA4MTgwMzNjNzZmYzNlMjgyMTE5MTgwMTQ4NmM3
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNhbnZhc1Bh
dHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRl
ICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC02MCw2
ICs2MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICNpbmNsdWRl
ICJDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oIgogI2luY2x1ZGUgIk1lZGlhU3RyZWFt
LmgiCkBAIC0zNDUsOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkKIAogICAgIG1f
Y29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBkb2N1bWVu
dCgpLmluUXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1f
Y29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJl
cGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVu
ZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFz
LgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24oKTsKQEAgLTgxOCwzOSAr
ODIwLDI3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCiB7Ci0gICAgaWYg
KHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nKQotICAg
ICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0gdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQogewotICAgIGlmICh0
cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQotICAg
ICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXk7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwogfQogCiBTdHJpbmcgSFRN
TENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBp
ZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVy
biBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlzcGxheUxpc3QoKS5hc1RleHQoZmxhZ3Mp
OwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojpy
ZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNv
bnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0Lmdl
dCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
Km1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpICYmIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCktPmFzVGV4dChmbGFncyk7CiAg
ICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBAIC04ODUsMTEgKzg3NSwyNyBAQCB2b2lkIEhUTUxD
YW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgp
IHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gQWNjZWxlcmF0ZWQgOiBVbmFj
Y2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3VtZW50KCkudmlldygpICYm
IGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKS0+
aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNl
dHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3Vt
ZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworICAgIAorICAg
IC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRyYXdpbmcgb24gY2FudmFz
LgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKworICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc1JlbW90ZURyYXdpbmcpCisgICAgICAgIHJl
bmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlJlbW90ZTsKKyAgICBlbHNlIGlmICh1
c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNj
ZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAgICAgICAgcmVuZGVyaW5n
TW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAgIHNldEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2RlLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRy
YXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKwogI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRleHQtPmlzMmQoKSkgewog
ICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJlbWVudHMgaWYgYWNjZWxl
cmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2MDUwNjMyNi4uNDIxMzRh
MTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAKICAgICBi
b29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBtX3VzZXNEaXNwbGF5TGlz
dERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IG1fY29udGV4dDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3MzlhMWY1YzNiZTBlZTE3
MWYzNGY5NjNlMDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4N2E5MDJmZTY5MmIzMDk5
NTRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAgLTYxLDkgKzYxLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0
bWFwKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5k
ZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJl
bmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMg
UmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2Nl
bGVyYXRlZDsKICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdlQml0bWFwOjpjcmVhdGUo
SW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCmluZGV4
IGY3NDQ4NTEyMDAxNTc1YjRhZjRiYmEyNGVhYTU3YWJlNmEwNjQzYzkuLjc1NWYxMWVmODllMTE4
MWJlMDZkNWVhMmYwMDc4Njk2ZTM5YmU0ZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVl
bkNhbnZhcy5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VC
aXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpCiAgICAgICAg
ICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0ciB9IH07CiAKICAgICAg
ICAgaWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAgICAgIHJldHVybiB7IElt
YWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVy
YXRlZCksIHRydWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVh
dGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCksIHRydWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IHRha2VJbWFnZUJ1ZmZl
cigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMsNyBAQCB2b2lkIE9mZnNj
cmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8
fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldEltYWdlQnVmZmVyKEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6
OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcgQEAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0
CiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkKSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHZvaWQgT2Zm
c2NyZWVuQ2FudmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCmluZGV4IDg5ZDhmNDI0
M2IyYjkyZGZiY2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLjViMWIwN2VmNzczODQzMzYwOGU4ODJm
YjllM2JhOWEyYjFhNGM5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCkBAIC0xODA2LDcgKzE4
MDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmNhbGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUNvbXBvc2l0aW5nQnVm
ZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0dXJuIEltYWdlQnVmZmVy
OjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVy
UmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
IDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNv
bnN0IEludFJlY3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMTk5MCw3
ICsxOTkwLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRlcm4+PiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAgICAgcmV0dXJuIFJlZlB0
cjxDYW52YXNQYXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShCaXRtYXBJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4p
IH07CiAjZW5kaWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCkt
PnJlbmRlcmluZ01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkg
PyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5kZXJpbmdNb2RlOjpBY2Nl
bGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKQEAgLTIwNzUsMjEgKzIwNzUsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheQogICAgICAg
ICBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5yZW1vdmUodGhpcyk7CiB9CiAKLVN0cmluZyBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6
QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlY29yZGluZ0NvbnRleHQp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcmVjb3JkaW5nQ29udGV4dC0+ZGlz
cGxheUxpc3QuYXNUZXh0KGZsYWdzKTsKLX0KLQotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFn
cyBmbGFncykgY29uc3QKLXsKLSAgICBhdXRvKiBkaXNwbGF5TGlzdCA9IGNvbnRleHREaXNwbGF5
TGlzdE1hcCgpLmdldCh0aGlzKTsKLSAgICBpZiAoIWRpc3BsYXlMaXN0KQotICAgICAgICByZXR1
cm4geyB9OwotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+YXNUZXh0KGZsYWdzKTsKLX0KLQogY29u
c3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0YXRlLCAxPiYgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygpCiB7CiAgICAgcmVhbGl6ZVNhdmVz
KCk7CkBAIC0yMTU5LDEwICsyMTQ0LDEwIEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiAKIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKKyAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIHN4LCBzeSwgc3csIHNoKTsKIH0KIAotRXhjZXB0aW9u
T3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldElt
YWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBm
bG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKK0V4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQg
c3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5v
cmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNv
bnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGltYWdl
IGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkg
Y3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw3ICsyMTgxLDcgQEAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdl
RGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5ID0g
YnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwg
Y29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlRGF0YVJl
Y3QsIGNvb3JkaW5hdGVTeXN0ZW0pOwogICAgIGlmICghYnl0ZUFycmF5KSB7CiAgICAgICAgIFN0
cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVu
ZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcy4gUmVxdWVzdGVk
IHNpemUgd2FzICIpOwpAQCAtMjIxOCwxMCArMjIwMywxMCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBm
bG9hdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJ
bWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBk
aXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewotICAgIHB1dElt
YWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4LCBk
eSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKKyAgICBwdXRJbWFn
ZURhdGEoZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgZHgsIGR5LCBkaXJ0eVgsIGRp
cnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwg
ZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5
SGVpZ2h0KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lk
dGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52
YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0yMjQ1LDcgKzIyMzAsOCBA
QCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVzdE9mZnNldChzdGF0aWNf
Y2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAgIEludFJlY3QgZGVzdFJl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RP
ZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3Jk
aW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtID8gYnVm
ZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOworICAgIAorICAg
IGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0g
PT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCA/IGJ1ZmZlci0+bG9naWNhbFNpemUoKSA6IGJ1
ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RSZWN0KTsKQEAgLTIyNTMs
NyArMjIzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgc291cmNlUmVjdC5pbnRl
cnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpKTsKIAogICAg
IGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5
KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJ
bnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50
KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqZGF0YS5kYXRh
KCksIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50
UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOwogCiAgICAgZGlkRHJhdyhkZXN0
UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRv
dyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJm
NDk4YWU2NzIyMTg3ZjFiZWU5MWQuLjk2NDAwZDFhZjUwMGQ1OGUxZGQ5YmQxMTE3NDgyMTQxYTcy
YmI1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTIyMiw5ICsyMjIsNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXk7IH0KICAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KGJvb2wpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1Rl
eHRGbGFncykgY29uc3Q7Ci0gICAgU3RyaW5nIHJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3Bs
YXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0KICAgICB1c2luZyBEaXJlY3Rpb24gPSBDYW52
YXNEaXJlY3Rpb247CiAKICAgICBjbGFzcyBGb250UHJveHkgOiBwdWJsaWMgRm9udFNlbGVjdG9y
Q2xpZW50IHsKQEAgLTM3MSw4ICszNjgsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICB0ZW1wbGF0ZTxj
bGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQmLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvcik7CiAKLSAgICBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29u
c3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VCdWZmZXI6OkNvb3Jk
aW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0
eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKKyAgICBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEmLCBDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0
eUhlaWdodCk7CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMTRlYTM3ZDhkN2VhZmIwMWI1YzRjZTE5ZWJlNzZjNTE4
Y2ZjZDRhOC4uYjUxYjRkYmYxM2VlNTA2ZWI5NDk4YzQzZWY0NWM5NDRkZDczZTBhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQpOwog
CiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJp
bmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OwogI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+
IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZhc0Jhc2UmIGNhbnZhcywg
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0aW5ncykKQEAgLTY5LDcg
KzY5LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6
Y2FudmFzKCkgY29uc3QKIAogYm9vbCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmlzQWNj
ZWxlcmF0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2RlID09IEFj
Y2VsZXJhdGVkOworICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkOwogfQogCiB2b2lkIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6
c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VCaXRtYXApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwCmluZGV4IDE3ZWFhNWQxNWI3MGNlMThhMGFmNTZkMWNiZjJiMjI5NmI5MmI2NTIuLjE1
ZmMzYTU1NWZmNjJmNWY0MmJkNjJlNWRkY2ZhNjZiZGE3YWJlZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CkBAIC0zOTM5LDcgKzM5MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTAogICAgICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPElt
YWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAg
dGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2Us
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVy
biB7IH07CkBAIC00MDYxLDcgKzQwNjEsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTAogICAg
ICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlLCBT
b3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgdmlk
ZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwg
eG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
ICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRl
eFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDUwMCw3ICs0NTAw
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAgICYmIHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAgICAgIGF1dG8gdGV4dHVy
ZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8
fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAgICAgICAgIGlm
IChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJnZXQs
IHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXItPmNvcHlU
b1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1h
dCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewogICAgICAgICAg
ICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSwgdHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtNDUwOCw3ICs0
NTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgfQogCiAgICAgICAgIC8v
IE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZm
ZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAg
IFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRleEltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBH
cmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQ1NzcsNyArNDU3
Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJ
bnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
OwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwg
IXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKICAgICAgICAgICAgICAgICBJbWFn
ZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICAgICAgICAgICAgICBpZiAo
YnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCks
IHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVj
dCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Zs
aXBZKSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQo
KSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAg
ICAgfQpAQCAtNDYyMiw3ICs0NjIyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgSW1hZ2VCdWZmZXI6
OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlk
ZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAg
ICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIHRleEltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdl
LmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ2NDcsNyArNDY0Nyw3IEBAIFJlZlB0
cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJ
bWFnZSYgaW1hZ2UsIGludCB3CiAgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBp
bWFnZS5zaXplKCkpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIHNpemUp
OwogICAgIGJ1Zi0+Y29udGV4dCgpLmRyYXdJbWFnZShpbWFnZSwgZGVzdFJlY3QsIHNyY1JlY3Qp
OwotICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1v
ZGUoKSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
IH0KIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTYzNDMsNyArNjM0Myw3IEBAIEltYWdlQnVmZmVy
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1
ZmZlcihjb25zdCBJCiAgICAgfQogCiAgICAgLy8gRklYTUUgKDE0OTQyMyk6IFNob3VsZCB0aGlz
IEltYWdlQnVmZmVyIGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkPwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
VW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIEFTU0VSVChtX2J1
ZmZlcnMuc2l6ZSgpID4gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRv
dy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9N
ZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggMGNiZDBhM2NjZTAzOTI5NWI0OTI1Y2UzMWEw
NTRlMWY2OTEwZDkzMC4uNmVhNzkyMTRmOGE2ZTAwNWIwYmUyNDQ5YTJkZDY3Mjg4ZmMzYWMyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVu
dHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcApAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUmVmUHRyPEltYWdlPiBNZWRpYUNvbnRyb2xU
ZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tSZXByZXNlbnRhdGkKICAg
ICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPnNpemUo
KSk7CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1
bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFVu
YWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwogICAg
IGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZhMWZiZmE3ZWZmZDdhZjUuLjYzN2U3
N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgyMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5j
cHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1cnNvckhpZGRlblVudGls
TW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKICAgICBtX2NsaWVudC5zZXRD
dXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3VzZU1vdmVzKTsKIH0KIAor
UmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgbV9yZW5kZXJpbmdCYWNr
ZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIHJldHVybiBtX3Jl
bmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRmb3JtRGlzcGxheUlEIENocm9tZTo6ZGlz
cGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5SUQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
aAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2NjhkNDQ3MGVjNTEzNjFhZjQ5Li40NjhjMTcw
MDhhYWZhNDdmYWEyMzdjNzRmZjQ4ZjQwMjMwZGRiYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKQEAg
LTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYp
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wp
IG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBv
dmVycmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNz
ZWQgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggNjI2MTdmNzhmM2UyZjA0NzQ4
YWE1OGFkYWViOGZhMzBiZDcxMmFkNC4uYzk5ZDM2YWZmYWE4NjVhOWU2YTk1ZGM1MzViNDg3NDhj
N2VlM2UxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21h
aW4uaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDMs
NiArMzA0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9u
aXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCB7IHJl
dHVybiBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBoaWNzTGF5
ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9v
dEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKaW5kZXggMGE0NGMyZmEx
YTA5NDk3Y2ZkZjU1ODg4MzJmZmRmZjEwMjMzMzBlMS4uZTI0ZDkyZTZmM2U2MWQzOGE5YjI0NDg1
ZjRkMTNkZTUwZTUzM2EyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNu
YXBzaG90dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNu
YXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmIGZyYW1lLCBjb25zdCBJbnRSZQogICAgIGlm
IChvcHRpb25zICYgU25hcHNob3RPcHRpb25zUGFpbnRXaXRoSW50ZWdyYWxTY2FsZUZhY3RvcikK
ICAgICAgICAgc2NhbGVGYWN0b3IgPSBjZWlsZihzY2FsZUZhY3Rvcik7CiAKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VS
ZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Qu
c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIGJ1ZmZlci0+Y29udGV4
dCgpLnRyYW5zbGF0ZSgtaW1hZ2VSZWN0LngoKSwgLWltYWdlUmVjdC55KCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1MzMwOTE2MTlkYzY0M2Y4
NzI5MDljYjcxZjc4MjhlZjg1YmJjLi4yMTA3YTllMWU5OWNmMzUxZDllNjE2NjgwNWM0YTU2MzNh
ZTQ3ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcApAQCAt
Mzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNjcmVlbnNob3QoSlNDOjpK
U0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAgICAgICAgICAgICAgICAg
YXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNvdXJjZVNpemUsIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAgICAgICAgIEludFJlY3Qg
c291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRhKCksIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwgSW50
UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLT5kYXRh
KCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAgICAgICAgICBkYXRhVVJM
ID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmluZGV4IDlhM2E4YmY5NDNhZDY1ODZkYTQz
Y2VkMGRhN2U2M2YwNTVhYjlhNWQuLjU1YTcwMDVlNDI4NWFiNDc3ZjkzOWJlOGNlNmFlYWI1NjIw
NmUxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCkBAIC0xMyw3ICsxMyw5IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJEYXRhQ2Fpcm8uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9SZWZQdHJDYWlyby5oCiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9I
b3N0V2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKaW5kZXgg
MmNmZWNhZGMyNGQ5ODJhODYxNjM3NGI3NmEwZTRmYjBmZmY3YTlkNC4uZjVmMjE3Y2NkODQwNjA4
MDAyNTVjMjAzZDIyMTdjYWVjZTBjZTI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vSG9zdFdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5k
b3cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIzLDE0ICsyMywxNCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBI
b3N0V2luZG93X2gKLSNkZWZpbmUgSG9zdFdpbmRvd19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsKK2Ns
YXNzIFJlbmRlcmluZ0JhY2tlbmQ7CiAKIGNsYXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEhvc3RXaW5kb3cpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY0
LDYgKzY0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVu
dGlsTW91c2VNb3Zlcyhib29sKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFJlbmRlcmluZ0JhY2tlbmQq
IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCA9IDA7CisgICAgCiAgICAgdmlydHVhbCB2
b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwogCiAgICAgdmlydHVhbCBQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1ICs3NywzIEBAIHB1YmxpYzoKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhvc3RXaW5kb3dfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKaW5kZXggNDIxZGZiZDk1NzU0YzQ2
Mjc1N2I3OGRiZmE0MTAyNTQzMmFmMGI3ZC4uZDIzYmIwMjNlN2Q3ODQwYWViYWE0MTRmOTlmMGJj
MGMxZjJjZDI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CkBA
IC0zMCw3ICszMCwxMCBAQCBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFkaWVudENhaXJvLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0R0xDYWlyby5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAotcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9OYXRpdmVJ
bWFnZUNhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkMWNhZWY4NTQxZGVlMDYyYmZlMDU0MTZjZGEyZjJh
N2Y3OTI2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNz
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90IHsKKyAgICBQcmVtdWx0aXBsaWVkLAor
ICAgIFVucHJlbXVsdGlwbGllZAorfTsKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFh
YjQ2ODY3NjhmMWEyODJkNTg4MWM5Mzk3OTQ2ZDViYTIwMDY5MAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgOiBwdWJsaWMgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4g
LCBwdWJsaWMgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlUGh5
c2ljYWxJbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworCitw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAgICBy
ZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlz
dEltYWdlQnVmZmVyPihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3csIHNpemUpOworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlx
dWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5kLCBjb25zdCBGbG9hdFNpemUmIHNpemUp
CisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2VuZCkp
CisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAg
IH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplKQor
ICAgICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9
CisKKyAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgb3Zl
cnJpZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpyZXBsYXlEaXNwbGF5TGlzdChCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsK
KyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IGY1ODZkZDRiMmFm
OTFmNDU2NTUzNWE3MDI5MzkyM2FmMmJhYWRiYTIuLjM1YmQ1OGMzZDEyZmY4NGMwZTY2NDJmODE4
MjcwOTljZTgzN2UyODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0zNTAsNyArMzUwLDcgQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRlZENvbnRleHQoYm9vbCk7CiAjZW5kaWYK
ICAgICBib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgY29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/
IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsgfQorICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc1R5cGVzLmNwcAppbmRleCA0NThhZTcyZjJhZTAyNTYyNDc2OGU4NzlkYmQ0OTY5NjRiNDkx
YjE4Li4wMGJlMGZlYTA2MDU1Y2EzMWIyYzg4NzRkZDM3NGVlYTFkNDI4NDY4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcApAQCAt
MjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzVHlw
ZXMuaCIKIAorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKKwogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4IGNlZWExZGE0MGViMzJmZjc4YTFlNzVl
MTdiZmUwMDkyMDFiNzZmMTIuLjI2YTEyZGUzYmU0YWM2Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3OGFh
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
VHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJSZW5k
ZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUuaCIKICNpbmNsdWRlIDx3dGYvRW51bVRy
YWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0xMjIsMTcgKzEyMyw2IEBAIGVu
dW0gVGV4dEFsaWduIHsKICAgICBSaWdodFRleHRBbGlnbgogfTsKIAotZW51bSBSZW5kZXJpbmdN
b2RlIHsKLSAgICBVbmFjY2VsZXJhdGVkLAotICAgIFVuYWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1
ZmZlciwgLy8gVXNlIHBsYWluIG1lbW9yeSBhbGxvY2F0aW9uIHJhdGhlciB0aGFuIHBsYXRmb3Jt
IEFQSSB0byBhbGxvY2F0ZSBiYWNraW5nIHN0b3JlLgotICAgIEFjY2VsZXJhdGVkCi19OwotCi1l
bnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gewotICAgIFByZW11bHRpcGxpZWQsCi0g
ICAgVW5wcmVtdWx0aXBsaWVkCi19OwotCiBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKFdl
YkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3JlOjpCbGVuZE1vZGUpOwogU3RyaW5nIGJs
ZW5kTW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsKIGJvb2wgcGFyc2VCbGVuZE1vZGUoY29u
c3QgU3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7CkBAIC0xNDMsNyArMTMzLDYgQEAgV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IFdlYkNvcmU6OkNvbXBvc2l0ZU8KIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVsZSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUNhcCk7CiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
TGluZUpvaW4pOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmNwcAppbmRleCBjMDEyNjM3MGNiODY1OTI3YTMyYmYxMWY2MTQ4NmQ3MWFmN2I0NzU4
Li40ZTJiZTcxYzc0MWM1NWY1NmMwYWQwNDZhNzk3ZTUwYTA5NzE4OGI5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjgsMzggKzI4LDQ0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1h
Z2VCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlICJS
ZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0
IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owotc3RhdGljIGNvbnN0IGZsb2F0IE1heENs
YW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQor
eworICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhv
c3RXaW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cit9CiAKLVdURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChJbWFnZUJ1ZmZlcik7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIHJldHVybiBjcmVhdGVDb21w
YXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOworfQogCi1zdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0
aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZh
bHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1
ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhv
c3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworCisg
ICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXpl
KHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQp
OworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Ly8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNv
bnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6
ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi0jaWYgVVNFKERJUkVDVDJEKQotc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNz
ID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IElt
YWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9k
ZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2Vz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1
cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCisKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVk
TGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENs
YW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwogCiBib29sIEltYWdlQnVmZmVyOjpzaXpl
TmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CkBAIC0xMDUsOTcgKzExMSwx
MiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUo
cmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0K
LSNlbmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJ
bWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QK
LXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29s
b3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFj
ZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0
IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRz
dENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0g
Q29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNw
YWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3Rk
OjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAv
IDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9u
ZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4
X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1
cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9y
U3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkr
KykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAg
ICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICog
MjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAg
IH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7
Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZl
cjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5h
bmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFy
cmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICgh
c3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVs
QXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9m
ZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4
ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAg
ICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0g
ICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsK
LSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0
ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFy
cmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5
KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRk
IHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5h
bmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7
Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRm
b3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVy
Ojpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51
bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdl
QnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8g
RW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2Nh
bGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBw
aXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0
LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsK
QEAgLTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAKICAgICBJbnRT
aXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUocmVjdC5z
aXplKCksIGNvbnRleHQpOwogCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAg
ICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBidWZmZXItPmNv
bnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOwotICAgIHJl
dHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBp
ZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgSW50U2l6
ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNv
bnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1
ZmZlcikKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFp
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICAvLyBTZXQgdXAgYSBj
b3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBi
dWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1
ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29u
dGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9k
ZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCi19Ci0KLUludFNpemUg
SW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1
ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2Ug
bmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQu
Ci0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3Rvcigp
KTsKKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJl
Y3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQogCi1ib29sIEltYWdl
QnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIHJl
dHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQuc2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29u
dGV4dCgpLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9O
YXRpdmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAorUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewot
ICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdD
IHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNj
ZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6
ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIHJldHVy
biA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwor
ICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24p
OwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit2
b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gMDsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJh
d0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CiB9Ci0jZW5k
aWYKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggM2JkZWU0ZWUwMGVkMTdhZTM0M2IyZjZh
OGRkZDAwOTM4OWMyZTZiZi4uYzYwYjc1ZDRmYmZiYTVkMmJkNDUwYjEzYTc1MzEzMGZjNmJjY2Fm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CkBAIC0yNywxNzAgKzI3LDgxIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbWFnZVBhaW50aW5nT3B0aW9ucy5o
IgotI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1v
cnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRl
eHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKLWNsYXNzIEltYWdlOwotY2xhc3Mg
SW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFzcyBJbnRSZWN0OwotY2xhc3MgSG9zdFdp
bmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKLSAgICBDb3B5QmFja2luZ1N0b3JlLCAv
LyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3QgdGhlIGNvcHkuCi0gICAg
RG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBj
b3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24gewotICAgIE5vLAotICAg
IFllcywKLX07CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworY2xhc3MgRHJhd2luZ0NvbnRleHQ7
Cit9CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0VY
UE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQpOwotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xhc3MgSU9TdXJmYWNlOwogcHVibGljOgot
ICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVyIG9uIGFsbG9jYXRpb24gZmFpbHVyZS4K
ICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cq
ID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBS
ZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyog
PSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21w
YXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkgcmVjdCBmcm9tIHRoaXMgYnVmZmVyIGlu
dG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJl
Y3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0Nv
bnRleHQmKTsKIAotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRo
IHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRpb24gZm9yIGRyYXdpbmcgaW50byB0
aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBD
b2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKLSAgICBib29sIGlzQ29tcGF0aWJs
ZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpIGNvbnN0OwotCi0gICAgV0VCQ09S
RV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7Ci0KLSAgICAvLyBUaGUgYWN0dWFsIHJlc29sdXRpb24g
b2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUoKSBj
b25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KLQotICAgIEZsb2F0U2l6ZSBzaXplRm9y
RGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSkgY29uc3Q7Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBp
cyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgorICAgIHN0YXRpYyBib29s
IHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBib29sIHNp
emVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAg
IHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3Rh
dGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNj
YWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Q7
CisgICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXpl
JiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKTsKLSAgICAvLyBHaXZlIGhpbnRzIG9uIHRoZSBmYXN0ZXIgY29weUltYWdlIE1vZGUs
IHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZSBpZiBpdCBzdXBwb3J0cyB0aGUgRG9udENvcHlC
YWNraW5nU3RvcmUgYmVoYXZpb3IKLSAgICAvLyBvciByZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBp
ZiBpdCBkb2Vzbid0LiAgCi0gICAgc3RhdGljIEJhY2tpbmdTdG9yZUNvcHkgZmFzdENvcHlJbWFn
ZU1vZGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVm
YXVsdDsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3RlbSB7IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtIH07CisgICAgdmlydHVhbCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29u
dGV4dCgpID0gMDsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBs
aWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51
bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7
CisgICAgdmlydHVhbCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQqIGRyYXdpbmdDb250ZXh0
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdDb250
ZXh0KCkgeyB9CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pOworICAg
IHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50
U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCA9IDA7CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKCk7CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVy
biAwOyB9CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRv
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBX
VEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Q7CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0
cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CiAK
LSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsK
LSNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZl
cihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
IAotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JT
cGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7
Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
ID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50
JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAg
c2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0OworICAgIHN0YXRpYyBOYXRpdmVJbWFn
ZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotICAgIC8vIEZJWE1FOiBj
dXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhvZCBoYXZlIHRoZSByZXN0cmljdGlv
biB0aGF0IHRoZXkgb25seSB3b3JrCi0gICAgLy8gd2l0aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Ig
b3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5cGUuCi0gICAgYm9vbCBjb3B5VG9Q
bGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZv
cm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjb252
ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFj
ZSkgPSAwOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcg
dGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNs
aXBwZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXpl
Jik7Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwg
RmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25z
dCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZs
b2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBl
ZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgPSAwOwog
Ci1wcml2YXRlOgotI2lmIFVTRShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQg
YmUgbGFyZ2VyIHRoYW4gdGhlIGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxl
cgotICAgIC8vIGltYWdlLCBjcm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkg
Y29uc3Q7Ci0gICAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUlt
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0
KCkgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0
OwotICAgIHN0YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25z
dDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3Qo
MCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtID0gQ29v
cmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IEludFBvaW50KCksIENvb3JkaW5hdGVT
eXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSA9IDA7CiAKLSAgICBzdGF0aWMgdm9p
ZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
PSB7IH0pOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQ
bGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOworICAgIAor
cHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgaW5saW5lIHZv
aWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLQotICAgIGZyaWVuZCBjbGFzcyBH
cmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNzIEdlbmVyYXRlZEltYWdlOwotICAgIGZy
aWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgTmFt
ZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBHcmFkaWVudEltYWdlOwot
ICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdlOwotCi1wcml2YXRlOgotICAgIEltYWdl
QnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgSW50U2l6ZSBtX2xv
Z2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgLy8gVGhpcyBj
b25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhlIGdpdmVuIG91dC12YXJp
YWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJu
IGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENHKQotICAgIEltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNl
UmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0g
ICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OwotI2Vs
aWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgPSAwOworICAg
IHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgPSAwOwogfTsK
IAotI2lmIFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci1WZWN0b3I8dWludDhf
dD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpOwotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjQ1YzliN2Q1YmNiMDA0OTZiZTdmMzc5ODNiMmQwOTI4
YjRkYzUzMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyODggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNp
bmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJC
YWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fbG9naWNhbFNpemUobG9naWNhbFNpemUpCisgICAg
LCBtX2ludGVybmFsU2l6ZShpbnRlcm5hbFNpemUpCisgICAgLCBtX3Jlc29sdXRpb25TY2FsZShy
ZXNvbHV0aW9uU2NhbGUpCisgICAgLCBtX2NvbG9yU3BhY2UoY29sb3JTcGFjZSkKK3sKK30KKwor
SW50U2l6ZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBGbG9hdFNpemUg
c2NhbGVkU2l6ZSA9IHsgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKSwgY2Vp
bGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBpZiAoc2NhbGVkU2l6
ZS5pc0VtcHR5KCkgfHwgIXNjYWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBJbnRTaXplKHNj
YWxlZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVz
UGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5hbFNp
emUud2lkdGgoKSk7CisgICAgaWYgKGJ5dGVzUGVyUm93Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVt
Qnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLmhl
aWdodCgpKSAqIGJ5dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAgcmV0dXJuIGludGVybmFsU2l6ZTsKK30K
KworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdl
KCkKK3sKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
K30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lk
IEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGRyYXcoZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQoreworICAgIEludFJlY3QgbHVt
aW5hbmNlUmVjdChJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSk7CisgICAgYXV0byBz
cmNQaXhlbEFycmF5ID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7Cisg
ICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBw
aXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNp
Z25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4
ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVt
KHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsK
KyAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEp
OworICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsg
Mik7CisgICAgICAgIAorICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAu
NzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKKyAgICAgICAgc3JjUGl4
ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7CisgICAgfQorCisgICAgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnNyY1BpeGVs
QXJyYXksIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpLCBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkg
Y29uc3QKK3sKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7
CisgICAgYXJlYSAqPSBzcmNSZWN0LndpZHRoKCk7CisgICAgYXJlYSAqPSBzcmNSZWN0LmhlaWdo
dCgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5p
dGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRh
dGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3Qg
PSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgc3JjUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oYnVmZmVyUmVjdCwgc3JjUmVjdCk7CisgICAgZGVzdFJlY3QgPSB7
IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9OworCisgICAgaWYgKHNy
Y1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WCgtc3JjUmVjdC54KCkpOworCisg
ICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdC55
KCkpOworCisgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKKyAgICAg
ICAgYXJyYXktPnplcm9GaWxsKCk7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lk
IEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25z
dAoreworICAgIEludFJlY3QgZGF0YVJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1NpemUg
fTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgc3JjUmVjdCk7
CisgICAgCisgICAgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3Zl
QnkoZGVzdFBvaW50KTsKKyAgICAKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBk
ZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNS
ZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVj
dC55KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBt
X2ludGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVyc2VjdChidWZmZXJSZWN0KTsKKwor
ICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgaWYgKHNyY0NvbG9yRm9y
bWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihz
cmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVs
IGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07
CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3Jj
UGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9
IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAg
IGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhl
bCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBk
ZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQ
aXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVs
WzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbM10g
PSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBTd2FwIHBpeGVs
IGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJd
ICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7
CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5
VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0
LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1
aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOwor
ICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBs
aWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9y
bWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChz
cmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBd
ID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxb
MV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhl
bFsyXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBp
eGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3dh
cCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQ
aXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4
ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVs
WzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQor
Cit0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90
KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQ
aXhlbHNVbmFjY2VsZXJhdGVkKAorICAgIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBDb2xvckZvcm1hdCBk
ZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJv
d3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gc2l6
ZS53aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsr
eSkgeworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4ICs9IDQp
CisgICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3NbeF0sIGRl
c3RDb2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRl
c1BlclJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1h
dCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZv
cm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3Qg
SW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFs
cGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgY29weUltYWdlUGl4ZWxz
VW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVBy
ZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVy
Um93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3Ms
IHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29s
b3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RC
eXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0sIHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNS
ZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgIHNy
Y1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50UmVjdCBzcmNS
ZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkgPSBjcmVh
dGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJl
Y3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2Fs
ZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0
UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworICAgIAorICAg
IHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBz
cmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xpcHBl
ZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAg
ICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBk
ZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNp
emUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkKK3sK
KyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVj
dFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0
ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNy
Y1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2Nh
bGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1Jl
Y3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VE
YXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0
Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIAorICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RS
ZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXpl
U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNy
Y1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICog
NDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9y
bWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQwODYzMWRhYjFkZTAwNjhjODFjNDM4MzE3
NjY5YzRjMTg0NmQ0MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2Uu
aCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEhvc3RX
aW5kb3c7CitjbGFzcyBJbWFnZTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAgICBDb3B5
QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBhZmZlY3Qg
dGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBkcmF3cyBt
YXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29sdXRpb24g
OiB1aW50OF90IHsKKyAgICBObywKKyAgICBZZXMsCit9OworCitlbnVtIGNsYXNzIENvbG9yRm9y
bWF0IDogdWludDhfdCB7CisgICAgUkdCQSwKKyAgICBCR1JBCit9OworCitlbnVtIGNsYXNzIENv
b3JkaW5hdGVTeXN0ZW0gOiB1aW50OF90IHsKKyAgICBMb2dpY2FsLAorICAgIEJhY2tpbmdTdG9y
ZQorfTsKKworY2xhc3MgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckJhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50ZXJuYWxTaXplKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICB2aXJ0dWFsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hDb250ZXh0KCkgeyB9CisgICAgCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW50ZXJuYWxTaXplOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9y
U3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZm
aW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0
ICogbV9pbnRlcm5hbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmlydHVhbCBzaXpl
X3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisgICAgdmlydHVh
bCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZv
aWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJik7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNw
YWNlLCBDb2xvclNwYWNlKSB7IH0KKworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3QgeyByZXR1
cm4geyB9OyB9CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pID0g
MDsKKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4
dHVyZShHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBJ
bWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOwor
CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7IHJl
dHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgQ29sb3JGb3Jt
YXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OlJHQkE7
IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisg
ICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93
cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90
KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0
ZW0sIHZvaWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtLCB2b2lkKiBkYXRh
KTsKKworICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKKyAgICBJbnRTaXplIG1faW50ZXJuYWxT
aXplOworICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xv
clNwYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZjg5ZWMwZDM2ZmVmYmQxMmFiZTU0M2MzZjIwMzRmNjE1OGIzZDJjZi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBA
IC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgotI2VsaWYg
VVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgiCi0jZWxp
ZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ3NzJjNjk0ZDM4MWFjYmM5MjYwZGJiNDdlOWZlMjcwMWU0
Mjc2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBJbWFn
ZUJ1ZmZlciB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBl
ID0gUGh5c2ljYWxJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYmFzZV9vZjxJbWFnZUJ1ZmZlciwgSW1hZ2VC
dWZmZXJUeXBlPjo6dmFsdWUpOworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6
Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cisg
ICAgICAgIGlmICghYmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVy
VHlwZShXVEZNb3ZlKGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcihzdGQ6
OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2JhY2tlbmQo
V1RGTW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgUGh5c2ljYWxJbWFnZUJ1ZmZl
cigpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQo
KSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNr
ZW5kKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAg
IHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYXNlVHJhbnNm
b3JtKCkgOiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCkt
PmxvZ2ljYWxTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQo
KS0+aW50ZXJuYWxTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNr
ZW5kKCktPnJlc29sdXRpb25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9yeUNvc3Qo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5k
KCktPm1lbW9yeUNvc3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgp
LT5leHRlcm5hbE1lbW9yeUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3Rv
cmUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVm
ZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBi
YWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+
KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2Vu
ZC0+Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBi
YWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdD
b250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRp
b25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBz
aW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVz
ZXJ2ZVJlc29sdXRpb246Ok5vKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZl
UmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQor
CisgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5jb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9y
U3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNl
KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAg
IGJhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVzdENvbG9yU3Bh
Y2UpOworICAgICAgICB9CisgICAgfQorCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2Fz
dDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVS
ZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAg
ICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4
dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8
dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2Fz
dDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4geyB9OworICAgIH0KKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tl
bmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJ
bWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBi
YWNrZW5kLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCByZWN0LCBjb29yZGluYXRlU3lzdGVt
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgZGF0YVNpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwg
Y29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQt
PnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IGJhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVy
ZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9i
YWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFiY2YxZTIwYTg3ZWQyOWZhYjhlMDQ2Y2JiMzU0ZjJhMzU5NjMzMmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJF
Q1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNF
KENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgi
CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorI2luY2x1ZGUgIkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQor
dXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybVVu
YWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVm
ZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOworI2VuZGlm
CisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxp
ZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVy
QmFja2VuZCA9IFVuYWNjZWxlcmF0ZWRQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRp
ZgorCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0
Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2Nl
bGVyYXRlZEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdEltYWdl
QnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNWI4MDA2ZDk3OTUxNDU2MTcwMDliMzQ5NmUxMmIwNjUzZGFl
YmE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2VsaWYgVVNFKERJ
UkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBV
U0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOworI2VsaWYgVVNFKERJUkVDVDJE
KQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJE
QmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Jl
bmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkYTBhZmE3OWQ3NDYxY2Q5ZjJmMTA5MTM1
MGM4MTVkYmJiZDdiYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQorewor
ICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbmRlcmlu
Z0JhY2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQmIFJlbmRlcmluZ0JhY2tlbmQ6OnNo
YXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+
PiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkgfTsK
KyAgICByZXR1cm4gaG9zdFdpbmRvdyAmJiBob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNr
ZW5kKCkgPyAqaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIDogKnNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2gg
KHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgor
ICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVu
ZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQ6
CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRp
c3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VC
dWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41NzFiOTJkNTg0ZmVlOGY0YWY3YTg1OTY0ZWFhYmMxY2VkNTAx
NzMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9y
U3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2Rl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIElt
YWdlQnVmZmVyOworY2xhc3MgSW50U2l6ZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgUmVuZGVy
aW5nQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJp
bmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIHN0YXRpYyBSZW5kZXJpbmdCYWNrZW5kJiBzaGFy
ZWRSZW5kZXJpbmdCYWNrZW5kKGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7CisgICAgCisg
ICAgdmlydHVhbCB+UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgUmVuZGVyaW5nQmFja2Vu
ZCgpID0gZGVmYXVsdDsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ01vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iY2MzOTg4ZmQ2NDNkYTcwNDQxZTUz
MzhiMTZhMTFiMDU0NjMxMzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIHsKKyAgICBBY2Nl
bGVyYXRlZCwKKyAgICBVbmFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQs
CisgICAgRGlzcGxheUxpc3QsCisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgUmVtb3RlCit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggNDA0MWIzZjgxMDc2NzhjNTZhY2RiMGM1
MzNhMDk4NmY3ZTY0NTU5Ni4uNjEyZjllOWQyMmQ2NzFmNjhkNTY1ZjEyNDQ5NGVjMzMyZDVmOTQ1
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogICAgICAgICBjbGVhclNjcmF0Y2hCdWZmZXIo
KTsKIAogICAgICAgICAvLyBTaGFkb3dCbHVyIGlzIG5vdCB1c2VkIHdpdGggYWNjZWxlcmF0ZWQg
ZHJhd2luZywgc28gaXQncyBPSyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJh
dGVkIGJ1ZmZlci4KLSAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
cm91bmRlZFNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgICAgICBtX2ltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogICAgIH0KIApAQCAt
NTkzLDcgKzU5Myw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93KGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKIHZvaWQgU2hhZG93Qmx1
cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNv
bnN0IEZsb2F0Um91bmRlZFJlY3QmIHNoYWRvd2VkUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3Bl
cnRpZXMmIGxheWVySW1hZ2VQcm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRy
YXdCdWZmZXIpCiB7Ci0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShl
eHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVy
YXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBh
bmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47
CiAKQEAgLTYyMSw3ICs2MjEsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdAogCiB2b2lkIFNo
YWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRSZWN0JiBmdWxsUmVjdCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYg
aG9sZVJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJvcGVydGll
cywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1dG8gbGF5
ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJ
bWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9w
ZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlm
ICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02ODUsNyArNjg1LDcgQEAgdm9p
ZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGNvbnMKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1ZmZl
cjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UKICAg
ICBVTlVTRURfUEFSQU0obGF5ZXJJbWFnZVByb3BlcnRpZXMpOwotICAgIGF1dG8gbGF5ZXJJbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBVbmFjY2VsZXJhdGVk
LCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRl
bXBsYXRlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgYXV0byogbGF5
ZXJJbWFnZSA9IGxheWVySW1hZ2VCdWZmZXIuZ2V0KCk7CiAjZW5kaWYKIApAQCAtNzM5LDcgKzcz
OSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyhjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uCiAjaWYgVVNFKENHKQogICAgIGF1dG8qIGxh
eWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRl
bXBsYXRlU2l6ZSk7CiAjZWxzZQotICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxh
eWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IGxheWVySW1h
Z2VCdWZmZXIuZ2V0KCk7CiAjZW5kaWYKIApAQCAtODg0LDEyICs4ODQsMTIgQEAgdm9pZCBTaGFk
b3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJ
bnRTaXplJiB0ZW1wbGEKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJ
bnRQb2ludCgpLCB0ZW1wbGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFn
ZS5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRh
ID0gbGF5ZXJJbWFnZS5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBibHVyUmVjdCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGJsdXJMYXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXpl
KCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgq
bGF5ZXJEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3QsIHsgfSk7CisgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVy
UmVjdC5zaXplKCksIGJsdXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29s
b3JTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRl
bXBsYXRlU2l6ZSkKQEAgLTkxMiw3ICs5MTIsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdTaGFk
b3dMYXllcihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50UmVjdAog
CiAgICAgYWRqdXN0Qmx1clJhZGl1cyh0cmFuc2Zvcm0pOwogCi0gICAgYXV0byBsYXllckltYWdl
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRp
ZXMtPmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZSA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVz
LT5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxh
eWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKaW5kZXggNjJj
NzlmMTNhMWM3MjRkZGYzN2E5NDY0ZjgzMmNkNmY3NzllMDdkOC4uODBhMDI1ZThlNmNhODhhNmI0
N2ZjN2ZkYzVlNWM1ZTI1MGY5ZmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCkBAIC0xNzQsNyAr
MTc0LDcgQEAgZW51bSBQYXRoRHJhd2luZ1N0eWxlIHsKIAogc3RhdGljIHZvaWQgZHJhd1NoYWRv
d0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdl
QnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFBvaW50JiBsYXllck9yaWdpbiwgY29uc3Qg
RmxvYXRTaXplJiBsYXllclNpemUsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsK
LSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFnZSgpKSB7CisgICAg
aWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZvcm1Db250ZXh0LCBz
dXJmYWNlLmdldCgpLCBGbG9hdFJlY3Qocm91bmRlZEludFBvaW50KGxheWVyT3JpZ2luKSwgbGF5
ZXJTaXplKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgbGF5ZXJTaXplKSwgeyBzaGFkb3dTdGF0
ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hh
ZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTgyLDcgKzE4Miw3IEBAIHN0YXRpYyB2b2lkIGRy
YXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBJbWFnZUJ1CiAvLyBGSVhNRTogVGhpcyBpcyBtb3N0bHkgc2FtZSBhcyBkcmF3U2hhZG93TGF5
ZXJCdWZmZXIsIHNvIHdlIHNob3VsZCBtZXJnZSB0d28uCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93
SW1hZ2UoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXIm
IGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJm
YWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7
CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCks
IGRlc3RSZWN0LCBzcmNSZWN0LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9y
IH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBA
IC0xOTEsNyArMTkxLDcgQEAgc3RhdGljIHZvaWQgZmlsbFNoYWRvd0J1ZmZlcihQbGF0Zm9ybUNv
bnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBzYXZlKHBs
YXRmb3JtQ29udGV4dCk7CiAKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRp
dmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJ
bWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIGNsaXBUb0ltYWdlQnVmZmVyKHBs
YXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KGxheWVyT3JpZ2luLCBleHBh
bmRlZEludFNpemUobGF5ZXJTaXplKSkpOwogCiAgICAgRmlsbFNvdXJjZSBmaWxsU291cmNlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDliMDI1ZTE0NzY3MzUyZTE0YWQ0OGY4
NjdiMDQ1ODVlZTgwMzQxMzQuLjRlMWJmMmI0MzY3ZjM0MzU5ZDg1NGViNzhjMjIwMmRmNTdiMjc0
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTI2OCw3ICsyNjgsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZl
ciwgY29uc3QgRmxvYXRSZWN0JiBkZQogICAgIH0KIAogICAgIEFTU0VSVChoYXNQbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQor
ICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKCpwbGF0Zm9ybUNv
bnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fp
cm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmNwcAppbmRleCA5Yzc2ZTI5MTJmODFmYzk0YWRiNWM0ODQ0NTI3MTM0
NjBkY2ZiMjhmLi4yOWEwZWM0OTk0ZjM2MTVkODdiMWJiNGUxZTMzZDc2ODgwN2NiYTVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRJbXBsQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKQEAgLTQxMSw3ICs0MTEsNyBAQCBJ
bnRSZWN0IEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcEJvdW5kcygpCiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQogewotICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlw
VG9JbWFnZUJ1ZmZlcihtX3BsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3Qp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwNzk2NTdlM2IyOTllZDZlYjRjNWNjMzVkYjk1MzI0NTc4Nzc3NWI5Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NzgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgotI2lu
Y2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIK
LSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5o
PgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJ
QkVQT1hZKQotI2luY2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wu
aD4KLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJF
UE9YWSkKLSNpbmNsdWRlIDxlcG94eS9nbC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNs
dWRlIDxHTEVTMi9nbDIuaD4KLSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRp
ZgotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eS5oIgotI2VuZGlmCi0jZW5kaWYKLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LUltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNpemUsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0KDApCi0g
ICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdNb2RlKQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQotICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0gICAgLCBtX3Rl
eHR1cmUoMCkKLSNlbmRpZgotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlID09IFJl
bmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIG1f
bmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKLSNlbHNl
Ci0gICAgICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19Ci0KLUltYWdl
QnVmZmVyRGF0YTo6fkltYWdlQnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVuZGVyaW5nTW9k
ZSAhPSBBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNP
U0lBKQotICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBs
PihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7Ci0jZW5kaWYKLQot
ICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50
KCk7Ci0gICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5z
aGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgaWYgKG1fdGV4
dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLQotI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKLSAg
ICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0jZW5kaWYK
LQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZl
Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jZW5kaWYKLX0KLQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9p
ZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQotewotICAgIGF1dG8q
IGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygp
LnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
LQotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBtX2NvbXBvc2l0b3JT
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29u
dGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3Np
dG9yVGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIG1fY29t
cG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0
KCkpKTsKLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlS
T19BTlRJQUxJQVNfTk9ORSk7Ci19Ci0KLSNpZiAhVVNFKE5JQ09TSUEpCi1SZWZQdHI8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gSW1hZ2VCdWZmZXJEYXRhOjpwcm94eSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsKLX0KLSNlbmRp
ZgotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCi17Ci0gICAg
R0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsK
LQotICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgewotICAgICAgICBjcmVhdGVDb21wb3Np
dG9yQnVmZmVyKCk7Ci0KLSAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9Ci0gICAgICAgICAg
ICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJveHkpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsK
LSAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUsIFRl
eHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKLSAgICAgICAgICAgIH07Ci0j
aWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0PE5pY29zaWE6
OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5w
cm94eSgpKTsKLSNlbHNlCi0gICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRmb3JtTGF5ZXJQ
cm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBJdCB3b3VsZCBiZSBncmVhdCBpZiB3ZSBj
b3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdlYmdsLCBidXQg
dGhhdCBicmVha3MgdGhlIGNhc2VzCi0gICAgLy8gd2hlcmUgb25lIGZyYW1lIHVzZXMgdGhlIGNv
bnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNvIHdlIGp1c3Qg
Y29weSB0aGUgY29udGVudAotICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVmZmVyLgotICAg
IGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwgbV9zdXJmYWNl
LmdldCgpLCAwLCAwKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3NpdG9yQ3IuZ2V0
KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fcGFpbnQobV9jb21wb3NpdG9y
Q3IuZ2V0KCkpOwotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJl
dmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLX0KLSNlbmRpZgotCi12
b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgaWYgKGNh
aXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19j
cmVhdGUoc3VyZmFjZSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9f
T1BFUkFUT1JfQ0xFQVIpOwotICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCkKLXsKLSAgICBhdXRvKiBjb250
ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFy
aW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0aGVy
ZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3RpbmcgaXQKLSAgICAvLyBmcm9tIGEgcHJlLWV4
aXN0aW5nIHN1cmZhY2UuCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBn
bEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
LSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKLQotICAgIGdsUGl4
ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0KLSAgICBnbFRleEltYWdlMkQoR0xf
VEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdCQSwgbV9zaXplLndpZHRoKCksIG1fc2l6
ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OwotCi0gICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7
Ci0KLSAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgb24g
bm9uLUludGVsIGRyaXZlcnMuCi0gICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdhcmUo
ZGV2aWNlLCBGQUxTRSk7Ci0KLSAgICBtX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJm
YWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEs
IG1fdGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSkpOwotICAgIGNsZWFy
U3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29weShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Up
Ci17Ci0gICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUo
Q0FJUk9fRk9STUFUX0FSR0IzMiwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lk
dGgoc3VyZmFjZSksCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJm
YWNlKSkpOwotCi0gICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgp
KSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VS
Q0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwg
MCk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGNvcHk7Ci19Ci0K
LXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFn
ZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0
X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFCi0gICAgICAgICYmIGNh
aXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9B
TFBIQSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0KLSAgICByZXR1cm4gY2Fpcm9TdXJmYWNl
Q29weShzdXJmYWNlKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFE
YXRhKCkgY29uc3QKLXsKLSAgICBhdXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0lt
YWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3Vy
ZmFjZS5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGlmIChj
YWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGltYWdl
RGF0YTsKLQotICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShz
dXJmYWNlLmdldCgpKTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKLSAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKLQotICAgIHJldHVybiBpbWFnZURh
dGE7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpuYXRpdmVJbWFnZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCk7Ci19Ci0KLUltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2lu
ZG93KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShJbnRTaXplKHNpemUpLCByZW5kZXJp
bmdNb2RlKQotICAgICwgbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgIC8vIE1ha2UgZWFy
bHkgcmV0dXJuIG1lYW4gZXJyb3IuCi0KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKG1f
cmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQg
PSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAg
aWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFz
SW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5tX3NpemUgPSBtX3NpemU7Ci0KLSAg
ICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBB
Y2NlbGVyYXRlZCkgewotICAgICAgICBtX2RhdGEuY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLSAg
ICAgICAgaWYgKCFtX2RhdGEubV9zdXJmYWNlIHx8IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAg
bV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24g
ZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYg
KG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCkKLSNlbHNlCi0gICAgQVNT
RVJUKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgIT0gQWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0gICAg
ewotICAgICAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7
Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENB
SVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgdm9pZCogc3VyZmFj
ZURhdGE7Ci0gICAgICAgIGlmICghdHJ5RmFzdFplcm9lZE1hbGxvYyhtX3NpemUuaGVpZ2h0KCkg
KiBzdHJpZGUpLmdldFZhbHVlKHN1cmZhY2VEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwg
Q0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgc3Ry
aWRlKSk7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShtX2RhdGEubV9zdXJm
YWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEp
IHsgZmFzdEZyZWUoZGF0YSk7IH0pOwotICAgIH0KLQotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0
YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAg
ICAgICAgcmV0dXJuOyAgLy8gY3JlYXRlIHdpbGwgbm90aWNlIHdlIGRpZG4ndCBzZXQgbV9pbml0
aWFsaXplZCBhbmQgZmFpbC4KLQotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSkpOwotICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5zZXRDcihj
ci5nZXQoKSk7Ci0gICAgbV9kYXRhLm1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250
ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9kYXRhLm1fcGxh
dGZvcm1Db250ZXh0KSk7Ci0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgcmV0dXJuIGNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Ci19Ci0KLUdy
YXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVy
biAqbV9kYXRhLm1fY29udGV4dDsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIHJldHVybiBpbWFnZUJ1
ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24p
OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICAvLyBj
b3B5Q2Fpcm9JbWFnZVN1cmZhY2UgaW5oZXJpdHMgc3VyZmFjZSdzIGRldmljZSBzY2FsZSBmYWN0
b3IuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlKQotICAgICAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UobV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSkpOwotCi0gICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBw
YXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6
Y3JlYXRlKFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+KG1fZGF0YS5tX3N1cmZhY2UpKTsKLX0KLQot
QmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAg
IHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJh
d0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFw
aGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQotewotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0aW5hdGlvbkNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIGlmIChkZXN0aW5hdGlvbkNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAg
ICAgICBpZiAoJmRlc3RpbmF0aW9uQ29udGV4dCA9PSAmY29udGV4dCgpKQotICAgICAgICAgICAg
c3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50
ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Nj
b3BlKGRlc3RpbmF0aW9uQ29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsK
LSAgICAgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlv
bkNvbnRleHQuc3RhdGUoKTsKLSAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0
LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1
YWxpdHkgfSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpT
aGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMp
Ci17Ci0gICAgaWYgKGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86
OmRyYXdQYXR0ZXJuKCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBt
X3NpemUsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJ
WE1FOiBFbmFibGUgY29sb3Igc3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFz
ZXMuCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQo
KSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1
bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2Rh
dGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgbV9zaXplLmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJl
aW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENv
bG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBp
eGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1
ZSgpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkp
OwotICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxD
b2xvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3Jl
Y3RhbmdsZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRo
KCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOwotfQotCi1SZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFj
ZSwgSW50UmVjdCYgcmVjdCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3R5cGVfdCBzdXJmYWNlVHlw
ZSA9IGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSk7Ci0KLSAgICAvLyBJZiB3ZSBhbHJl
YWR5IGhhdmUgYW4gaW1hZ2UsIHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSB1bmRlcmx5aW5nIGRh
dGE7Ci0gICAgLy8gb3RoZXJ3aXNlIHdlIGNyZWF0ZSBhIHRlbXBvcmFyeSBzdXJmYWNlIGltYWdl
Ci0gICAgaWYgKHN1cmZhY2VUeXBlID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAg
ICAgcmV0dXJuIHN1cmZhY2U7Ci0gICAgCi0gICAgcmVjdC5zZXRYKDApOwotICAgIHJlY3Quc2V0
WSgwKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJ
Uk9fRk9STUFUX0FSR0IzMiwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKSk7Ci19Ci0KLXRl
bXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIHByZW11bHRpcGxpZWQ+Ci1SZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJ
bnRSZWN0JiBsb2dpY2FsUmVjdCwgY29uc3QgSW1hZ2VCdWZmZXJEYXRhJiBkYXRhLCBjb25zdCBJ
bnRTaXplJiBzaXplLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlKQotewotICAgIC8vIFRoZSBhcmVhIGNhbiBvdmVyZmxvdyBpZiB0aGUgcmVjdCBpcyB0
b28gYmlnLgotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsK
LSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0g
ICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6
ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgLy8gQ2FuIG92ZXJmbG93LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4K
LSAgICBpbnQgZW5keCA9IDA7Ci0gICAgaWYgKCFXVEY6OnNhZmVBZGQocmVjdC54KCksIHJlY3Qu
d2lkdGgoKSwgZW5keCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ2FuIG92
ZXJmbG93LCBhcyB3ZSBhcmUgYWRkaW5nIDIgaW50cy4KLSAgICBpbnQgZW5keSA9IDA7Ci0gICAg
aWYgKCFXVEY6OnNhZmVBZGQocmVjdC55KCksIHJlY3QuaGVpZ2h0KCksIGVuZHkpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAw
IHx8IGVuZHggPiBzaXplLndpZHRoKCkgfHwgZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAg
IHJlc3VsdC0+emVyb0ZpbGwoKTsKLQotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAg
aW50IGRlc3R4ID0gMDsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHggPSAt
b3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHggPiBz
aXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IG51bUNv
bHVtbnMgPSBlbmR4IC0gb3JpZ2lueDsKLQotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0g
ICAgaW50IGRlc3R5ID0gMDsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdHkg
PSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGVuZHkg
PiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBpbnQg
bnVtUm93cyA9IGVuZHkgLSBvcmlnaW55OwotCi0gICAgLy8gTm90aGluZyB3aWxsIGJlIGNvcGll
ZCwgc28ganVzdCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICBpZiAobnVtQ29sdW1ucyA8PSAwIHx8
IG51bVJvd3MgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIC8vIFRoZSBzaXpl
IG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3Rl
bS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZl
ZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChv
cmlnaW54LCBvcmlnaW55LCBudW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0
KGRhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERl
dmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgcmVzb2x1dGlvblNjYWxlLCByZXNvbHV0aW9u
U2NhbGUpOwotICAgIG9yaWdpbnggPSBpbWFnZVJlY3QueCgpOwotICAgIG9yaWdpbnkgPSBpbWFn
ZVJlY3QueSgpOwotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gZGF0YS5tX3N1cmZhY2UuZ2V0KCkp
IHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExv
Z2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBJbnRSZWN0IGxvZ2ljYWxBcmVhID0gaW50
ZXJzZWN0aW9uKGxvZ2ljYWxSZWN0LCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCks
IGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7Ci0gICAgICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VU
b0Fub3RoZXIoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlU3VyZmFjZS5nZXQoKSwgSW50U2l6
ZSgtbG9naWNhbEFyZWEueCgpLCAtbG9naWNhbEFyZWEueSgpKSwgSW50UmVjdChJbnRQb2ludCgp
LCBsb2dpY2FsQXJlYS5zaXplKCkpLCBJbnRTaXplKCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7
Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRh
RHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRl
c1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93
cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBm
b3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93
ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkg
KyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsr
KSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVk
KiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxs
aW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAg
ICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAg
ICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAoKnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAoKnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4Owot
ICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAg
ICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9
IGFscGhhOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0
PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVm
ZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3Vs
dC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNv
bnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGlu
YXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5
c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0g
ICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJ
bnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRl
U3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChy
ZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBi
YWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVt
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAg
ICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAg
ICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xv
Z2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9n
aWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5z
aW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5z
aXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3Np
emUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXpl
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBD
b29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRT
b3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVt
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFj
a2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChk
ZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRS
ZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0
ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9p
bnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAg
ICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdp
bnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9p
bnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxv
Z2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChk
ZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNT
RVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVj
dC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVk
U291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2lu
dC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9z
aXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAg
aW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAg
ICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNj
YWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNh
bERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0g
ICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2Nh
bGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQu
eSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9n
aWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJU
KGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0
eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsK
LQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0
b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNj
YWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJ
bnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFn
ZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBj
YWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlv
blNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwot
ICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAg
ICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFj
ZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSAr
IG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVy
cHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkp
KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAg
ICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0g
cm93ICsgeCArIGRlc3R4OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpw
cmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBm
dW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5z
aWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9
IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dz
W2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8g
MjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4
ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAg
ICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAg
IC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdl
U3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1
bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5t
X3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlv
biBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZy
b21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dp
Y2FsTnVtUm93cyksIEludFNpemUobG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNl
UmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSwg
Q0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICB9Ci19Ci0KLSNpZiAhUExBVEZPUk0oR1RLKQot
c3RhdGljIGNhaXJvX3N0YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1
bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotICAgIGlmICghcmVp
bnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwg
bGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKLSAgICBy
ZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdl
KGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1
aW50OF90Piogb3V0cHV0KQotewotICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBl
ID09ICJpbWFnZS9wbmciKTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93
LgotCi0gICAgcmV0dXJuIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwg
d3JpdGVGdW5jdGlvbiwgb3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0g
ICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsK
LQotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShlbmNvZGVk
SW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJl
dHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQot
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAg
IGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKS0+Y3IoKSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdl
OwotICAgIGlmICghaW1hZ2UgfHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29k
ZWRJbWFnZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICByZXR1cm4gZW5jb2RlZEltYWdl
OwotfQotCi0jZW5kaWYKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmICFV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cGFpbnRUb1Rl
eHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0
JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBv
cGFjaXR5KQotewotICAgIEFTU0VSVChtX3RleHR1cmUpOwotCi0gICAgLy8gQ2Fpcm8gbWF5IGNo
YW5nZSB0aGUgYWN0aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFj
ayBhZnRlciBmbHVzaGluZy4KLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9
IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNl
LmdldCgpKTsKLSAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgp
OwotCi0gICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJh
d1RleHR1cmUobV90ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX3NpemUs
IHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Ci19Ci0jZW5kaWYKLQotUGxhdGZvcm1MYXll
ciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgaWYgKG1fZGF0YS5tX3Jl
bmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVy
biBtX2RhdGEubV9uaWNvc2lhTGF5ZXIuZ2V0KCk7Ci0jZWxzZQotICAgIGlmIChtX2RhdGEubV90
ZXh0dXJlKQotICAgICAgICByZXR1cm4gY29uc3RfY2FzdDxJbWFnZUJ1ZmZlckRhdGEqPigmbV9k
YXRhKTsKLSNlbmRpZgotI2VuZGlmCi0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZm
ZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCi17Ci0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVy
ZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsK
LSAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKCFtX2RhdGEubV90ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBHQ0dMZW51bSBiaW5kVGV4dHVyZVRhcmdldDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewot
ICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9U
RVhUVVJFXzJEOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWjoKLSAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgY2Fp
cm9fc3VyZmFjZV9mbHVzaChtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNv
bnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOwot
ICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHVpbnQzMl90IGZibzsKLSAg
ICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgZmJvKTsKLSAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVG
RkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV9kYXRhLm1fdGV4dHVy
ZSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25U
ZXh0dXJlKTsKLSAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQs
IDAsIDAsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDApOwotICAgIGdsQmluZFRl
eHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZS
QU1FQlVGRkVSLCAwKTsKLSAgICBnbEZsdXNoKCk7Ci0gICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMo
MSwgJmZibyk7Ci0gICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTSh0YXJn
ZXQpOwotICAgIFVOVVNFRF9QQVJBTShkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIFVOVVNFRF9Q
QVJBTShpbnRlcm5hbGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHByZW11bHRpcGx5QWxwaGEp
OwotICAgIFVOVVNFRF9QQVJBTShmbGlwWSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzliMjFkMWFjZTUyYjVm
YzA0ODk4NGFlNzgzZWMwNDFmNjY1MTVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CisKKyNpZiBVU0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYg
c3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92
ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9zdXJmYWNl
LmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgpKSk7CisgICAgbV9wbGF0
Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOworICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3Rvcnko
bV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9
CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2Uu
Z2V0KCkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAg
IHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7Cisg
ICAgICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENB
SVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRo
KG1fc3VyZmFjZS5nZXQoKSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdo
dChtX3N1cmZhY2UuZ2V0KCkpKSk7CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJv
X2NyZWF0ZShjb3B5LmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQo
KSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJm
YWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWlu
dChjci5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBE
b250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9Cisg
ICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2Vy
Y2VUb0ltYWdlKCkgY29uc3QKK3sKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsK
KyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRSAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFj
ZS5nZXQoKSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2
aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZp
b3IgPSBDb3B5QmFja2luZ1N0b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJl
aGF2aW9yKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4g
c3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNv
cHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50
ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlvbnMuaW50ZXJw
b2xhdGlvblF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3Rh
dGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDog
RG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsg
b3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRv
d1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFz
ZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZvcm1D
b250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9
PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwt
PiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xv
clNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5l
YXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAg
Y29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7Cisg
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAgIH0g
ZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgeworICAgICAgICBz
dGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewor
ICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxv
YXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9T
UkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9CisKK1N0cmluZyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAg
IFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkp
OworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gImRhdGE6
LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoZW5j
b2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7CisKKyAg
ICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0
X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOworICAgIHJldHVybiBk
YXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJm
YWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1
c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAg
IGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBp
bWFnZURhdGE7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1Np
emUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRl
c3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YSht
X3N1cmZhY2UuZ2V0KCkpKTsKKworICAgIEludFJlY3QgZGVzdFJlY3QgPSB7IGRlc3RQb2ludCwg
eyBzcmNSZWN0LndpZHRoKCkgKiBtX3Jlc29sdXRpb25TY2FsZSwgc3JjUmVjdC5oZWlnaHQoKSAq
IG1fcmVzb2x1dGlvblNjYWxlIH0gfTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVj
dGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCksIGRlc3RS
ZWN0LndpZHRoKCksIGRlc3RSZWN0LmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzIyYjlhN2UxYTA2Mzc2YTkwMGY2YTQ5MDVhYTIxNTAxYjg2YTFjMQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2Vs
ZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5n
KSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5k
IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAg
dm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZv
aWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3Bh
Y2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJy
aWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6
ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpIHsgfQor
ICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAg
ICB1bnNpZ25lZCBieXRlc1BlclJvdygpIG92ZXJyaWRlIGNvbnN0OworCisgICAgbXV0YWJsZSBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fp
cm8gbV9wbGF0Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlOTEwMGY3NGVhMGFlY2YxMDIxYzAzMzg0
OTlkNzMxMTZhZTg0NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKQEAg
LTAsMCArMSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIK
KworI2lmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisjaW5jbHVkZSAiR0xDb250ZXh0LmgiCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlckdMLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworI2lm
IFVTRShFR0wpCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgIkVwb3h5RUdMLmgiCisjZWxz
ZQorI2luY2x1ZGUgPEVHTC9lZ2wuaD4KKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8Y2Fpcm8t
Z2wuaD4KKworI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlIDxlcG94eS9nbC5oPgorI2VsaWYg
VVNFKE9QRU5HTF9FUykKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNlbHNlCisjaW5jbHVkZSAi
T3BlbkdMU2hpbXMuaCIKKyNlbmRpZgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQor
I2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyLmgiCisjaW5jbHVkZSAi
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5oIgorI2VuZGlmCisKK1dURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQor
eworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNl
KSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVB
Uik7CisgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50
U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWRE
aXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0
dXJlIG91cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3Rp
bmcgaXQKKyAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCisgICAgdWludDMyX3Qg
dGV4dHVyZQorICAgIGdsR2VuVGV4dHVyZXMoMSwgJnRleHR1cmUpOworICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBh
cmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VE
R0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9G
SUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKworICAgIGdsUGl4ZWxTdG9yZWkoR0xf
VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisKKyAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwg
MCAvKiBsZXZlbCAqLywgR0xfUkdCQSwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6
ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDAp
OworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRleHQtPmNhaXJvRGV2aWNlKCk7
CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBwZXJmb3JtYW5jZSBoaXQgb24g
bm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNlX3NldF90aHJlYWRfYXdhcmUo
ZGV2aWNlLCBGQUxTRSk7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9z
dXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQ
SEEsIHRleHR1cmUsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkp
KTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY2xlYXJTdXJmYWNlKHN1
cmZhY2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
KHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KHN1cmZhY2UpLCB0ZXh0dXJlKSk7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1
cmZhY2UsIHVpbnQzMl90IHRleHR1cmUpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpCisgICAgLCBtX3RleHR1cmUodGV4dHVyZSkKK3sKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIg
PSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0
dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRm
b3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5KTsKKyNlbmRpZgorI2VuZGlmCit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKQoreworI2lmIFVTRShDT09S
RElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCisgICAgZG93bmNhc3Q8Tmljb3NpYTo6
Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmlu
dmFsaWRhdGVDbGllbnQoKTsKKyNlbmRpZgorCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2
ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybURpc3BsYXk6OnNo
YXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CisKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1
cmVzKDEsICZtX3RleHR1cmUpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAg
IGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZt
X2NvbXBvc2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29u
dGV4dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKK30KKworUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25z
dAoreworI2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsK
KyNlbHNlCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYK
KyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVj
dCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11
bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jl
c29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMg
cmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAg
aWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICghbV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51
bSBiaW5kVGV4dHVyZVRhcmdldDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoK
KyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1
cmVUYXJnZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChtX3N1cmZhY2UuZ2V0KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4g
Y29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNw
bGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgdWludDMyX3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJz
KDEsICZmYm8pOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwor
ICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFD
SE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUo
YmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX2ludGVybmFsU2l6ZS53aWR0
aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5k
VGV4dHVyZVRhcmdldCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IDApOworICAgIGdsRmx1c2goKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3Zv
aWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZm
ZXIoKQoreworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRl
eHR1cmUpOworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4
dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9TLCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Cisg
ICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwg
R0xfTElORUFSKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9pbnRlcm5hbFNp
emUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lH
TkVEX0JZVEUsIDApOworCisgICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxT
aXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb21wb3NpdG9y
Q3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOwor
ICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElB
TElBU19OT05FKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNv
bnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKworICAgIGlmICghbV9jb21wb3NpdG9yVGV4
dHVyZSkgeworICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisKKyAgICAgICAgYXV0
byBwcm94eU9wZXJhdGlvbiA9CisgICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eSYgcHJveHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9j
a0hvbGRlciBob2xkZXIocHJveHkubG9jaygpKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNo
TmV4dEJ1ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPiht
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91
bGRCbGVuZCwgR0xfUkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAg
ICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAg
IH0KKworICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUg
YnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2Fz
ZXMKKyAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRl
cmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Cisg
ICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAg
IGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKKyAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBp
ZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJl
KTsKKworICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBt
YWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0
KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWly
b19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBw
ZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRCbGVuZCwgbV9pbnRlcm5hbFNpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3Bh
Y2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzliNzhlYTAw
MWU3OGQwY2FiNzdiNGEwM2Q3MTFmNzQzODRmNTljZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNv
c2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5jbHVkZSAiUGxh
dGZvcm1MYXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0UoTklDT1NJQSkKKyAgICA6IHB1
YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxz
ZQorICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorICAgICwgcHVibGljIEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopOworCisgICAgfkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCk7CisK
KyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2Jq
ZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisjaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQorICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworICAgIHZv
aWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOworI2lmICFVU0UoTklDT1NJQSkKKyAg
ICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7IH0KKyNlbmRp
ZgorI2Vsc2UKKyAgICB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9h
dCBvcGFjaXR5KTsKKyNlbmRpZgorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lm
IFVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3Np
YUxheWVyOworI2Vsc2UKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7CisjZW5kaWYKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0
b3JDcjsKKyAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2VuZGlmCisg
ICAgdWludDMyX3QgbV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc4YzNmYmU1M2M0YTVjMmIwMjEzZjFiOTUxYTI1NzU3NTQ2ZThmMjEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENB
SVJPKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
PiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qg
c19zdXJmYWNlRGF0YUtleTsKKworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRl
SW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0cmlkZSA9
IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVy
bmFsU2l6ZS53aWR0aCgpKTsKKyAgICB2b2lkKiBzdXJmYWNlRGF0YTsKKyAgICBpZiAoIXRyeUZh
c3RaZXJvZWRNYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShz
dXJmYWNlRGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNl
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW50
ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7CisgICAg
Y2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKHN1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRh
S2V5LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkgeworICAgICAgICBmYXN0RnJlZShkYXRh
KTsKKyAgICB9KTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RG
TW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBz
dXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQor
eworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0g
Q0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5zaWduZWQgY2hhciog
ZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKTsK
KyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFj
ZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxTaXplLmhlaWdodCgp
OyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVu
c2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCog
cGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJv
bVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBwaXhlbENvbG9yID0gQ29s
b3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3Iu
Z3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4ZWxDb2xvci5hbHBo
YSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBp
eGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0
eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCks
IG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzIwM2FmNGYxNTIyZjMzNDAzNTZjMDEy
MWZmMWU5MTYzNWFiZDlkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKSBvdmVy
cmlkZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlS
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyRGF0YUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyYTYxZTM1OTk0NmVmNGJhZDY5MjNmZGJmNzU2NGEyZTM5Zjc2OWM0Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZuZGVmIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLSNkZWZpbmUgSW1hZ2VCdWZmZXJE
YXRhQ2Fpcm9faAotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0j
aW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCi0jZW5k
aWYKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShOSUNPU0lBKQot
I2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgotI2VuZGlm
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRleHR1cmVN
YXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YQotI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgOiBwdWJs
aWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAotI2Vsc2UK
LSAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCi0jZW5kaWYKLSNlbmRpZgotewotcHVibGljOgot
ICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiwgUmVuZGVyaW5nTW9kZSk7Ci0gICAg
dmlydHVhbCB+SW1hZ2VCdWZmZXJEYXRhKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBtX3N1cmZhY2U7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQ7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwotICAgIElu
dFNpemUgbV9zaXplOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2b2lkIGNyZWF0ZUNhaXJvR0xTdXJm
YWNlKCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaWYgVVNFKE5JQ09TSUEp
Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxzZQotICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2VuZGlmCi0g
ICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOwotICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRl
eHR1cmU7Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOwotCi0jaWYgVVNFKE5J
Q09TSUEpCi0gICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7
Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3Bs
YXRmb3JtTGF5ZXJQcm94eTsKLSNlbmRpZgotI2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRU
b1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwotI2VuZGlmCi0gICAg
dWludDMyX3QgbV90ZXh0dXJlOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCi0KLSNlbmRpZiAvLyBJbWFnZUJ1ZmZlckRhdGFDYWly
b19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlh
MmJjZTlhOTc1OTc1MGIwNjE3NDYxMTE4MWY2MmIzNzNkNGZkNzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NhaXJvLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKworI2lmIFVTRShD
QUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIK
KyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNp
bmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisjaWYgIVBMQVRGT1JNKEdUSykKKworc3RhdGljIGNhaXJvX3N0YXR1c190IHdyaXRl
RnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgpCit7CisgICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+
KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gQ0FJUk9f
U1RBVFVTX1dSSVRFX0VSUk9SOworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30K
Kworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCit7CisgICAgQVNTRVJU
X1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBv
dXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisKKyAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93
cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJP
X1NUQVRVU19TVUNDRVNTOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNl
X3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KQorewor
ICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKCFpbWFnZSB8fCAhZW5j
b2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQorCisjZWxzZQorCitzdGF0aWMgYm9v
bCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1
ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCit7CisgICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1h
Z2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24u
CisgICAgLy8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2Rr
LXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2CisKKyAg
ICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7CisgICAg
aWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYg
dHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOworICAgIGlmICh0eXBlID09ICJqcGVnIikg
eworICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNh
bnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1E
dWZmCisgICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlw
ZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gbmV3U3VyZmFjZTsKKyAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3Vy
ZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7CisgICAgICAgICAgICBuZXdTdXJm
YWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBDQUlST19G
T1JNQVRfUkdCMjQsCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lk
dGgoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0
cmlkZShzdXJmYWNlKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW50U2l6ZSBz
aXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7
CisgICAgICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
cGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0
KCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFj
ZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKKyAgICBpZiAoIXBpeGJ1ZikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICh0eXBl
ID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAx
LjApIHsKKyAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0
aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1
Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJT
aXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFs
aXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworICAgIH0gZWxzZQorICAgICAgICBnZGtf
cGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1
ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKKwor
ICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZh
Y2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7CisgICAgZ3NpemUgYnVm
ZmVyU2l6ZTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSwg
YnVmZmVyLCBidWZmZXJTaXplKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3Rvcjx1
aW50OF90PiBpbWFnZURhdGE7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1
ZmZlclNpemUpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKKyNlbmRpZiAvLyAhUExBVEZP
Uk0oR1RLKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RlMzNjN2Nh
MDk2Y2FkODkyMjYzNzM5Yzc1Zjk1YjIwZmVkYzAzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShD
QUlSTykKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNDk2
ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5YS4uNzIyZWVmZmU2YzllNWZkMjg2
NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTAwLDcgKzUw
MCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6
ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRlc3RSZWN0LnNpemUoKSk7CisgICAg
RmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsKICAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1D
b250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTZmMTk2
NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtk
ZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZm
ZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNp
bmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgot
I2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdy
YXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYv
Q2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0K
LSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1
cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlm
Ci0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiBy
ZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhf
SEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQ
X0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6ZVRv
VXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJh
Y2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKLXsKLSAgICBmbG9h
dCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLndp
ZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRpb24g
PSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRlcm5h
bFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0aCgp
ICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdodCgpICogeU1hZ25pZmljYXRpb24p
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwot
I2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRl
eHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFj
ZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJl
YWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFj
ZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2Uo
Y2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAg
ICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0Nv
bnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3Bh
Y2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNv
bG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9
IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdl
QnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1
Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihu
ZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5n
TW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFj
dG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxl
KHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBt
X2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZh
aWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBz
aXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25T
Y2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0
aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVk
V2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQp
OwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAo
bV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVj
a2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hl
Y2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5k
aWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQ
ZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxv
dz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJm
YWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUu
d2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAgICAg
ICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJp
bmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFj
ZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7
Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IHNpemVGb3JE
ZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZl
R2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0g
ICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9k
YXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAg
ICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNn
Q29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsK
LSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2Vu
ZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRl
cmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFj
Y2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7
Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxv
YyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51
bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5k
YXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8g
PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJI
b3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndp
ZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykp
OwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0
IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZy
ZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVh
dGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdl
QnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAg
ICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFn
ZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0Pihj
Z0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUo
MSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IElt
YWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdl
Q29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0K
LUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFn
ZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXpl
KSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNp
emUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQg
Y29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwg
YWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50
ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJl
Y2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlv
biBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRh
LnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNl
IHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0
YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53
aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZl
cjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNv
c3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdl
IG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhv
dy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhl
IHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlz
IEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2Ut
PnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJz
LgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNl
LT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250
ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJl
dHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENv
bnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNv
bnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAs
IDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdl
OwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFs
U2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
Ci17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9
PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwg
bG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2Fs
U2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCks
IGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQu
Z2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAg
ICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNwYWNl
KGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUpOwotICAgICAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdl
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBy
ZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlv
ciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0g
ICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShp
bWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5i
YWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVy
LT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
LCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNraW5n
U3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9O
YXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1
ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6
OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShp
bWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZl
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0lt
YWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRj
aCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0g
ICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIs
IG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0
YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBD
b3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1f
ZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7
Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXpl
IGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7
Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRv
SW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZl
cikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAg
ICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0
LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJh
dyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250
ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5l
ZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0K
LQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAg
ICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdl
KENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQg
dG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVm
UHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBw
aGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQot
ICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsK
LSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAot
ewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1
c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29y
ZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9u
cykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAg
ICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpn
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1l
bnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsK
LQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0g
c291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0g
ICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAg
ICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAg
ICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwg
c2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhl
IElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1
cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBu
ZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotc3Rh
dGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5
cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlw
ZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1F
OiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFU
Rk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZT
dHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5j
bGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dz
IHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0
IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3cs
IG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5
NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigi
cHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0g
Q0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRU
eXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwg
ImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxM
ZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAg
cmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
Q0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0
YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0g
ICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0
aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8
PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhl
IEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJE
b3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1h
Z2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lk
KiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0
aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dy
b3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291
bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBp
dCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdl
KGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICBy
ZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQot
Ci1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0
YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2
NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYg
Y2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENG
RGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJl
dHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZE
YXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1
cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7
Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0
byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4g
eyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBm
bHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERh
dGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAg
Ly8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVh
bGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRh
ID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxT
aXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6
ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsK
LSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRl
V2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51
bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNh
bFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJE
ZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAw
LCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAobV9y
ZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tp
bmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
aW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbWFn
ZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8g
Y29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0
KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzaXplRm9y
RGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53
aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAg
ICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQu
Z2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShp
bWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0YXRp
YyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBk
YXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0
YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlw
bGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAg
ICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRv
IG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXpl
ID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXBy
ZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICog
YWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFd
ICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFb
aSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5m
byA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5l
bC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291
cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3Vy
Y2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhh
SW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0
KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVS
TChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNl
LCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCks
IG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNv
dXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50
b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2Q5ZWRkMGVmNTFmMzg0MWFj
NThjOGI2MWUxNWNlMmQ0YTVjZjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
MjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1
cENvbnRleHQoKQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAg
ICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2ludGVybmFsU2l6ZS5oZWlnaHQoKSk7CisgICAg
Y29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOworfQor
CitzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNz
YXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKK3sKKyAg
ICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbnRlcm5hbFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSkKKyAgICAgICAgcmV0
dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFr
ZSgwLCAwLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSkpOwor
ICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwg
Y29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uKQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRp
b24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3Jv
cHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxz
ZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9n
aWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0Lmdl
dCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwor
ICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQo
KSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdU
Rk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9u
U2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2Nh
bGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9
PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkK
KyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVy
bmFsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAg
IGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8g
Q29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2Ut
PmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0
ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0FmZmluZVRyYW5z
Zm9ybSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWln
aHQoKSk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0
b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNT
RVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KG1pbWVUeXBlKSk7CisgICAgCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1F
VHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVk
RGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAg
ICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFu
dWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgcHJlbXVsdGlwbGllZERh
dGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
SW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCk7CisgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUo
KS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Cisg
ICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdp
dGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxs
cHRyKSk7CisgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNp
emUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxT
aXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVm
YXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwg
ZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5n
U3RvcmUpOworICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGlt
YWdlLmdldCgpLCBpbnRlcm5hbFNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndp
ZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkp
OworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRN
b2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0
KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSwg
aW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRv
cHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBp
ZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZE
YXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAor
eworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkp
OworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAo
YXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlv
bikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICBy
ZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3RhdGljIGlubGlu
ZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQgYnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdkltYWdlX0J1ZmZlciB2
SW1hZ2VCdWZmZXI7CisgICAgCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0
PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0
aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdklt
YWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEg
PSByb3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZl
ciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYg
KHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3Jj
Q29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAg
ICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0
IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVD
aGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKHNyY0Nv
bG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlVW5wcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNy
YywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3Jj
Q29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VQcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0
ICE9IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJH
UkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAz
IH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3Qs
IG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxw
aGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0
ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAor
eworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQgJiYgc3JjQ29sb3JG
b3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
Y29weUltYWdlUGl4ZWxzKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0
ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IHZJbWFnZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3Jj
Um93cywgc2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihk
ZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0Fj
Y2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFG
b3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWFiN2E3NDY5MzNkZDFkMjc3NjhjYTQ0OGVhOGZjNjFmYTQxZTc0MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQ0dCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVy
QmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0lu
dG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZTsKKworICAgIFN0cmlu
ZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50
OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdlQnVmZmVy
QmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCisgICAgdm9pZCBzZXR1cENvbnRleHQoKTsK
KyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxzKAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jv
d3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhf
dCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQzZjczY2ZiODAxNGU3MGQ3NTNk
YTU5YWYyNDhhNTYzMzA0ZjQyNzUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lu
bGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0Owor
I2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FM
TE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUg
aW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBp
bnRlcm5hbFNpemUud2lkdGgoKTsKKworICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbnRlcm5hbFNp
emUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRh
KSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGludGVybmFsU2l6ZS5oZWlnaHQoKSAq
IGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVt
Qnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZShkYXRhLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCA4
LCBieXRlc1BlclJvdywgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBEZWZhdWx0Qml0
bWFwSW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRl
eHQuZ2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQq
LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2Fz
dDx2b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFz
ZUltYWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQ
cm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92
aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRh
KQorICAgICwgbV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9j
b250ZXh0KFdURk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNT
RVJUKG1fZGF0YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENv
bnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSkpOworICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVy
biBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2ludGVybmFsU2l6ZS53aWR0
aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5dGVzUGVyUm93KCksCisgICAg
ICAgICAgICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcElu
Zm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgMCwgdHJ1ZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6
ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6
ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jv
d3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2RhdGEpOworCisgICAgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBD
b2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRl
c3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRG
b3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX2RhdGEpOwor
fQorCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFy
cmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
Cit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFy
cmF5LCBzcmNTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fZGF0
YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcwYWE5NjYzMTNjOWMzYTgw
YTAxZWJjOGYwMWIwZTNkNGYxMTVlZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNH
QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1
ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAg
IAorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4g
dG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1w
ZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVt
KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRy
PENHRGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYm
KTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
NCAqIG1faW50ZXJuYWxTaXplLndpZHRoKCk7IH0KKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAg
ICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZk
ZDJlYWJhYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3Mv
Q29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2Nl
bGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2gu
aD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8v
IENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBs
aW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZ
KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9B
UkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9p
ZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0
IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NF
UlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11
bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdS
QTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0g
ICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJt
dXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsK
LX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZm
ZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRh
dGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9
IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRv
IGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBl
Y3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAg
ICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIg
fHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUg
dm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFU
RSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdl
X0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhl
aWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRh
ID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdp
ZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0
aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAg
VU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVT
RURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JB
RGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29u
c3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0K
LSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJl
c3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndp
ZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZh
Y2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRk
cmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAg
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9
IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVz
dWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNh
ZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0
YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2Vk
PGludD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55
KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVH
ZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAK
LSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewot
ICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAg
ICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3
LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNh
ZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAg
ICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3Jp
Z2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRl
c3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVz
dGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lu
eSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQo
KSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4g
c2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNh
ZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0Lndp
ZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0
Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5k
ZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAg
ICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55
ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
ICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAg
ICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdo
dCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5
dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
IGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5w
cmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1h
Z2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRp
ZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAg
ICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBo
YSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAg
ICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9m
IEFSR0IzMgotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNy
Y1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1
NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZh
Y2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJm
YWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhf
dCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93
ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1
ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAg
ICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMg
PSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdl
dCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBk
ZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0
Um93czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBj
aGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNf
QVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0j
ZWxzZQotICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAg
ICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAg
ICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3Jj
Um93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dz
W2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1
NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNy
Y1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNS
b3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3Jj
Um93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8g
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWlu
dDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3Jt
YXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2Vk
PGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNT
RVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVz
dHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJl
Y3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4o
ZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5z
YWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGgg
PSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRl
c3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBD
aGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNl
UmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NF
UlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lu
eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBz
b3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChl
bmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhl
aWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5k
eSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291
cmNlU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0
YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQo
KTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7
Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0
YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRl
c1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCku
dW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAg
ICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0
KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAg
ICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51
bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7
Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBw
cmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1h
Z2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsK
LSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAg
ICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFs
cGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAg
ICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBB
UkdCMzIKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1ti
YXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2Nr
ZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0
ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0g
ICAgICAgIGRlc3RSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VB
ZGRyZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVH
ZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsK
LSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWln
aHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3Mp
OwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRl
c3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgp
OwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0
LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5
QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1
aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0
ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAg
ICAgICAgfQotI2Vsc2UKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZl
R2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNh
ZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAg
ICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAg
dWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAo
c291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAm
JiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0g
KHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAo
YiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjNTVhNTRhZDkxMTc5NTNjYTVlNjk2ZGEwN2U2ZTBkZjY4MTQz
ZDU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hl
Y2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3Qg
Q0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92
aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFn
ZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMu
Ci0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlk
ZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJ
bWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNl
bmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAg
dm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJ
bnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU2YTU4MTk3ZDYzOGU4OTIwNTZiMWY0NTZkNzVlNTUzODlmOWFiMmUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZh
Y2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVH
cmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsK
KworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFs
U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAg
ICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJ
bnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9
IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkg
PiBtYXhTaXplLndpZHRoKCkgfHwgaW50ZXJuYWxTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWln
aHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRl
cm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJ
T1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUsIGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xv
clNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFj
ZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOworICAgIGlmICghY2dDb250ZXh0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0Nv
bnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkp
OworICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisK
K0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5p
cXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5k
KGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkK
KyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZh
Y2UpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Vy
ZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRl
eHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRv
dGFsQnl0ZXMoKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVtb3J5Q29zdCgpOworfQor
Cit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQorCitDb2xvckZv
cm1hdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9
CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9O
YXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZN
b3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBz
cmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisK
KyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVz
dENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZl
Y3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgp
KTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICog
NDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgSU9T
dXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisK
KyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywK
KyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZv
cm1hdDo6QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXpl
KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBs
b2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdl
RGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3Vy
ZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBzcmNTaXpl
LCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIGxvY2suc3VyZmFjZUJhc2VB
ZGRyZXNzKCkpOworCisgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hl
ZCBpbWFnZS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCisgICAgY29u
dGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2VhNDYxYmE2NTc2YzNhODY0
MTY0MGY2MjY3MTBjOTQyZjg3MDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAs
MCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Cisj
aW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJT1N1cmZhY2U7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAg
c3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5k
b3cqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5Q29z
dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTmF0aXZl
SW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZvaWQg
ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikg
b3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJy
aWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoK
KyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworCisgICAgdW5zaWdu
ZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xvckZvcm1hdCBiYWNrZW5k
Q29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1
cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcApp
bmRleCA4OWQwNDM5YzIxMGRiNTAxYWM5MzllYjExNDE0ODgxZWVlYzY1YjI0Li5kMDkxMzlmMDFi
ZDMzNmYyODQ4YWVhNTI2YTRmOWY4MDBlZTc4NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmNwcApAQCAtMjYsNyArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3
dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKwor
I2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNCArNTIsMTQwIEBAIHVpbnQ4X3QgdmVyaWZ5
SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplKQogICAgIHJldHVybiAqKHVpbnQ4X3QqKWxhc3RCeXRlOwogfQogCitDRlN0cmluZ1JlZiBq
cGVnVVRJKCkKK3sKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAgc3RhdGljIGNvbnN0IENGU3Ry
aW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7CisjZW5kaWYKKyAgICBy
ZXR1cm4ga1VUVHlwZUpQRUc7CiB9CisKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUlt
YWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyNpZiBQTEFURk9S
TShDT0NPQSkKKyAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0
cmluZygpOworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNs
ZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCisKKyAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mg
c3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQg
ZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCisgICAgLy8gRm9yIG5vdywg
b25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1
Mjg2Pi4KKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJw
dWJsaWMucG5nIik7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBD
RlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5
cGVQTkc7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAi
aW1hZ2UvanBlZyIpKQorICAgICAgICByZXR1cm4ganBlZ1VUSSgpOworICAgIGlmIChlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQorICAgICAgICBy
ZXR1cm4ga1VUVHlwZUdJRjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBrVVRUeXBlUE5HOworI2VuZGlmCit9CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBp
bWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJs
ZURhdGFSZWYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1h
Z2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlmICgh
ZGVzdGluYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxDRkRp
Y3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdV
VEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7
CisgICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGlt
YWdlIGRlc3RpbmF0aW9uLgorICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0
Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlw
ZSwgJipxdWFsaXR5KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGlu
YXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUg
PSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFk
b3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0
aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwor
ICAgIH0KKworICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xv
ciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUg
c29tZSBtYXRoCisgICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24n
dCBzZWVtIHRvIHdvcmsuCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBDR0lt
YWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7Cit9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBBU1NF
UlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
bWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUo
bWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRh
QWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0YSA9
IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGll
ZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAg
ICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1h
bnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXplID0g
NCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXByZW11
bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7CisgICAg
ICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEgIT0g
MjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxw
aGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICog
YWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJd
ICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJ1
ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFd
ID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5mbyA9
IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4K
KyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAgICB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNv
dXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNl
LmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uu
d2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5m
bywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NG
QWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCks
IHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVSTChD
RkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8Y2hh
cj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwg
Q0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICByZXR1cm4gImRhdGE6IiAr
IG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1N0cmluZyBkYXRhVVJM
KGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2Us
IG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwg
bWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhfdD4g
ZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRh
OworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0
YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNl
LCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0
KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFiZDFm
YjgzYWIzMWExMTVjNjg5NTA0OTFkNDE5NTUyLi44NGM1N2QyZmVlOTMzOGVkNWUwZWZjNGE4ZTMz
NjVhMTlhODAyMDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCkBAIC0yNSw4ICsyNSwzMSBA
QAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNPUkVf
RVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBi
dWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIAotfQorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpOwor
UmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBT
dHJpbmcmKTsKKworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1dGks
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmluZyBk
YXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0YVVS
TChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYpOwor
VmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCA4MGY2YjE4NzI1MjI5
NjhlYTdkOTU3NmI3ZTAwNTYzMzMyNTg4MjNjLi4yODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1Yzlm
YmMyNThiNTYyZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4K
ICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNp
bmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKaW5k
ZXggMjQzYzQ4Yjk1MWIxNzRiNmIyNGJhYzUzNjRjOWEwNGZmOTY5Y2RiMy4uNGNjMGZhM2Y3OTcy
N2ViOWRlZWRjNGFkMGUxMTczNGRhYjIxNGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTEwMCwxMCArMTAwLDYgQEAg
cHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9t
U3VyZmFjZShJT1N1cmZhY2VSZWYsIENHQ29sb3JTcGFjZVJlZik7CiAgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZShDR0lt
YWdlUmVmKTsKICAgICAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2VCdWZm
ZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0jZW5kaWYKLQogICAgIFdFQkNPUkVf
RVhQT1JUIH5JT1N1cmZhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lkIG1v
dmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIxMjVj
M2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFjYzEw
NzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9ydCAi
SG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1hZ2VC
dWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dnaW5n
LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3Jl
R3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1vdmVU
b1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3VyZmFj
ZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQogCi0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0cjxJ
T1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1hZ2VC
dWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9uYXJ5
ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4ZWxG
b3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBsYW5l
Qnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxh
eUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0
OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9E
aXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgo
c2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Qu
c2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3Bs
YXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsK
IAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTlmMWNlMjczNTQ1MGJkYWMzYmJkZjExYTMwODVkOWE3ZjNjOWUxNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNs
dWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXll
ci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJs
aWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAg
ICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0
KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RD
b250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3Qo
eyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7
CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
Y29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNv
bnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxp
c3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7
IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgewor
ICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0KQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBtX2Rp
c3BsYXlMaXN0KTsKKyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAg
ICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxheWVy
LnJlcGxheSgpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3QgbV9k
aXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5RGlz
cGxheUxpc3Q7CisgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsK
K307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAK
aW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uYWYzYWFkZTJh
MzMyY2MxMGE5NjEzZjIxMjYxNzE3ZGQxZDg1OGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCkBA
IC0yODYsMTMgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCpp
bkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3Qo
KSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxv
Z2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAgYXV0
byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgYXV0byBwaXhlbEFycmF5ID0gcmVz
dWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47
CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMp
OwogCisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5sb2dp
Y2FsU2l6ZSgpOworICAgIHBpeGVsQXJyYXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdlLT5y
ZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgRkVD
T0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMxMyw3
IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxBcnJh
eSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Quc2l6
ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxBcnJheSwg
aW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0
ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3OGE3ZmI5NDdkNDA1ODAwNGVhNzE3MmQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3MgdG8g
SW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIEludFJl
Y3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkpOwot
ICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0Fy
ZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllckltYWdl
KHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dBcmVh
LnNpemUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNyY1Bp
eGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRvd0Fy
ZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0
b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hhZG93
QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkJh
Y2tpbmdTdG9yZSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihD
b21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJlY3Qo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBtX3No
YWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThjNWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2MjczNTNkZjQ0
OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAxNTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAtNzEs
NyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9z
b3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFmZmlu
ZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJp
bmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1fZmls
dGVyU2NhbGUgeyAxIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5
NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uNWM4YjNiNGRlMGFmYTcxNDU4Y2RjZjZjNmJj
MGZmZDJjY2JkMTQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjc5LDkgKzI3OSw5IEBAIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEludFJl
Y3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXpl
KCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVk
LCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRl
c3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5w
dXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRp
b25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVj
dCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0Myw3
ICs0NDMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChVaW50
OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0
aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAg
ICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2OSw3ICs0
NjksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWludDhD
bGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRo
ZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAg
ICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQt
PmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1YTBkNTBmOGNlMWFhZjY1MzVkZWVj
OTQwYjg1ZGM1NTE3ZTRiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJH
dGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1ZGUg
IkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUgIkdk
a0NhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1
ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQotewot
ICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20g
dGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25v
bWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGst
cGl4YnVmLXNhdmUtdG8tYnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJz
dHJpbmcoc2l6ZW9mICJpbWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9
ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1w
IikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1
ZjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1
cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRh
VVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAvLyBjb21wb3NpdGUgc291
cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEu
Ci0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7Ci0gICAgICAgIGlm
IChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9J
TUFHRSkgewotICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFj
ZSksCi0gICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKLSAgICAgICAgICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFj
ZSk7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0
ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZh
Y2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3Iu
Z2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZh
Y2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHBp
eGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0gICAg
aWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVPdXRQdHI8
R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVh
bGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFsaXR5
U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4w
ICsgMC41KSk7Ci0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgp
LCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJy
b3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxM
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYu
Z2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCks
ICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1TdHJp
bmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gaW1hZ2VEYXRhID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBp
ZiAoaW1hZ2VEYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAg
VmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGltYWdlRGF0YS5kYXRh
KCksIGltYWdlRGF0YS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIg
KyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBHVW5p
cXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBpZiAo
IWVuY29kZUltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5LCBi
dWZmZXIsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9yPHVp
bnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVm
ZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RM
YXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1h
cC9OaWNvc2lhR0MzRExheWVyLmNwcAppbmRleCA0YzRjNDI2OTYxMjcxYzdiN2ExOWQyOTZhOTQw
MGVmZGMwZmFjOWFlLi43NTcwMDNiMWYxMWRmNGIyNzY2YjQwOWU4MjJjZDhiNDIwZmI0YTViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1h
cC9OaWNvc2lhR0MzRExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcApAQCAtOTQsNyArOTQsNyBA
QCB2b2lkIEdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAgICAgSW50U2l6ZSB0ZXh0
dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRIZWln
aHQpOwogICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBtX2NvbnRleHQuY29udGV4
dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAwOwog
I2lmIFVTRShBTkdMRSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgVW5hY2NlbGVyYXRlZCk7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGV4dHVyZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCmlu
ZGV4IDdkMmNlZmQ2MjYxZGVlMmEzOWE4OWQxMDE3MDJlYjUwMjUyZjRmNWUuLmYwMzkxMzgwNjBk
MzQ0MzRlNmNkZGJmOTZlYTY0YzMwMWE2MzU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKQEAgLTM4
LDcgKzM4LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJlTWFw
cGVyJiwgR3JhcGhpY3NMYXllciogc291cmNlTGF5ZXIsIGMKIHsKICAgICAvLyBNYWtpbmcgYW4g
dW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyIGhlcmUgaXMgT0sgYmVjYXVzZSB0
aGlzIGNvZGUKICAgICAvLyBpc24ndCB1c2VkIGJ5IGFueSBwbGF0Zm9ybXMgdGhhdCByZXNwZWN0
IHRoZSBhY2NlbGVyYXRlZCBiaXQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFVuYWNj
ZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKIAogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZS5jcHAKaW5kZXggY2ExMWJiOGJhMGIxOTEwYzYyNzk2N2Q0ZDI2MGIwNGM2ODQ4
NjczMS4uNWFjOWQ2NjA2YzQyMjEyNDhiYzQxZGU5Mzg5Y2U1Yzg3ZTRhNDE3YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZS5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBJbWFnZUJ1ZmZlciogTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2U6OmltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAobV9pbWFnZUJ1ZmZlcikKICAg
ICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBtX2ltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBt
X2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAppbmRleCBkNWI5MWIyNjg2YWUyNjFlYjUzYzA2ODliZWVjNjJmNTVlM2ZiNDU4Li44ZjUwZTU3
NTcxZDdiMzg1MDBlZWQ3YmNkYTZiM2E2NDJhYmY3OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTY5MDUsNyArNjkwNSw3IEBAIHZvaWQgUmVuZGVyTGF5
ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0KICAgICAKICAgICBlbnN1
cmVMYXllckZpbHRlcnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCks
IHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAg
ICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZh
Y3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgp
ID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJh
dGVkKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggOTE0MjAyOWEyZDQ0NjRk
ZjVjYjdiM2E0NDE5M2JlMjg2M2MxZWQyYS4uOTM1YTZlZTllNzZmZjQ0MDJmOTg0YjVkMmI1MjFh
Njk5MWM2MTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9T
aGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAK
QEAgLTE4MSwxNCArMTgxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0
ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgSW50UmVj
dCBtYXJnaW5SZWN0ID0gc25hcHBlZEludFJlY3QobWFyZ2luUik7CiAgICAgYXV0byBpbnRlcnZh
bHMgPSBtYWtlVW5pcXVlPFJhc3RlclNoYXBlSW50ZXJ2YWxzPihtYXJnaW5SZWN0LmhlaWdodCgp
LCAtbWFyZ2luUmVjdC55KCkpOwogICAgIC8vIEZJWE1FICgxNDk0MjApOiBUaGlzIGJ1ZmZlciBz
aG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGlt
YWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXpl
KCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAgaWYgKGltYWdlQnVmZmVy
KSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VCdWZm
ZXItPmNvbnRleHQoKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNp
emUoKSkpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9
IGltYWdlQnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgp
LCBpbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
cGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXpl
KCkpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJheSk7CiAgICAgICAgIHVuc2ln
bmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczog
UkdCQS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAwOGU0OTI4MmFkOTNiY2FjZDI5Nzc1Yjg0NmYw
NTlkNWEyY2E3MTNlLi4xZDc3YjYzYzZmZTI4MzEyYWUxMWVkODI1YjUyM2FhY2U3MTdlYzVhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
Q2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGMKIAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBhaW50
UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1hZ2Ug
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2lu
ZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2guCi0g
ICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFn
ZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0Is
IFVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNW
R1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0
ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgJmNvbnRleHQpOwogICAgICAgICBpZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNzViNTliNjNjM2U0OTYwYmQ0
ZTNiZGJkODc0OTJhOTMyZjQzMTYxYi4uMTJlN2YxNWQ2MzJkNzZkOTlmNmJhYmE5MzhkMGQ5ZTI2
MzRkOGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBSZW5kZQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0aCgp
LCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZpbHRl
ckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5h
YmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5h
YmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkOwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2ZVRy
YW5zZm9ybSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0KTsK
ICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVyRmls
dGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lk
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZpbHRl
ckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgICAgICB9CiAgICAgfQotICAg
IGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5yZXNldCgpOworICAgIGZpbHRlckRhdGEu
c291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAiIDw8IHRoaXMgPDwgIiBw
b3N0QXBwbHlSZXNvdXJjZSBkb25lXG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKaW5kZXggMTc4N2Ux
OGMyZGNlZjViZGY5OTI0NzRjZmMwMjJiNTE2NmFkNTg0OC4uMTIwYzU3YjU2OTc4NzIyMDQ2NWJj
NmFlYzBiNTgwNGM0NTVjZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKQEAgLTcxLDcgKzcxLDcgQEAg
Ym9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUmIHN2
Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRpb246
OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7CiAg
ICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRl
eHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+bWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250ZXh0
KTsKKyAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAgICAgaWYg
KCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGI4MjE0MTFhZGU3NzUw
ODU2MTY4ODU2ZWQyMmI2MmVhNmI1Y2QzZDkuLjk3ODY3YWFkM2MyN2I1YjUzOGQzYTc5ZmI0OTVk
ZGQ0ZjBmNDNkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcApA
QCAtMjE4LDcgKzIxOCw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAogICAgIC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNjZWxlcmF0ZWQgZHJhd2lu
ZyBmbGFnLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0
ZWQgYnVmZmVyLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKSAvLyBmYWlsZWQg
dG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CmluZGV4IDUzMjY3OGYzNzYwMzNjM2MwMGY5ZjZiZDVhMzBjMzg2OTBlMzM0YmYuLjBhYjky
MDE2MjRlODYwYTBkOWNjMGYwNzE5ZmE2MzE1ZjJmMTU2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dApA
QCAtMTcsNiArMTcsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtX
ZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5jbHVkZSIKICAgICAiJHtXRUJLSVRfRElSfSIK
ICAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzIgorICAgICIke1dFQktJVF9ESVJ9L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZCIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vz
cyIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyIgogICAgICIk
e1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMiCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZWRmYjZlMWUwNWU1NjQwMDhiN2Q1
N2E4NzQ1Mzc4YzQzZDY2Y2Y5Ni4uN2E1MjE0MjVmZjkzMTcyYjVhYjdlMWRjMjQyMGFmZTY1Yzk3
NmY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2Zp
bGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIp
L21vZGVscy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQucGwK
ICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2VzLmlu
CiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNiLmlu
CiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90
ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDIsNiArMTA0LDcgQEAgJChQ
Uk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1l
c3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIv
V2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmlu
CiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dl
YlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVzc2Fn
ZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
CmluZGV4IGRmYmMwZWZlNmI4NDcyNmY5NmM4OTgyOGNkODNkMGVkNzU5MDVhMDYuLjkwZDkxMTFm
ZDEwZTg2MzQ1YjdlZjRmZjUzYjE1OWEwYzMxMmNhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAkKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzUHJv
eHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RT
X0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2Fn
ZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1
ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdl
cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTE0Miw2ICsxNDgs
OSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VSZWNl
aXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdl
c1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtl
IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGUyOTA5MzA5N2NkOWJk
ZWIzNDVhMTlhNWQzN2ZlNTdhNTQwZGViNzAuLjhjNzUzZDE2ZjQwZGZkZGNmZTE3NDViYWE1ZmU1
OWJmMjk2ODc3ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFr
ZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcg
QEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIp
L0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAg
ICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIp
L0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAg
ICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBW
UEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQo
V2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUv
bWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9NZWRp
YUNhY2hlIFwKQEAgLTE0MCw2ICsxNDIsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBQ
bHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIgXAogICAgIFBsdWdpblByb2Nlc3NQcm94eSBc
CiAgICAgUGx1Z2luUHJveHkgXAorICAgIFJlbW90ZUltYWdlQnVmZmVyIFwKKyAgICBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5IFwK
ICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5IFwKQEAgLTE0Nyw2ICsxNTEsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAg
ICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1v
dGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Y3BwCmluZGV4IDYyMGI0MWYyOGQ2Njc2YTNkZTE3ZjQ3NmIyZGYzODhmZmY2NDc3MGQuLmEzNzFj
ZjIzZGE3N2ZhNzZlM2U0MDNkZGMyZDNhZGI2NjE5MDFjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE2
MCw1MiArMTYwLDY4IEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgp
LmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFt
ZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVz
b3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5B
QkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVz
c2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2Vy
KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29y
ZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFn
ZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2Vu
ZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVjc1Byb3h5
KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAg
ICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYg
ZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK2Jv
b2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlh
Q2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9jZXNz
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKCFt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxwdHI7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZjQ4NTk2NGQ0NmM1MmUzMzhk
MmFiZTRmNzY1ZGRjYjVhOTRhMDc5MC4uMDI3MDM3ZmU5OTQ2NDA5ZjA2YzIzYmY2Y2VjZDM3ODUz
YTU2ZTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxh
eUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
cy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1ZGUg
PHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ3LDE4ICs0OSwyMCBAQCBj
bGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogCiBjbGFzcyBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYsIFdl
YkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIsIFBB
TDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCk7
CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rp
b24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVy
TWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNzJiBn
cHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29yZTo6
UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBt
X3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5zaW9u
KEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAgICBX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291cmNl
TWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYgbG9n
Z2VyKCk7CkBAIC03NywxNCArODEsMjEgQEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29ubmVj
dGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsK
LSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5h
bWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIGJvb2wg
ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJv
b2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5kZXJp
bmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VS
ZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAogICAgIFJlZlB0
cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0
aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAgSVBDOjpNZXNzYWdl
UmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3QgV2ViQ29yZTo6UHJv
Y2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFn
ZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5PiBt
X3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTYsNiArMTA3LDcgQEAgcHJpdmF0
ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAjZW5k
aWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2
ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRj
aE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZv
aWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTcwZjQyMmMzZTQ2OTNhMDEyODk4MThhMWMzMjk0NGVkY2YzM2QxNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mo
bWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX2ltYWdlQnVm
ZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0
KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1h
cCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgp
LCAqdGhpcyk7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24q
IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QK
K3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2
NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsK
K30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1ZmZl
ckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpS
ZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShoYW5kbGUp
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVy
UHJveHk6OmZsdXNoQ29udGV4dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3Bs
YXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7Cisg
ICAgbG9jYWxGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXIoZmx1c2hJZGVudGlmaWVyKSwgbV9p
bWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5mMzY4YjYyNjRmZDEwYWQ0MzE3ZWU0ZjNmNmQ2ODM0ZWQ1NzFmMDY1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJp
Z2h0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRl
IElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgor
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIHZvaWQgZmx1c2hDb250ZXh0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIEltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3Qg
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworCisgICAgV2Vha1B0cjxH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7Cisg
ICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmIwYWU3OGUyY2U0YWI5NTE5YjY1YWI4NGI0ZDcyZGRlYjVlYzk1OGMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAg
ICB2b2lkIEZsdXNoQ29udGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlz
cGxheUxpc3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlm
aWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZmU0ZTFlM2Fk
NTIxODU0NWM5NTFmNmNjMTRjZmU2ZDBkZjFkZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNr
ZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHsKKyAgICB1c2luZyBCYXNl
UGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+OworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3Jl
YXRlPFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eT4oc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBudWxscHRyLCBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQ
cm94eShzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCwgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAg
IHsKKyAgICAgICAgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2VuZC0+bG9n
aWNhbFNpemUoKSwgbV9iYWNrZW5kLT5pbnRlcm5hbFNpemUoKSwgbV9iYWNrZW5kLT5yZXNvbHV0
aW9uU2NhbGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+Y3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGxv
Y2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0Lml0
ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpSZXBsYXllciByZXBsYXllcihCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29udGV4
dCgpLCBkaXNwbGF5TGlzdCk7CisgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBC
YXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRhNTBkN2VmNzBhZDNkOTgwNmRjZjY2OTQ1YmViZDlmZDM3MjkyZDEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OwordXNpbmcgUmVtb3RlUGxhdGZvcm1BY2NlbGVy
YXRlZEltYWdlQnVmZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8UGxh
dGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE3MGIz
MzA3MDNlMGNkZjUyNDgzZWQ2MTI2YzJjMDAyYTRjNDYyYQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdl
cy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworfQor
CitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAg
ICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlz
KTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBD
OjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJu
ICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVy
SWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOworICAgIGlmICghZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5OjpjcmVh
dGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGltYWdlQnVmZmVyID0g
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdl
QnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZlck1hcC5hZGQoaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVy
IGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICAvLyBDcmVhdGVTdXJmYWNlIG1lc3NhZ2Ug
c2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgaWYgKCFtX2lt
YWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbWFn
ZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OTM4YmVlNTEx
ZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFz
cyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdl
U2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gY3Jl
YXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CisKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToK
KyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNl
bmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBj
b25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllcik7
CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKwor
ICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFnZUJ1ZmZlcklkZW50aWZpZXIs
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4+OworICAgIEltYWdlQnVmZmVy
TWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4N2Y4MDJjMzZmZDk1N2JjNDkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVmQ291
bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9n
aWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1h
Z2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVh
c2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktp
dC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBjZWZmM2MyNjA1YTFmODVkNWQ5OTBh
NjRjM2YyODIwM2QxMTUyMzIwLi4zMTQwNDc4ZjQxN2QwY2ZlMGQzMDRhODgzNDdhZTVhNDc0ZWNi
ZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYg
KzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19D
T05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9N
RVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZF
Ul9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9B
VFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5j
aHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9y
d2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNl
bmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAg
J1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElk
ZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMSw2
ICsyMTQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgog
ICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6UG9p
bnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJywKKyAgICAgICAg
J1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtl
cklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0y
MTgsMTAgKzIyMiwxNCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJl
ZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJLaXQ6
OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZScsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dl
YktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UmVtb3RlTWVk
aWFSZXNvdXJjZUlkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpT
dG9yYWdlQXJlYUlkZW50aWZpZXInLApAQCAtNzYyLDEzICs3NzAsMTYgQEAgZGVmIGdlbmVyYXRl
X21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBh
c3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKIAotICAgIGlmIGFzeW5jX21lc3NhZ2VzOgor
ICAgIGlmIGFzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElT
UEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVz
OjpkaWRSZWNlaXZlJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykp
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5o
YXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyk7XG4nKQogCiAgICAgICAgIHJlc3VsdCArPSBbYXN5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVj
ZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIGFzeW5jX21lc3NhZ2VzXQorICAgICAgICBp
ZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRF
KToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAg
ICAgcmV0dXJuO1xuJykKICAgICAgICAgaWYgKHJlY2VpdmVyLnN1cGVyY2xhc3MpOgogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICVzOjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTtcbicgJSAocmVjZWl2ZXIuc3VwZXJjbGFzcykpCiAgICAgICAgIGVsc2U6CkBA
IC03NzcsMTMgKzc4OCwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVy
KToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTtc
bicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCiAKLSAgICBpZiBzeW5jX21lc3NhZ2Vz
OgorICAgIGlmIHN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19E
SVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZVN5bmMlc01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpXG4nICUgKHJlY2VpdmVyLm5h
bWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlW
RVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAg
ICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlW
RVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAgICAgICAgIHJlc3VsdCArPSBbc3luY19t
ZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gc3luY19t
ZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRD
SF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYg
KGRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKSlc
bicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7XG4nKQogICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGRlY29kZXIpO1xuJykKICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpO1xuJykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggODRkNDM5
YzUwNTQwNGI3ZTU5MDViMzZlN2RlYzc2ODlkZGZhOTQ1NC4uNzA1YzM1MjM5M2RlZTJhMDhkMjZk
ODA4M2ZhYTE1MmZlYmI5Mjc3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2Vi
Q29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFy
Z3VtZW50Q29kZXJzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FscGhhUHJlbXVsdGlwbGlj
YXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9wbGF5RXZlbnQuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dnaW5n
Q2xpZW50Lmg+CkBAIC04MDMsNiArODA0LDI2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiB7CiAKIG5hbWVzcGFjZSBX
VEYgewogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24sCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51
bVRyYWl0czxXZWJDb3JlOjpSZW5kZXJpbmdNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51
bVZhbHVlczwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLAorICAgIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVy
YXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdCwKKyAgICBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlOjpSZW1vdGUKKyAgICA+OworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRy
YWl0czxXZWJDb3JlOjpDb2xvclNwYWNlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVl
czwKICAgICBXZWJDb3JlOjpDb2xvclNwYWNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggMzA2Y2QxZTY5MzU2
NjFhZDQxYzA2MDkyODQ4YmY5YWYzNmIxYjcyNi4uYmIxZmVjMmFhNjE3NzA5NmIzNDJjMDM1OTAw
YmIyYWVmMWE4NjU0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CkBAIC0zMSw2ICszMSw4IEBAIEdQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
TWVkaWFSZXNvdXJjZS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZUxv
YWRlci5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIuY3Bw
CitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAK
K0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwCiAKIE5ldHdvcmtQcm9jZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrQWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTE0LDYgKzUxNiw5IEBA
IFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKIFdlYlBy
b2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKIFdlYlByb2Nlc3Mv
R1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBX
ZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCitXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZC5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
Y3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAogV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcml2YXRlLmNwcAogV2ViUHJvY2Vzcy9HUFUv
d2VicnRjL01lZGlhUmVjb3JkZXJQcm92aWRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRl
eCAwODc2YWRkMTM1NDNlZThmY2VlYmE2MzViYTk5OTM2ZWQ3Yzg2YzU2Li42MzBkMGM0OTY0Zjk3
NDMzNzBiYTI5NjZkMzk4ZTMxMDc5ZjM2ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC01
NTEsNiArNTUxLDggQEAgV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KIAogV2Vi
UHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRy
eVBvaW50Lm1tCiAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAorCiBXZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUJhbm5lci5jcHAKIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVNYWMubW0KQEAgLTYzNSwxMCArNjM3LDE0IEBAIFdlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
bW0KIC8vIERlcml2ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAor
R1BVUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2Vi
UlRDQ29kZWNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdl
UmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90
ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJl
Y2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrTWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWZiZGMyNTc1ZTQ0
ODE4NWU0YmNiYzg0MmU0ZjdhNTQ0MzEzYjQzOS4uMDE1OGEzMWEzM2FhNDgzNDY4YWQxYmQ0NzA4
NTM5ZmE4NTgwMjdhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0zOTc1LDggKzM5NzUsMzIgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAw
N0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0
aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25H
ZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNo
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNE
aXNwYXRjaFBvbGljeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRl
U2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAxNzU0MTIzQzhGRTAyMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMDE3NTQyMjNDOEZFMDMwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyMDE3NTQzMjNDOEZFMDQwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyU2hh
cmVhYmxlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9y
bUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjAxNzU0NDIzQzkwMERBMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0NjIzQzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMDE3NTQ3MjNDOTQ1RDgwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk4
MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlCMjNBRDM2RDAw
MEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE5MjNBRDdCREYwMEJE
QUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4
OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjND
IC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdl
QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAyM0FCMDQ4
QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUlt
YWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDExMjNBQjA3
NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2Vz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmlu
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMy
RTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJE
NUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRTIz
QjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8q
IFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUlu
dGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDA5LDYgKzY0MzMsNyBA
QAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEyRjIzOUIz
QjBDMDA5NTk4RTIgLyogbWVkaWEgKi8sCisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8q
IFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2IC8qIHdl
YnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uY3BwICovLAogCQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNz
Q29ubmVjdGlvbi5oICovLApAQCAtNjQyNSw2ICs2NDUwLDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUy
MDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBt
YWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcy
MUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIx
OThFMjNCNjMzQ0EwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAw
NDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAw
MjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCkBAIC03
ODAxLDYgKzc4MjcsNTIgQEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OworCQk3MjAxNzU0NTIzQzk0NUIxMDA0MTg4MUYgLyogY2cgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3NTQ2MjNDOTQ1RDgwMDQx
ODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJ
CTcyMDE3NTQ3MjNDOTQ1RDgwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gY2c7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OworCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFj
a2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIx
RjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAor
CQkJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmgg
Ki8sCisJCQkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMwMEJE
QUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJF
QzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywK
KwkJCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmggKi8sCisJCQkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5n
QmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBFMjNB
QjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3Jv
dXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzU0NTIzQzk0NUIxMDA0MTg4MUYgLyogY2cg
Ki8sCisJCQkJNzIwMTc1NDQyM0M5MDBEQTAwNDE4ODFGIC8qIEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZS5oICovLAorCQkJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllci5oICovLAorCQkJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJCQk3MjAxNzU0MTIzQzhGRTAyMDA0MTg4MUYgLyog
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjAxNzU0MjIz
QzhGRTAzMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmggKi8s
CisJCQkJNzIwMTc1NDMyM0M4RkUwNDAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90
ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVt
b3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVt
b3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAwMjYy
NjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIzQUIw
NzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyRDVD
MkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJ
CQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICov
LAorCQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENs
YXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmNwcAppbmRleCAxOGU5MzZkZTMyMzA3NzBmMjQzNjFiNmFiYWE4ZTE3ZTRkMmU1YWMwLi4xODhm
YWMyMGExZTkyM2RmNjJiYjFhMzgwNTUwYWFhNGY5NGQ4ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjAs
MjkgKzYwLDM1IEBAIHZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29u
bmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UpCi17Ci19Ci0KLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRp
ZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJv
Y2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCkt
PmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1l
c3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
CiAgICAgICAgIGlmIChhdXRvKiBjYXB0dXJlTWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBj
YXB0dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9u
LCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAjZW5kaWYKICNpZiBVU0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVj
czo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRp
ZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNo
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRl
Y29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7Cisg
ICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLmgKaW5kZXggMzFjNjEwNDY2OWYyZjAyZmZhNDQwZmViODgwOTI2Yzc0YWUy
NmFjZi4uNmQxYjgzZGU1ODM2YWZhZTIxYWZjMzRmNThhMjJlNWQ2ZDMyM2M3MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApA
QCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00
Niw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAK
ICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24u
Z2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFw
KCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogcHJpdmF0ZToKICAgICBHUFVQ
cm9jZXNzQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwpAQCAtNTMsMTAg
KzU1LDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2
b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAg
dm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBvdmVycmlkZTsKICAgICB2b2lkIGRp
ZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFt
ZSkgb3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsK
KwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUg
cHJvY2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2
YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4
MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIs
NyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNz
Q29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3Bh
dGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1OTYzMDY5ZjY2MTgxODNkMDc4YTY0YzJkZWFjYzJkODNh
NGNkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmln
aHQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlID0gVmFyaWFudDwKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBNYWNoU2VuZFJpZ2h0LAorI2VuZGlmCisgICAgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUKKz47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNDJjZjI0NWUzNDVlMWRmZWM2MmRjMWQ3YTNlY2FlZmNkOWFiNWQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YTFiYzlhZTg3ZGM4ZDcyNDI4YTBiODA5Y2FkMGQ4MGE0Y2QxY2I5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdl
QnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0g
T2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNkZDg0Y2U5NTIxZmM3MmM0MjBhZTM5ZjI4ZTljNDAzM2ViYTBlNWIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEx
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhp
Y3NDb250ZXh0Q0cuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyopCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNp
emUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpD
b25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY29u
ZmlndXJhdGlvbi5jb2xvclNwYWNlID0geyBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkg
fTsKKyNlbmRpZgorICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFy
ZWFibGUoaW50ZXJuYWxTaXplLCBjb25maWd1cmF0aW9uKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0
ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChzaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShiaXRt
YXApLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgQVNTRVJUKFdURjo6aG9s
ZHNfYWx0ZXJuYXRpdmU8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRsZSkpOworCisgICAg
YXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShXVEZNb3ZlKFdURjo6Z2V0PFNo
YXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKSk7CisgICAgaWYgKCFiaXRtYXApCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQobG9naWNh
bFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KGJpdG1hcCksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4mJiBiaXRtYXAsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4
dCkKKyAgICA6IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBwaHlzaWNh
bFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fYml0bWFwKFdURk1v
dmUoYml0bWFwKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworfQorCitJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdAoreworICAgIFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBtX2JpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShXVEZNb3ZlKGhhbmRsZSkp
OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworI2lmIFVTRShDRykK
KyAgICByZXR1cm4gbV9iaXRtYXAtPm1ha2VDR0ltYWdlQ29weSgpOworI2Vsc2UKKyAgICByZXR1
cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9
CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX2JpdG1hcC0+ZGF0YSgp
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1
dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5
c3RlbSwgbV9iaXRtYXAtPmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNGEyZGE1
NGIwMmVkYzNlMjVmNDBiMDJjNzA0MmFjNDg0NTUyODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaD4KKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWFibGVC
aXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCA6IHB1Ymxp
YyBXZWJDb3JlOjpQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdl
YkNvcmU6Okhvc3RXaW5kb3cqKTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0OworICAgIAorICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2NvbnRleHQ7
IH0KKworICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShXZWJDb3Jl
OjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFj
a2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNl
cnZlUmVzb2x1dGlvbiA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92
ZXJyaWRlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmLCBXZWJDb3JlOjpDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHNyY1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6
OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkNvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFj
ZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9y
Rm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9y
Rm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1f
Yml0bWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IG1f
Y29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzE5MzExNWRlMTFmMTUyM2Rj
MDkwZjAxMWMxNDY1MTQ5NDk3NWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCYWNrZW5kLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0g
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOworCisjaWYgVVNFKENHKSAmJiAoVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOworI2Vsc2UKK3Vz
aW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBQbGF0
Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ7CisjZW5kaWYKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTUxYjRjZTgw
ZjdiMWE2ZWNiYzgyYmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
LmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VC
dWZmZXIuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAg
IC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZl
ck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisgICAg
Ly8gQ3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVu
ZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX2ltYWdlQnVmZmVySWRl
bnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitSZW1vdGVJbWFn
ZUJ1ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNl
bGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1l
c3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVy
TWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiog
UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3
YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9u
PiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JB
bmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6Oldh
aXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisK
K2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQoreworICAg
IFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4g
Y29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90
ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
LCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VB
cnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tl
bmQoKQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50ID0gMzsK
KyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNCYWNrZW5k
Q3JlYXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0Nv
dW50OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0U2V0
Rmx1c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNo
SWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7
CisgICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZsdXNoSWRlbnRpZmllcjsKK30KKwor
dm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgbV9zZW50Rmx1
c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7Cisg
ICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Rmx1c2hDb250ZXh0KGRp
c3BsYXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cik7CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkZDkxOTk1ZmFlNWVhNmUzZjQ4NzRmNzZhNGNjMzg0
NjRjYWJiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2
ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4K
KyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVy
CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICB+UmVt
b3RlSW1hZ2VCdWZmZXIoKTsKKworcHJvdGVjdGVkOgorICAgIFJlbW90ZUltYWdlQnVmZmVyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlv
biogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRf
dCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8g
QmxvY2tlcnMKKyAgICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKyAgICBi
b29sIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKKworICAgIHZvaWQgZW5zdXJlVXBkYXRlZEJh
Y2tlbmQoKTsKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50
Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworICAgIC8v
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBj
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSkg
PSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAwOworCisg
ICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOyAg
ICAgICAgCisgICAgdm9pZCByZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFn
ZUJ1ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsK
KyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7Cisg
ICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsK
KyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2Fn
ZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzQxZmQyNGYyOTY5YWE3N2QyYmJlZTcyNzE1YmYyNmYzYzliYWQy
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNvdW50ZWQg
eworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdlYkNvcmU6OkZsb2F0U2l6ZSBs
b2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRGbHVzaElkZW50aWZpZXIoV2Vi
S2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Y2UwMjRjN2JiNGMwNzU4Njc1ZjZiMTA3
ZmVkOGZkM2Q3ZTNlZWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
UmVtb3RlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tl
bmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyIHsK
KyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVy
OjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAg
ICB7CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUs
IHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPihu
ZXcgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VEaXNwbGF5TGlzdElt
YWdlQnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV9iYWNrZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoaGFuZGxlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2Vu
ZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICAgICAgcmV0dXJuIG1f
YmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90
ZUZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViZDIwMTYzODA0
YjAyNGQ0ZjE0MDFkNDQ2NjM2MjNhZDUzYTk3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47
Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJh
Y2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wYzU4YWFjNzNlMjViY2E3ZDBhOTMwOTdjNzM2MTk2M2ZlNDBlYmRmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisK
K1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAg
IC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVz
c2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisK
KyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJl
bW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAg
ICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlt
YWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaW1h
Z2VCdWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5k
ZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBmMzk1ODc3ZjQ4
ZTUxNzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAg
LTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUg
IlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJp
bmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFj
a2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAg
Ly8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVy
RGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVyaW5nQmFja2Vu
ZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VC
dWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3Jl
OjpIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQyMzU0NzBjY2ZlN2I3OWJiOTI0NTc4YWZiNDE3MDM1YzkxM2RkMDIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51
bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODgzMWExYjcx
YjQzYjZjMTEwYjg0OTI2NzU5NDI1YjRmN2VmZTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpZiBVU0UoQ0cpICYm
IChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOwor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXpl
ID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYg
KGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNp
emUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNn
Q29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAg
ICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRl
eHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIEFTU0VS
VChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpOworCisgICAg
YXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoV1RG
OjpnZXQ8TWFjaFNlbmRSaWdodD4oaGFuZGxlKSksIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNw
YWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIEltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKG1fc3VyZmFjZS0+
Y3JlYXRlU2VuZFJpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmU3MDEwODk2MmM3MjQyOTI5ZGVl
YTllMzZkZWViYjIwYTY5Njc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFNoYXJlYWJsZUJpdG1hcDsKKworY2xhc3MgSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5kb3cqKTsK
KyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOwor
CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1c2luZyBXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykpCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApp
bmRleCA4ZTRjOTM3NWQ3YjhjYzEwZmZhMDA4MDNkNDgyMTczYmU1YTM1NThhLi43NzI2ZmU5NDhh
MjI3OWJiZjkzOWYwNjQ0ZjY0NTY4MmVkNmI3OTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApA
QCAtMTAyLDYgKzEwMiwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1dlYkF1dGhlbnRpY2F0
aW9uQ29uZmlndXJhdGlvbi5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisj
aW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwpAQCAtODgxLDE1ICs4ODUsMjIgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9t
ZUNsaWVudDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVF
U1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZy
ZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3
aW5nQXJlYSA9IG1fcGFnZS5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0Fy
ZWEtPmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBu
dWxscHRyOwogfQorI2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBX
ZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKyAgICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3Jl
YXRlKCk7CisjZWxzZQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNl
bmRpZgorfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIo
RnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBm
ZGEzMzhlY2ZhNjg1NWUxYzFkNjA4NTBlNDcxZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1
NzdkOTQwMzIzNTUxYjRmNTNiMmQxZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiAr
MjMxLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25p
dG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5
SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOwor
CiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMo
KSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0
aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUw
MzQyYmI4MjI0NmNkMTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4
NzU0MTI4Y2U4ZmFiMWVjYmJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIw
Miw3ICsyMDIsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6Omlt
YWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBw
YWludGVkIGluIGFuIHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFw
c2hvdHRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5z
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQog
ICAgICAgICByZXR1cm4gbmlsOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWViNzI3YTJkMjNhNjZkYjIyMTZmOGFhZjIz
NzY5MmUyNTY4OTg0ZS4uM2RmZjhhN2IwODkwMjBlNzIzYWIzODAyNTE5NWM1M2ZjZWU2NDk5ZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTAxLTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUg
cmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAy
MC0wMS0xMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAg
ICAgIFJFR1JFU1NJT04ocjE4NTgxNik6IEluIHRoZSBIb25nIEtvbmcgbG9jYWxlLCBuYXZpZ2F0
b3IubGFuZ3VhZ2UgcmVwb3J0cyBpdCdzIGluIHRoZSBUYWl3YW4gbG9jYWxlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3Rl
ZC50eHQKaW5kZXggMWI1N2U3OTFiNzJhY2NhODc3NjE0NDc5YjRkYzdmZTVjOTU5NGQ3Ny4uMzRj
ODdiOWIwNDI5NDU1YTliZjExNDFjNmJmYjM5NzFjNzUyMGI4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBi
L0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4
dApAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAocmVzdG9yZS1pbmRleCAwKSkKIChzZXQt
c3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChmaWxsLWNvbG9yICNDODAwMDApKQorICAo
Y2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2UtdGhpY2tuZXNzIDEuMDApCisgIChmaWxs
LWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIDEpKQogKGZpbGwt
cmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDEwLDEw
KSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387434</attachid>
            <date>2020-01-11 09:56:57 -0800</date>
            <delta_ts>2020-01-11 10:31:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200111095655.patch</filename>
            <type>text/plain</type>
            <size>490191</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM1MWQ3NGM4ZGRhNmM2
ODdjMjY2MzdmMDM0ZTAyMzhhYjQyZDMwMS4uZTJmYWQ0ZGY5NmU0YzU2ZTJiN2I1OTdiMzFmZjZk
MmE5YjM1YTg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2OSBAQAorMjAyMC0wMS0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworICAg
ICAgICAgICAgLS0gU2hhcmluZyB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIGRhdGEKKworICAgICAg
ICBUaGlzIGlzIHRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIEltYWdlQnVmZmVyOgorCisgICAgICAg
IEltYWdlQnVmZmVyCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNr
ZW5kVHlwZT4KKyAgICAgICAgICAgICstIFBoeXNpY2FsSW1hZ2VCdWZmZXIgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQgICAgIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRU
eXBlPiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgICstIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgLS0tLS0rICAgUmVtb3RlSW1hZ2VCdWZm
ZXIgLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAg
ICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAg
IHwgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciAtKyAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgLSsKKyAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
KyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgICAgICAgICstIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eSAtLS0tLS0tLS0tLS0tLSsKKworCisgICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNo
eSBmb3IgSW1hZ2VCdWZmZXJCYWNrZW5kOgorCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZAor
ICAgICAgICAgICAgfAorICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAg
ICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAg
Ky0tIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgfCAgICAgICB8ICAg
ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwg
ICAgICAgKy0tIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorICAgICAgICAgICAg
fCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZAorICAgICAg
ICAgICAgfCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZAorICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAg
ICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAg
IEFzIGFuIGV4YW1wbGUgZm9yIHRoZSBwbGF0Zm9ybXMsIHdoaWNoIHVzZSBDRywgSW1hZ2VCdWZm
ZXI6OmNyZWF0ZSgpIHdpbGwgCisgICAgICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9m
IEltYWdlQnVmZmVyOgorCisgICAgICAgICAgICBJbi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAg
ICAgICAgICAgICBVbmFjY2VsZXJhdGVkOiAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAgICAgICBBY2NlbGVyYXRlZDogICAgUGh5c2lj
YWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAgICAg
IE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJhdGVk
OiAgCisgICAgICAgICAgICAgICAgICAgICAgICBXZWJQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQVVByb2Nlc3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+CisKKyAgICAgICAgICAgICAgICBBY2Nl
bGVyYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPgorICAg
ICAgICAgICAgICAgICAgICAgICAgR1BVUHJvY2VzczogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5PEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4KKworICAgICAgICAq
IEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJv
YXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRp
emVEYXRhSWZOZWVkZWQpOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAg
ICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlQ29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZm
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3Bs
YXlMaXN0QXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2Nl
bGVyYXRlZCBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6Cisg
ICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQg
Y29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6
c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICog
cGxhdGZvcm0vSG9zdFdpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29weVJlY3RUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5RnVuY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1h
Z2VCdWZmZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2lj
YWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZl
cjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OmRyYXdTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5
ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1
ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpzZXR1cENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkpOgor
ICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVZlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcDoKKyAgICAgICAg
KE5pY29zaWE6OkdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAyMDIw
LTAxLTEwICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10g
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0VGFibGVDZWxsQm94IHNob3VsZCB0YWtlIEhv
cml6b250YWxDb25zdHJhaW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAyYzMwZjE3YTIyNGJmYmVjNzc2OGZlZjQ3
MzU0ZDg3MDliMGY2MmQ0Li4xMGUxOTJiNTQ5ZjQ5Y2Y1Njg0NzEwNzdjMjllYjc2MjNmOGM1NTEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAyMC0wMS0xMSAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMg
cmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQp
OgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToK
KyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5
bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1
c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNl
dEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpy
ZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAx
LTExICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBjb3JyZWN0IGdyYW5kZmF0aGVyaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIElUUCBkYXRh
YmFzZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMzFkODIyNDBiMTk4
MDkxYTVlYzJmZGE5ZmVlNjAwYTZjOWM3N2NiNy4uNWY1NzIxY2Y3NmZjODJmNDUxYjQ1YWNjZWI0
NTBkYmVmYTczMmZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDIwLTAxLTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6
OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDkg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQg
VEFSR0VUX09TX01BQ0NBVEFMWVNUIGluIG1vcmUgcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRl
eCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5M2I5OTY0ZTc3Li44NWE3YmMwMmZkMDc1
YWYzZTgwNTdhM2Q3OGQyODBmNzZhODE0ZmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUs
NiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2Ft
ZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1v
bml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzEx
MDcsMTggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlz
cGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
ZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1v
dGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGFiU2l6ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRh
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCmluZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBk
MWNmYjZlODBiMjMxZGQ1NmQ2YjAuLjc0NjVkMGU2YTg2Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhl
N2FhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJk
L0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRpemVEYXRhSWZOZWUKIAogICAgICAg
ICBhdXRvIGJpdG1hcEltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBiaXRt
YXBJbWFnZS0+c2V0RGF0YShXVEZNb3ZlKGJ1ZmZlclRvU2FuaXRpemUpLCB0cnVlKTsKLSAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNp
emUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBtX2RhdGEg
PSB7IG51bGxTdHJpbmcoKSB9OwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBm
M2NmOTQwZC4uNWU1NDI2YzExNGQzYWNmNTBiNDcxOGJjY2Y0NmEzN2MyY2NhZjk4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC0xMzIsOCArMTMyLDkgQEAgZWxzZSAo
KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzcsOSBAQCBlbHNlICgpCiAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3Ry
eS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGMwM2NlNmI1MTMxODIxYTAxY2M3ZDY2
NTNkMTY5MTkxZGJiNzlhODEuLjBiMmJjY2M1YjU2NjYwMzU0NTIzN2JkNWFjMDM1YWMxMWI0ZDJj
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0yODksOCArMjg5LDEwIEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rl
ckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApAQCAtNTI1LDcgKzUyNyw5IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0MTEyMTU1N2FlNmYzNWRi
OWFkNWY0YzFlOGFjY2NhMDg2NjNlNmZiLi43YTIwOWE4NjdkM2UxYTE0MGRiMjAzNDQ1ZWQzYWRl
ZTI3Njg4ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2OSw2ICsxODY5LDcgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMTg4OCw2ICsxODg5LDcg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGU0NTNkODkwOTdlNjg2YjJjMzM1
MmJhZDY2ZWU3MTIzNDdjMTY2YjUuLjRmMDNlYzIzZDhjNDBmYjk2YTJlNTc3MDFlMzY2YWIwMTRj
ZWNmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjg4LDggKzI4OCw5IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggNzIwNWUyMGQzYWI0ZTM5
ZmJlZTRiYjk0MzFhZWNiNGJjY2MyOGJkMi4uOTdmMzM2ZTdjNWM5ZThkMGRhMjVlMmJkNGU2MWFk
NzFhZTUyZGYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTg0LDcgKzg0LDYgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0
aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlR3RrLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
YWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA5YmI4NDMxNDUzOWFkMDk1MTQ2MzFiMjEzMDYxNmFmNjBiYTlhMWMzLi41
MzYwZjQ3Yzg2NzliMTJmODg1Yzc5MjAwMmQ5NzNjYzJlMjRmMWIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1
LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBE
NjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9
OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkw
MDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRX
cmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZF
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNT
VkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVm
RWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRH
bHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVt
ZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVm
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07
CkBAIC0yMTMwLDE0ICsyMTI4LDI2IEBACiAJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBB
bmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFFMkM0MjQyMUM5MzUxRDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzFFQURDRDgyMjA4N0U3MjAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFQURDRDYyMjA4N0U2RDAwNjVBNDVGIC8q
IFBvaW50ZXJJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUZDRUQ3MjAyQjM4
OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzU0QTIzQzk2OURGMDA0MTg4MUYgLyogUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMDE3NTQ4MjNDOTY5M0UwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzMxMjIzRUM4NTQwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1
MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAv
KiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYx
RUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUND
QkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBG
NUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQy
MzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2
MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmlu
Z01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
MzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlG
N0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMw
MUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUw
MURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkw
MTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZB
NkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5
c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJC
RTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQy
NzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAw
QTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMg
LyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUz
Q0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0Uw
QjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZl
bnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VD
NzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDIsOSAr
NjU1Miw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2Vi
RXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQx
MEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NW
R0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMiw4ICs5NjA5LDEyIEBA
CiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVj
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5
OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBv
aW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0ODIzQzk2OTNFMDA0MTg4
MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIw
MjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3Bl
cnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFs
dWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJp
bmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oOyBwYXRoID0gLi4vQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxl
bmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3
RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NjI0LDcgKzk2MzUsMjAgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8q
IEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JH
Qi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0
NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNS
R0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0
MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIw
MEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FB
QzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYy
M0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgy
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGlu
Z09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRl
cmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVy
aW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8q
IEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VY
VHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJG
MDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkw
NEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjY4OCw3ICsxMjcxMiw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUw
QUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAv
KiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEx
RjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg4LDYgKzE2NzExLDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJ
MEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJCQkU0
MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJ
CQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJ
CQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJ
CQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8s
CkBAIC0yNDg4Nyw2ICsyNDkxMSw3IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBj
ZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIzODI2
QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQkw
RkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKQEAgLTI0ODk2LDkgKzI0OTIxLDEy
IEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmgg
Ki8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJ
bWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MEQyM0FBRUNBMjAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwQzIz
QUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3
MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1
IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAgLTI0OTk0LDYgKzI1MDIyLDcgQEAKIAkJCQk0
QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4
Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFF
N0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmggKi8sCisJCQkJNzJBMDdDNDUyM0JF
RUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0
RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0
OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJ
CQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dC5jcHAgKi8sCkBAIC0yNTA4NSw3ICsyNTExNCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAw
NjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8q
IEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAv
KiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJ
bWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VG
cmFtZS5jcHAgKi8sCkBAIC0yNTE0Miw2ICsyNTE3Miw5IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5
OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8q
IFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzIwMTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2
IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyog
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAw
NDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTE1MSw2ICsyNTE4NCw5IEBA
CiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0Ex
NTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDcz
QTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNzJE
NUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcy
RDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzIz
ODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLywKIAkJCQlBNzNGOTVG
QzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICovLAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKQEAgLTI4OTkzLDYgKzI5MDI5LDcgQEAKIAkJ
CQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCQjVDODgxRDVENkY0NTAwNUE3MUY0IC8qIEFsbERl
c2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzODI2QzIyM0M1NkY3
OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIz
RkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5
Njg4LDYgKzI5NzI1LDggQEAKIAkJCQkxMTJGQjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxh
eUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNC
MCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyNzIz
QUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0Ey
Q0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMzAyOTYsOCArMzAzMzUsMTAgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyog
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0
RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMTIz
QUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxRjFFQTcyM0FENTBBMTAwQkRB
RkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xz
QnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAw
N0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MTc2Nyw2ICszMTgwOCw3IEBACiAJCQkJQTU1NEI1RjMxRTM4MzkzQTAwMUQ0RTAzIC8qIFBlcmZv
cm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1ODFGQjUxNTIwRjkzQjAw
M0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkUwRjQy
M0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURCQzFCNTYyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1
cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUQyQzgyQjcyMzZBM0Y2
QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjggLyogUGljdHVyZUluUGljdHVyZVdpbmRvdy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMTc4Niw2ICszMTgyOCw4IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1
MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVw
YWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAxNzU0QTIzQzk2OURGMDA0
MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZv
cm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NjMsNiArMzIwMDcsOCBAQAogCQkJCUJD
RUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJl
c291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAw
RjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4
MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVy
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNjRkZmYyZDk4NGVmNzJkZDll
YmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0ZTQ5MGFiNGQ4MWJkNmZmMTI4ZTI1YTc3Njc0MWQ5
ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxT
aXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXpl
LndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNh
bFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0g
YnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQo
KSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJh
dGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVm
ZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhl
aWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJp
dG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5D
bGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4
YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0
NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApA
QCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFu
c2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhp
cyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAg
ICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQp
OworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4g
JkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42
NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3Vz
dG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwg
IWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9j
b3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcg
QEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAg
IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3Rp
bmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBt
X2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9k
ZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29w
aWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAx
ZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkx
ODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAi
Q2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
QEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
I2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQog
CiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMs
IGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1
cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRo
ZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAt
ODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0
ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpz
ZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsK
LSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdp
bmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcg
PSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0g
ICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0
cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0
cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsK
LQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAg
ICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4
dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBm
bGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAg
ICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBi
dWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZs
YWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRl
ZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52
aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+
cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQg
YSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9v
bCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVl
T3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7Cisg
ICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBv
biBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAg
ICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVs
c2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBz
aG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICBy
ZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENv
bG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0
KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMy
ZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBp
ZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2
Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlz
cGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZh
bHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9j
b250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVj
M2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZl
NjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSAr
NjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1z
dGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsK
K3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6
OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjEx
ZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0
cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkK
ICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsK
IAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0
dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBV
bmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUlt
YWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3
aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVl
bkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVy
KCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAog
dm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXgg
ODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMz
NjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4
MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9z
aXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNj
ZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBA
IC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1
cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcElt
YWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmln
aW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0Nv
bnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0Nv
bnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5
CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3Ry
aW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3Bs
YXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5n
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250
ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4
dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwot
fQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+
JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFs
aXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShm
bG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9h
dCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFn
ZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1F
eGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4
LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFz
QmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBn
ZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFp
bnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3Jl
YXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRl
QXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBu
dWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3Nh
Z2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxv
YXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1h
Z2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0g
ICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAg
IHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRp
cnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxv
YXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZl
ciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyAr
MjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0
KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVj
dCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1v
dmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7Cisg
ICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0
ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpA
QCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpw
dXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VS
ZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkp
OwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRC
eXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwg
SW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXIt
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpk
YXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VS
ZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWRE
cmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9y
bSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUy
YmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0
ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1
YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4g
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxp
c3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlv
biA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250
U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRl
bXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAot
ICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBm
bG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZs
b2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTll
YmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVu
ZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVu
ZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBS
ZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGlj
IFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYg
Y2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpA
QCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2Yjky
YjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAg
ICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RD
b3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5j
b3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAg
ICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNl
OjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgp
LCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5n
U3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAw
LDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlw
ZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0
byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCks
IHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVy
bmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00
NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsK
KyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Uu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3
Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8g
dGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0
LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9y
bWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAg
ICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4
dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5m
byh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMt
PmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
dGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcg
QEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRv
QnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBv
aW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwg
c3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6
OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hv
dWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNT
RVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5
MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhm
YzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXll
ci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQg
bm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNp
emUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVj
dC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9y
KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2Fm
NS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlk
ZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xp
ZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMp
OwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQo
KSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRl
cmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0
dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hy
b21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDku
LjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJp
bmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdl
U3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYz
ZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUz
NWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3Ry
YWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIK
QEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJl
ZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5
SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3Jh
cGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVy
KikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAw
YTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4
YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25h
cHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJl
CiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxl
RmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGlt
YWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9y
KTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVy
LT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYx
OWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1
YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hv
dChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAg
ICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAg
ICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAg
ICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VS
ZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURh
dGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2Fk
NjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNTVhNzAwNWU0Mjg1YWI0NzdmOTM5YmU4Y2U2
YWVhYjU2MjA2ZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8u
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcg
KzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cu
aAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li5mNWYyMTdj
Y2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
SG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vy
c29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5n
QmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKyAgICAKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAgLTc1LDUgKzc3LDMgQEAgcHVi
bGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSG9zdFdpbmRv
d19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA0MjFkZmJk
OTU3NTRjNDYyNzU3Yjc4ZGJmYTQxMDI1NDMyYWYwYjdkLi5kMjNiYjAyM2U3ZDc4NDBhZWJhYTQx
NGY5OWYwYmMwYzFmMmNkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBo
YVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUwNTQx
NmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11bHRp
cGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZkNWJhMjAwNjkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3Mg
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5n
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihz
dGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJhY2tlbmQsIGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFC
YWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAg
ICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAg
eworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRl
eHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0
OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3
aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250
ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4
NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4uMzViZDU4YzNkMTJmZjg0YzBl
NjY0MmY4MTgyNzA5OWNlODM3ZTI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsK
ICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5
Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3NGRkMzc0ZWVhMWQ0Mjg0NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggY2VlYTFkYTQwZWIzMmZm
NzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNiZTRhYzZiODg0MzY0YzU1NDM5N2Y3
ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0
Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyMiwxNyArMTIz
LDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1lbnVtIFJl
bmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2NlbGVyYXRlZE5vblBs
YXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24gcmF0aGVyIHRoYW4g
cGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAgQWNjZWxlcmF0ZWQK
LX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0gICAgUHJlbXVsdGlw
bGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21wb3NpdGVPcGVyYXRv
ck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBT
dHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9vbCBwYXJzZUJsZW5k
TW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAgLTE0Myw3ICsxMzMs
NiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIFdFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2Fw
KTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IGMwMTI2MzcwY2I4NjU5MjdhMzJiZjExZjYxNDg2ZDcx
YWY3YjQ3NTguLjRlMmJlNzFjNzQxYzU1ZjU2YzBhZDA0NmE3OTdlNTBhMDk3MTg4YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAg
LTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKK30KIAotV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Cit9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3
IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAo
c2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZm
ZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwg
Y29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3Jh
cGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNp
emUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLSNpZiBVU0UoRElSRUNU
MkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
cihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOwor
ICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKKworc3RhdGljIGNvbnN0IGZsb2F0IE1h
eENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVh
ID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKIGJvb2wgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKQEAgLTEwNSw5
NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlvbigpLCBjbGFt
cGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShDQUlSTykK
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNrZW5kcy4KLSAgICByZXR1cm4g
eyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSkKLQotRmxv
YXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBzaXpl
KSBjb25zdAotewotICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RD
b2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBw
b3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAg
ICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRz
dENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29s
b3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2Ug
PT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3Ip
OwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNl
UmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIElt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50UmVj
dCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNy
Y1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7Ci0g
ICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+
aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQg
KyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcg
KiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNy
Y1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRC
eXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAg
ICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0
VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYs
IEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0ludFNp
emUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxzZTsK
KyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9y
bSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9uIHRo
YW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAq
IGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogewpAQCAtMjA0LDYzICsxMjUsMjcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QKIAog
ICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRl
eHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJ1
ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUo
c2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAg
IGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIFNl
dCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0
LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICBy
ZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgcmV0dXJuIGNyZWF0ZShz
aXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZW5kaWYKLX0KLQot
SW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0
aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLWJv
b2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50
b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7
Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoY29udGV4dC5zY2FsZUZhY3RvcigpLCB0
aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5z
aW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBm
cm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0
YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50
ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0g
ICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVp
Z2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVz
b2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkg
Y29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVm
ZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
IH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCAzYmRlZTRlZTAwZWQxN2Fl
MzQzYjJmNmE4ZGRkMDA5Mzg5YzJlNmJmLi5jNjBiNzVkNGZiZmJhNWQyYmQ0NTBiMTNhNzUzMTMw
ZmM2YmNjYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE3MCArMjcsODEgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7
Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFz
cyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5n
U3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29w
eS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZl
Y3QgdGhlIGNvcHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAg
Tm8sCi0gICAgWWVzLAotfTsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5n
Q29udGV4dDsKK30KIAogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBw
dWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBm
YWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9z
dFdpbmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0
V2luZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVm
ZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBi
dWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpOwogCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2lu
ZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotICAgIGJvb2wgaXND
b21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKLQotICAgIC8vIFRoZSBhY3R1YWwgcmVz
b2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotCi0gICAgRmxvYXRTaXpl
IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKSBjb25zdDsKLQotICAgIGZsb2F0IHJl
c29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVy
IHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3Rh
dGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2Fs
ZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsK
KyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0
U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24gdGhlIGZhc3RlciBjb3B5SW1h
Z2UgTW9kZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlmIGl0IHN1cHBvcnRzIHRoZSBE
b250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9yIHJldHVybiBDb3B5QmFja2lu
Z1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0
Q29weUltYWdlTW9kZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVy
KCkgPSBkZWZhdWx0OwogCi0gICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Zmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2lu
Z0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJh
d2luZ0NvbnRleHQoKSB7IH0KIAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJl
c29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0
ID0gMDsKIAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgp
IGNvbnN0OwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVj
dFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zv
cm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xv
clNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAs
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25z
dDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgc3RhdGljIE5h
dGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9J
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgLy8g
RklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJl
c3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQg
YXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVt
LCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RD
b2xvclNwYWNlKSA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBj
bGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNr
ZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVj
dCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFn
ZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRo
ZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRv
TmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVz
aENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9y
ZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4
dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAg
dmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0
ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29v
cmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKIAotICAgIHN0
YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBp
bmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5k
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7
Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBj
bGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50
SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0KLXByaXZhdGU6Ci0g
ICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRT
aXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAv
LyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4g
b3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3Vs
ZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAg
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0Nv
bG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNj
ZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0j
ZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7CiB9OwogCi0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rv
cjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDVjOWI3ZDViY2IwMDQ5NmJlN2YzNzk4
M2IyZDA5MjhiNGRjNTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6
ZSkKKyAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFsU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
eworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZs
b2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRo
KCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChz
Y2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXpl
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IElu
dFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGlu
dGVybmFsU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJm
bG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5h
bFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gaW50ZXJuYWxT
aXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9J
bWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVy
biBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgSW50
UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplKTsKKyAg
ICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29yZGluYXRlU3lzdGVtOjpMb2dp
Y2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIHVu
c2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAg
ICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAg
ICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAq
c3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBv
aW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQorCitSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRl
c3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBh
cmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsKKyAgICBhcmVhICo9IHNyY1Jl
Y3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIWFycmF5IHx8ICFh
cnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgYnVm
ZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAgICBzcmNS
ZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBzcmNSZWN0KTsKKyAgICBkZXN0
UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAg
ICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0Lngo
KSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKC1z
cmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgp
KQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJl
Y3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwg
c3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBz
cmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RS
ZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisg
ICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkpOworCisgICAg
aWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkg
LSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6
ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJ1ZmZlclJl
Y3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICBpZiAoc3Jj
Q29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQ
aXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxb
Ml0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90
IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsK
KyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQs
IHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7Cisg
ICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAg
ICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBk
ZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3Jj
UGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JG
b3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4
ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0
UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRl
c3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAg
ZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBd
ID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxw
aGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3RvcikoQ29sb3JGb3JtYXQsIGNvbnN0
IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3RhdGljIGlubGluZSB2b2lkIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoCisgICAgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3Jt
YXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90
KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnl0ZXNQZXJS
b3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWln
aHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7
IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0LCAmc3JjUm93
c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBzcmNSb3dzICs9
IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Cisg
ICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0Nv
bG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dz
LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5SW1h
Z2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihz
cmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRl
ZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBk
ZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
PihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAg
ICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRS
ZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJh
eSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVk
LCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3Jj
UmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEo
KSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7Cisg
ICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVp
bnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHNyY1Jl
Y3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsK
KworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNS
b3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQ
ZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5Owor
fQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCB2b2lkKiBk
YXRhKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAg
ICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNy
Y1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJl
Y3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQ
dXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQs
IHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAq
IHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0
YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBl
ZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDA4NjMxZGFiMWRlMDA2OGM4
MWM0MzgzMTc2NjljNGMxODQ2ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUgIk5hdGl2
ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgewor
ICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0
IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50
IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVz
b2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3Mg
Q29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2VudW0g
Y2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisgICAgQmFj
a2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsK
KyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsg
cmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0
dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdl
PiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVy
dFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNl
KENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5
c3RlbSkgPSAwOworICAgIAorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwg
Ym9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVf
RVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0
YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJ
bnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFS
ZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVhbCBD
b2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZvcm1h
dDo6UkdCQTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBp
eGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90
KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRp
bmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0sIHZv
aWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIEludFNpemUgbV9p
bnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29sb3JTcGFj
ZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZiZDEyYWJlNTQzYzNmMjAzNGY2MTU4
YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgi
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlz
aWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlz
aWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2OTRkMzgxYWNiYzkyNjBkYmI0N2U5
ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVi
bGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1
ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEltYWdlQnVmZmVy
LCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tl
bmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2lu
ZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1h
Z2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNhbEltYWdlQnVm
ZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1f
YmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQaHlzaWNhbElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJl
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJh
c2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJh
Y2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgaW50ZXJu
YWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJl
QmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVu
c3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBzaXplX3QgbWVt
b3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3Vy
ZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2Fs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgc2lu
a0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4
dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvSW1hZ2Uo
cHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3Q29uc3Vt
aW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENv
bG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0
Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7
CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1
c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBl
LCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5h
dGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQ
aHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5k
LT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVzdGluYXRp
b25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWJjZjFlMjBhODdlZDI5ZmFiOGUwNDZjYmIzNTRmMmEzNTk2MzMyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworI2lm
IFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorI2VsaWYg
VVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisj
ZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBV
U0UoQ0cpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBs
YXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7
CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgUGxhdGZvcm1B
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3Vz
aW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kID0gVW5hY2NlbGVyYXRlZFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
OworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVm
ZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3Jt
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlz
dEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjgwMDZkOTc5NTE0NTYxNzAwOWIzNDk2ZTEy
YjA2NTNkYWViYTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjZWxp
ZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIK
KyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7CisjZWxpZiBVU0Uo
RElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRhMGFmYTc5ZDc0NjFjZDlm
MmYxMDkxMzUwYzgxNWRiYmJkN2JjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNo
cm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcg
UmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAq
c2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAg
IHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2Nl
bGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MWI5MmQ1ODRmZWU4ZjRhZjdhODU5NjRlYWFi
YzFjZWQ1MDE3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93Owor
Y2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JFX0VYUE9S
VCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tl
bmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
KyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJp
bmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2Rh
NzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgewor
ICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBS
ZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEwNzY3OGM1
NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMz
MzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRj
aEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2Nl
bGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAg
fQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3co
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllcklt
YWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxs
YmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBV
bmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAK
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBs
YXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBh
dXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03
MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5n
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAg
YXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAg
IGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0g
bGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2
b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2Us
IGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJs
dXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBs
YXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBs
YXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0
ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRh
dGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50
U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxh
eWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdl
UHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApp
bmRleCA2MmM3OWYxM2ExYzcyNGRkZjM3YTk0NjRmODMyY2Q2Zjc3OWUwN2Q4Li44MGEwMjVlOGU2
Y2E4OGE2YjQ3ZmM3ZmRjNWU1YzVlMjUwZjlmZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAg
LTE3NCw3ICsxNzQsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBk
cmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2lu
LCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0
YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkp
IHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNv
bnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmln
aW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNo
YWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFs
cGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGlj
IHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdT
aGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRy
YXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFn
ZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAg
aWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFj
ZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRl
T3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAg
IH0KIH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBs
YXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAg
IHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllcklt
YWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VC
dWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmln
aW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxT
b3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJl
MTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAy
ZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2
OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUlt
YWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDljNzZlMjkxMmY4MWZjOTRhZGI1YzQ4
NDQ1MjcxMzQ2MGRjZmIyOGYuLjI5YTBlYzQ5OTRmMzYxNWQ4N2IxYmI0ZTFlMzNkNzY4ODA3Y2Jh
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDExLDcgKzQx
MSw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBi
dWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fp
cm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBk
ZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3OTY1N2UzYjI5OWVkNmViNGM1Y2MzNWRiOTUzMjQ1Nzg3Nzc1YjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlS
TykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25z
LmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8
RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYg
VVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VT
KQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRl
eHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmlu
Z01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAg
ICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykp
OwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0K
LQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5k
ZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNl
bmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6
OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBp
ZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0
dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
LSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0g
ICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29t
cG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBt
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3Vy
ZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0
KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwot
fQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkK
LXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3Vy
cmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0
ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAg
ICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5s
b2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1f
c2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAg
ICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8
Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5p
bXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZv
cm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0
IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2Vi
Z2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNl
cyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28g
d2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZm
ZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBt
X3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0
b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2Nv
bXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAg
ICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2Vu
ZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgp
LCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1
dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNh
dXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20g
YSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0g
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9E
ZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNl
IGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVh
ZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xP
Ul9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNv
cHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJm
YWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29w
eTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2Vy
Y2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAg
ICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5U
X0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWly
b1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6
OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNv
ZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0g
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJu
IGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSks
IHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29s
dXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8g
TWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0g
Y2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxl
ZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlv
bj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJl
c3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNp
emUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6
ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdN
b2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFj
ZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0
dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAg
ICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxs
b2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0K
LSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQotI2Vsc2UK
LSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7Ci0jZW5k
aWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNl
RGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jf
d2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lk
KiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5o
ZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFj
ZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9p
ZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNl
dCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2Nh
bGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0
ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0
LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNj
YWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0g
ICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVh
c2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1h
cEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkp
OwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgp
Ci17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgp
KSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAg
ICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAg
ICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFs
aXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRl
c3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3Rp
bmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6
Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2Uu
Z2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0g
ICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRl
ZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCog
cm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewot
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9y
IHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAg
ICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3Jl
ZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3Iu
YWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xv
cihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtf
ZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNp
emUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1
cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVy
bHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZh
Y2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdF
KQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAg
cmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
LX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSBy
ZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFy
ZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWln
aHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcg
MiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0Lngo
KSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAv
LyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0g
MDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0
LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0Lngo
KTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBk
ZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
ZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBp
bnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0
LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwot
ICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwg
YmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5z
IDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8g
VGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRo
ZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1h
Z2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFk
anVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJm
YWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lu
eSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRv
bmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFy
ZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUu
d2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgp
LCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIq
IGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0
OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2ln
bmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJp
ZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1
bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
dW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2
b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBv
bmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNp
dmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+
PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+
PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDAp
ID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYp
OwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0g
cmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVz
UGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0g
SW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9
PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0g
ICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9y
ZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRp
b25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2lj
YWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJ
bnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6
ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3Np
emUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJl
Y3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0
LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3Rv
cmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2Rh
dGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0
IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3Rv
cmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNh
bERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+
IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBp
bnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxl
ZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERl
c3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAg
QVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsK
LSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRT
b3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkg
KyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2Fs
RGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5k
eCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0
eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0
eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRl
c3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGlu
dCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0
LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXpl
LmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lu
eSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERl
c3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVu
ZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAg
ICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNh
bERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBk
ZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVy
LgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93
cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZh
Y2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3Qp
OwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9y
ZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVj
dC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0
aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1h
Z2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2Uu
ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkg
KyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykg
ewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCog
cGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcg
Q29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAg
ICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAg
ICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBi
bHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5n
bGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNh
bE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0g
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ug
b3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEu
bV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVt
bnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2lj
YWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVj
dC55KCkpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLX0KLQotI2lmICFQTEFURk9S
TShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0gICAg
aWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVu
ZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9S
OwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJvb2wgZW5j
b2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
VmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwg
bWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVk
IGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFt
KGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOwot
fQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFs
aXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwot
Ci0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRh
OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNv
ZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBl
LCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBlbmNv
ZGVkSW1hZ2U7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWly
byBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5n
ZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVD
b250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFw
cGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQs
IG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0
Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9k
YXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1f
ZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0
YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
JiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZh
cyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5
cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFy
Z2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdl
dCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zm
c2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3Qg
ZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEu
bV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5h
bGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlw
bHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjOWIyMWQx
YWNlNTJiNWZjMDQ4OTg0YWU3ODNlYzA0MWY2NjUxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFj
ZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29u
dGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1f
c3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3Rv
cmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNh
aXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkg
PT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
bV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAgICAgICBj
b3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAgICAgIGNv
cHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFn
ZShjb3B5QmVoYXZpb3IpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBh
c3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOworfQorCitSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNv
bnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5n
U3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFnZSgq
ZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWly
bzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdl
KCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5
QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29udGV4dC5w
bGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RSZWN0LCBz
cmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmND
b2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChzcmNDb2xv
clNwYWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5
IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAo
KHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6
OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkr
KykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAg
ICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAg
ICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICog
MjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAg
IH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7
CisgICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVU
PSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBs
aW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlb
aV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBs
YXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30KKworU3Ry
aW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwg
cXVhbGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVu
Y29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRh
KTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0
RGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0Rh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25z
dAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBj
YWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7CisgICAg
cmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBh
dXRvIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCk7CisgICAgY2Fpcm9fc3Vy
ZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURh
dGE7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQorICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOworCisgICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOworICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxz
LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgorICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOworCisgICAg
cmV0dXJuIGltYWdlRGF0YTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3Jk
aW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
aW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6
ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEltYWdlQnVm
ZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3Jj
UmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVjdCBkZXN0UmVjdCA9IHsgZGVz
dFBvaW50LCB7IHNyY1JlY3Qud2lkdGgoKSAqIG1fcmVzb2x1dGlvblNjYWxlLCBzcmNSZWN0Lmhl
aWdodCgpICogbV9yZXNvbHV0aW9uU2NhbGUgfSB9OworICAgIGNhaXJvX3N1cmZhY2VfbWFya19k
aXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCBkZXN0UmVjdC54KCksIGRlc3RSZWN0Lnko
KSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MjJiOWE3ZTFhMDYzNzZhOTAwZjZhNDkwNWFhMjE1MDFi
ODZhMWMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsxLDc1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6
ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVs
emUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUg
KEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8p
CisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRDYWlyby5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZl
ckJhY2tlbmQgeworcHVibGljOgorICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFn
ZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9p
ZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOwor
CisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0
ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgor
ICAgIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
JikgeyB9CisgICAgTmF0aXZlSW1hZ2VQdHIgY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNv
bnN0OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgb3ZlcnJpZGUgY29uc3Q7CisKKyAgICBt
dXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICBQbGF0Zm9ybUNv
bnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGU5MTAwZjc0ZWEwYWVjZjEw
MjFjMDMzODQ5OWQ3MzExNmFlODQ3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5o
PgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlFR0wu
aCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRl
IDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+
CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2Vsc2UKKyNp
bmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
KTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRl
KHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sK
KyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6
OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBj
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUg
dGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3Ig
ZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICB1
aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xC
aW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xB
TVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0
b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50
ZXJuYWxTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9E
ZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNl
IGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVh
ZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9D
T0xPUl9BTFBIQSwgdGV4dHVyZSwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5o
ZWlnaHQoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlS
T19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjbGVhclN1
cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0ZXh0dXJlKQoreworI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29z
aWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7CisjZWxzZQorICAg
IG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpCit7CisjaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmlt
cGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENvbnRleHQqIHByZXZp
b3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBpZiAocHJldmlvdXNB
Y3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXll
cigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVy
LmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhpczsK
KyNlbmRpZgorICAgIHJldHVybiAwOworfQorCitib29sIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVh
dHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4i
KTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAg
Y2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRV
UkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBi
aW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjYWlyb19z
dXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xD
b250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKKyAgICBjb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJfdCBmYm87CisgICAgZ2xHZW5GcmFt
ZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIs
IGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09M
T1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xCaW5k
VGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKKyAgICBnbENv
cHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1faW50ZXJuYWxT
aXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0
dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFN
RUJVRkZFUiwgMCk7CisgICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEs
ICZmYm8pOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9z
aXRvckJ1ZmZlcigpCit7CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hh
cmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21w
b3NpdG9yVGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVO
VCwgMSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2lu
dGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwg
R0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRS
ZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZp
Y2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9p
bnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2Nv
bXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdl
dCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJ
Uk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2NvbXBv
c2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKworICAg
ICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgICAgIHBy
b3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJC
dWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXplLCBUZXh0dXJlTWFwcGVy
R0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShOSUNP
U0lBKQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5
ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Cisj
ZWxzZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2Vu
ZGlmCisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBz
d2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtz
IHRoZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVh
ZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNv
bnRlbnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KKyAgICBjYWlyb19zZXRf
c291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwg
MCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19P
UEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsK
KworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZl
Q29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBl
ciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VSVCht
X3RleHR1cmUpOworCisgICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRleHQs
IHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KKyAgICBH
TENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwor
ICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKyAgICBwcmV2aW91c0Fj
dGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgc3RhdGljX2Nhc3Q8VGV4
dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJlLCBUZXh0
dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX2ludGVybmFsU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0
cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
OWI3OGVhMDAxZTc4ZDBjYWI3N2I0YTAzZDcxMWY3NDM4NGY1OWNmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5o
IgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworI2lmIFVTRShOSUNPU0lBKQorI2luY2x1
ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgorI2Vsc2UKKyNpbmNs
dWRlICJQbGF0Zm9ybUxheWVyLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorI2lmIFVTRShOSUNPU0lBKQor
ICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGll
bnQKKyNlbHNlCisgICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgorI2VuZGlmCisgICAgLCBwdWJs
aWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93Kik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQoKTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7
CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNP
U0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsg
fQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4g
bV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1f
Y29tcG9zaXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07Cisj
ZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhjM2ZiZTUzYzRhNWMyYjAyMTNmMWI5NTFhMjU3NTc1NDZl
OGYyMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsx
LDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBU
b3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisKKyNp
ZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+Cisj
aW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0
YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBj
YWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50
ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbnQg
c3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0Iz
MiwgaW50ZXJuYWxTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlm
ICghdHJ5RmFzdFplcm9lZE1hbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdl
dFZhbHVlKHN1cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJH
QjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCBzdHJpZGUp
KTsKKyAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3Vy
ZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RG
cmVlKGRhdGEpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2FsU2l6
ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3Vy
ZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdl
dCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25l
ZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2Uu
Z2V0KCkpOworICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUo
bV9zdXJmYWNlLmdldCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUu
aGVpZ2h0KCk7ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2Fz
dF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVu
c2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0g
Y29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29s
b3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4
ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENv
bG9yLmFscGhhKCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9t
YXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUu
d2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MjAzYWY0ZjE1MjJmMzM0
MDM1NmMwMTIxZmYxZTkxNjM1YWJkOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kIDogcHVi
bGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZvaWQgcGxhdGZvcm1UcmFu
c2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFi
bGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlmNzY5YzQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2RlZmluZSBJbWFn
ZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJvdmlkZXIu
aCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKE5J
Q09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgi
Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwotY2xhc3Mg
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VCdWZmZXJEYXRh
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50
Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlmCi17Ci1w
dWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5kZXJpbmdNb2Rl
KTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3Jt
Q29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7
Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01vZGU7
Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQgY3JlYXRlQ2Fp
cm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNpZiBVU0Uo
TklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbHNl
Ci0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0j
ZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMyX3QgbV9jb21w
b3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7Ci0KLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29z
aWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZpcnR1YWwgdm9p
ZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0
YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7Ci0jZW5k
aWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIEltYWdlQnVmZmVy
RGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWEyYmNlOWE5NzU5NzUwYjA2MTc0NjExMTgxZjYyYjM3M2Q0ZmQ3MgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiR1JlZlB0
ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z3RrL2d0
ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCitzdGF0aWMgY2Fpcm9fc3RhdHVz
X3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEs
IHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVp
bnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCisgICAgICAgIHJldHVy
biBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7CisgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUND
RVNTOworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIGltYWdl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91dHB1dCkKK3sKKyAg
ICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7IC8vIE9u
bHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKworICAgIHJldHVybiBjYWlyb19z
dXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rpb24sIG91dHB1dCkg
PT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJv
X3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4pCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKKyAgICBpZiAoIWltYWdl
IHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1hZ2UpKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7Cit9CisKKyNlbHNlCisKK3N0
YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdj
aGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0IG9mIHN1cHBv
cnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1l
bnRhdGlvbi4KKyAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0
YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZl
cnYKKworICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2Ui
KTsKKyAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0
aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYgKHR5cGUgPT0g
ImpwZWciKSB7CisgICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwu
IFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEg
UG9ydGVyLUR1ZmYKKyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBp
bWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAgICAgICAg
IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAgICAgICAg
IENBSVJPX0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBJ
bnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOworICAgICAgICAgICAgbmV3
U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1B
VF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBSZWZQ
dHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkp
OworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNl
LCAwLCAwKTsKKyAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3Vy
ZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fp
cm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVmKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
aWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFs
aXR5IDw9IDEuMCkgeworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVt
YmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOworICAgICAgICBn
ZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwg
JmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0
eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0
cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5V
TEwpOworCisgICAgcmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fp
cm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQoreworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKKyAgICBn
c2l6ZSBidWZmZXJTaXplOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCBx
dWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5n
ZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworI2VuZGlmIC8v
ICFQTEFURk9STShHVEspCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZGUzM2M3Y2EwOTZjYWQ4OTIyNjM3MzljNzVmOTViMjBmZWRjMDM3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGls
aXRpZXNDYWlyby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCosIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApp
bmRleCA0OTZlY2EzMjRkM2U0ZGEyMmZjYTU5OTk4ZWI1ZWY1ZWU3M2QyMDlhLi43MjJlZWZmZTZj
OWU1ZmQyODY2YmUyNzI4N2E0NzAyMTAwY2JmYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC01
MDAsNyArNTAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGlu
YXRpb25TaXplID0gYnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNpemUoZGVzdFJlY3Quc2l6ZSgp
KTsKKyAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gZGVzdFJlY3Quc2l6ZSgp
OwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDM1NmYxOTY0ZDA5NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3NWIuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NTQgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1l
cm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRD
Ry5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBo
aWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFsL3NwaS9j
Zy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1
ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hlYXAuaD4K
LSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgot
I2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1
ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+
Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4g
QVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9BTExPQ0FU
T1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9DQVRPUl9X
SVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0YXRpYyBGbG9hdFNpemUgc2Nh
bGVTaXplVG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKQotewot
ICAgIGZsb2F0IHhNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdTdG9y
ZVNpemUud2lkdGgoKSkgLyBpbnRlcm5hbFNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB5TWFnbmlm
aWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAv
IGludGVybmFsU2l6ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2ljYWxTaXpl
LndpZHRoKCkgKiB4TWFnbmlmaWNhdGlvbiwgbG9naWNhbFNpemUuaGVpZ2h0KCkgKiB5TWFnbmlm
aWNhdGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9y
U3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9
IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBl
KGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBj
b2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAg
ICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBl
SU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29s
b3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNw
YWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAg
Y29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2Ug
PSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXpl
ID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAg
IGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
YnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCBy
ZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBz
Y2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0
KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUlt
YWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykK
LSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29s
dXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJu
IG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25T
Y2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVz
b2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdl
IGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6
ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxl
ZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOwot
ICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsK
LSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQo
KTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0
YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29y
ZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93Piht
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0g
ICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUg
PSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4g
bWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkp
Ci0gICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJU
KHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1fZGF0YS5j
b2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNn
Q29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91bmRzID0g
c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdo
dC51bnNhZmVHZXQoKSkpOwotICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3Jl
YXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNw
YWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRl
eHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwot
ICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVh
clJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRz
KSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBu
dWxscHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRv
dyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVy
YXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0
byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5k
ZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVy
b2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVz
UGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
bV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0
bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9w
dENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0
YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRt
YXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lk
KiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1h
bGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVy
aWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0
KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRl
ckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVs
ZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZh
Y3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQot
ICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3Bh
Y2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykK
LXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotRmxvYXRT
aXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBkZXN0aW5h
dGlvblNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGRlc3Rp
bmF0aW9uU2l6ZSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSgpKTsKLX0K
LQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VC
dWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUg
aW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUg
Y2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJ
dCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBh
bnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1
cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29u
c3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2Vz
cyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNu
J3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1
cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFs
U2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IElt
YWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFs
TWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFk
LCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVy
ZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVj
YXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9u
IG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEu
c3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2Ug
cG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRh
LnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFw
aGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNl
bmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXpl
JiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9
IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAg
IHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVj
dE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1
cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUg
aW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNv
bHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAg
IGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAq
IGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4
dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUp
KTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2NhbGVTaXplVG9V
c2VyU3BhY2UobG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSk7Ci0g
ICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAg
ICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0
KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQot
UmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29w
eUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAot
ewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9u
U2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZ
ZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAg
ZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChX
VEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0YS5iYWNr
aW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0K
LQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmlu
dGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9n
aWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1h
Z2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3ZlKGltYWdl
QnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIHJl
c29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotQmFja2luZ1N0b3JlQ29w
eSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBEb250Q29w
eUJhY2tpbmdTdG9yZTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpz
aW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAo
IWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVy
LT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIElP
U3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihX
VEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQotUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlOwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAg
ICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdT
dG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
LCA4LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFj
ZSwgbV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAsIHRydWUs
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGlt
YWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVy
biBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1
cmZhY2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBB
U1NFUlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgZmxv
YXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotICAg
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3VyZmFjZTo6
c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGlt
YWdlQnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNS
ZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIGRl
c3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3JlU2l6ZSwg
ZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGltYWdlQnVm
ZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwg
ZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1
ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3QgYWRqdXN0
ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlv
bnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAg
ICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBj
b3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3duIGJ1ZmZl
ciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4o
ZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+ZHJhd1Bh
dHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdT
dG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
cjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUq
IHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAg
ICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAg
IHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlE
aW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUo
KTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50
U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsK
LSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAg
ICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxB
cnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Qu
c2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJh
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxlZFNvdXJj
ZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IHNvdXJj
ZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlRm9ybWF0LCBzY2FsZWRTb3Vy
Y2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgpLCBjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgLy8gRm9yY2UgcmVjcmVh
dGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQgdGhyb3Vn
aCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0
aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwot
fQotCi1zdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdS
ZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAgIHJldHVy
biBrVVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0
aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAg
Ly8gRklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJzaW9uPwot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5j
cmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJ
dCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhNRTogQWRk
IFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRv
IGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0gICAgLy8g
Rm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJv
YmxlbS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9
IENGU1RSKCJwdWJsaWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5
cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAgICAgcmV0
dXJuIGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1p
bWVUeXBlLCAiaW1hZ2UvanBlZyIpKQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwotICAgIGlm
IChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQot
ICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgIHJldHVybiBrVVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVuY29kZUlt
YWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhdXRp
IHx8ICFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RpbmF0aW9u
ID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEs
IDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAgaWYgKENG
RXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpx
dWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0
eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21wcmVzc2lv
blF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtD
Rk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lkKiBrZXkg
PSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAgICAgIGNv
bnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAgICBpbWFn
ZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUs
IDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFs
dWVDYWxsQmFja3MpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRp
b25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVy
dGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9u
cywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3RpbmF0aW9u
QWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkp
OwotICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQo
KSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNl
NjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBi
YXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwi
ICsgYmFzZTY0RGF0YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENG
RGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgZGF0YS5h
cHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZEYXRhKSk7
Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRh
ID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCi0gICAg
ICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRh
dGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAg
IGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAg
IHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyOjp0b0NG
RGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1p
bWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0g
ICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0
aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgewot
ICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUg
dG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJlbXVsdGlw
bGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwg
bG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAgICAgIHZl
cmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0
YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlk
ZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRh
U2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRl
KGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQg
KiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgfSBlbHNl
IGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVz
ZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShD
b3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAg
ICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNh
bFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNp
emUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCks
IGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6
ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9
IHNpemVGb3JEZXN0aW5hdGlvblNpemUobG9naWNhbFNpemUoKSk7Ci0gICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNl
clNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0
KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRh
dGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29k
ZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0K
LQotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQot
ewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0ltYWdlQWxw
aGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNpZ25lZCBj
aGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50OF90PiBw
cmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgp
KSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdl
IGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgc2l6
ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0gICAgICAg
IGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3Jvdyhz
aXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEu
ZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgewot
ICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAgICAgIGlm
IChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtp
ICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0
YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0g
ZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAgICAgIGJ1
ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJd
ID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBkYXRh
QWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBo
YSBjaGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAg
IH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53
aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRo
KCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndp
ZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBk
YXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRl
TXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShp
bWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLVN0cmlu
ZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0
YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0
YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8
dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBj
ZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVmVj
dG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICByZXR1cm4g
bV9kYXRhLnRvQkdSQURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZDllZGQwZWY1
MWYzODQxYWM1OGM4YjYxZTE1Y2UyZDRhNWNmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAg
LTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5k
LmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisK
KyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAt
MSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1faW50ZXJuYWxTaXplLmhlaWdodCgp
KTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2Fs
ZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXpl
KQoreworICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGlt
YWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKQorICAg
ICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBD
R1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0
KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYm
IGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZl
UmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgs
IDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNv
bnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxT
aXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxT
aXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7
CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7
Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKKyAgICBpZiAobV9y
ZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlv
cik7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoV1RGTW92ZShpbWFnZSksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jl
c29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2Nh
bGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRl
cm5hbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2
b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNy
Y1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RD
b250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCks
IG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAg
ICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30KKworQWZm
aW5lVHJhbnNmb3JtIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNlVHJhbnNmb3JtKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2xvZ2ljYWxT
aXplLmhlaWdodCgpKTsKK30KKworUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sK
KyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1
ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11
bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7
CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2
ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBwcmVtdWx0
aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpLCBDb29yZGluYXRlU3lz
dGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dp
Y2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOworICAgICAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFT
aXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNp
emUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICog
bG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRl
T3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdl
dCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBp
ZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29w
eUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNl
c3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgICAg
IGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxT
aXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBr
Q0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0Lmdl
dCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUo
KS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwg
Q0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0byBjZkRh
dGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkp
OworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwg
Y2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RG
TW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6
OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkp
IGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0
YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVS
ZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUp
OworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCitzdGF0
aWMgaW5saW5lIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcih1bnNpZ25lZCBieXRlc1Bl
clJvdywgdWludDhfdCogcm93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB2SW1hZ2Vf
QnVmZmVyIHZJbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVm
ZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsK
KyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZm
ZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1h
Z2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sK
KyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFT
U0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQo
ZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQp
OworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAg
ICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdl
UGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBp
ZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1h
Z2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJ
bWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4
ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29s
b3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0
LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUp
IGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBz
cmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBz
cmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQs
IGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVy
Um93LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdl
QnVmZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdl
UGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRl
c3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45YWI3YTc0NjkzM2RkMWQyNzc2OGNhNDQ4ZWE4ZmM2MWZhNDFlNzQyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1h
Z2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdl
PiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lk
IGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRl
OworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisK
KyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1h
Z2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICB2b2lkIHNldHVwQ29u
dGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBjb3B5SW1hZ2VQ
aXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhf
dCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0IG92ZXJyaWRlOworI2Vu
ZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDNmNzNjZmI4MDE0
ZTcwZDc1M2RhNTlhZjI0OGE1NjMzMDRmNDI3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5m
byA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
Mkhvc3Q7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFw
SW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAg
SW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93
ID0gNCAqIGludGVybmFsU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGlu
dGVybmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZhbHVlKGRhdGEpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGRhdGEpICYgMykpOworCisgICAgc2l6ZV90IG51bUJ5dGVzID0gaW50ZXJuYWxTaXplLmhl
aWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChk
YXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVp
Z2h0KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIERl
ZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+
KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBb
XSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgeworICAgICAgICBmYXN0RnJlZShj
b25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgfTsKKworICAgIGF1dG8gZGF0YVByb3ZpZGVy
ID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIG51bUJ5dGVz
LCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoc2l6
ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1v
dmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENH
RGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNp
emUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9k
YXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikpCisg
ICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsK
KyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAg
IHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30K
KworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0
dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpKSk7CisgICAgCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAgICAgICAgIG1faW50ZXJuYWxT
aXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3co
KSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0
Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBr
Q0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsK
KyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsK
KyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhf
dCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fZGF0YSk7CisKKyAgICBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6
QkdSQSwgZGVzdEJ5dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1f
ZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZv
cm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9kYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBhYTk2NjMx
M2M5YzNhODBhMDFlYmM4ZjAxYjBlM2Q0ZjExNWVkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdl
QnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGlj
IEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNp
Y2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBS
ZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHQ+JiYpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQorI2lmIFBMQVRGT1JNKElPU19G
QU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7IH0KKyNlbmRpZgorCisgICAgdm9pZCogbV9k
YXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9kYXRhUHJvdmlkZXI7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZjMDMxY2MwNjY0ZGU3YTU3N2QxYmNi
NWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVy
YXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxkaXNwYXRjaC9k
aXNwYXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5k
aWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMy
IHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElP
U19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKSAm
JiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLXN0
YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNy
YywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwot
ICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFn
ZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29u
dmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMg
UkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJ
bWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5v
RmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3Qgdklt
YWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VS
VChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5v
RXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdklt
YWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBh
bmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VE
YXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwg
MyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1h
cCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNF
X0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLQotc3RhdGlj
IGlubGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlucHV0LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93KQotewotI2lmIFVTRShB
Q0NFTEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0KLSAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0aDsKLSAgICBzcmMuaGVp
Z2h0ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJSb3c7Ci0gICAg
c3JjLmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0Lndp
ZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVzdC5yb3dCeXRl
cyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwot
ICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAg
Ly8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEYXRh
Ojp0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIHdpZHRoICogaGVp
Z2h0KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICB0cmFuc2Zl
ckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJhY2tpbmdTdG9y
ZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9j
aygqc3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVyUm93KCkpOwot
I2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0
Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAg
IGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBp
ZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChh
cmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVz
dWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJlY3QubWF4WCgpOwotICAg
IENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8
fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSB8fCBlbmR5
LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgp
OwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsK
LSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0gICAgaWYgKG9yaWdpbngg
PCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdp
bng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0dyA9IHN0ZDo6bWluPGlu
dD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdpbngpOwotICAgIGlmIChl
bmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0
aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmlnaW54OwotICAgIAotICAg
IGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAgICBDaGVja2Vk
PGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAg
ICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAg
ICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLnVu
c2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAgaWYgKGVuZHkudW5zYWZl
R2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAg
ICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0gICAgCi0gICAgaWYgKHdp
ZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgpIDw9IDApCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAq
IHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlc3VsdERhdGEgKyBkZXN0
eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxl
cmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSAr
IG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwot
ICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBz
cmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVz
ID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAg
ICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBk
ZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAg
ICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAg
ICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAg
fQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBmb3Ig
KGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50
OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAg
ICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1
ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAq
IDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBo
YTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFz
ZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAq
IDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0g
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsK
LSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNpZiBVU0VfQVJHQjMyCi0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsr
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAz
XTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkKLSAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgeClbMF0gPSByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0
Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAgICBzcmNCeXRlc1BlclJv
dyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBvcmlnaW55ICogc3JjQnl0
ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2
SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7
Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5y
b3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0K
LSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0g
ICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0
YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1
ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2Fw
IHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAgICAgICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVD
aGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAg
ICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90
IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9
IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCAr
IDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAg
ICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhf
dCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3Mg
Kz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNl
bmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwg
Ym9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRo
KCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotICAgIAotICAg
IENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+
IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsK
LSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChz
aXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdp
bngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0g
c291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNr
ZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQo
ZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50
PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBl
bmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgp
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkg
KyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VS
VChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdl
dCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAg
QVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2Vk
PGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVz
dGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9
IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9
IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNv
dXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVu
c2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBk
ZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAg
aWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RCeXRlc1BlclJv
dyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAo
c291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkg
ewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0
aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51
bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93Owot
ICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQot
ICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9
IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAg
ICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAg
ICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgot
Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsK
LSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykg
ewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVp
bnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAg
ICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZm
ZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
IH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZh
Y2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6
UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJS
b3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJm
YWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQp
LnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAg
c3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4o
c3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0Lndp
ZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgcHJl
bXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgICAg
IGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1h
Z2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxh
Z3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICog
NDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAg
ICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAg
ICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSNl
bmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
fQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWE1NGFkOTExNzk1M2NhNWU2OTZkYTA3ZTZl
MGRmNjgxNDNkNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIK
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUg
PHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi10eXBlZGVm
IHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENH
RGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsKLXR5cGVkZWYgdWludDMyX3QgQ0dCaXRt
YXBJbmZvOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElPU3VyZmFjZTsKLQotc3Ry
dWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAg
IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLSAgICBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZTsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdl
QnVmZmVycy4KLSAgICB2b2lkKiBkYXRhIHsgbnVsbHB0ciB9OwotICAgIFJldGFpblB0cjxDR0Rh
dGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZv
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIC8vIE9ubHkgZm9yIGFjY2Vs
ZXJhdGVkIEltYWdlQnVmZmVycy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBzdXJm
YWNlOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YShib29sIGFjY2Vs
ZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0
IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25z
dDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTZhNTgxOTdkNjM4ZTg5MjA1NmIxZjQ1NmQ3NWU1NTM4OWY5YWIyZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENHKSAmJiAo
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUg
IklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEku
aD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQpOworCitJbnRTaXplIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRl
SW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNh
bGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRl
cm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBt
YXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlmIChpbnRlcm5hbFNpemUu
d2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8fCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgPiBtYXhT
aXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIGludGVybmFs
U2l6ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4g
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1
bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5h
bFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3Vy
ZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKGludGVybmFsU2l6ZSwgaW50ZXJuYWxTaXplLCBjYWNo
ZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQg
PSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFj
Z0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJS
ZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW50ZXJu
YWxTaXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50
ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkp
KTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJD
R0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJU
KG1fc3VyZmFjZSk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1
c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3Vy
ZmFjZS0+dG90YWxCeXRlcygpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtZW1vcnlDb3N0
KCk7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJS
b3coKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Cit9CisK
K0NvbG9yRm9ybWF0IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2VuZENvbG9yRm9y
bWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlSW1h
Z2UoKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpz
aW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0lt
YWdlKFdURk1vdmUobV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJbWFnZSgpKQorICAg
ICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxT
aXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVp
bnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5z
YWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndp
ZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisK
KyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHVpbnQ4X3QqIHNy
Y1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVz
cygpKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIHNyY0J5dGVzUGVyUm93LCBz
cmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9n
aWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6
TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbG9j
ay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9j
aygqbV9zdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsK
KyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXks
IHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbG9jay5zdXJm
YWNlQmFzZUFkZHJlc3MoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZh
Y2UgY2FjaGVkIGltYWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4K
KyAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzZWE0NjFiYTY1
NzZjM2E4NjQxNjQwZjYyNjcxMGM5NDJmODcwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIElPU3VyZmFjZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyopOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBt
ZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgCisg
ICAgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmKSBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7ICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwg
Q29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJv
dGVjdGVkOgorICAgIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CisKKyAg
ICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yRm9ybWF0
IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVz
Q0cuY3BwCmluZGV4IDg5ZDA0MzljMjEwZGI1MDFhYzkzOWViMTE0MTQ4ODFlZWVjNjViMjQuLmQw
OTEzOWYwMWJkMzM2ZjI4NDhhZWE1MjZhNGY5ZjgwMGVlNzg1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuY3BwCkBAIC0yNiw3ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKIAorI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2lu
Y2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2
NC5oPgorCisjaWYgUExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCisj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs1MiwxNDAgQEAgdWludDhf
dCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90
IGJ1ZmZlclNpemUpCiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK0NGU3Ry
aW5nUmVmIGpwZWdVVEkoKQoreworI2lmICFQTEFURk9STShDT0NPQSkKKyAgICBzdGF0aWMgY29u
c3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKKyNlbmRp
ZgorICAgIHJldHVybiBrVVRUeXBlSlBFRzsKIH0KKworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1
dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIHJldHVybiBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNy
ZWF0ZUNGU3RyaW5nKCk7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0
IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KKworICAgIC8vIEZJWE1FOiBBZGQg
V2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8g
Y29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KKyAgICAvLyBG
b3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzYwOTUyODY+LgorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0g
Q0ZTVFIoInB1YmxpYy5wbmciKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKKworICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQorICAgICAgICByZXR1
cm4ga1VUVHlwZVBORzsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWlt
ZVR5cGUsICJpbWFnZS9qcGVnIikpCisgICAgICAgIHJldHVybiBqcGVnVVRJKCk7CisgICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikpCisg
ICAgICAgIHJldHVybiBrVVRUeXBlR0lGOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIGtVVFR5cGVQTkc7CisjZW5kaWYKK30KKworYm9vbCBlbmNvZGVJbWFnZShDR0lt
YWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
Q0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0
YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0
Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Cisg
ICAgaWYgKCFkZXN0aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWlu
UHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChDRkVxdWFsKHV0
aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8
PSAxLjApIHsKKyAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhl
IEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCisgICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJE
b3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1h
Z2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBjb25zdCB2b2lk
KiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0
aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NG
VHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJh
Y2tzKSk7CisgICAgfQorCisgICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dy
b3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291
bGQgc2F2ZSBzb21lIG1hdGgKKyAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBp
dCBkb2Vzbid0IHNlZW0gdG8gd29yay4KKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShk
ZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0
dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKK30KKwor
c3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQorewor
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJN
SU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJ
bmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiBwcmVt
dWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkg
eworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhh
dmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgc2l6ZV90
IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7CisgICAgICAgIGlm
ICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXpl
KTsKKyAgICAgICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0
YSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgeworICAg
ICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKKyAgICAgICAgICAgIGlmIChh
bHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsg
MF0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtp
ICsgMV0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0
YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOworICAgICAgICAgICAgICAgIGJ1ZmZl
cltpICsgMV0gPSBkYXRhW2kgKyAxXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0g
ZGF0YVtpICsgMl07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkYXRhQWxw
aGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBj
aGFubmVsLgorICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAgIH0K
KworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0
aCgpICogc291cmNlLmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0Yo
Q0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkg
KiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKKyAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRl
KHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRh
QWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRl
bnREZWZhdWx0KSk7CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFn
ZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1N0cmluZyBk
YXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIFZl
Y3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRy
KGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOworICAgIHJldHVybiAi
ZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworU3RyaW5n
IGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRh
KHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRh
LmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IGRhdGE7CisgICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRh
dGFHZXRMZW5ndGgoY2ZEYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1ZlY3Rvcjx1aW50
OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0
YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3Io
ZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCmluZGV4IDE2MTI4
YTE5YWJkMWZiODNhYjMxYTExNWM2ODk1MDQ5MWQ0MTk1NTIuLjg0YzU3ZDJmZWU5MzM4ZWQ1ZTBl
ZmM0YThlMzM2NWExOWE4MDIwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKQEAgLTI1LDgg
KzI1LDMxIEBACiAKICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKKwog
V0VCQ09SRV9FWFBPUlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0
IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCi19CitDRlN0cmluZ1JlZiBqcGVn
VVRJKCk7CitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYpOworCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5n
UmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKKwor
U3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0cmlu
ZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0
YVJlZik7CitWZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDgwZjZi
MTg3MjUyMjk2OGVhN2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2MuLjI4MjFlZjgxZDc1ZGZiMGZmMDVh
ODViZTVjOWZiYzI1OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Miw2ICs0Miw3IEBA
CiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29u
dGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CisjaW5jbHVk
ZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9T
dXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UuaAppbmRleCAyNDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2NGM5YTA0ZmY5NjljZGIzLi40Y2Mw
ZmEzZjc5NzI3ZWI5ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMTAwLDEwICsx
MDAsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNy
ZWF0ZUZyb21TdXJmYWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUlt
YWdlKENHSW1hZ2VSZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21J
bWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAgICAg
V0VCQ09SRV9FWFBPUlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHZvaWQgbW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRl
eCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThm
ODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAj
aW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0
ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQg
IkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFj
ZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAg
SU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7
CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92
ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0Rp
Y3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25l
ZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vj
b25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNhMTE0
OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVtc0Zy
b21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5TGlz
dD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYpOwogCiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45OWYxY2UyNzM1NDUwYmRhYzNiYmRmMTFhMzA4NWQ5YTdmM2M5ZTE1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5o
IgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250ZXh0
IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlz
dENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNw
bGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZs
b2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICB9
KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgIH0K
KyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9
CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9k
aXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZvaWQg
c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkK
KyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5
TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQpCisgICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRl
eHQsIG1fZGlzcGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSkKKyAgICAgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9
LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5
TGlzdCBtX2Rpc3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9y
ZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBm
YWxzZSB9OworfTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXgu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0
cml4LmNwcAppbmRleCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1Li5h
ZjNhYWRlMmEzMzJjYzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4YjU5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJp
eC5jcHAKQEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VC
dWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBh
aW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJ
bWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsK
LSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICBhdXRvIHBpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyht
X3ZhbHVlcyk7CiAKKyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCk7CisgICAgcGl4ZWxBcnJheURpbWVuc2lvbnMuc2NhbGUocmVzdWx0
SW1hZ2UtPnJlc29sdXRpb25TY2FsZSgpKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAg
Y2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEs
NyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpw
aXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdl
UmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpwaXhl
bEFycmF5LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0
eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRURyb3BTaGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1NjE4
ZThmZGRkODRlY2IuLjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0N2Q0MDU4MDA0ZWE3MTcyZDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9w
U2hhZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hhZG93
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFj
Y2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCiAg
ICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNp
emUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdT
dG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
c2hhZG93QXJlYSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKICAgICBpZiAoIXNy
Y1BpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHRTaGFkb3cuYmx1ckxh
eWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNo
YWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJh
eSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwg
c2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5
LCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5
c3RlbTo6QmFja2luZ1N0b3JlKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5m
aWxsUmVjdChGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUo
KSksIG1fc2hhZG93Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1MjdhNTYy
NzM1M2RmNDQ5Ni4uZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
CkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBtX3NvdXJjZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGUgeyBVbmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9kZSBt
X3JlbmRlcmluZ01vZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAgZmxv
YXQgbV9maWx0ZXJTY2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4
NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi41YzhiM2I0ZGUwYWZhNzE0NThj
ZGNmNmM2YmMwZmZkMmNjYmQxNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNzksOSArMjc5
LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAg
ICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25S
ZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNp
emUoKSwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBk
ZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGlu
YXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApA
QCAtNDQzLDcgKzQ0Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVz
dWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lv
biBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0
KSB7Ci0gICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpAQCAt
NDY5LDcgKzQ2OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3Vs
dChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9u
IGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
IHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZl
ckd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZm
ZXJHdGsuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjVhMGQ1MGY4Y2UxYWFm
NjUzNWRlZWM5NDBiODVkYzU1MTdlNGIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFn
ZUJ1ZmZlckd0ay5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBD
b3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
LSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoK
LSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0j
aW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5j
bHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5Lmgi
Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3Rm
L2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNp
emUpCi17Ci0gICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29t
ZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCi0gICAgLy8gaHR0cDovL2RldmVs
b3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5o
dG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1pbWVU
eXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7Ci0gICAgaWYgKHR5cGUgIT0gImpwZWciICYm
IHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBl
ICE9ICJibXAiKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1
Zj4gcGl4YnVmOwotICAgIGlmICh0eXBlID09ICJqcGVnIikgewotICAgICAgICAvLyBKUEVHIGRv
ZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhh
dCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCi0gICAgICAgIC8vIGNvbXBv
c2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9y
dCBhbHBoYS4KLSAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKLSAg
ICAgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFD
RV9UWVBFX0lNQUdFKSB7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0
YShzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0gICAgICAg
ICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAg
ICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6
ZShzdXJmYWNlKTsKLSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSkpOwotICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fp
cm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3Vy
Y2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgICAgICAgICBjYWlyb19w
YWludChjci5nZXQoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNh
aXJvU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2Up
KTsKLSAgICBpZiAoIXBpeGJ1ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1
ZU91dFB0cjxHRXJyb3I+IGVycm9yOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5
ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5n
IHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5
ICogMTAwLjAgKyAwLjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhi
dWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRh
KCksICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRh
KCksIE5VTEwpOwotICAgIH0gZWxzZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVy
KHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgp
LmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19
Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGEgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkp
OwotICAgIGlmIChpbWFnZURhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7
Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1hZ2VE
YXRhLmRhdGEoKSwgaW1hZ2VEYXRhLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4g
ImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rv
cjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdp
c3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQot
ICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwot
ICAgIGlmICghZW5jb2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbWltZVR5cGUsIHF1
YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBW
ZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwotICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdl
dCgpLCBidWZmZXJTaXplKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNv
c2lhR0MzRExheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCmluZGV4IDRjNGM0MjY5NjEyNzFjN2I3YTE5
ZDI5NmE5NDAwZWZkYzBmYWM5YWUuLjc1NzAwM2IxZjExZGY0YjI3NjZiNDA5ZTgyMmNkOGI0MjBm
YjRhNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29z
aWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCkBAIC05NCw3
ICs5NCw3IEBAIHZvaWQgR0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKICAgICBJbnRT
aXplIHRleHR1cmVTaXplKG1fY29udGV4dC5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0Lm1fY3Vy
cmVudEhlaWdodCk7CiAgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IG1fY29udGV4
dC5jb250ZXh0QXR0cmlidXRlcygpLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVu
ZCA6IDA7CiAjaWYgVVNFKEFOR0xFKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXplLCBVbmFjY2VsZXJh
dGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVy
ZS5jcHAKaW5kZXggN2QyY2VmZDYyNjFkZWUyYTM5YTg5ZDEwMTcwMmViNTAyNTJmNGY1ZS4uZjAz
OTEzODA2MGQzNDQzNGU2Y2RkYmY5NmVhNjRjMzAxYTYzNTUzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNw
cApAQCAtMzgsNyArMzgsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKFRl
eHR1cmVNYXBwZXImLCBHcmFwaGljc0xheWVyKiBzb3VyY2VMYXllciwgYwogewogICAgIC8vIE1h
a2luZyBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIgaGVyZSBpcyBPSyBi
ZWNhdXNlIHRoaXMgY29kZQogICAgIC8vIGlzbid0IHVzZWQgYnkgYW55IHBsYXRmb3JtcyB0aGF0
IHJlc3BlY3QgdGhlIGFjY2VsZXJhdGVkIGJpdC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNpemUo
KSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tS
ZWFsdGltZVZpZGVvU291cmNlLmNwcAppbmRleCBjYTExYmI4YmEwYjE5MTBjNjI3OTY3ZDRkMjYw
YjA0YzY4NDg2NzMxLi41YWM5ZDY2MDZjNDIyMTI0OGJjNDFkZTkzODljZTVjODdlNGE0MTdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVv
U291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlLmNwcApAQCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZTo6aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVm
ZmVyKQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQp
OworICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwCmluZGV4IGQ1YjkxYjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0NTgu
LjhmNTBlNTc1NzFkN2IzODUwMGVlZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBS
ZW5kZXJMYXllcjo6dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAog
ICAgIGVuc3VyZUxheWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVu
ZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3Mo
KS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQpOworICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmlj
ZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNF
bmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQpOwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5
YTJkNDQ2NGRmNWNiN2IzYTQ0MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5ODRi
NWQyYjUyMWE2OTkxYzYxNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c2hhcGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1No
YXBlLmNwcApAQCAtMTgxLDE0ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFw
ZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAg
ICBJbnRSZWN0IG1hcmdpblJlY3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBhdXRv
IGludGVydmFscyA9IG1ha2VVbmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJlY3Qu
aGVpZ2h0KCksIC1tYXJnaW5SZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VS
ZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoaW1h
Z2VCdWZmZXIpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFn
ZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhl
bEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBwaXhlbEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VS
ZWN0LnNpemUoKSkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAgICAg
ICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAg
ICAgICB1bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3Vy
IGJ5dGVzOiBSR0JBLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNkMjk3
NzViODQ2ZjA1OWQ1YTJjYTcxM2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFjZTcx
N2VjNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VDbGlwcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRl
clNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgYwogCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2UgJiYg
IXJlcGFpbnRSZWN0LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhp
cyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRl
ZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRo
b3VnaC4KLSAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFj
ZTo6U1JHQiwgVW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0lt
YWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3Qs
IGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkLCAmY29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2M2Mz
ZTQ5NjBiZDRlM2JkYmQ4NzQ5MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFiYTkz
OGQwZDllMjYzNGQ4ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJv
b2wgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxl
LndpZHRoKCksIHNjYWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlw
bHkoZmlsdGVyRGF0YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZp
bHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVy
aW5nTW9kZSByZW5kZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZp
bHRlcnNFbmFibGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZm
ZWN0aXZlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNv
bnRleHQpOwogICAgIGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVu
ZGVyZXJGaWx0ZXJEYXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3
IEBAIHZvaWQgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRD
VE0oZmlsdGVyRGF0YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgZmlsdGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAgZmls
dGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRIX1NU
UkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhp
cyA8PCAiIHBvc3RBcHBseVJlc291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRl
eCAxNzg3ZTE4YzJkY2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5Nzg3
MjIwNDY1YmM2YWVjMGI1ODA0YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEsNyAr
NzEsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5kZXJT
dHlsZSYgc3ZnU3R5bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSA9IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJw
b2xhdGlvbjo6TGluZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6
U1JHQjsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3Vs
ZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0
aGUgY29udGV4dCBicmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJE
YXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihy
ZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQs
IGNvbnRleHQpOworICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0s
IGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAg
ICAgICBpZiAoIW1hc2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgyMTQx
MWFkZTc3NTA4NTYxNjg4NTZlZDIyYjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4ZDNh
NzlmYjQ5NWRkZDRmMGY0M2Q5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwCkBAIC0yMTgsNyArMjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVyYXRl
ZCBkcmF3aW5nIGZsYWcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZCBidWZmZXIuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpIC8v
IGZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01h
a2VMaXN0cy50eHQKaW5kZXggNTMyNjc4ZjM3NjAzM2MzYzAwZjlmNmJkNWEzMGMzODY5MGUzMzRi
Zi4uMGFiOTIwMTYyNGU4NjBhMGQ5Y2MwZjA3MTlmYTYzMTVmMmYxNTYyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlz
dHMudHh0CkBAIC0xNyw2ICsxNyw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICIke1dlYktpdF9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQktJ
VF9ESVJ9IgogICAgICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lUX0RJ
Un0vR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdv
cmtQcm9jZXNzIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIi
CiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBlZGZiNmUxZTA1ZTU2
NDAwOGI3ZDU3YTg3NDUzNzhjNDNkNjZjZjk2Li43YTUyMTQyNWZmOTMxNzJiNWFiN2UxZGMyNDIw
YWZlNjVjOTc2ZjU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlu
cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CkBAIC0xNSw2ICsxNSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFE
RVJTX0RJUikvbW9kZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIp
L3h4ZC5wbAogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVz
c2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nl
c3Muc2IuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMiw2ICsxMDQs
NyBAQCAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNvbm5l
Y3Rpb24ubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0lu
ZGV4ZWREQi9XZWJJREJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL1dlYlByb2Nlc3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVz
c2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
R1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVj
cy5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0Lnhj
ZmlsZWxpc3QKaW5kZXggZGZiYzBlZmU2Yjg0NzI2Zjk2Yzg5ODI4Y2Q4M2QwZWQ3NTkwNWEwNi4u
OTBkOTExMWZkMTBlODYzNDViN2VmNGZmNTNiMTU5YTBjMzEyY2FjMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIwLDEy
IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblBy
b2Nlc3NQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXMu
aAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJv
eHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3Nh
Z2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZUltYWdlQnVmZmVyTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAtMTQy
LDYgKzE0OCw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNl
aXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2Fn
ZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVz
c2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRv
ck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTI5MDkz
MDk3Y2Q5YmRlYjM0NWExOWE1ZDM3ZmU1N2E1NDBkZWI3MC4uOGM3NTNkMTZmNDBkZmRkY2ZlMTc0
NWJhYTVmZTU5YmYyOTY4NzdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUs
NiArMjUsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRp
YSBcCisgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQo
V2ViS2l0MikvR1BVUHJvY2Vzcy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nl
c3MgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1
Myw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBc
CiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL0dQVS9tZWRpYSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChX
ZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL01lZGlhQ2FjaGUgXApAQCAtMTQwLDYgKzE0Miw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0g
XAogICAgIFBsdWdpblByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciBcCiAgICAgUGx1Z2luUHJvY2Vz
c1Byb3h5IFwKICAgICBQbHVnaW5Qcm94eSBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXIgXAorICAg
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgXAogICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkgXAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkgXApAQCAtMTQ3LDYgKzE1MSw3IEBAIE1FU1NBR0VfUkVDRUlWRVJT
ID0gXAogICAgIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlciBcCiAgICAgUmVtb3RlT2JqZWN0UmVnaXN0cnkgXAorICAgIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXAog
ICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JVSSBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggNjIwYjQxZjI4ZDY2NzZhM2RlMTdmNDc2YjJkZjM4OGZmZjY0Nzcw
ZC4uYTM3MWNmMjNkYTc3ZmE3NmUzZTQwM2RkYzJkM2FkYjY2MTkwMWM0MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMTYwLDUyICsxNjAsNjggQEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmxpYldlYlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12b2lk
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3Rl
TWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBy
ZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHko
KS5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3Jk
ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRl
ck1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1l
ZGlhUmVjb3JkZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJlY29y
ZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0Nv
ZGVjc1Byb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRDQ29k
ZWNzUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNl
bmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29u
bmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpE
ZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNv
ZGVyKQorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRp
YVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNz
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQ
VVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5
bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBB
U1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0
aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gbnVs
bHB0cjsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBmNDg1OTY0ZDQ2
YzUyZTMzOGQyYWJlNGY3NjVkZGNiNWE5NGEwNzkwLi4wMjcwMzdmZTk5NDY0MDlmMDZjMjNiZjZj
ZWNkMzc4NTNhNTZlN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBAQAogI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29y
ZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
c01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAi
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAj
aW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNs
dWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDcsMTggKzQ5
LDIwIEBAIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IGNyZWF0ZShHUFVQcm9j
ZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1f
Y29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdl
UmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVBy
b2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsg
cmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1
c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsK
IAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogICAgIFJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpOwogCiAgICAgTG9n
Z2VyJiBsb2dnZXIoKTsKQEAgLTc3LDE0ICs4MSwyMSBAQCBwcml2YXRlOgogCiAgICAgLy8gSVBD
OjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYp
IGZpbmFsOwotICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+JikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxp
ZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJl
Y2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOworCisg
ICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7
CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKKyAgICB2b2lkIGNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZvaWQg
cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCiAg
ICAgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6
Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJD
b3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlc291
cmNlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHk+IG1fcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk7CkBAIC05Niw2ICsxMDcsNyBA
QCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIHN0
ZDo6dW5pcXVlX3B0cjxMaWJXZWJSVENDb2RlY3NQcm94eT4gbV9saWJXZWJSVENDb2RlY3NQcm94
eTsKICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDNkNDBhNTcxMmUwMmQxNDlk
MTRmOTJmNTZlNDQ1MzQ2YzAxMjIxZDguLjkzMmMwMTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJjNTI1
OWJhNGQ3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5IEBA
CiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgeworbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50
c0Rpc3BhdGNoTWVzc2FnZSB7CisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktp
dDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
CisgICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNzBmNDIyYzNlNDY5M2EwMTI4OTgxOGExYzMyOTQ0ZWRjZjMzZDE1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1
ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2Vz
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1Jl
bW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAo
YXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJl
Y2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRv
VUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUlt
YWdlQnVmZmVyUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVj
ZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29u
bmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJ
bnQ2NCgpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobG9naWNh
bFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KGhhbmRsZSkpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmll
cikKK3sKKyAgICBsb2NhbEZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcihmbHVzaElkZW50aWZp
ZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzNjhiNjI2NGZkMTBhZDQzMTdlZTRmM2Y2ZDY4MzRl
ZDU3MWYwNjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIK
KyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01h
Y2hTZW5kUmlnaHQuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAs
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIEltYWdlQnVmZmVySWRlbnRp
Zmllcik7CisgICAgflJlbW90ZUltYWdlQnVmZmVyUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAg
IC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJl
Y2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZvaWQgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJC
YWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgdm9pZCBmbHVz
aENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNoQ29udGV4
dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7CisKKyAgICBX
ZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzczsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjBhZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRkNzJkZGViNWVjOTU4Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IE5vdFJlZkNvdW50
ZWQgeworICAgIHZvaWQgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVz
aElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdm
ZTRlMWUzYWQ1MjE4NTQ1Yzk1MWY2Y2MxNGNmZTZkMGRmMWRlZjgKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+
CisjaW5jbHVkZSA8V2ViQ29yZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVm
ZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVz
aW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6Om1fYmFj
a2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1w
bGF0ZSBjcmVhdGU8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Ms
IGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kLCBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VQaHlz
aWNhbEltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNr
ZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBtX2JhY2tlbmQt
PnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5j
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAg
IHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0JiBkaXNwbGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxh
eUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNhbEltYWdlQnVmZmVy
Ojpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7Cisg
ICAgICAgIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGE1MGQ3ZWY3MGFkM2Q5ODA2ZGNmNjY5NDViZWJkOWZkMzcyOTJkMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hh
cmVhYmxlQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47Cit1c2luZyBSZW1vdGVQbGF0Zm9y
bUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQ
cm94eTxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44MTcwYjMzMDcwM2UwY2RmNTI0ODNlZDYxMjZjMmMwMDJhNGM0NjJhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAg
ICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRk
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQo
KSwgKnRoaXMpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdl
UmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOwor
fQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2Fn
ZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAg
ICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAgaWYgKCFncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRjaCAocmVuZGVyaW5n
TW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAg
ICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyUHJv
eHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaW1hZ2VC
dWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdl
QnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlQnVmZmVyTWFwLmFkZChpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKK30KKwordm9pZCBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZVN1cmZhY2Ug
bWVzc2FnZSBzaG91bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGlzIG9uZS4KKyAgICBp
ZiAoIW1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2ltYWdlQnVmZmVyTWFwLnJlbW92ZShpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk5
MzhiZWU1MTFlNjlkZmVmZmRlNTQ5ZDA4MjIyNzg5ZTQ4MDgxMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7
CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsK
KworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsgfQorCitw
cml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpN
ZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAg
ICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
IG92ZXJyaWRlOworICAgICAgICAKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpOworCisgICAgdXNpbmcgSW1hZ2VCdWZmZXJNYXAgPSBIYXNoTWFwPEltYWdlQnVmZmVySWRl
bnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPj47CisgICAgSW1h
Z2VCdWZmZXJNYXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTRkY2Y3ZjMyYjQ1MjZkZGZiZWJiNzg3ZjgwMmMzNmZkOTU3YmM0OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMw
IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBO
b3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0
U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2Vi
S2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHZv
aWQgUmVsZWFzZUltYWdlQnVmZmVyKFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdl
QnVmZmVySWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3Vy
Y2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGNlZmYzYzI2MDVhMWY4
NWQ1ZDk5MGE2NGMzZjI4MjAzZDExNTIzMjAuLjMxNDA0NzhmNDE3ZDBjZmUwZDMwNGE4ODM0N2Fl
NWE0NzRlY2JmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpA
QCAtMjcsNiArMjcsNyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyCiAK
IFdBTlRTX0NPTk5FQ1RJT05fQVRUUklCVVRFID0gJ1dhbnRzQ29ubmVjdGlvbicKK1dBTlRTX0RJ
U1BBVENIX01FU1NBR0VfQVRUUklCVVRFID0gJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJwogTEVHQUNZ
X1JFQ0VJVkVSX0FUVFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIE5PVF9SRUZDT1VOVEVEX1JF
Q0VJVkVSX0FUVFJJQlVURSA9ICdOb3RSZWZDb3VudGVkJwogU1lOQ0hST05PVVNfQVRUUklCVVRF
ID0gJ1N5bmNocm9ub3VzJwpAQCAtMjA0LDYgKzIwNSw4IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5v
dF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAgcmV0dXJuIGZyb3plbnNldChbCiAgICAgICAg
ICdNYWNoU2VuZFJpZ2h0JywKICAgICAgICAgJ1N0cmluZycsCisgICAgICAgICdXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uJywKKyAgICAgICAgJ1dlYkNvcmU6OkNvbG9yU3BhY2UnLAog
ICAgICAgICAnV2ViQ29yZTo6RG9jdW1lbnRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6
OkZldGNoSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXInLApA
QCAtMjExLDYgKzIxNCw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xh
cmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJD
b3JlOjpQb2ludGVySUQnLAogICAgICAgICAnV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXInLAor
ICAgICAgICAnV2ViQ29yZTo6UmVuZGVyaW5nTW9kZScsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2
aWNlV29ya2VySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySm9i
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyT3JDbGllbnREYXRh
JywKQEAgLTIxOCwxMCArMjIyLDE0IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJk
X2RlY2xhcmVkKCk6CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9u
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTV1NlcnZlckNvbm5lY3Rpb25JZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYktpdDo6QWN0aXZpdHlTdGF0ZUNoYW5nZUlEJywKKyAgICAgICAg
J1dlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlJywKKyAgICAgICAgJ1dlYktpdDo6SW1h
Z2VCdWZmZXJGbHVzaElkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlcklk
ZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0SUQnLAogICAg
ICAgICAnV2ViS2l0OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpS
ZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRGVjb2RlcklkZW50aWZp
ZXInLAogICAgICAgICAnV2ViS2l0OjpSVENFbmNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6OlN0b3JhZ2VBcmVhSWRlbnRpZmllcicsCkBAIC03NjIsMTMgKzc3MCwxNiBAQCBkZWYg
Z2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAg
ICAgICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVz
c2FnZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShX
QU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J3ZvaWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5h
bWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBl
bHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToK
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtl
UmVmKCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRl
bWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisg
ICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9B
VFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6
CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAg
ZWxzZToKQEAgLTc3NywxMyArNzg4LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIo
cmVjZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNf
bWVzc2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRl
KFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnXG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVz
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVj
ZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FD
WV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7
XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRF
RF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1
dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9
IFtzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBp
biBzeW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRT
X0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVu
Y29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xu
JykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtc
bicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4n
KQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7
XG4nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRl
eCA4NGQ0MzljNTA1NDA0YjdlNTkwNWIzNmU3ZGVjNzY4OWRkZmE5NDU0Li43MDVjMzUyMzkzZGVl
MmEwOGQyNmQ4MDgzZmFhMTUyZmViYjkyNzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQuaD4KQEAgLTgwMyw2ICs4MDQsMjYgQEAgdGVtcGxhdGU8PiBzdHJ1Y3Qg
QXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsKIAogbmFt
ZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8Cisg
ICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZAorICAgID47Cit9OworCit0ZW1wbGF0ZTw+IHN0
cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHsKKyAgICB1c2luZyB2YWx1
ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlz
dEFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0LAor
ICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZQorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVj
dCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBF
bnVtVmFsdWVzPAogICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAzMDZj
ZDFlNjkzNTY2MWFkNDFjMDYwOTI4NDhiZjlhZjM2YjFiNzI2Li5iYjFmZWMyYWE2MTc3MDk2YjM0
MmMwMzU5MDBiYjJhZWYxYTg2NTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTMxLDYgKzMxLDggQEAgR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAogR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVNZWRpYVJlc291cmNlLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJl
c291cmNlTG9hZGVyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlci5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5j
cHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MTQsNiAr
NTE2LDkgQEAgV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlLmNw
cAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogV2Vi
UHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNSU1FVHlwZUNhY2hlLmNwcCBAbm8t
dW5pZnkKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VQcm94eS5jcHAK
K1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kLmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3Bw
CiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZhdGUuY3BwCiBXZWJQcm9j
ZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByb3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IDA4NzZhZGQxMzU0M2VlOGZjZWViYTYzNWJhOTk5MzZlZDdjODZjNTYuLjYzMGQw
YzQ5NjRmOTc0MzM3MGJhMjk2NmQzOThlMzEwNzlmMzZmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQKQEAgLTU1MSw2ICs1NTEsOCBAQCBXZWJQcm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5t
bQogCiBXZWJQcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2VydmljZS9XZWJDb250ZW50U2Vy
dmljZUVudHJ5UG9pbnQubW0KIAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCisKIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlQmFubmVyLmNwcAogCiBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1bmRsZU1hYy5tbQpAQCAtNjM1LDEwICs2MzcsMTQg
QEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2VzCiBFZGl0YWJsZUltYWdlQ29udHJvbGxlck1l
c3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2
ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nl
c3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVj
c01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNw
cAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlck1lc3NhZ2VSZWNl
aXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2tNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZmJk
YzI1NzVlNDQ4MTg1ZTRiY2JjODQyZTRmN2E1NDQzMTNiNDM5Li4wMTU4YTMxYTMzYWE0ODM0Njhh
ZDFiZDQ3MDg1MzlmYTg1ODAyN2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5NzUsOCArMzk3NSwzMiBAQAogCQk3MUE2NzZBNDIy
QzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3Vj
aEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9z
L1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3Vz
ZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQxMjNDOEZFMDIwMDQxODgxRiAvKiBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDIyM0M4RkUwMzAwNDE4ODFGIC8qIEltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDMyM0M4RkUwNDAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VC
dWZmZXJTaGFyZWFibGVCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMDE3NTQ0MjNDOTAwREEwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlckJhY2tl
bmRIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ2MjNDOTQ1RDgwMDQxODgxRiAvKiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDcyM0M5NDVEODAwNDE4ODFGIC8qIEltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyog
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUIy
M0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTkyM0FE
N0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2
RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1h
Yy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvbG9yUGlj
a2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwRjIzQUIwNDhC
MDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQx
MDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0
MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU3MjNCMzg0MjEw
MEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0
MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
RDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0
YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFT
dG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBD
MzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3Jl
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0
YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY0MDksNiAr
NjQzMyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTA3OTIz
MTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3MkJCRTQwRTIzQUIwNDU4MDBB
NjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4ODIzQjYxMjYxMDBBRTU2
ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9j
ZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQ
VVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02NDI1LDYgKzY0NTAsNyBAQAogCQkJCTJEOUZC
MjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIyMDYyMzc1MjA5RDAwNDlG
OTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2NUIgLyogbWVkaWEgKi8s
CisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJ
CQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDlGQjIwQzIz
NzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJ
MkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAq
LywKQEAgLTc4MDEsNiArNzgyNyw1MiBAQAogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMDE3NTQ1MjNDOTQ1QjEwMDQxODgxRiAvKiBjZyAqLyA9
IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIwMTc1NDYyM0M5
NDVEODAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAg
Ki8sCisJCQkJNzIwMTc1NDcyM0M5NDVEODAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBjZzsKKwkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBSZW5k
ZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5j
cHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMg
LyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFFQTYyM0FE
NEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJ
CTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJCXBhdGggPSBS
ZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzJC
QkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3NTQ1MjNDOTQ1QjEwMDQxODgx
RiAvKiBjZyAqLywKKwkJCQk3MjAxNzU0NDIzQzkwMERBMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLmggKi8sCisJCQkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3
IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyMDE3NTQxMjNDOEZFMDIwMDQx
ODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcy
MDE3NTQyMjNDOEZFMDMwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQuaCAqLywKKwkJCQk3MjAxNzU0MzIzQzhGRTA0MDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0Mg
LyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAorCQkJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIz
QyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIz
QyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2MDIzQzE4
Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJF
NDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJ
CQkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
ICovLAorCQkJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggKi8sCisJCQkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2
NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRlMzIzMDc3MGYyNDM2MWI2YWJhYThlMTdlNGQyZTVh
YzAuLjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEzODA1NTBhYWE0Zjk0ZDhlMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
CkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2Uo
SVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJl
bmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsKLX0KLQotdm9pZCBHUFVQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6
OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIp
CiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2VyID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFuYWdlcj4oKSkKICAgICAg
ICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICNlbmRpZgogI2lmIFVTRShMSUJXRUJSVEMpICYmIFBMQVRGT1JNKENPQ09BKQog
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2Vi
UlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVj
b2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2Rl
cikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVVByb2Nl
c3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQorewogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCBhOGFkNGZlZTg2YjI2NTliNGFmZmI3YzQ4NGRh
MTgxYzNiZWYyN2QwLi5lOGVlODVkYzMyZmU1NzhmMTc1MzhiYTNkODlmZDc0NjA3NDZiYTBkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigp
OwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29u
bmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVj
ZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiAjaWYgSEFWRShB
VURJVF9UT0tFTikKICAgICB2b2lkIHNldEF1ZGl0VG9rZW4oT3B0aW9uYWw8YXVkaXRfdG9rZW5f
dD4gYXVkaXRUb2tlbikgeyBtX2F1ZGl0VG9rZW4gPSBhdWRpdFRva2VuOyB9CkBAIC01OCwxMSAr
NjAsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZv
aWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2
b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1l
KSBvdmVycmlkZTsKIAorICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwor
CiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nlc3MgdG8gdGhlIEdQVSBw
cm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKLQorICAgIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogI2lmIEhBVkUoQVVE
SVRfVE9LRU4pCiAgICAgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4gbV9hdWRpdFRva2VuOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQ
cm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCBkMzZmOGEwOTVmNmE3N2JiYjZjYWM4
ODNhNjUxZTg0Y2U5ZDY0YjMwLi41N2ZlY2RlOWRmMjdjNzM5YTZjYmYwMjY5ODA2NTkyYjVlMjE3
OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24g
eworbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gV2FudHNEaXNwYXRjaE1lc3NhZ2Ug
ewogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hNTk2MzA2OWY2NjE4MTgzZDA3OGE2NGMyZGVhY2MyZDgzYTRjZGUzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisjaW5j
bHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIEltYWdl
QnVmZmVyQmFja2VuZEhhbmRsZSA9IFZhcmlhbnQ8CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
TWFjaFNlbmRSaWdodCwKKyNlbmRpZgorICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlCis+Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYzQyY2YyNDVlMzQ1ZTFkZmVjNjJkYzFkN2EzZWNhZWZjZDlhYjVkMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9J
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBl
PjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWExYmM5YWU4N2RjOGQ3MjQyOGEwYjgwOWNhZDBkODBhNGNkMWNiOQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRl
bnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlcklkZW50
aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVySWRlbnRpZmllciA9IE9iamVjdElkZW50
aWZpZXI8SW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zZGQ4NGNlOTUyMWZjNzJjNDIwYWUzOWYyOGU5YzQwMzNlYmEwZTViCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dENH
Lmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQorewor
ICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJl
c29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIAorICAgIFNoYXJlYWJsZUJpdG1hcDo6Q29uZmlndXJhdGlv
biBjb25maWd1cmF0aW9uOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIGNvbmZpZ3VyYXRpb24u
Y29sb3JTcGFjZSA9IHsgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpIH07CisjZW5kaWYK
KyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGludGVy
bmFsU2l6ZSwgY29uZmlndXJhdGlvbik7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0Nv
bnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoYml0bWFwKSwgV1RGTW92
ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKTsKKworICAgIGF1dG8gYml0bWFw
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShXVEY6OmdldDxTaGFyZWFibGVCaXRt
YXA6OkhhbmRsZT4oaGFuZGxlKSkpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250
ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
PihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShiaXRtYXApLCBX
VEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgYml0
bWFwLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgcGh5c2ljYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkp
CisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKK30KKworSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkgY29uc3QKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBoYW5kbGU7CisgICAgbV9iaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoV1RGTW92ZShoYW5kbGUpKTsKK30KKworTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgcmV0dXJu
IG1fYml0bWFwLT5tYWtlQ0dJbWFnZUNvcHkoKTsKKyNlbHNlCisgICAgcmV0dXJuIG51bGxwdHI7
CisjZW5kaWYKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOworfQorCitSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7
CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1h
dCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9iaXRtYXAtPmRhdGEoKSk7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFy
cmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
Cit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFy
cmF5LCBzcmNTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fYml0
bWFwLT5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MzRhMmRhNTRiMDJlZGMzZTI1
ZjQwYjAyYzcwNDJhYzQ4NDU1Mjg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Yy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVhYmxlQml0bWFwOworCitj
bGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPiBj
cmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0
V2luZG93Kik7CisgICAgCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlKTsKKworICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUoKSBjb25zdDsKKyAgICAKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAqbV9jb250ZXh0OyB9CisKKyAgICBX
ZWJDb3JlOjpOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0
b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gY29weUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNv
cHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlLCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRp
b24gPSBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jiwg
V2ViQ29yZTo6Q29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJ
bWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
ZGVzdFBvaW50LCBXZWJDb3JlOjpDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+JiYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+JiYpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdS
QTsgfQorI2VuZGlmCisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTcxOTMxMTVkZTExZjE1MjNkYzA5MGYwMTFjMTQ2
NTE0OTQ5NzVmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5o
CkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFBsYXRm
b3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCA9IEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZDsKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQor
dXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCA9IElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9y
bUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kOworI2VuZGlmCisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0Y2U4MGY3YjFhNmVjYmM4
MmJlNDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKQEAgLTAs
MCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBSZWdpc3Rl
ciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9u
LgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VS
ZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIo
TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1h
Z2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0
aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXI6On5S
ZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVz
c2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2
ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlv
bigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVN
ZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdl
QnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlv
biA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJ
bW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9u
OjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJlbW90
ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8SVBDOjpD
b25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24t
PndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6
OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9
CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sKKyAg
ICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1
bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0ZWQoKSAm
JiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgp
OworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgaXNQZW5k
aW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNoSWRlbnRp
ZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIo
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVj
ZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVtb3Rl
SW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRlbnRpZmll
ciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNlbmQoTWVz
c2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCwg
bV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVu
c3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZGQ5MTk5NWZhZTVlYTZlM2Y0ODc0Zjc2YTRjYzM4NDY0Y2FiYjFkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90
ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJp
dmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgflJlbW90ZUltYWdlQnVm
ZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKwor
ICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIEJsb2NrZXJzCisg
ICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0U2V0
Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cisg
ICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRp
ZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICAvLyBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpID0gMDsKKyAgICB2
aXJ0dWFsIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0
Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsgICAgICAgIAorICAg
IHZvaWQgcmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYpOworCisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyIHsgSW1hZ2VCdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CisgICAgSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOworICAgIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7CisgICAgUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjM0MWZkMjRmMjk2OWFhNzdkMmJiZWU3MjcxNWJmMjZmM2M5YmFkMjgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlciBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lk
IENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUs
IFdlYkNvcmU6OkludFNpemUgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdl
YkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUgaGFuZGxlKQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNlMDI0YzdiYjRjMDc1ODY3NWY2YjEwN2ZlZDhmZDNkN2Uz
ZWVhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw4NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdl
QnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2Ns
YXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcg
QmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPjsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5k
OworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAg
ICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihz
aXplKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSBoYW5kbGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoIW1fYmFja2Vu
ZCk7CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUobG9naWNhbFNpemUs
IGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRs
ZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEJhY2tlbmRUeXBlKiBlbnN1
cmVCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghbV9iYWNrZW5k
KQorICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRo
aXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0
KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRp
c3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRl
eHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgZmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYmQyMDE2MzgwNGIwMjRkNGYxNDAx
ZDQ0NjYzNjIzYWQ1M2E5N2FmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVk
ZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0
Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OwordXNpbmcgUmVt
b3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlcjxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MGM1OGFhYzczZTI1YmNhN2QwYTkzMDk3YzczNjE5NjNmZTQwZWJkZgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBDcmVhdGUg
dGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7
Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNo
IChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVy
YXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpbWFnZUJ1ZmZlciA9
IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGltYWdlQnVmZmVyID0g
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5
ZDFmNDRjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAor
ICAgIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBD
OjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0
ZSgpOworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVz
c2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRv
dyopIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsK
KyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMjM1NDcwY2NmZTdiNzliYjkyNDU3OGFmYjQxNzAzNWM5MTNkZDAyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL09i
amVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGU+Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg4MzFhMWI3MWI0M2I2YzExMGI4
NDkyNjc1OTQyNWI0ZjdlZmU2ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVE
X0lNUEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKTsKKworc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0
ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFj
ZSA9IElPU3VyZmFjZTo6Y3JlYXRlKGludGVybmFsU2l6ZSwgaW50ZXJuYWxTaXplLCBjYWNoZWRD
R0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQgPSBz
dXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFjZ0Nv
bnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0
KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW50ZXJuYWxT
aXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBBU1NFUlQoV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKTsKKworICAgIGF1dG8gc3VyZmFj
ZSA9IElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKFdURjo6Z2V0PE1hY2hT
ZW5kUmlnaHQ+KGhhbmRsZSkpLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAg
IGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+KG5l
dyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7
Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShtX3N1cmZhY2UtPmNyZWF0ZVNlbmRS
aWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ0cp
ICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSkKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZlNzAxMDg5NjJjNzI0MjkyOWRlZWE5ZTM2ZGVlYmIy
MGE2OTY3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2lmIFVT
RShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaD4K
KyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBTaGFyZWFibGVCaXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgewor
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlclNoYXJlYWJsZUlP
U3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJD
b3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7CisgICAgCisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIEltYWdl
QnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgdXNpbmcgV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggOGU0Yzkz
NzVkN2I4Y2MxMGZmYTAwODAzZDQ4MjE3M2JlNWEzNTU4YS4uNzcyNmZlOTQ4YTIyNzliYmY5Mzlm
MDY0NGY2NDU2ODJlZDZiNzk4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTEwMiw2ICsx
MDIsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL01vY2tXZWJBdXRoZW50aWNhdGlvbkNvbmZpZ3Vy
YXRpb24uaD4KICNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKQEAgLTg4
MSwxNSArODg1LDIyIEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGllbnQ6Omdy
YXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElP
Tl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+
IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlz
cGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKICAgICBpZiAoYXV0byogZHJhd2luZ0FyZWEgPSBt
X3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5jcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
KyNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gV2ViQ2hyb21lQ2xp
ZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworI2Vs
c2UKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CiAjZW5kaWYKK30KIAog
dm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3Jh
cGhpY3NMYXllciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZmRhMzM4ZWNmYTY4
NTVlMWMxZDYwODUwZTQ3MWY2Nzk0ZWQxYzJjZC4uNGRlZGZlZTc4NDExNjVlNTc3ZDk0MDMyMzU1
MWI0ZjUzYjJkMWRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjMxLDYgKzIzMSw4IEBAIHBy
aXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRl
RGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBm
aW5hbDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJlbmRlcmluZ0Jh
Y2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKwogICAgIENvbXBv
c2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29uc3QgZmlu
YWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1RyaWdnZXJG
bGFncz4oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9y
dC9XZWJDb250ZXh0TWVudUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCmluZGV4IGVmMDM1MDM0MmJiODIyNDZj
ZDE5ZjM1NGQ5YmNjMDI5MWYyOTA0M2QuLjI0MDdmMTA2OWI1N2ZiZjY1OTQ4ODc1NDEyOGNlOGZh
YjFlY2JiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0yMDIsNyArMjAyLDcg
QEAgUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJl
bnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0KICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIC8v
IFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBzbmFwc2hvdCwgYW5kIHdpbGwgYmUgcGFpbnRlZCBpbiBh
biB1bmFjY2VsZXJhdGVkIGZhc2hpb24gaW4gbGluZSB3aXRoIEZyYW1lU25hcHNob3R0aW5nLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShyZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IGMzMDA3YjNmYzIzZDg5ZjgzMjJlMmYwODE5NTFiY2FkN2JiYjhi
MDIuLjk2ODBlY2NiZDBkN2M1OTE2ZmQ3ZjQwMGFlYmQzMmI1YjIwZjg3ZWEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMiBAQAorMjAyMC0wMS0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBkaXNwbGF5
bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDEtMTEgIEFu
dHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVncmF0
aW9uXSBmYXN0L3RleHQvc2ltcGxlLWxpbmVzLWZsb2F0Lmh0bWwgc2hvdWxkIGJlIGFib3V0IHNp
bXBsZSBsaW5lIGxheW91dCBvbmx5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5
bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMWI1N2U3OTFiNzJh
Y2NhODc3NjE0NDc5YjRkYzdmZTVjOTU5NGQ3Ny4uMzRjODdiOWIwNDI5NDU1YTliZjExNDFjNmJm
YjM5NzFjNzUyMGI4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZh
cy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDExIEBACiAgCiso
c2F2ZQorICAocmVzdG9yZS1pbmRleCAwKSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAy
NTYpCi0gIChmaWxsLWNvbG9yICNDODAwMDApKQorICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisg
IChzdHJva2UtdGhpY2tuZXNzIDEuMDApCisgIChmaWxsLWNvbG9yICNDODAwMDApCisgIChzaGFk
b3dzLWlnbm9yZS10cmFuc2Zvcm1zIDEpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwx
MCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387436</attachid>
            <date>2020-01-11 10:31:30 -0800</date>
            <delta_ts>2020-01-11 12:11:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200111103129.patch</filename>
            <type>text/plain</type>
            <size>490163</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM1MWQ3NGM4ZGRhNmM2
ODdjMjY2MzdmMDM0ZTAyMzhhYjQyZDMwMS4uZTJmYWQ0ZGY5NmU0YzU2ZTJiN2I1OTdiMzFmZjZk
MmE5YjM1YTg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2OSBAQAorMjAyMC0wMS0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworICAg
ICAgICAgICAgLS0gU2hhcmluZyB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIGRhdGEKKworICAgICAg
ICBUaGlzIGlzIHRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIEltYWdlQnVmZmVyOgorCisgICAgICAg
IEltYWdlQnVmZmVyCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNr
ZW5kVHlwZT4KKyAgICAgICAgICAgICstIFBoeXNpY2FsSW1hZ2VCdWZmZXIgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQgICAgIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRU
eXBlPiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgICstIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgLS0tLS0rICAgUmVtb3RlSW1hZ2VCdWZm
ZXIgLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAg
ICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAg
IHwgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciAtKyAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgLSsKKyAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
KyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgICAgICAgICstIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eSAtLS0tLS0tLS0tLS0tLSsKKworCisgICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNo
eSBmb3IgSW1hZ2VCdWZmZXJCYWNrZW5kOgorCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZAor
ICAgICAgICAgICAgfAorICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAg
ICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAg
Ky0tIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgfCAgICAgICB8ICAg
ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwg
ICAgICAgKy0tIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorICAgICAgICAgICAg
fCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZAorICAgICAg
ICAgICAgfCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZAorICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAg
ICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAg
IEFzIGFuIGV4YW1wbGUgZm9yIHRoZSBwbGF0Zm9ybXMsIHdoaWNoIHVzZSBDRywgSW1hZ2VCdWZm
ZXI6OmNyZWF0ZSgpIHdpbGwgCisgICAgICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9m
IEltYWdlQnVmZmVyOgorCisgICAgICAgICAgICBJbi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAg
ICAgICAgICAgICBVbmFjY2VsZXJhdGVkOiAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAgICAgICBBY2NlbGVyYXRlZDogICAgUGh5c2lj
YWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAgICAg
IE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJhdGVk
OiAgCisgICAgICAgICAgICAgICAgICAgICAgICBXZWJQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQVVByb2Nlc3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+CisKKyAgICAgICAgICAgICAgICBBY2Nl
bGVyYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPgorICAg
ICAgICAgICAgICAgICAgICAgICAgR1BVUHJvY2VzczogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5PEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4KKworICAgICAgICAq
IEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJv
YXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRp
emVEYXRhSWZOZWVkZWQpOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAg
ICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlQ29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZm
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3Bs
YXlMaXN0QXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2Nl
bGVyYXRlZCBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6Cisg
ICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQg
Y29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6
c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICog
cGxhdGZvcm0vSG9zdFdpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29weVJlY3RUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5RnVuY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1h
Z2VCdWZmZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2lj
YWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZl
cjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OmRyYXdTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5
ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1
ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpzZXR1cENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkpOgor
ICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVZlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcDoKKyAgICAgICAg
KE5pY29zaWE6OkdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAyMDIw
LTAxLTEwICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10g
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0VGFibGVDZWxsQm94IHNob3VsZCB0YWtlIEhv
cml6b250YWxDb25zdHJhaW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAyYzMwZjE3YTIyNGJmYmVjNzc2OGZlZjQ3
MzU0ZDg3MDliMGY2MmQ0Li4xMGUxOTJiNTQ5ZjQ5Y2Y1Njg0NzEwNzdjMjllYjc2MjNmOGM1NTEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAyMC0wMS0xMSAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMg
cmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQp
OgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToK
KyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5
bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1
c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNl
dEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpy
ZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAx
LTExICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBjb3JyZWN0IGdyYW5kZmF0aGVyaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIElUUCBkYXRh
YmFzZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMzFkODIyNDBiMTk4
MDkxYTVlYzJmZGE5ZmVlNjAwYTZjOWM3N2NiNy4uNWY1NzIxY2Y3NmZjODJmNDUxYjQ1YWNjZWI0
NTBkYmVmYTczMmZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDIwLTAxLTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6
OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDkg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQg
VEFSR0VUX09TX01BQ0NBVEFMWVNUIGluIG1vcmUgcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRl
eCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5M2I5OTY0ZTc3Li44NWE3YmMwMmZkMDc1
YWYzZTgwNTdhM2Q3OGQyODBmNzZhODE0ZmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUs
NiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2Ft
ZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1v
bml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzEx
MDcsMTggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlz
cGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
ZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1v
dGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGFiU2l6ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRh
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCmluZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBk
MWNmYjZlODBiMjMxZGQ1NmQ2YjAuLjc0NjVkMGU2YTg2Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhl
N2FhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJk
L0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRpemVEYXRhSWZOZWUKIAogICAgICAg
ICBhdXRvIGJpdG1hcEltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBiaXRt
YXBJbWFnZS0+c2V0RGF0YShXVEZNb3ZlKGJ1ZmZlclRvU2FuaXRpemUpLCB0cnVlKTsKLSAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNp
emUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBtX2RhdGEg
PSB7IG51bGxTdHJpbmcoKSB9OwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBm
M2NmOTQwZC4uNWU1NDI2YzExNGQzYWNmNTBiNDcxOGJjY2Y0NmEzN2MyY2NhZjk4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC0xMzIsOCArMTMyLDkgQEAgZWxzZSAo
KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzcsOSBAQCBlbHNlICgpCiAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3Ry
eS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGMwM2NlNmI1MTMxODIxYTAxY2M3ZDY2
NTNkMTY5MTkxZGJiNzlhODEuLjBiMmJjY2M1YjU2NjYwMzU0NTIzN2JkNWFjMDM1YWMxMWI0ZDJj
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0yODksOCArMjg5LDEwIEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rl
ckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApAQCAtNTI1LDcgKzUyNyw5IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0MTEyMTU1N2FlNmYzNWRi
OWFkNWY0YzFlOGFjY2NhMDg2NjNlNmZiLi43YTIwOWE4NjdkM2UxYTE0MGRiMjAzNDQ1ZWQzYWRl
ZTI3Njg4ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2OSw2ICsxODY5LDcgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMTg4OCw2ICsxODg5LDcg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGU0NTNkODkwOTdlNjg2YjJjMzM1
MmJhZDY2ZWU3MTIzNDdjMTY2YjUuLjRmMDNlYzIzZDhjNDBmYjk2YTJlNTc3MDFlMzY2YWIwMTRj
ZWNmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjg4LDggKzI4OCw5IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggNzIwNWUyMGQzYWI0ZTM5
ZmJlZTRiYjk0MzFhZWNiNGJjY2MyOGJkMi4uOTdmMzM2ZTdjNWM5ZThkMGRhMjVlMmJkNGU2MWFk
NzFhZTUyZGYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTg0LDcgKzg0LDYgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0
aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlR3RrLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
YWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA5YmI4NDMxNDUzOWFkMDk1MTQ2MzFiMjEzMDYxNmFmNjBiYTlhMWMzLi41
MzYwZjQ3Yzg2NzliMTJmODg1Yzc5MjAwMmQ5NzNjYzJlMjRmMWIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1
LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBE
NjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9
OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkw
MDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRX
cmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZF
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNT
VkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVm
RWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRH
bHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVt
ZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVm
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07
CkBAIC0yMTMwLDE0ICsyMTI4LDI2IEBACiAJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBB
bmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFFMkM0MjQyMUM5MzUxRDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzFFQURDRDgyMjA4N0U3MjAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFQURDRDYyMjA4N0U2RDAwNjVBNDVGIC8q
IFBvaW50ZXJJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUZDRUQ3MjAyQjM4
OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzU0QTIzQzk2OURGMDA0MTg4MUYgLyogUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMDE3NTQ4MjNDOTY5M0UwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzMxMjIzRUM4NTQwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1
MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAv
KiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYx
RUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUND
QkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBG
NUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQy
MzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2
MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmlu
Z01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
MzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlG
N0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMw
MUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUw
MURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkw
MTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZB
NkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5
c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJC
RTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQy
NzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAw
QTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMg
LyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUz
Q0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0Uw
QjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZl
bnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VD
NzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDIsOSAr
NjU1Miw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2Vi
RXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQx
MEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NW
R0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMiw4ICs5NjA5LDEyIEBA
CiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVj
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5
OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBv
aW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0ODIzQzk2OTNFMDA0MTg4
MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIw
MjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3Bl
cnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFs
dWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJp
bmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oOyBwYXRoID0gLi4vQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxl
bmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3
RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NjI0LDcgKzk2MzUsMjAgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8q
IEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JH
Qi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0
NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNS
R0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0
MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIw
MEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FB
QzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYy
M0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgy
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGlu
Z09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRl
cmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVy
aW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8q
IEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VY
VHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJG
MDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkw
NEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjY4OCw3ICsxMjcxMiw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUw
QUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAv
KiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEx
RjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg4LDYgKzE2NzExLDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJ
MEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJCQkU0
MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJ
CQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJ
CQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJ
CQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8s
CkBAIC0yNDg4Nyw2ICsyNDkxMSw3IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBj
ZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIzODI2
QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQkw
RkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKQEAgLTI0ODk2LDkgKzI0OTIxLDEy
IEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmgg
Ki8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJ
bWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MEQyM0FBRUNBMjAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwQzIz
QUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3
MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1
IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAgLTI0OTk0LDYgKzI1MDIyLDcgQEAKIAkJCQk0
QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4
Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFF
N0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmggKi8sCisJCQkJNzJBMDdDNDUyM0JF
RUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0
RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0
OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJ
CQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dC5jcHAgKi8sCkBAIC0yNTA4NSw3ICsyNTExNCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAw
NjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8q
IEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAv
KiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJ
bWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VG
cmFtZS5jcHAgKi8sCkBAIC0yNTE0Miw2ICsyNTE3Miw5IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5
OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8q
IFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzIwMTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2
IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyog
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAw
NDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTE1MSw2ICsyNTE4NCw5IEBA
CiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0Ex
NTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDcz
QTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNzJE
NUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcy
RDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzIz
ODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLywKIAkJCQlBNzNGOTVG
QzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICovLAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKQEAgLTI4OTkzLDYgKzI5MDI5LDcgQEAKIAkJ
CQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCQjVDODgxRDVENkY0NTAwNUE3MUY0IC8qIEFsbERl
c2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzODI2QzIyM0M1NkY3
OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIz
RkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5
Njg4LDYgKzI5NzI1LDggQEAKIAkJCQkxMTJGQjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxh
eUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNC
MCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyNzIz
QUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0Ey
Q0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMzAyOTYsOCArMzAzMzUsMTAgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyog
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0
RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMTIz
QUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxRjFFQTcyM0FENTBBMTAwQkRB
RkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xz
QnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAw
N0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MTc2Nyw2ICszMTgwOCw3IEBACiAJCQkJQTU1NEI1RjMxRTM4MzkzQTAwMUQ0RTAzIC8qIFBlcmZv
cm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1ODFGQjUxNTIwRjkzQjAw
M0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkUwRjQy
M0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURCQzFCNTYyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1
cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUQyQzgyQjcyMzZBM0Y2
QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjggLyogUGljdHVyZUluUGljdHVyZVdpbmRvdy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMTc4Niw2ICszMTgyOCw4IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1
MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVw
YWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAxNzU0QTIzQzk2OURGMDA0
MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZv
cm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NjMsNiArMzIwMDcsOCBAQAogCQkJCUJD
RUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJl
c291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAw
RjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4
MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVy
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNjRkZmYyZDk4NGVmNzJkZDll
YmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0ZTQ5MGFiNGQ4MWJkNmZmMTI4ZTI1YTc3Njc0MWQ5
ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxT
aXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXpl
LndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNh
bFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0g
YnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQo
KSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJh
dGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVm
ZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhl
aWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJp
dG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5D
bGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4
YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0
NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApA
QCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFu
c2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhp
cyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAg
ICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQp
OworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4g
JkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42
NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3Vz
dG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwg
IWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9j
b3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcg
QEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAg
IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3Rp
bmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBt
X2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9k
ZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29w
aWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAx
ZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkx
ODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAi
Q2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
QEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
I2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQog
CiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMs
IGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1
cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRo
ZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAt
ODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0
ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpz
ZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsK
LSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdp
bmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcg
PSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0g
ICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0
cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0
cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsK
LQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAg
ICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4
dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBm
bGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAg
ICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBi
dWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZs
YWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRl
ZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52
aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+
cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQg
YSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9v
bCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVl
T3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7Cisg
ICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBv
biBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAg
ICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVs
c2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBz
aG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICBy
ZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENv
bG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0
KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMy
ZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBp
ZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2
Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlz
cGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZh
bHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9j
b250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVj
M2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZl
NjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSAr
NjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1z
dGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsK
K3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6
OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjEx
ZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0
cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkK
ICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsK
IAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0
dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBV
bmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUlt
YWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3
aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVl
bkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVy
KCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAog
dm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXgg
ODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMz
NjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4
MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9z
aXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNj
ZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBA
IC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1
cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcElt
YWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmln
aW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0Nv
bnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0Nv
bnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5
CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3Ry
aW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3Bs
YXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5n
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250
ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4
dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwot
fQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+
JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFs
aXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShm
bG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9h
dCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFn
ZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1F
eGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4
LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFz
QmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBn
ZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFp
bnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3Jl
YXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRl
QXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBu
dWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3Nh
Z2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxv
YXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1h
Z2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0g
ICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAg
IHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRp
cnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxv
YXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZl
ciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyAr
MjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0
KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVj
dCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1v
dmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7Cisg
ICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0
ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpA
QCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpw
dXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VS
ZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkp
OwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRC
eXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwg
SW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXIt
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpk
YXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VS
ZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWRE
cmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9y
bSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUy
YmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0
ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1
YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4g
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxp
c3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlv
biA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250
U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRl
bXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAot
ICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBm
bG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZs
b2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTll
YmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVu
ZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVu
ZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBS
ZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGlj
IFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYg
Y2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpA
QCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2Yjky
YjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAg
ICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RD
b3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5j
b3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAg
ICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNl
OjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgp
LCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5n
U3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAw
LDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlw
ZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0
byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCks
IHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVy
bmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00
NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsK
KyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Uu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3
Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8g
dGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0
LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9y
bWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAg
ICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4
dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5m
byh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMt
PmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
dGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcg
QEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRv
QnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBv
aW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwg
c3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6
OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hv
dWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNT
RVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5
MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhm
YzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXll
ci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQg
bm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNp
emUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVj
dC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9y
KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2Fm
NS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlk
ZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xp
ZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMp
OwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQo
KSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRl
cmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0
dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hy
b21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDku
LjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJp
bmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdl
U3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYz
ZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUz
NWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3Ry
YWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIK
QEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJl
ZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5
SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3Jh
cGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVy
KikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAw
YTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4
YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25h
cHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJl
CiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxl
RmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGlt
YWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9y
KTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVy
LT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYx
OWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1
YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hv
dChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAg
ICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAg
ICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAg
ICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VS
ZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURh
dGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2Fk
NjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNTVhNzAwNWU0Mjg1YWI0NzdmOTM5YmU4Y2U2
YWVhYjU2MjA2ZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8u
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcg
KzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cu
aAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li5mNWYyMTdj
Y2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
SG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vy
c29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5n
QmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKyAgICAKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAgLTc1LDUgKzc3LDMgQEAgcHVi
bGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSG9zdFdpbmRv
d19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA0MjFkZmJk
OTU3NTRjNDYyNzU3Yjc4ZGJmYTQxMDI1NDMyYWYwYjdkLi5kMjNiYjAyM2U3ZDc4NDBhZWJhYTQx
NGY5OWYwYmMwYzFmMmNkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBo
YVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUwNTQx
NmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11bHRp
cGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZkNWJhMjAwNjkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3Mg
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5n
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihz
dGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJhY2tlbmQsIGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFC
YWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAg
ICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAg
eworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRl
eHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0
OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3
aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250
ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4
NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4uMzViZDU4YzNkMTJmZjg0YzBl
NjY0MmY4MTgyNzA5OWNlODM3ZTI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsK
ICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5
Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3NGRkMzc0ZWVhMWQ0Mjg0NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggY2VlYTFkYTQwZWIzMmZm
NzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNiZTRhYzZiODg0MzY0YzU1NDM5N2Y3
ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0
Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyMiwxNyArMTIz
LDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1lbnVtIFJl
bmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2NlbGVyYXRlZE5vblBs
YXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24gcmF0aGVyIHRoYW4g
cGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAgQWNjZWxlcmF0ZWQK
LX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0gICAgUHJlbXVsdGlw
bGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21wb3NpdGVPcGVyYXRv
ck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBT
dHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9vbCBwYXJzZUJsZW5k
TW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAgLTE0Myw3ICsxMzMs
NiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIFdFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2Fw
KTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IGMwMTI2MzcwY2I4NjU5MjdhMzJiZjExZjYxNDg2ZDcx
YWY3YjQ3NTguLjRlMmJlNzFjNzQxYzU1ZjU2YzBhZDA0NmE3OTdlNTBhMDk3MTg4YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAg
LTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKK30KIAotV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Cit9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3
IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAo
c2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZm
ZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwg
Y29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3Jh
cGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNp
emUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLSNpZiBVU0UoRElSRUNU
MkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
cihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOwor
ICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKKworc3RhdGljIGNvbnN0IGZsb2F0IE1h
eENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVh
ID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKIGJvb2wgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKQEAgLTEwNSw5
NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlvbigpLCBjbGFt
cGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShDQUlSTykK
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNrZW5kcy4KLSAgICByZXR1cm4g
eyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSkKLQotRmxv
YXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBzaXpl
KSBjb25zdAotewotICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RD
b2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBw
b3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAg
ICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRz
dENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29s
b3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2Ug
PT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3Ip
OwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNl
UmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIElt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50UmVj
dCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNy
Y1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7Ci0g
ICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+
aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQg
KyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcg
KiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNy
Y1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRC
eXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAg
ICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0
VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYs
IEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0ludFNp
emUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxzZTsK
KyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9y
bSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9uIHRo
YW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAq
IGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogewpAQCAtMjA0LDYzICsxMjUsMjcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QKIAog
ICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRl
eHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJ1
ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUo
c2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAg
IGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIFNl
dCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0
LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICBy
ZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgcmV0dXJuIGNyZWF0ZShz
aXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZW5kaWYKLX0KLQot
SW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0
aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLWJv
b2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50
b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7
Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoY29udGV4dC5zY2FsZUZhY3RvcigpLCB0
aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5z
aW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBm
cm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0
YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50
ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0g
ICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVp
Z2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVz
b2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkg
Y29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVm
ZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
IH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCAzYmRlZTRlZTAwZWQxN2Fl
MzQzYjJmNmE4ZGRkMDA5Mzg5YzJlNmJmLi5jNjBiNzVkNGZiZmJhNWQyYmQ0NTBiMTNhNzUzMTMw
ZmM2YmNjYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE3MCArMjcsODEgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7
Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFz
cyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5n
U3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29w
eS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZl
Y3QgdGhlIGNvcHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAg
Tm8sCi0gICAgWWVzLAotfTsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5n
Q29udGV4dDsKK30KIAogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBw
dWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBm
YWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9z
dFdpbmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0
V2luZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVm
ZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBi
dWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpOwogCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2lu
ZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotICAgIGJvb2wgaXND
b21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKLQotICAgIC8vIFRoZSBhY3R1YWwgcmVz
b2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotCi0gICAgRmxvYXRTaXpl
IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKSBjb25zdDsKLQotICAgIGZsb2F0IHJl
c29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVy
IHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3Rh
dGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2Fs
ZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsK
KyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0
U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24gdGhlIGZhc3RlciBjb3B5SW1h
Z2UgTW9kZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlmIGl0IHN1cHBvcnRzIHRoZSBE
b250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9yIHJldHVybiBDb3B5QmFja2lu
Z1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0
Q29weUltYWdlTW9kZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVy
KCkgPSBkZWZhdWx0OwogCi0gICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Zmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2lu
Z0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJh
d2luZ0NvbnRleHQoKSB7IH0KIAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJl
c29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0
ID0gMDsKIAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgp
IGNvbnN0OwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVj
dFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zv
cm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xv
clNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAs
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25z
dDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgc3RhdGljIE5h
dGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9J
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgLy8g
RklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJl
c3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQg
YXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVt
LCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RD
b2xvclNwYWNlKSA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBj
bGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNr
ZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVj
dCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFn
ZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRo
ZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRv
TmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVz
aENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9y
ZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4
dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAg
dmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0
ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29v
cmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKIAotICAgIHN0
YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBp
bmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5k
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7
Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBj
bGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50
SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0KLXByaXZhdGU6Ci0g
ICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRT
aXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAv
LyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4g
b3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3Vs
ZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAg
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0Nv
bG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNj
ZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0j
ZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7CiB9OwogCi0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rv
cjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDVjOWI3ZDViY2IwMDQ5NmJlN2YzNzk4
M2IyZDA5MjhiNGRjNTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6
ZSkKKyAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFsU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
eworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZs
b2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRo
KCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChz
Y2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXpl
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IElu
dFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGlu
dGVybmFsU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJm
bG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5h
bFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gaW50ZXJuYWxT
aXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9J
bWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVy
biBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgSW50
UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplKTsKKyAg
ICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29yZGluYXRlU3lzdGVtOjpMb2dp
Y2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIHVu
c2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAg
ICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAg
ICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAq
c3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBv
aW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQorCitSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRl
c3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBh
cmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsKKyAgICBhcmVhICo9IHNyY1Jl
Y3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIWFycmF5IHx8ICFh
cnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgYnVm
ZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAgICBzcmNS
ZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBzcmNSZWN0KTsKKyAgICBkZXN0
UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAg
ICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0Lngo
KSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKC1z
cmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgp
KQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJl
Y3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwg
c3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBz
cmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RS
ZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisg
ICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkpOworCisgICAg
aWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkg
LSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6
ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJ1ZmZlclJl
Y3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICBpZiAoc3Jj
Q29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQ
aXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxb
Ml0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90
IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsK
KyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQs
IHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7Cisg
ICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAg
ICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBk
ZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3Jj
UGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JG
b3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4
ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0
UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRl
c3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAg
ZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBd
ID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxw
aGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3RvcikoQ29sb3JGb3JtYXQsIGNvbnN0
IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3RhdGljIGlubGluZSB2b2lkIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoCisgICAgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3Jt
YXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90
KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnl0ZXNQZXJS
b3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWln
aHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7
IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0LCAmc3JjUm93
c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBzcmNSb3dzICs9
IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Cisg
ICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0Nv
bG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dz
LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5SW1h
Z2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihz
cmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRl
ZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBk
ZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
PihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAg
ICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRS
ZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJh
eSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVk
LCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3Jj
UmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEo
KSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7Cisg
ICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVp
bnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHNyY1Jl
Y3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsK
KworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNS
b3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQ
ZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5Owor
fQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCB2b2lkKiBk
YXRhKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAg
ICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNy
Y1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJl
Y3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQ
dXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQs
IHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAq
IHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0
YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBl
ZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDA4NjMxZGFiMWRlMDA2OGM4
MWM0MzgzMTc2NjljNGMxODQ2ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUgIk5hdGl2
ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgewor
ICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0
IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50
IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVz
b2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3Mg
Q29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2VudW0g
Y2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisgICAgQmFj
a2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsK
KyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsg
cmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0
dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdl
PiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVy
dFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNl
KENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5
c3RlbSkgPSAwOworICAgIAorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwg
Ym9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVf
RVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0
YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJ
bnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFS
ZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVhbCBD
b2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZvcm1h
dDo6UkdCQTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBp
eGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90
KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRp
bmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0sIHZv
aWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIEludFNpemUgbV9p
bnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29sb3JTcGFj
ZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZiZDEyYWJlNTQzYzNmMjAzNGY2MTU4
YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgi
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlz
aWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlz
aWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2OTRkMzgxYWNiYzkyNjBkYmI0N2U5
ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVi
bGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1
ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEltYWdlQnVmZmVy
LCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tl
bmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2lu
ZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1h
Z2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNhbEltYWdlQnVm
ZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1f
YmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQaHlzaWNhbElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJl
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJh
c2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJh
Y2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgaW50ZXJu
YWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJl
QmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVu
c3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBzaXplX3QgbWVt
b3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3Vy
ZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2Fs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgc2lu
a0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4
dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvSW1hZ2Uo
cHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3Q29uc3Vt
aW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENv
bG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0
Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7
CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1
c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBl
LCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5h
dGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQ
aHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5k
LT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVzdGluYXRp
b25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWRhMmI4MzFmMzNjZDU3MjJiZDcyOTc3MzRjNzlmMWEwMTM0MGNlNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworI2lm
IFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorI2VsaWYg
VVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisj
ZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBV
U0UoQ0cpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBs
YXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7
CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgUGxhdGZvcm1B
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3Vz
aW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
OworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVm
ZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3Jt
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlz
dEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjgwMDZkOTc5NTE0NTYxNzAwOWIzNDk2ZTEy
YjA2NTNkYWViYTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjZWxp
ZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIK
KyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7CisjZWxpZiBVU0Uo
RElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRhMGFmYTc5ZDc0NjFjZDlm
MmYxMDkxMzUwYzgxNWRiYmJkN2JjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNo
cm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcg
UmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAq
c2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAg
IHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2Nl
bGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MWI5MmQ1ODRmZWU4ZjRhZjdhODU5NjRlYWFi
YzFjZWQ1MDE3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93Owor
Y2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JFX0VYUE9S
VCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tl
bmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
KyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJp
bmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2Rh
NzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgewor
ICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBS
ZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEwNzY3OGM1
NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMz
MzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRj
aEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2Nl
bGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAg
fQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3co
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllcklt
YWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxs
YmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBV
bmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAK
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBs
YXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBh
dXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03
MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5n
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAg
YXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAg
IGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0g
bGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2
b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2Us
IGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJs
dXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBs
YXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBs
YXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0
ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRh
dGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50
U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxh
eWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdl
UHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApp
bmRleCA2MmM3OWYxM2ExYzcyNGRkZjM3YTk0NjRmODMyY2Q2Zjc3OWUwN2Q4Li44MGEwMjVlOGU2
Y2E4OGE2YjQ3ZmM3ZmRjNWU1YzVlMjUwZjlmZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAg
LTE3NCw3ICsxNzQsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBk
cmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2lu
LCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0
YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkp
IHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNv
bnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmln
aW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNo
YWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFs
cGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGlj
IHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdT
aGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRy
YXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFn
ZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAg
aWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFj
ZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRl
T3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAg
IH0KIH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBs
YXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAg
IHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllcklt
YWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VC
dWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmln
aW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxT
b3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJl
MTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAy
ZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2
OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUlt
YWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDljNzZlMjkxMmY4MWZjOTRhZGI1YzQ4
NDQ1MjcxMzQ2MGRjZmIyOGYuLjI5YTBlYzQ5OTRmMzYxNWQ4N2IxYmI0ZTFlMzNkNzY4ODA3Y2Jh
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDExLDcgKzQx
MSw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBi
dWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fp
cm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBk
ZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3OTY1N2UzYjI5OWVkNmViNGM1Y2MzNWRiOTUzMjQ1Nzg3Nzc1YjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlS
TykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25z
LmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8
RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYg
VVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VT
KQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRl
eHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmlu
Z01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAg
ICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykp
OwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0K
LQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5k
ZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNl
bmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6
OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBp
ZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0
dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
LSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0g
ICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29t
cG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBt
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3Vy
ZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0
KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwot
fQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkK
LXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3Vy
cmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0
ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAg
ICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5s
b2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1f
c2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAg
ICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8
Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5p
bXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZv
cm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0
IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2Vi
Z2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNl
cyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28g
d2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZm
ZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBt
X3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0
b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2Nv
bXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAg
ICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2Vu
ZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgp
LCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1
dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNh
dXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20g
YSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0g
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9E
ZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNl
IGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVh
ZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xP
Ul9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNv
cHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJm
YWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29w
eTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2Vy
Y2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAg
ICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5U
X0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWly
b1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6
OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNv
ZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0g
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJu
IGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSks
IHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29s
dXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8g
TWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0g
Y2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxl
ZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlv
bj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJl
c3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNp
emUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6
ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdN
b2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFj
ZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0
dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAg
ICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxs
b2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0K
LSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQotI2Vsc2UK
LSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7Ci0jZW5k
aWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNl
RGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jf
d2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lk
KiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5o
ZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFj
ZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9p
ZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNl
dCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2Nh
bGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0
ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0
LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNj
YWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0g
ICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVh
c2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1h
cEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkp
OwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgp
Ci17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgp
KSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAg
ICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAg
ICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFs
aXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRl
c3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3Rp
bmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6
Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2Uu
Z2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0g
ICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRl
ZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCog
cm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewot
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9y
IHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAg
ICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3Jl
ZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3Iu
YWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xv
cihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtf
ZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNp
emUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1
cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVy
bHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZh
Y2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdF
KQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAg
cmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
LX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSBy
ZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFy
ZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWln
aHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcg
MiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0Lngo
KSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAv
LyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0g
MDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0
LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0Lngo
KTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBk
ZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
ZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBp
bnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0
LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwot
ICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwg
YmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5z
IDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8g
VGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRo
ZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1h
Z2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFk
anVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJm
YWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lu
eSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRv
bmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFy
ZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUu
d2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgp
LCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIq
IGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0
OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2ln
bmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJp
ZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1
bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
dW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2
b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBv
bmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNp
dmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+
PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+
PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDAp
ID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYp
OwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0g
cmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVz
UGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0g
SW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9
PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0g
ICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9y
ZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRp
b25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2lj
YWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJ
bnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6
ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3Np
emUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJl
Y3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0
LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3Rv
cmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2Rh
dGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0
IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3Rv
cmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNh
bERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+
IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBp
bnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxl
ZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERl
c3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAg
QVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsK
LSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRT
b3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkg
KyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2Fs
RGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5k
eCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0
eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0
eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRl
c3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGlu
dCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0
LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXpl
LmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lu
eSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERl
c3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVu
ZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAg
ICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNh
bERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBk
ZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVy
LgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93
cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZh
Y2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3Qp
OwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9y
ZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVj
dC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0
aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1h
Z2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2Uu
ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkg
KyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykg
ewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCog
cGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcg
Q29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAg
ICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAg
ICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBi
bHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5n
bGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNh
bE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0g
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ug
b3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEu
bV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVt
bnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2lj
YWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVj
dC55KCkpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLX0KLQotI2lmICFQTEFURk9S
TShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0gICAg
aWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVu
ZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9S
OwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJvb2wgZW5j
b2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
VmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwg
bWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVk
IGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFt
KGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOwot
fQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFs
aXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwot
Ci0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRh
OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNv
ZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBl
LCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBlbmNv
ZGVkSW1hZ2U7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWly
byBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5n
ZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVD
b250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFw
cGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQs
IG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0
Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9k
YXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1f
ZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0
YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
JiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZh
cyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5
cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFy
Z2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdl
dCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zm
c2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3Qg
ZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEu
bV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5h
bGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlw
bHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1Zjk2MmQ3
MmFmZmI1YTQwM2JjNjA3ZWEzYjAxMDdmNDU3MTY5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFj
ZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29u
dGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1f
c3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3Rv
cmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNh
aXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkg
PT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
bV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAgICAgICBj
b3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAgICAgIGNv
cHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFn
ZShjb3B5QmVoYXZpb3IpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBh
c3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOworfQorCitSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNv
bnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5n
U3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFnZSgq
ZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWly
bzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZvcm1D
b250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9
PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwt
PiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xv
clNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5l
YXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAg
Y29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7Cisg
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAgIH0g
ZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgeworICAgICAgICBz
dGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewor
ICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxv
YXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9T
UkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9CisKK1N0cmluZyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAg
IFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkp
OworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gImRhdGE6
LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoZW5j
b2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7CisKKyAg
ICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0
X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOworICAgIHJldHVybiBk
YXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJm
YWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1
c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAg
IGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBp
bWFnZURhdGE7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1Np
emUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRl
c3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YSht
X3N1cmZhY2UuZ2V0KCkpKTsKKworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7
CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgY2Fpcm9f
c3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIGRlc3RQb2ludC54
KCksIGRlc3RQb2ludC55KCksIHNyY1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5o
ZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZWM4MGQw
NWM2MjlmZmI0MzQyMDNkMTExZDE0YmYzZGExMTNiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1
dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2Uo
Q29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVy
cmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0p
IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYpOworCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25z
dCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBjYWly
b1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3co
KSBjb25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bV9zdXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsg
bnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZTkxMDBmNzRlYTBhZWNmMTAyMWMwMzM4NDk5ZDczMTE2YWU4NDc5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lu
Y2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJF
UE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+
CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBP
WFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJT
dXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVy
bmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byog
Y29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
CisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2Ug
dGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBhIHBy
ZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRleHR1
cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1
cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
IGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwor
CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEs
IGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVy
ICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90
KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJl
bmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAg
IGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAg
YXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1
cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCB0ZXh0dXJlLCBpbnRlcm5hbFNp
emUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZh
Y2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5l
dyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSwgdGV4dHVyZSkpOwor
fQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0ZXh0dXJl
KQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQorICAgICwg
bV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lm
IFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVy
OjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZh
Y3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgor
fQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVT
RShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5k
aWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0Ojpj
dXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYg
KG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVy
ZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Cisj
ZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3Vz
QWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIq
IEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkK
KyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAgIGlmIChtX3RleHR1
cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZ
KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAi
U2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9u
IGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8
IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Cisg
ICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIGJp
bmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9D
VUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNy
ZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVp
bnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5h
bGZvcm1hdCwgMCwgMCwgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVp
Z2h0KCksIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOworICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEZsdXNoKCk7Cisg
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250
ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFy
aW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxT
aXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1f
Y29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3Jf
dGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFs
U2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFz
KG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQor
eworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgY3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAg
ICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5Lmxv
Y2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9p
bnRlcm5hbFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAg
ICAgICAgICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRv
d25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFM
YXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCpt
X3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBi
ZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3
aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZy
YW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJh
bWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0
b3IgYnVmZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5n
ZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9j
b21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFp
bnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4
dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
K30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IG9wYWNpdHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkg
Y2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBi
YWNrIGFmdGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0
ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZh
Y2UuZ2V0KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5k
cmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1faW50
ZXJuYWxTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZDdjMWFlNWJjZjVjMGUxM2Q0NTZlODgxMDM1NTFm
ZmViYWVjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9y
bUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIH5JbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0
dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxp
cFkpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lk
IGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0
Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5
OworI2VuZGlmCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFj
ZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9j
b21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7
IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlS
TykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGMzZmJl
NTNjNGE1YzJiMDIxM2YxYjk1MWEyNTc1NzU0NmU4ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikK
K3sKKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7CisK
KyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRl
X2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSk7Cisg
ICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGludGVy
bmFsU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihz
dXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVybmFsU2l6ZS53aWR0aCgpLCBp
bnRlcm5hbFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3Vz
ZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtd
KHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
PihuZXcgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30K
KworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9J
TUFHRSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBs
YXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4m
IGxvb2tVcFRhYmxlKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaW50IHN0cmlkZSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHVu
c2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBz
dHJpZGUgKiB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2ljYWxTaXplLndp
ZHRoKCk7IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKKyAg
ICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigq
cGl4ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVs
Q29sb3IucmVkKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLCBsb29rVXBUYWJs
ZVtwaXhlbENvbG9yLmJsdWUoKV0sIHBpeGVsQ29sb3IuYWxwaGEoKSk7CisgICAgICAgICAgICAq
cGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFj
ZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdo
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjcyMDNhZjRmMTUyMmYzMzQwMzU2YzAxMjFmZjFlOTE2MzVhYmQ5ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJP
KQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQg
eworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7
CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjph
cnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2
OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1
ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVT
RShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5j
bHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZv
cm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVy
RGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBs
YXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBS
ZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9z
aXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9y
U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxj
YWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxO
aWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0j
ZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsK
LSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENB
SVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTJiY2U5YTk3NTk3NTBiMDYxNzQ2
MTExODFmNjJiMzczZDRmZDcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKQEAgLTAs
MCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBM
QVRGT1JNKEdUSykKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9V
dGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1Vu
aXF1ZVB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9S
TShHVEspCisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1
dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlm
ICghcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQo
ZGF0YSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsK
KyAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBib29sIGVuY29k
ZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZl
Y3Rvcjx1aW50OF90Piogb3V0cHV0KQoreworICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1p
bWVUeXBlID09ICJpbWFnZS9wbmciKTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBm
b3Igbm93LgorCisgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShp
bWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPikKK3sKKyAgICBWZWN0b3I8dWludDhfdD4g
ZW5jb2RlZEltYWdlOworICAgIGlmICghaW1hZ2UgfHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1l
VHlwZSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGVu
Y29kZWRJbWFnZTsKK30KKworI2Vsc2UKKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJT
aXplKQoreworICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNv
bWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZl
bG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcu
aHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1l
VHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAm
JiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlw
ZSAhPSAiYm1wIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhi
dWY+IHBpeGJ1ZjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBk
b2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRo
YXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21w
b3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBv
cnQgYWxwaGEuCisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7Cisg
ICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSkgeworICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAg
ICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNp
emUoc3VyZmFjZSk7CisgICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9f
cGFpbnQoY3IuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihj
YWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNl
KSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0
eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmlu
ZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0
eSAqIDEwMC4wICsgMC41KSk7CisgICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4
YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0
YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0
YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZl
cihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0Zjgo
KS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOwor
fQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1
ZU91dFB0cjxnY2hhcj4gYnVmZmVyOworICAgIGdzaXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFl
bmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwor
ICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1
cm4gaW1hZ2VEYXRhOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWly
by5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZTMzYzdjYTA5NmNhZDg5MjI2MzczOWM3NWY5
NWIyMGZlZGMwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDQ5NmVjYTMyNGQzZTRkYTIyZmNhNTk5
OThlYjVlZjVlZTczZDIwOWEuLjcyMmVlZmZlNmM5ZTVmZDI4NjZiZTI3Mjg3YTQ3MDIxMDBjYmZj
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlvblNpemUgPSBidWZmZXIuc2l6ZUZvckRl
c3RpbmF0aW9uU2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0
aW5hdGlvblNpemUgPSBkZXN0UmVjdC5zaXplKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU2ZjE5NjRkMDk1NTJiZDFhMjdmYzBkMjI4
MDlkOGEzZGE2Yjc1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cp
Ci0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8
cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0Iz
MiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6
ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFn
ZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVm
ZmVyKTsKLQotc3RhdGljIEZsb2F0U2l6ZSBzY2FsZVNpemVUb1VzZXJTcGFjZShjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNraW5nU3RvcmVTaXplLCBjb25z
dCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCi17Ci0gICAgZmxvYXQgeE1hZ25pZmljYXRpb24gPSBz
dGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKSAvIGludGVybmFsU2l6
ZS53aWR0aCgpOwotICAgIGZsb2F0IHlNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpIC8gaW50ZXJuYWxTaXplLmhlaWdodCgpOwotICAg
IHJldHVybiBGbG9hdFNpemUobG9naWNhbFNpemUud2lkdGgoKSAqIHhNYWduaWZpY2F0aW9uLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSAqIHlNYWduaWZpY2F0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NH
Q29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRH
ZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJG
QUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3Bh
Y2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0
Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VS
ZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5k
aWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01v
ZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxl
ZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nl
c3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3Mg
Y29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYg
Y29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQot
ICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNj
YWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBm
bG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgp
KTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciBy
ZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQp
LmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXpl
ID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJl
bmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAg
fHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJm
bG93PiB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVy
Zmxvdz4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50
IGludGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8
dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
KTsKLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsK
LSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVu
c2FmZUdldCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmlu
ZyA9IGZhbHNlOwotI2Vsc2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJh
dGVkKTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0g
ICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICAgICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0
U2l6ZSh3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpKSk7Ci0gICAgICAgIG1f
ZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUs
IEludFNpemUodXNlckJvdW5kcyksIGNvbG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1
cmZhY2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQ
bGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQot
ICAgICAgICAgICAgICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNn
Q29udGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYg
YWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAg
IH0KLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0
YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAg
ICBpZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQo
IShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBV
U0VfQVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAg
IG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2Vu
ZGlmCi0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1f
ZGF0YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBt
X2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0
byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qp
IHsKLSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+
KGRhdGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0
IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1f
ZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJv
dmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRh
dGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAg
aWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNv
bnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4
dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAg
IGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQot
ICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJp
bmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdl
QnVmZmVyKCkgPSBkZWZhdWx0OwotCi1GbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0
aW5hdGlvblNpemUoRmxvYXRTaXplIGRlc3RpbmF0aW9uU2l6ZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2NhbGVTaXplVG9Vc2VyU3BhY2UoZGVzdGluYXRpb25TaXplLCBtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZSwgaW50ZXJuYWxTaXplKCkpOwotfQotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17
Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEg
R0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBh
Y2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxT
aXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8g
SXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNh
biBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZl
ci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVz
KCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAo
bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRl
cygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6
ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQg
Y29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwg
YWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJl
IGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAv
LyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVz
ZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1
cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAg
IHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNv
bnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2Ut
PmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29u
dGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAg
ICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0
aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENH
SW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2Ug
JiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMu
d2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwg
Ym91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0
cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNh
bFNpemUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1h
Z2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCks
IGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsK
LSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VT
aXplSW5Vc2VyU3BhY2UgPSBzY2FsZVNpemVUb1VzZXJTcGFjZShsb2dpY2FsU2l6ZSwgYmFja2lu
Z1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXplKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNl
clNwYWNlKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmICghaW1h
Z2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRt
YXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUo
KSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNj
YWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
OjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIs
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBp
bnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBs
b2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFj
a2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAg
ICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7
Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5r
SW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dp
Y2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi1SZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNl
KQotICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3Vy
ZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxz
ZQotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewot
ICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRh
LmRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAg
ICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRl
SW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1
ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0g
aW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLmdldCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBv
cHRpb25zKTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KTsgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAg
ICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQu
ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAg
ICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkg
Ly8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAg
ICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JS
ZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAg
ICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4g
Y29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAg
SW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFy
cmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
LmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYg
KGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQo
KTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291
cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KTsKLSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGlt
YWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUlt
YWdlKCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxS
ZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdS
ZWYganBlZ1VUSSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lO
KQotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJs
aWMuanBlZyIpOwotI2VuZGlmCi0gICAgcmV0dXJuIGtVVFR5cGVKUEVHOwotfQotICAgIAotc3Rh
dGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVz
ZSB0aGUgQ29yZVNlcnZpY2VzIHZlcnNpb24/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVy
biBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhy
ZWFkc2FmZS4KLQotICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhl
IHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVU
SSByZWxpYWJseSBpcyBmb3VuZC4KLSAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBK
UEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgotICAgIHN0YXRpYyBj
b25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBz
dGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2
ZS5naWYiKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgImltYWdlL3BuZyIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZVBORzsKLSAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCi0gICAg
ICAgIHJldHVybiBqcGVnVVRJKCk7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlR0lGOwot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0jZW5k
aWYKLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJp
bmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0
YSkKLXsKLSAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlv
bkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGltYWdlUHJvcGVydGllczsKLSAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVh
bGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8v
IEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0
aW9uLgotICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5
KSk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNv
bXByZXNzaW9uUXVhbGl0eTsKLSAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lv
blF1YWxpdHkuZ2V0KCk7Ci0gICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIH0KLQotICAg
IC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBm
b3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCi0g
ICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdv
cmsuCi0KLSAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwg
aW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5h
dGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIFN0cmluZyBkYXRh
VVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRh
dGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJk
YXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1zdGF0aWMg
VmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0
YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQo
KSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1p
bWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJu
IGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRy
PENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAg
ICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBB
U1NFUlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1
YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlm
ICghcHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNh
bFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChw
cmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHBy
ZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlm
ICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JH
QkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxw
aGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmlu
Z0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEg
fHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBp
bWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5h
bFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXpl
KCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dp
Y2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxv
YXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShsb2dp
Y2FsU2l6ZSgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENH
UmVjdE1ha2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5V
c2VyU3BhY2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0g
ICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQo
KSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJl
Zj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAg
ICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBB
U1NFUlQodXRpKTsKLQotICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0lt
YWdlQWxwaGFMYXN0OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5k
YXRhKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgo
KSAqIHNvdXJjZS5oZWlnaHQoKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOwotICAgICAgICB1bnNpZ25lZCBjaGFy
ICpidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IGRhdGFbaSArIDNdOwotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0
YVtpICsgMF07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOwot
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9u
ZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgICAgIGRhdGEgPSBw
cmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgfQotCi0gICAgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwot
ICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhE
YXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOwot
ICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwg
a0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5n
ZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLQotICAgIGF1dG8g
Y2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxp
dHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkK
LXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkp
KQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0
dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0
YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFs
aXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29u
c3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGZsdXNoQ29udGV4dCgpOwotICAgIHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjNkOWVkZDBlZjUxZjM4NDFhYzU4YzhiNjFlMTVjZTJkNGE1Y2Y3
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KCkKK3sKKyAgICBj
b250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dCgpLnRyYW5zbGF0
ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmlj
ZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdl
LCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndp
ZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
aW50ZXJuYWxTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXpl
LndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9
CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGlt
YWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNp
emVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2
ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNl
cnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdl
ID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dp
Y2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50
b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJ
bWFnZSgpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAg
c3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlC
YWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0
LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBz
cmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNv
cHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBE
b250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIAor
ICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAg
IEFTU0VSVCh1dGkpOworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZF
cXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2
ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0
b3Agb2YgYmxhY2suCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwg
bG9naWNhbFNpemUoKSksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgICAgICBpZiAo
IXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxT
aXplKCkuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJl
bXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICBhdXRvIGRhdGFQcm92
aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVt
dWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAo
IWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlt
YWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNh
bFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhh
Tm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8
IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxT
aXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgp
LmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0
U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNh
bFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAg
ICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0
KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFn
ZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRh
ID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQor
ICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRh
KG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICByZXR1cm4g
ZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9
CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtl
VkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIAor
ICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50Pihz
aXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1h
Z2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9
IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1cm4g
dkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNj
ZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBk
ZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RD
b2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBj
aGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsg
MiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNy
YywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZv
cm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4
KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9y
Rm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4
KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQp
IHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQ
ZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVs
cygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jv
d3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBk
ZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFG
b3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZv
cm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNB
bHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0
QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
c2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9
IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0
Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZv
cm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhYjdhNzQ2OTMzZGQx
ZDI3NzY4Y2E0NDhlYThmYzYxZmE0MWU3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgor
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7
CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVy
QmFja2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250ZXh0KCk7CisgICAgdmlydHVhbCBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyNpZiBVU0UoQUND
RUxFUkFURSkKKyAgICB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJ
bnRTaXplJikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kM2Y3M2NmYjgwMTRlNzBkNzUzZGE1OWFmMjQ4YTU2MzMwNGY0Mjc1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENH
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitjb25zdGV4cHIgY29uc3Qg
Q0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKKyNlbHNlCitjb25zdGV4cHIgY29u
c3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRMYXN0OworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1
bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5h
bFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRh
dGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7
CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1Bl
clJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXpl
X3QgbnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8g
Y2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxT
aXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hl
ZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAo
IWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQg
PSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNv
bnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAg
ICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3Jl
YXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNv
bnRleHQpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3Zp
ZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3Zp
ZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRl
eHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7
CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBo
aWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBD
b3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAKKyAgICBjYXNl
IERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKAorICAgICAgICAgICAgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUu
aGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xv
clNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5n
ZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9C
R1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dp
Y2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cg
PSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3Vs
dC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEltYWdlQnVmZmVy
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX2RhdGEpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MGFhOTY2MzEzYzljM2E4MGEwMWViYzhmMDFiMGUzZDRmMTE1
ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1Ymxp
YzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZTsKKyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4m
Jiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBi
eXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53
aWR0aCgpOyB9CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdS
QTsgfQorI2VuZGlmCisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVBy
b3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgi
Ci0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3Vy
ZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3Nw
aS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3Ig
dGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0j
ZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0
KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAg
ICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
U3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2Vz
IGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4
KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBy
ZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFn
ZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVz
dC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JB
LiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0
IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZv
aWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlu
cHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0
KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNy
Yy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5
dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9IGlucHV0OwotCi0gICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdo
dCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0
YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQp
OwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAg
ICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5v
dCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3
aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRh
dGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdo
dCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAg
YXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4
X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAg
aWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8
aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1h
eFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2Fm
ZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgp
KQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJl
Y3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3Jp
Z2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0g
ICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53
aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRo
KCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRo
ID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAg
ICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7
Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAg
ICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBk
ZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBv
cmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5
IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWln
aHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHgg
KiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlm
ICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQ
ZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAg
ICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0
KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0
OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93
Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93
czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1
dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAg
ICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlz
IGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9
IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNl
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVH
ZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNS
b3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3Vy
ZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsK
LSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBz
cmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdo
dC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5o
ZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYg
KG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
Ci0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRv
IFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3
aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAg
ICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdl
dCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVu
c2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7
Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAg
ICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dz
W2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVH
ZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VS
ZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3Vy
Y2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQ
b2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQo
KSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6
ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBB
U1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0g
ICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291
cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lk
dGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgp
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8
aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NF
UlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgp
IDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwot
ICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgp
KSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBz
aXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0Lmhl
aWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAg
ICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAg
ICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3Jj
Qnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNj
ZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7
Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAo
ZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3Jj
LnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0
X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAg
ICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5y
b3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RS
b3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBk
aWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3Nb
YmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNy
Y1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBp
ZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3Mg
KyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElP
U3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0
ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAq
IGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdl
dCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3Jj
LmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dC
eXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0K
LSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZy
b20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vs
c2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Vp
bnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xv
clNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVy
UmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJ
bnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0g
ICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBu
dWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7
Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NmE1ODE5N2Q2MzhlODkyMDU2
YjFmNDU2ZDc1ZTU1Mzg5ZjlhYjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRl
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNp
emUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJl
c29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1T
aXplKCk7CisgICAgaWYgKGludGVybmFsU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8
IGludGVybmFsU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29s
dXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50
ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29u
dGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJl
Y3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYm
IHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RG
TW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRl
eHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNz
Q29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hD
b250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0
KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3Np
emVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBD
b2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0
KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RC
eXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
Km1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworCisgICAgY29weUltYWdlUGl4ZWxz
KAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZv
cm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRl
c1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJy
YXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkK
K3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9j
a2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50
LCBjb29yZGluYXRlU3lzdGVtLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAgIC8v
IEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxh
aW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9h
dFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzNlYTQ2MWJhNjU3NmMzYTg2NDE2NDBmNjI2NzEwYzk0MmY4NzAx
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2Vu
ZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSU9TdXJmYWNlOworCitj
bGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworICAgIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4
dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsgICAgCisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIChVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTBkYjUw
MWFjOTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uZDA5MTM5ZjAxYmQzMzZmMjg0OGFlYTUyNmE0Zjlm
ODAwZWU3ODVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDE4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oIgogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkK
KyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQxLDQgKzUyLDE0MCBAQCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91
Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAgICByZXR1cm4gKih1
aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCit7CisjaWYgIVBM
QVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9
IENGU1RSKCJwdWJsaWMuanBlZyIpOworI2VuZGlmCisgICAgcmV0dXJuIGtVVFR5cGVKUEVHOwog
fQorCitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJu
IFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyNlbHNlCisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJl
YWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUg
c3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJ
IHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQ
RUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCisgICAgc3RhdGljIGNv
bnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOworICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZl
LmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBl
LCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOworICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKKyAgICAg
ICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1VUVHlwZVBORzsKKyNlbmRp
ZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0
aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCit7Cisg
ICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVBy
b3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYg
KnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0
aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAg
ICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAg
ICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lv
blF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5
LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0
aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcg
aW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGlu
IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorICAg
IENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1h
Z2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxp
emUoZGVzdGluYXRpb24uZ2V0KCkpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4g
Y2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBh
dXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NF
UlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdl
QWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRh
KCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENG
RXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhh
dmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24g
dG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNl
cnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBi
dWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRh
dGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OworICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OworICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtp
ICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNr
aXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGRhdGEgPSBwcmVt
dWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOworICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAg
IGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
aW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWln
aHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NH
Qml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQo
KSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAp
KTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHks
IGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdU
Rk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAg
YmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRh
KSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQor
eworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkp
CisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1
cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVm
IGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZChD
RkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKKyAgICBy
ZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkK
K3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkp
KQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlhYmQxZmI4M2FiMzFhMTE1YzY4OTUwNDkx
ZDQxOTU1Mi4uODRjNTdkMmZlZTkzMzhlZDVlMGVmYzRhOGUzMzY1YTE5YTgwMjA0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjUsOCArMjUsMzEgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSk7CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdVVEkoKTsKK1JldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CisKK2Jvb2wgZW5j
b2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworVmVj
dG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRh
KGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggODBmNmIxODcyNTIyOTY4ZWE3ZDk1NzZiN2UwMDU2MzMz
MjU4ODIzYy4uMjgyMWVmODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmViMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
ICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHUERGRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQ
SS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1JBTVNpemUu
aD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCmluZGV4IDI0M2M0OGI5NTFiMTc0YjZi
MjRiYWM1MzY0YzlhMDRmZjk2OWNkYjMuLjRjYzBmYTNmNzk3MjdlYjlkZWVkYzRhZDBlMTE3MzRk
YWIyMTRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oCkBAIC0xMDAsMTAgKzEwMCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNlUmVm
LCBDR0NvbG9yU3BhY2VSZWYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2UoQ0dJbWFnZVJlZik7CiAgICAgCi0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4pOwotI2VuZGlmCi0KICAgICBXRUJDT1JFX0VYUE9SVCB+SU9TdXJmYWNlKCk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBtb3ZlVG9Qb29sKHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IGMyMTI1YzNlZjE2MGMwODEwMTA5ODIzYjRi
OTAzNmRkZjZmYmNmNjcuLjM5MWZjMjNjZDBhOGY4NjlhY2MxMDczMmQxNGZkZjQ1MGZjMjg1NTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3Vy
ZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW0KQEAgLTMzLDcgKzMzLDYgQEAKICNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKICNpbXBv
cnQgIklPU3VyZmFjZVBvb2wuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0ICJJ
bWFnZUJ1ZmZlckRhdGFDRy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUGxhdGZv
cm1TY3JlZW4uaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC0x
MTAsMTMgKzEwOSw2IEBAIHZvaWQgSU9TdXJmYWNlOjptb3ZlVG9Qb29sKHN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKICAgICBJT1N1cmZhY2VQb29sOjpzaGFyZWRQb29sKCku
YWRkU3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKTsKIH0KIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi1zdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBJT1N1cmZhY2U6
OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyKQotewotICAgIHJldHVybiBXVEZNb3ZlKGltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFj
ZSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIE5TRGljdGlvbmFyeSAqb3B0aW9uc0ZvckJpcGxhbmFy
U3VyZmFjZShJbnRTaXplIHNpemUsIHVuc2lnbmVkIHBpeGVsRm9ybWF0LCBzaXplX3QgZmlyc3RQ
bGFuZUJ5dGVzUGVyUGl4ZWwsIHNpemVfdCBzZWNvbmRQbGFuZUJ5dGVzUGVyUGl4ZWwpCiB7CiAg
ICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAy
OGUyNjQ0ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi4yYzY3N2Y2YjczNmU3NTJl
NDFmOGIzZjI0MzQ3NmQ0NTA4NDI0MzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMTc3
LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbGlzdFtpbmRleF0uZ2V0KCk7
CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXIoKTsKICAgICB2b2lkIHJlbW92ZUl0ZW1zRnJvbUluZGV4KHNpemVfdCk7CiAKICAgICBzaXpl
X3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQpAQCAtMjUxLDYg
KzI1MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFt
JiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0gLy8gV2ViQ29yZQotCi11
c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZjFjZTI3MzU0
NTBiZGFjM2JiZGYxMWEzMDg1ZDlhN2YzYzllMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNv
cmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlM
aXN0IHsKKworY2xhc3MgRHJhd2luZ0NvbnRleHQgeworcHVibGljOgorICAgIERyYXdpbmdDb250
ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpCisgICAgICAgIDogbV9jb250ZXh0KFsm
XShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgeworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlz
dCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBB
ZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIH0pCisgICAgeworICAgIH0KKworICAgIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0Nv
bnRleHQmPigqdGhpcykubV9jb250ZXh0OyAgfQorICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlz
dCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlz
cGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlz
cGxheUxpc3QqIHJlcGxheURpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXlEaXNw
bGF5TGlzdC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShi
b29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgIHsKKyAgICAgICAgbV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAgICAgICBtX3JlcGxh
eURpc3BsYXlMaXN0LnJlc2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwbGF5RGlzcGxh
eUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBSZXBsYXllciByZXBsYXllcihkZXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAg
IGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNw
bGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAg
bV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0Nv
bnRleHQgbV9jb250ZXh0OworICAgIERpc3BsYXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBtX3JlcGxheURpc3BsYXlMaXN0OworICAgIGJvb2wg
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07Cit9OworCit9IC8vIERpc3BsYXlM
aXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMx
NzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLmFmM2FhZGUyYTMzMmNjMTBhOTYxM2YyMTI2MTcx
N2RkMWQ4NThiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjg2LDEzICsyODYsMTUgQEAg
dm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXN1
bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3Qg
aW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJ
bnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURp
bWVuc2lvbnMpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOwog
ICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPGZsb2F0
PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKIAorICAgIEludFNpemUgcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBwaXhl
bEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1bHRJbWFnZS0+cmVzb2x1dGlvblNjYWxlKCkpOwor
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktO
T1dOOgogICAgICAgICBicmVhazsKQEAgLTMxMSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQXJyYXksIGltYWdlUmVjdC5zaXplKCksIGlt
YWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXgg
MjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMjVkNTdhZjA2YzAxYTdj
NzhhN2ZiOTQ3ZDQwNTgwMDRlYTcxNzJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMTAwLDEz
ICsxMDAsMTMgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAK
ICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2
b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9p
bnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzaGFkb3dBcmVhLCBu
dWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAg
YXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLCBDb29yZGluYXRlU3lzdGVt
OjpCYWNraW5nU3RvcmUpOwogICAgIGlmICghc3JjUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRh
KCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7CiAK
LSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJl
YSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0p
OworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXksIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dB
cmVhLCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtOjpCYWNraW5nU3RvcmUpOwogCiAgICAg
cmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCA0
OWU4YzVhMjZlNzcxYzQyNDk2NzgxOTUyN2E1NjI3MzUzZGY0NDk2Li5kZDM1Y2M2NWIxMzdkODIy
YzcwMTUzMmRhYmQyNDkwMDRiZjJhOWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7CiAgICAgRmxv
YXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0
ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFVuYWNjZWxl
cmF0ZWQgfTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQgfTsKICAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5
NzJiNTkwZmEuLjVjOGIzYjRkZTBhZmE3MTQ1OGNkY2Y2YzZiYzBmZmQyY2NiZDE0MzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJ
bnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRl
QXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3Qs
IEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAg
IGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7
CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAg
ICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwor
ICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAg
ICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsK
KyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFiNWEwZDUwZjhjZTFhYWY2NTM1ZGVlYzk0MGI4NWRjNTUxN2U0YjEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgot
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdj
aGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKLXsKLSAgICAvLyBMaXN0IG9mIHN1cHBv
cnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1l
bnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0
YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZl
cnYKLQotICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2Ui
KTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0
aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7Ci0gICAgaWYgKHR5cGUgPT0g
ImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwu
IFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEg
UG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBp
bWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgotICAgICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOwotICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKLSAgICAgICAgICAg
IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAg
IENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJ
bnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOwotICAgICAgICAgICAgbmV3
U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1B
VF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBSZWZQ
dHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkp
OwotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNl
LCAwLCAwKTsKLSAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3Vy
ZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fp
cm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOwotICAgIGlmICghcGl4YnVmKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
aWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFs
aXR5IDw9IDEuMCkgewotICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVt
YmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOwotICAgICAgICBn
ZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwg
JmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0
eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0
cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5V
TEwpOwotCi0gICAgcmV0dXJuICFlcnJvcjsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0
YSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGltYWdlRGF0YS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRE
YXRhOwotICAgIGJhc2U2NEVuY29kZShpbWFnZURhdGEuZGF0YSgpLCBpbWFnZURhdGEuc2l6ZSgp
LCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2
NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0Rh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25z
dAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVm
ZmVyOwotICAgIGdzaXplIGJ1ZmZlclNpemU7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBidWZmZXJTaXplKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0g
ICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotICAgIHJldHVy
biBpbWFnZURhdGE7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5j
cHAKaW5kZXggNGM0YzQyNjk2MTI3MWM3YjdhMTlkMjk2YTk0MDBlZmRjMGZhYzlhZS4uNzU3MDAz
YjFmMTFkZjRiMjc2NmI0MDllODIyY2Q4YjQyMGZiNGE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUdDM0RMYXllci5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBHQzNETGF5ZXI6OnN3
YXBCdWZmZXJzSWZOZWVkZWQoKQogICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0Lm1f
Y3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKICAgICBUZXh0dXJlTWFw
cGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEg
PyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMDsKICNpZiBVU0UoQU5HTEUpCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGV4dHVyZVNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAppbmRleCA3ZDJjZWZkNjI2MWRlZTJh
MzlhODlkMTAxNzAyZWI1MDI1MmY0ZjVlLi5mMDM5MTM4MDYwZDM0NDM0ZTZjZGRiZjk2ZWE2NGMz
MDFhNjM1NTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgQml0
bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYsIEdyYXBoaWNzTGF5ZXIq
IHNvdXJjZUxheWVyLCBjCiB7CiAgICAgLy8gTWFraW5nIGFuIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkIGJ1ZmZlciBoZXJlIGlzIE9LIGJlY2F1c2UgdGhpcyBjb2RlCiAgICAgLy8gaXNu
J3QgdXNlZCBieSBhbnkgcGxhdGZvcm1zIHRoYXQgcmVzcGVjdCB0aGUgYWNjZWxlcmF0ZWQgYml0
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZSh0YXJnZXRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAg
ICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4
IGNhMTFiYjhiYTBiMTkxMGM2Mjc5NjdkNGQyNjBiMDRjNjg0ODY3MzEuLjVhYzlkNjYwNmM0MjIx
MjQ4YmM0MWRlOTM4OWNlNWM4N2U0YTQxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgsNyAr
NDU4LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZl
cigpIGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2FwdHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDViOTFiMjY4NmFl
MjYxZWI1M2MwNjg5YmVlYzYyZjU1ZTNmYjQ1OC4uOGY1MGU1NzU3MWQ3YjM4NTAwZWVkN2JjZGE2
YjNhNjQyYWJmNzk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWlu
dGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0g
ICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQo
KSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5idWlsZEZp
bHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVu
ZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4NjNj
MWVkMmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFjNjE1MjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0xODEsMTQgKzE4MSwxNCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSog
aW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBw
ZWRJbnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0
ZXJTaGFwZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsK
ICAgICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRp
dGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAg
ICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmlt
YWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkp
OworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1
ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZz
ZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAKaW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3N2I2
M2M2ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApA
QCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNs
aXBwaW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hv
dWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRl
eHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0lt
YWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3Qs
IGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29u
dGV4dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3Bh
Y2U6OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAgICAg
ICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0MzE2
MWIuLjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhlODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBl
ZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwog
ICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5k
ZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5k
ZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6
OkxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFw
aGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMo
JnJlbmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMK
ICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdy
YXBoaWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIg
PSBudWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9u
ZVxuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0Y2Zj
MDIyYjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmRlCiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3Zn
U3R5bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJ
bnRlcnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xvclNw
YWNlOjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICAvLyBGSVhNRSAoMTQ5
NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNr
aW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRh
dGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0lt
YWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcAppbmRleCBiODIxNDExYWRlNzc1MDg1NjE2ODg1NmVkMjJiNjJlYTZi
NWNkM2Q5Li45Nzg2N2FhZDNjMjdiNWI1MzhkM2E3OWZiNDk1ZGRkNGYwZjQzZDkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBAQCBO
YXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBDYWly
byBkb2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywgc28gaXQncyBPSyB0
byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCA1MzI2NzhmMzc2
MDMzYzNjMDBmOWY2YmQ1YTMwYzM4NjkwZTMzNGJmLi4wYWI5MjAxNjI0ZTg2MGEwZDljYzBmMDcx
OWZhNjMxNWYyZjE1NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAgc2V0
KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V2ViS2l0X0RFUklWRURfU09VUkNF
U19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAgIiR7V0VCS0lUX0RJUn0v
R1BVUHJvY2VzcyIKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAgICAgIiR7V0VCS0lUX0RJ
Un0vTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CmluZGV4IGVkZmI2ZTFlMDVlNTY0MDA4YjdkNTdhODc0NTM3OGM0M2Q2NmNmOTYu
LjdhNTIxNDI1ZmY5MzE3MmI1YWI3ZTFkYzI0MjBhZmU2NWM5NzZmNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE1LDYgKzE1LDggQEAg
JChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVND
UklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
ci5tZXNzYWdlcy5pbgpAQCAtMTAyLDYgKzEwNCw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvQ2FjaGUvV2ViQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1Nl
cnZlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dl
YkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
TGliV2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQ
VS93ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29kZWNzLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCBkZmJjMGVmZTZiODQ3
MjZmOTZjODk4MjhjZDgzZDBlZDc1OTA1YTA2Li45MGQ5MTExZmQxMGU4NjM0NWI3ZWY0ZmY1M2Ix
NTlhMGMzMTJjYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKQEAgLTEyMCw2ICsxMjAsMTIgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXNSZXBsaWVzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlc1JlcGxpZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2VzUmVwbGllcy5oCkBAIC0xNDIsNiArMTQ4LDkgQEAgJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXJN
ZXNzYWdlc1IKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdl
c1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXNSZXBsaWVzLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMubWFrZQppbmRleCBlMjkwOTMwOTdjZDliZGViMzQ1YTE5YTVkMzdmZTU3YTU0
MGRlYjcwLi44Yzc1M2QxNmY0MGRmZGRjZmUxNzQ1YmFhNWZlNTliZjI5Njg3N2U0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yNSw2ICsyNSw3IEBAIFZQQVRIID0gXAogICAgICQo
V2ViS2l0MikvR1BVUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21hYyBcCiAg
ICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21lZGlhIFwKKyAgICAkKFdlYktpdDIpL0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL3dlYnJ0YyBc
CiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzIFwKQEAgLTUyLDYgKzUzLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJL
aXQyKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3Mv
R1BVIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwKKyAgICAkKFdlYktp
dDIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvV2Vi
UHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNvbkRhdGFi
YXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCkBAIC0xNDAsNiAr
MTQyLDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyIFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkgXAogICAgIFBsdWdpblByb3h5IFwK
KyAgICBSZW1vdGVJbWFnZUJ1ZmZlciBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBcCiAg
ICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBcCiAgICAgUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSBcCkBAIC0xNDcs
NiArMTUxLDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUmVtb3RlTWVkaWFSZWNvcmRl
ck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwKICAgICBSZW1vdGVP
YmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkg
XAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA2MjBiNDFmMjhk
NjY3NmEzZGUxN2Y0NzZiMmRmMzg4ZmZmNjQ3NzBkLi5hMzcxY2YyM2RhNzdmYTc2ZTNlNDAzZGRj
MmQzYWRiNjYxOTAxYzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0xNjAsNTIgKzE2MCw2OCBAQCBMaWJX
ZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bGliV2ViUlRDQ29k
ZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZy
b21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCku
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAg
dXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90
ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBsaWJXZWJSVENDb2RlY3NQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9p
ZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlF
bmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHko
KS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
ciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoKnRoaXMsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVy
aW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOwor
ICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCmluZGV4IGY0ODU5NjRkNDZjNTJlMzM4ZDJhYmU0Zjc2NWRkY2I1YTk0YTA3
OTAuLjAyNzAzN2ZlOTk0NjQwOWYwNmMyM2JmNmNlY2QzNzg1M2E1NmU3YjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApA
QCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
c1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNs
dWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAj
aW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCkBAIC00NywxOCArNDksMjAgQEAgY2xhc3MgVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDog
cHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpD
b25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBQQUw6OlNlc3Npb25JRCk7CiAgICAg
dmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogCiAgICAgSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVz
c2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2VzcyYgZ3B1UHJvY2VzcygpIHsgcmV0dXJu
IG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdl
YlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmll
cjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVuc2lvbihGdW5jdGlvbjx2b2lkKCk+JiYp
OwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0gICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXImIHJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXImIGxvZ2dlcigpOwpAQCAtNzcsMTQgKzgx
LDIxIEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZv
aWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFs
OwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5h
bDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICAgICBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsK
IAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICBSZWY8R1BVUHJv
Y2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2Fn
ZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2Vi
UHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eT4gbV9yZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eTsKQEAgLTk2LDYgKzEwNyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09D
T0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVj
c1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMy
YzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
IAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lk
IENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdC
YWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3MGY0MjJjM2U0Njkz
YTAxMjg5ODE4YTFjMzI5NDRlZGNmMzNkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VC
dWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpCit7CisgICAgaWYg
KGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
ci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0
KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlv
bigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSBoYW5kbGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxlKSksIG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQo
Y29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0
KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0
Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM2
OGI2MjY0ZmQxMGFkNDMxN2VlNGYzZjZkNjgzNGVkNTcxZjA2NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAg
dm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSk7CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAg
dmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRp
ZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGFlNzhlMmNlNGFi
OTUxOWI2NWFiODRiNGQ3MmRkZWI1ZWM5NThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90
ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6Oklt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2ZlNGUxZTNhZDUyMTg1NDVjOTUxZjZjYzE0Y2Zl
NmQwZGYxZGVmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDogcHVi
bGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIg
PSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBC
YXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVy
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4g
QmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0
ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAg
ICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRy
PEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNr
ZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJlbW90ZUNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2Vu
ZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2Vu
ZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRs
ZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25z
dCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVw
bGF5ZXIoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOwor
ICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXI6OmZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTUwZDdlZjcwYWQzZDk4MDZk
Y2Y2Njk0NWJlYmQ5ZmQzNzI5MmQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5
LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAi
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHk8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kPjsKK3VzaW5nIFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5
ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxNzBiMzMwNzAzZTBjZGY1MjQ4M2VkNjEy
NmMyYzAwMmE0YzQ2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+
KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAg
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAg
aWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3Nh
Z2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7
CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRf
dCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJ
bnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAo
bV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAg
IHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7
CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShp
bWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVs
ZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVj
ZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlu
cyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGlt
YWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3
ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VT
ZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25u
ZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVp
bnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZv
aWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUlt
YWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZl
ck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFw
OworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUy
NmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3Jl
YXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29y
ZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0
OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKaW5kZXggY2VmZjNjMjYwNWExZjg1ZDVkOTkwYTY0YzNmMjgyMDNkMTE1MjMyMC4u
MzE0MDQ3OGY0MTdkMGNmZTBkMzA0YTg4MzQ3YWU1YTQ3NGVjYmZhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMK
IGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUg
PSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAn
V2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2Fj
eVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNv
dW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiAr
MjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAn
U3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAg
ICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElk
ZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVz
X3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjE4LDEwICsyMjIsMTQgQEAgZGVm
IHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6OlNXU2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rp
dml0eVN0YXRlQ2hhbmdlSUQnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisg
ICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJp
dmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVy
JywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAg
ICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0Vu
Y29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVy
JywKQEAgLTc2MiwxMyArNzcwLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVj
ZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5k
KG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdl
cyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklC
VVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlcilcbicg
JSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRl
KExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVG
Q09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICBy
ZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3Ig
bWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJp
YnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlc
bicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAg
ICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJl
Y2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc3LDEzICs3ODgsMTYgQEAg
ZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQu
YXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3Nh
Z2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRS
SUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlm
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAn
JykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZl
ci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVj
ZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlm
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUp
OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDg0ZDQzOWM1MDU0MDRiN2U1OTA1YjM2ZTdk
ZWM3Njg5ZGRmYTk0NTQuLjcwNWMzNTIzOTNkZWUyYTA4ZDI2ZDgwODNmYWExNTJmZWJiOTI3NzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtODAzLDYg
KzgwNCwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlh
bGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
CisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6
UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisg
ICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JT
cGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29s
b3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDMwNmNkMWU2OTM1NjYxYWQ0MWMwNjA5Mjg0OGJmOWFm
MzZiMWI3MjYuLmJiMWZlYzJhYTYxNzcwOTZiMzQyYzAzNTkwMGJiMmFlZjFhODY1NDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dApAQCAtMzEsNiArMzEsOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxh
eWVyUHJveHkuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBH
UFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vz
cy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Fj
dGl2aXR5VHJhY2tlci5jcHAKQEAgLTUxNCw2ICs1MTYsOSBAQCBXZWJQcm9jZXNzL0dQVS9tZWRp
YS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1v
dGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
UmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCitXZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcAorV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRp
YVJlY29yZGVyUHJpdmF0ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVy
UHJvdmlkZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggMDg3NmFkZDEzNTQzZWU4ZmNl
ZWJhNjM1YmE5OTkzNmVkN2M4NmM1Ni4uNjMwZDBjNDk2NGY5NzQzMzcwYmEyOTY2ZDM5OGUzMTA3
OWYzNmYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNTUxLDYgKzU1MSw4IEBAIFdlYlBy
b2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCiAKIFdlYlByb2Nlc3MvRW50cnlQb2ludC9D
b2NvYS9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlRW50cnlQb2ludC5tbQogCitXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5jcHAKKwogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2VCYW5uZXIuY3BwCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvbWFjL1dLQnVu
ZGxlTWFjLm1tCkBAIC02MzUsMTAgKzYzNywxNCBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJj
ZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAog
R1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVz
c2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2Vp
dmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1l
ZGlhUmVjb3JkZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAogU2VydmljZVdvcmtlckZldGNo
VGFza01lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFmYmRjMjU3NWU0NDgxODVlNGJjYmM4NDJlNGY3YTU0
NDMxM2I0MzkuLjAxNThhMzFhMzNhYTQ4MzQ2OGFkMWJkNDcwODUzOWZhODU4MDI3YWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzk3
NSw4ICszOTc1LDMyIEBACiAJCTcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlv
bkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3
NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2Vz
dHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25p
emVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAz
MjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRz
RGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDEy
M0M4RkUwMjAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0
MjIzQzhGRTAzMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0MzIzQzhG
RTA0MDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDQyM0M5MDBE
QTAwNDE4ODFGIC8qIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIwMTc1NDYyM0M5NDVEODAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0NzIz
Qzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyog
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3Nh
Z2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlBMjNBRDJGRDYw
MEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBNjIz
QUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjAyM0MxODI4NzAwMjYy
NjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1
Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29s
b3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQ
aWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4
QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZl
ci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDE0MjNBQjBBRjEw
MEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUIyM0I0QzdB
OTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0
MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3
Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUu
bW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRh
U3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEw
MEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtNjQwOSw2ICs2NDMzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlh
ICovLAorCQkJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICov
LAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQz
QzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQky
RDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAg
LTY0MjUsNiArNjQ1MCw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAq
LywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3
MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFG
RjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYg
Lyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyog
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzgwMSw2ICs3ODI3LDUyIEBACiAJ
CQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzIwMTc1
NDUyM0M5NDVCMTAwNDE4ODFGIC8qIGNnICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQlj
aGlsZHJlbiA9ICgKKwkJCQk3MjAxNzU0NjIzQzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjAxNzU0NzIzQzk0NUQ4MDA0
MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggKi8sCisJCQkp
OworCQkJcGF0aCA9IGNnOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzIx
RjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZG
NyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLywKKwkJCQk3MjFGMUU5ODIzQUQyRkQ2
MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRTk5MjNB
RDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovLAor
CQkJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
UHJveHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzJENUMyRUQyM0I0Qzgy
MzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAorCQkJCTcyRDVD
MkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2Fn
ZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OworCQk3MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVu
ZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJNzIwMTc1NDUyM0M5NDVCMTAwNDE4ODFGIC8qIGNnICovLAorCQkJCTcyMDE3NTQ0MjND
OTAwREEwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCAqLywKKwkJCQk3MjFG
MUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLywK
KwkJCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgg
Ki8sCisJCQkJNzIwMTc1NDEyM0M4RkUwMjAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzIwMTc1NDIyM0M4RkUwMzAwNDE4ODFGIC8qIElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyMDE3NTQzMjNDOEZF
MDQwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oICovLAor
CQkJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8s
CisJCQkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8s
CisJCQkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3Nh
Z2VzLmluICovLAorCQkJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTgyM0IzODQyMTAw
RjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MkQ1QzJFRTIzQjU2
Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJ
CQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJ
CX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggMThlOTM2ZGUz
MjMwNzcwZjI0MzYxYjZhYmFhOGUxN2U0ZDJlNWFjMC4uMTg4ZmFjMjBhMWU5MjNkZjYyYmIxYTM4
MDU1MGFhYTRmOTRkOGUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTYwLDI5ICs2MCwzNSBAQCB2b2lkIEdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewogfQogCi12
b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQot
ewotfQotCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1
cHBsZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZlTWVzc2FnZUZy
b21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byog
Y2FwdHVyZU1hbmFnZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJN
ZWRpYUNhcHR1cmVNYW5hZ2VyPigpKQogICAgICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgVVNFKExJ
QldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5saWJXZWJSVENDb2RlY3Mo
KS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2Fn
ZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQor
Citib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9w
dHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVj
ZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpT
dHJpbmdSZWZlcmVuY2UpCit7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4
IGE4YWQ0ZmVlODZiMjY1OWI0YWZmYjdjNDg0ZGExODFjM2JlZjI3ZDAuLmU4ZWU4NWRjMzJmZTU3
OGYxNzUzOGJhM2Q4OWZkNzQ2MDc0NmJhMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVk
ZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDYsNiArNDcsNyBAQCBwdWJsaWM6
CiAgICAgfkdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2Fn
ZVJlY2VpdmVyTWFwOyB9CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIHZvaWQgc2V0QXVk
aXRUb2tlbihPcHRpb25hbDxhdWRpdF90b2tlbl90PiBhdWRpdFRva2VuKSB7IG1fYXVkaXRUb2tl
biA9IGF1ZGl0VG9rZW47IH0KQEAgLTU4LDExICs2MCwxNSBAQCBwcml2YXRlOgogICAgIC8vIElQ
Qzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24m
KSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29k
ZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogCisgICAgYm9vbCBkaXNw
YXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBk
aXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICAvLyBUaGUgY29ubmVjdGlvbiBmcm9t
IHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuCiAgICAgUmVmPElQQzo6Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOwotCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNz
YWdlUmVjZWl2ZXJNYXA7CiAjaWYgSEFWRShBVURJVF9UT0tFTikKICAgICBPcHRpb25hbDxhdWRp
dF90b2tlbl90PiBtX2F1ZGl0VG9rZW47CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmlu
CmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5
ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdl
cy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNz
YWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29u
bmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1OTYzMDY5ZjY2MTgxODNk
MDc4YTY0YzJkZWFjYzJkODNhNGNkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
LmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVk
ZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlID0gVmFyaWFu
dDwKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBNYWNoU2VuZFJpZ2h0LAorI2VuZGlmCisgICAg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUKKz47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDJjZjI0NWUzNDVlMWRmZWM2MmRj
MWQ3YTNlY2FlZmNkOWFiNWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgK
QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlIHsg
fTsKK3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTFiYzlhZTg3ZGM4ZDcyNDI4YTBiODA5Y2Fk
MGQ4MGE0Y2QxY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitlbnVtIEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VC
dWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJU
eXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZDg0Y2U5NTIxZmM3MmM0MjBhZTM5ZjI4
ZTljNDAzM2ViYTBlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBj
YWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50
ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAg
U2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgY29uZmlndXJhdGlvbi5jb2xvclNwYWNlID0geyBjYWNoZWRDR0NvbG9y
U3BhY2UoY29sb3JTcGFjZSkgfTsKKyNlbmRpZgorICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW50ZXJuYWxTaXplLCBjb25maWd1cmF0aW9uKTsKKyAg
ICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRl
eHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgV1RGTW92ZShiaXRtYXApLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7Cisg
ICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+
KGhhbmRsZSkpOworCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShX
VEZNb3ZlKFdURjo6Z2V0PFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKSk7CisgICAg
aWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0
ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBXVEZNb3ZlKGJpdG1hcCksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5
c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBiaXRtYXAsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGlj
c0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kKGxv
Z2ljYWxTaXplLCBwaHlzaWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAg
ICAsIG1fYml0bWFwKFdURk1vdmUoYml0bWFwKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNv
bnRleHQpKQoreworfQorCitJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25z
dAoreworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBtX2JpdG1hcC0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRs
ZShXVEZNb3ZlKGhhbmRsZSkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25z
dAoreworI2lmIFVTRShDRykKKyAgICByZXR1cm4gbV9iaXRtYXAtPm1ha2VDR0ltYWdlQ29weSgp
OworI2Vsc2UKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbmRpZgorfQorCitSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRtYXAt
PmNyZWF0ZUltYWdlKCk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVt
LCBtX2JpdG1hcC0+ZGF0YSgpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQ
b2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9iaXRtYXAtPmRhdGEoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjUzNGEyZGE1NGIwMmVkYzNlMjVmNDBiMDJjNzA0MmFjNDg0NTUyODcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tl
bmQuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBTaGFyZWFibGVCaXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCB7
CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5kb3cqKTsKKyAgICAKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0OworICAgIAor
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuICptX2NvbnRleHQ7IH0KKworICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tp
bmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5
SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3Rv
cmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3JlOjpDb29yZGluYXRlU3lzdGVtKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIHNyY1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkNvb3JkaW5h
dGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiwgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NzE5MzExNWRlMTFmMTUyM2RjMDkwZjAxMWMxNDY1MTQ5NDk3NWZhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3Jt
SW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJT
aGFyZWFibGVCYWNrZW5kID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOworCisj
aWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kOworI2Vsc2UKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJhY2tlbmQgPSBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJh
Y2tlbmQ7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40YTUxYjRjZTgwZjdiMWE2ZWNiYzgyYmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
I2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZm
ZXI6OlJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpCisgICAgOiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZl
ciBpbiB0aGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJN
YXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQ
VVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJl
Y2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQo
KSwgKnRoaXMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lgor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworfQorCitSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKCkKK3sKKyAgICAv
LyBVbi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNz
YWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7Cisg
ICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAg
ICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2Fn
ZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1h
Z2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisK
K0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1v
dGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAg
IHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJl
bW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBS
ZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCku
ZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNv
bm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJ
bWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNz
YWdlQXJyaXZlcyk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElk
ZW50aWZpZXIoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQ
cm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rp
b24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRl
bHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1h
Z2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2Fp
dGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6
ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBN
YXhXYWl0c0NvdW50ID0gMzsKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0
c0NvdW50OyAhaXNCYWNrZW5kQ3JlYXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3
YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRz
Q291bnQgPSBNYXhXYWl0c0NvdW50OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsg
KQorICAgICAgICB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1h
Z2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBm
bHVzaElkZW50aWZpZXIpCit7CisgICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZsdXNo
SWRlbnRpZmllcjsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qp
Cit7CisgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXI6OmdlbmVyYXRlKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6Rmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2lt
YWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkZDkxOTk1ZmFlNWVh
NmUzZjQ4NzRmNzZhNGNjMzg0NjRjYWJiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNs
dWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5j
bHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIKKyAgICA6IHByaXZhdGUg
SVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
K3B1YmxpYzoKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXIoKTsKKworcHJvdGVjdGVkOgorICAgIFJl
bW90ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgor
ICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgLy8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1ZmZl
ckJhY2tlbmQoKTsKKyAgICBib29sIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKKworICAgIHZv
aWQgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29u
c3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50
aWZpZXI7IH0KKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVk
KCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIpOyAgICAgICAgCisgICAgdm9pZCByZW1vdGVGbHVzaENvbnRleHQoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZl
cklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRG
bHVzaElkZW50aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZl
ZEZsdXNoSWRlbnRpZmllcjsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMu
aW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQxZmQyNGYyOTY5YWE3N2QyYmJl
ZTcyNzE1YmYyNmYzYzliYWQyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5p
bgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVm
ZmVyIE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdl
YkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNl
LCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRG
bHVzaElkZW50aWZpZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElk
ZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Y2UwMjRj
N2JiNGMwNzU4Njc1ZjZiMTA3ZmVkOGZkM2Q3ZTNlZWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
ciA6IHB1YmxpYyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJl
bW90ZUltYWdlQnVmZmVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9
IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRl
SW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPihuZXcgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6
IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VC
dWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9iYWNrZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFj
a2VuZFR5cGU6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQo
KTsgfQorCisgICAgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsK
KyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNo
Q29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3Rl
SW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRp
c3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29u
dGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmViZDIwMTYzODA0YjAyNGQ0ZjE0MDFkNDQ2NjM2MjNhZDUzYTk3YWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVh
YmxlQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVy
U2hhcmVhYmxlQmFja2VuZD47Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYzU4YWFjNzNlMjViY2E3ZDBhOTMwOTdjNzM2
MTk2M2ZlNDBlYmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdC
YWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQoKSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQoKQoreworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQor
CitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7Cisg
ICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQo
TWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNr
ZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0
aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9
IFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGU6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVm
YXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFn
ZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IGhvc3RXaW5kb3cpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZi
ZTlkY2JkNjBmMzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNl
bmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVk
ZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVy
aW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5n
QmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVj
dGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50
NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ly8gUmVuZGVyaW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1
ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllcjo6Z2VuZXJhdGUoKSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzU0NzBjY2ZlN2I3OWJiOTI0NTc4YWZi
NDE3MDM1YzkxM2RkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAt
MCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9Owor
dXNpbmcgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yODgzMWExYjcxYjQzYjZjMTEwYjg0OTI2NzU5NDI1YjRmN2VmZTZkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlP
U3VyZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIElu
dFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRp
b25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJu
YWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7Cisg
ICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4
dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4obmV3IElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFu
ZGxlKQoreworICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+
KGhhbmRsZSkpOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2Vu
ZFJpZ2h0KFdURk1vdmUoV1RGOjpnZXQ8TWFjaFNlbmRSaWdodD4oaGFuZGxlKSksIGNhY2hlZENH
Q29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlKG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9j
Zy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmU3
MDEwODk2MmM3MjQyOTI5ZGVlYTllMzZkZWViYjIwYTY5Njc5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNoYXJlYWJsZUJpdG1hcDsKKworY2xhc3Mg
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNv
cmU6Okhvc3RXaW5kb3cqKTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1c2lu
ZyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNF
KENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykpCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9t
ZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3NWQ3YjhjYzEwZmZhMDA4MDNkNDgyMTczYmU1
YTM1NThhLi43NzI2ZmU5NDhhMjI3OWJiZjkzOWYwNjQ0ZjY0NTY4MmVkNmI3OTg1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
Q2hyb21lQ2xpZW50LmNwcApAQCAtMTAyLDYgKzEwMiwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
TW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJhdGlvbi5oPgogI2VuZGlmCiAKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtODgxLDE1ICs4ODUsMjIgQEAgR3JhcGhpY3NMYXll
ckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3JhcGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAog
fQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQog
UmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNw
bGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSBjb25zdAogewog
ICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1fcGFnZS5kcmF3aW5nQXJlYSgpKQogICAgICAg
ICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5
SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQorI2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
KSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyAgICByZXR1cm4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxzZQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNo
Um9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1NWUxYzFkNjA4NTBlNDcxZjY3OTRlZDFjMmNk
Li40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUxYjRmNTNiMmQxZGY0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29y
ZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENv
bXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGll
bnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNkMTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4uMjQw
N2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFiMWVjYmJmOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29u
dGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQog
ICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBz
aG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFuIHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBs
aW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJh
dGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwog
ICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbmlsOwogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzMwMDdiM2Zj
MjNkODlmODMyMmUyZjA4MTk1MWJjYWQ3YmJiOGIwMi4uOTY4MGVjY2JkMGQ3YzU5MTZmZDdmNDAw
YWViZDMyYjViMjBmODdlYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTAxLTExICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4
cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0xMSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRpb25dIGZhc3QvdGV4dC9zaW1wbGUtbGluZXMt
ZmxvYXQuaHRtbCBzaG91bGQgYmUgYWJvdXQgc2ltcGxlIGxpbmUgbGF5b3V0IG9ubHkKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4
cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3MmFjY2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3
Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2YmZiMzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0
ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQog
KHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkp
CisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAg
KGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAo
ZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAo
MTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387440</attachid>
            <date>2020-01-11 12:11:59 -0800</date>
            <delta_ts>2020-01-12 10:39:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200111121158.patch</filename>
            <type>text/plain</type>
            <size>490475</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM1MWQ3NGM4ZGRhNmM2
ODdjMjY2MzdmMDM0ZTAyMzhhYjQyZDMwMS4uZTJmYWQ0ZGY5NmU0YzU2ZTJiN2I1OTdiMzFmZjZk
MmE5YjM1YTg2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2OSBAQAorMjAyMC0wMS0xMSAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworICAg
ICAgICAgICAgLS0gU2hhcmluZyB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIGRhdGEKKworICAgICAg
ICBUaGlzIGlzIHRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIEltYWdlQnVmZmVyOgorCisgICAgICAg
IEltYWdlQnVmZmVyCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNr
ZW5kVHlwZT4KKyAgICAgICAgICAgICstIFBoeXNpY2FsSW1hZ2VCdWZmZXIgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQgICAgIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRU
eXBlPiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgICstIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgLS0tLS0rICAgUmVtb3RlSW1hZ2VCdWZm
ZXIgLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAg
ICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAg
IHwgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciAtKyAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgLSsKKyAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
KyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgICAgICAgICstIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eSAtLS0tLS0tLS0tLS0tLSsKKworCisgICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNo
eSBmb3IgSW1hZ2VCdWZmZXJCYWNrZW5kOgorCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZAor
ICAgICAgICAgICAgfAorICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAg
ICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAg
Ky0tIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgfCAgICAgICB8ICAg
ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwg
ICAgICAgKy0tIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorICAgICAgICAgICAg
fCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZAorICAgICAg
ICAgICAgfCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZAorICAg
ICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAg
ICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZAorCisgICAgICAg
IEFzIGFuIGV4YW1wbGUgZm9yIHRoZSBwbGF0Zm9ybXMsIHdoaWNoIHVzZSBDRywgSW1hZ2VCdWZm
ZXI6OmNyZWF0ZSgpIHdpbGwgCisgICAgICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9m
IEltYWdlQnVmZmVyOgorCisgICAgICAgICAgICBJbi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAg
ICAgICAgICAgICBVbmFjY2VsZXJhdGVkOiAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAgICAgICBBY2NlbGVyYXRlZDogICAgUGh5c2lj
YWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAgICAg
IE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJhdGVk
OiAgCisgICAgICAgICAgICAgICAgICAgICAgICBXZWJQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIEdQVVByb2Nlc3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+CisKKyAgICAgICAgICAgICAgICBBY2Nl
bGVyYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFdlYlByb2Nlc3M6IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPgorICAg
ICAgICAgICAgICAgICAgICAgICAgR1BVUHJvY2VzczogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5PEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4KKworICAgICAgICAq
IEhlYWRlcnMuY21ha2U6CisgICAgICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJv
YXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9h
cmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRp
emVEYXRhSWZOZWVkZWQpOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAg
ICAgICogUGxhdGZvcm1NYWMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6ZHVtcEltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJp
YWxpemVyOjpyZWFkSW1hZ2VCaXRtYXApOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToK
KyAgICAgICAgKiBodG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSBjb25zdCk6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Y3JlYXRlQ29udGV4dDJkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50
OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52
YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSW1hZ2VCaXRtYXAuY3BwOgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZm
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VC
dWZmZXIgY29uc3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3Bs
YXlMaXN0QXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2Nl
bGVyYXRlZCBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6Cisg
ICAgICAgICogaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToK
KyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQg
Y29uc3QpOgorICAgICAgICAqIHBhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6
c2NyZWVuc2hvdCk6CisgICAgICAgICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICog
cGxhdGZvcm0vSG9zdFdpbmRvdy5oOgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50
eHQ6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmguCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29weVJlY3RUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6
CisgICAgICAgIChXZWJDb3JlOjpjb3B5RnVuY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJCYWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmludGVybmFsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbG9yU3BhY2UgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYXNlVHJhbnNmb3JtIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3Bh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXll
ciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFj
a2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5
c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1h
Z2VCdWZmZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2lj
YWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZl
cjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3
UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFk
b3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OmRyYXdTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5
ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZm
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBw
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1
ZmZlckd0ay5jcHAuCisgICAgICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNr
ZW5kOjpzZXR1cENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
OjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0
dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJM
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0
YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFs
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5
TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmpwZWdVVEkpOgor
ICAgICAgICAoV2ViQ29yZTo6dXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Y2ZEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVZlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNl
Lm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAg
ICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVw
bGF5RGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcDoKKyAgICAgICAg
KE5pY29zaWE6OkdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMpOgorICAgICAgICAqIHBsYXRmb3JtL21v
Y2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1
bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5
UmVzb3VyY2UpOgorICAgICAgICAqIHN2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorCiAyMDIw
LTAxLTEwICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ10g
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0VGFibGVDZWxsQm94IHNob3VsZCB0YWtlIEhv
cml6b250YWxDb25zdHJhaW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAyYzMwZjE3YTIyNGJmYmVjNzc2OGZlZjQ3
MzU0ZDg3MDliMGY2MmQ0Li4xMGUxOTJiNTQ5ZjQ5Y2Y1Njg0NzEwNzdjMjllYjc2MjNmOGM1NTEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwOSBAQAorMjAyMC0wMS0xMSAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMg
cmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0
OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQp
OgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaDoKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJlY2VpdmVyTWFwKToK
KyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d2ViUHJvY2Vzc0lk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nl
c3NDb25uZWN0aW9uLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluLgorICAg
ICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5OjpSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAq
IEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJv
eHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJEYXRhLmguCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmlu
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNoYXJl
ZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAg
ICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVz
c2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5
bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IENvcGll
ZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1
c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNl
dEZsdXNoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpy
ZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29w
aWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlv
bi5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAx
LTExICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAg
IEFkZCBjb3JyZWN0IGdyYW5kZmF0aGVyaW5nIGZ1bmN0aW9uYWxpdHkgdG8gdGhlIElUUCBkYXRh
YmFzZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMzFkODIyNDBiMTk4
MDkxYTVlYzJmZGE5ZmVlNjAwYTZjOWM3N2NiNy4uNWY1NzIxY2Y3NmZjODJmNDUxYjQ1YWNjZWI0
NTBkYmVmYTczMmZkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDIwLTAxLTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6
OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDkg
IFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQg
VEFSR0VUX09TX01BQ0NBVEFMWVNUIGluIG1vcmUgcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRl
eCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJkZDI1ZTg5M2I5OTY0ZTc3Li44NWE3YmMwMmZkMDc1
YWYzZTgwNTdhM2Q3OGQyODBmNzZhODE0ZmI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9I
ZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUs
NiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBw
bGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2Ft
ZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2Uu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBAIC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxl
eFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5nT3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1v
bml0b3JDbGllbnQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzEx
MDcsMTggQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlz
cGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
ZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1v
dGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRv
ci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvVGFiU2l6ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRh
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBi
b2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCmluZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBk
MWNmYjZlODBiMjMxZGQ1NmQ2YjAuLjc0NjVkMGU2YTg2Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhl
N2FhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJk
L0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwCkBAIC0yODQsNyArMjg0LDcgQEAgdm9pZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRpemVEYXRhSWZOZWUKIAogICAgICAg
ICBhdXRvIGJpdG1hcEltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBiaXRt
YXBJbWFnZS0+c2V0RGF0YShXVEZNb3ZlKGJ1ZmZlclRvU2FuaXRpemUpLCB0cnVlKTsKLSAgICAg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNp
emUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgICAgICBpZiAoIWltYWdlQnVmZmVyKSB7CiAgICAgICAgICAgICBtX2RhdGEg
PSB7IG51bGxTdHJpbmcoKSB9OwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBm
M2NmOTQwZC4uNWU1NDI2YzExNGQzYWNmNTBiNDcxOGJjY2Y0NmEzN2MyY2NhZjk4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC0xMzIsOCArMTMyLDkgQEAgZWxzZSAo
KQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3Niw3ICsxNzcsOSBAQCBlbHNlICgpCiAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3Ry
eS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IGMwM2NlNmI1MTMxODIxYTAxY2M3ZDY2
NTNkMTY5MTkxZGJiNzlhODEuLjBiMmJjY2M1YjU2NjYwMzU0NTIzN2JkNWFjMDM1YWMxMWI0ZDJj
N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0yODksOCArMjg5LDEwIEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2Rl
ckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApAQCAtNTI1LDcgKzUyNyw5IEBA
IGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0MTEyMTU1N2FlNmYzNWRi
OWFkNWY0YzFlOGFjY2NhMDg2NjNlNmZiLi43YTIwOWE4NjdkM2UxYTE0MGRiMjAzNDQ1ZWQzYWRl
ZTI3Njg4ZTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTg2OSw2ICsxODY5LDcgQEAgcGxhdGZvcm0v
Z3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5j
cHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMTg4OCw2ICsxODg5LDcg
QEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5j
YXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGU0NTNkODkwOTdlNjg2YjJjMzM1
MmJhZDY2ZWU3MTIzNDdjMTY2YjUuLjRmMDNlYzIzZDhjNDBmYjk2YTJlNTc3MDFlMzY2YWIwMTRj
ZWNmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIv
U291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMjg4LDggKzI4OCw5IEBAIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0
Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKaW5kZXggNzIwNWUyMGQzYWI0ZTM5
ZmJlZTRiYjk0MzFhZWNiNGJjY2MyOGJkMi4uOTdmMzM2ZTdjNWM5ZThkMGRhMjVlMmJkNGU2MWFk
NzFhZTUyZGYyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKQEAgLTg0LDcgKzg0LDYgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0
aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAotcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlR3RrLmNwcAogCiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
YWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCA5YmI4NDMxNDUzOWFkMDk1MTQ2MzFiMjEzMDYxNmFmNjBiYTlhMWMzLi41
MzYwZjQ3Yzg2NzliMTJmODg1Yzc5MjAwMmQ5NzNjYzJlMjRmMWIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1
LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBE
NjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9
OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkw
MDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRX
cmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZm
ZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZF
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNT
VkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVm
RWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRH
bHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVt
ZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVm
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07
CkBAIC0yMTMwLDE0ICsyMTI4LDI2IEBACiAJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBB
bmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzFFMkM0MjQyMUM5MzUxRDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBo
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzFFQURDRDgyMjA4N0U3MjAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFQURDRDYyMjA4N0U2RDAwNjVBNDVGIC8q
IFBvaW50ZXJJRC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUZDRUQ3MjAyQjM4
OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjAxNzU0QTIzQzk2OURGMDA0MTg4MUYgLyogUGxh
dGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMDE3NTQ4MjNDOTY5M0UwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzMxMjIzRUM4NTQwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzIyMjNFQzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1
MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAv
KiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYx
RUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUND
QkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBG
NUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBh
aW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQy
MzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2
MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmlu
Z01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
MzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlG
N0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXgu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMw
MUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUw
MURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2Jz
ZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcy
NEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkw
MTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZB
NkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5
c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJC
RTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQy
NzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAw
QTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMg
LyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUz
Q0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBF
QTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0Uw
QjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZl
bnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VD
NzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDIsOSAr
NjU1Miw2IEBACiAJCTIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2Vi
RXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQx
MEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NW
R0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTYwMiw4ICs5NjA5LDEyIEBA
CiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVj
dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5
OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBv
aW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0ODIzQzk2OTNFMDA0MTg4
MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIw
MjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3Bl
cnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFs
dWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJp
bmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbi5oOyBwYXRoID0gLi4vQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxl
bmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxl
bmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3
RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05NjI0LDcgKzk2MzUsMjAgQEAKIAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8q
IEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JH
Qi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0
NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNS
R0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0
MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyog
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIw
MEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2Fs
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FB
QzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYy
M0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgy
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGlu
Z09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRl
cmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVy
aW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8q
IEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VY
VHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJG
MDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkw
NEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjY4OCw3ICsxMjcxMiw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUw
QUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAv
KiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEx
RjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg4LDYgKzE2NzExLDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJ
MEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJCQkU0
MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJ
CQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJ
CQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJ
CQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8s
CkBAIC0yNDg4Nyw2ICsyNDkxMSw3IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBj
ZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIzODI2
QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQkw
RkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKQEAgLTI0ODk2LDkgKzI0OTIxLDEy
IEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmgg
Ki8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJ
bWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjND
IC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8sCisJCQkJNzJCQkU0MEQyM0FBRUNBMjAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwQzIz
QUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3
MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJCUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8sCiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1
IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywKQEAgLTI0OTk0LDYgKzI1MDIyLDcgQEAKIAkJCQk0
QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4
Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFF
N0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdPcHRpb25zLmggKi8sCisJCQkJNzJBMDdDNDUyM0JF
RUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0
RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0
OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJ
CQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dC5jcHAgKi8sCkBAIC0yNTA4NSw3ICsyNTExNCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAw
NjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8q
IEltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAv
KiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJCUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJ
bWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VG
cmFtZS5jcHAgKi8sCkBAIC0yNTE0Miw2ICsyNTE3Miw5IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5
OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8q
IFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzIwMTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2
IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyog
UGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAw
NDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTE1MSw2ICsyNTE4NCw5IEBA
CiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0Ex
NTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDcz
QTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNzJE
NUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcy
RDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzIz
ODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLywKIAkJCQlBNzNGOTVG
QzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICovLAogCQkJCUE3M0Y5NUZEMTJD
OTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIw
MDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAqLywKQEAgLTI4OTkzLDYgKzI5MDI5LDcgQEAKIAkJ
CQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9y
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNCQjVDODgxRDVENkY0NTAwNUE3MUY0IC8qIEFsbERl
c2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzODI2QzIyM0M1NkY3
OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAvKiBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUyQjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIz
RkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5
Njg4LDYgKzI5NzI1LDggQEAKIAkJCQkxMTJGQjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxh
eUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNC
MCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyNzIz
QUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0Ey
Q0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMzAyOTYsOCArMzAzMzUsMTAgQEAKIAkJCQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyog
SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0
RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEwQjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1
ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMTIz
QUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIxRjFFQTcyM0FENTBBMTAwQkRB
RkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
Q0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThDRTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xz
QnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAw
N0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MTc2Nyw2ICszMTgwOCw3IEBACiAJCQkJQTU1NEI1RjMxRTM4MzkzQTAwMUQ0RTAzIC8qIFBlcmZv
cm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQ1ODFGQjUxNTIwRjkzQjAw
M0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkUwRjQy
M0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURCQzFCNTYyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1
cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUQyQzgyQjcyMzZBM0Y2
QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1cmVTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjggLyogUGljdHVyZUluUGljdHVyZVdpbmRvdy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMTc4Niw2ICszMTgyOCw4IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1
MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVw
YWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjAxNzU0QTIzQzk2OURGMDA0
MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZv
cm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NjMsNiArMzIwMDcsOCBAQAogCQkJCUJD
RUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJl
c291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAw
RjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4
MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5l
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVy
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNjRkZmYyZDk4NGVmNzJkZDll
YmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0ZTQ5MGFiNGQ4MWJkNmZmMTI4ZTI1YTc3Njc0MWQ5
ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEsOCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxT
aXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1
ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXpl
LndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNh
bFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0g
YnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQo
KSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJh
dGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVm
ZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OwogICAgICAgICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhl
aWdodCksIEludFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2lj
YWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dp
Y2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAKICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJp
dG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5D
bGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4
YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZhNTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0
NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApA
QCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJbWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFu
c2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZlci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhp
cyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAg
ICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQp
OworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4g
JkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9D
dXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2Fu
dmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThmZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42
NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3Vz
dG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwg
IWhlaWdodCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9j
b3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcg
QEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAg
IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3Rp
bmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVsbHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBt
X2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1fY29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9k
ZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29w
aWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9jb3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAx
ZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkx
ODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAi
Q2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
QEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
I2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRpYVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAsNiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQq
IEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQog
CiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMs
IGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkpOwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1
cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRo
ZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAt
ODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0
ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpz
ZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsK
LSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdp
bmcpCi0gICAgICAgIHJldHVybjsKLSAgICAKICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcg
PSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0g
ICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpCi0gICAgICAgIHJldHVybjsKLQogICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0
cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0
cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsK
LQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAg
ICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4
dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBm
bGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2Nv
bnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAg
ICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBi
dWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZs
YWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZv
aWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAo
IXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRl
ZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBhdXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52
aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCktPnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+
cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxscHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQg
YSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9v
bCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVl
T3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7Cisg
ICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBv
biBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAg
ICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVs
c2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBz
aG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2Vs
ZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICBy
ZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENv
bG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0
KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMy
ZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBp
ZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2
Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlz
cGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZh
bHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9j
b250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVj
M2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDkyLi4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZl
NjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFw
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSAr
NjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1z
dGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsK
K3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6
OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09m
ZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFmNGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjEx
ZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZlMzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
T2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0
cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkK
ICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsK
IAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRlZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0
dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBV
bmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OworICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRt
YXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9OwogCiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUlt
YWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICghYnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZv
aWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3
aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJ
bWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVl
bkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVy
KCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICByZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAog
dm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXgg
ODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFiNzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMz
NjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4
MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNsYXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29tcG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9z
aXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNj
ZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjb21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1
ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVyUmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBA
IC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1
cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsgQ2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcElt
YWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJbWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmln
aW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0Nv
bnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogQWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0Nv
bnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5
CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3Ry
aW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3Bs
YXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5n
Q29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250
ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxhZ3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4
dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMpOwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwot
fQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+
JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFs
aXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIxNDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShm
bG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9h
dCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFn
ZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1F
eGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4
LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFz
QmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0
cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBn
ZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFp
bnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3Jl
YXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRl
QXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBu
dWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1h
Z2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAg
ICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3Nh
Z2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBS
ZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0yMjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxv
YXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1h
Z2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgs
IGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0g
ICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAg
IHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRp
cnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxv
YXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZl
ciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyAr
MjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0
KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVj
dCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1v
dmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0
ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7Cisg
ICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0
ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6
ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUoKSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpA
QCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpw
dXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VS
ZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkp
OwogCiAgICAgaWYgKCFzb3VyY2VSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRC
eXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwg
SW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXIt
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpk
YXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VS
ZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWRE
cmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9y
bSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUy
YmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0
ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1
YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4g
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsgfQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJpbmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxp
c3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAgICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1Rl
eHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlv
biA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAgIGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250
U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDggKzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRl
bXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAot
ICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZs
b2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4
Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBm
bG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZs
b2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJy
aWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTll
YmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEzZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0
bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29u
dGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVu
ZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVu
ZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBS
ZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGlj
IFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYg
Y2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpA
QCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFzRWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBib29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01v
ZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVu
ZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdD
b250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVmUHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2Yjky
YjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAg
ICAgICAgIGlmICghYnVmZmVyKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RD
b3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5j
b3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAg
ICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNl
OjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAg
ICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyArNDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBH
Q0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9y
bWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0
LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgp
LCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5n
U3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6
VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAw
LDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlw
ZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5TSUdORURfQllURSkgewogICAgICAgICAgICAgYXV0
byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxG
b3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCks
IHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZl
ci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVy
bmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00
NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAg
ICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsK
KyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Uu
Z2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3
Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8g
dGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0
LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9y
bWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAg
ICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAg
ICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4
dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVy
ZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5m
byh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMt
PmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAg
ICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGlu
dAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAg
UmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUp
OwogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
dGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcg
QEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRv
QnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcKICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBv
aW50KCksIGltYWdlLnNpemUoKSk7CiAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwg
c3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29w
eUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6
OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hv
dWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNT
RVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5
MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhm
YzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRy
b2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250
cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlh
Q29udHJvbFRleHRUcmFja0NvbnRhaW5lckVsZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2Vu
dGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXll
ci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1FICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQg
bm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNp
emUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVj
dC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9y
KSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2Fm
NS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwxMyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlk
ZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlkZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xp
ZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMp
OwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQo
KSBjb25zdAoreworICAgIGlmICghbV9yZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRl
cmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0
dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hy
b21lOjpkaXNwbGF5SUQoKSBjb25zdAogewogICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBhYmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDku
LjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZmNDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3Qg
Q3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92
ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJp
bmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1h
dGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkg
Y29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiArMTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9pc0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdl
U3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5kaWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRlcmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYz
ZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEyYWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUz
NWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3Ry
YWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJlbmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIK
QEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJl
ZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5
SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNv
bnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwogICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3Jh
cGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSByb290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBh
dHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVybGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVy
KikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGlu
Zy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAw
YTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZmZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4
YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25h
cHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzExMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRoQ2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJl
CiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxl
RmFjdG9yKQogICAgICAgICBzY2FsZUZhY3RvciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGlt
YWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9y
KTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVy
LT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFnZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYx
OWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODViYmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1
YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQu
Y3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hv
dChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAg
ICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAg
ICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6
ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAg
SW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAg
ICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VS
ZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURh
dGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAg
IGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtl
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2Fk
NjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1ZC4uNTVhNzAwNWU0Mjg1YWI0NzdmOTM5YmU4Y2U2
YWVhYjU2MjA2ZTFmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8u
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcg
KzEzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1JlZlB0ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0hvc3RXaW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cu
aAppbmRleCAyY2ZlY2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li5mNWYyMTdj
Y2Q4NDA2MDgwMDI1NWMyMDNkMjIxN2NhZWNlMGNlMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
SG9zdFdpbmRvdy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0j
aWZuZGVmIEhvc3RXaW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vy
c29yOworY2xhc3MgUmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwpAQCAtNjQsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29y
SGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5n
QmFja2VuZCogc2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKyAgICAKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAgLTc1LDUgKzc3LDMgQEAgcHVi
bGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSG9zdFdpbmRv
d19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA0MjFkZmJk
OTU3NTRjNDYyNzU3Yjc4ZGJmYTQxMDI1NDMyYWYwYjdkLi5kMjNiYjAyM2U3ZDc4NDBhZWJhYTQx
NGY5OWYwYmMwYzFmMmNkMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
b3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWly
by50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50
Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJv
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L05hdGl2ZUltYWdlQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8u
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBo
YVByZW11bHRpcGxpY2F0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUwNTQx
NmNkYTJmMmE3Zjc5MjZlMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Vu
dW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11bHRp
cGxpZWQsCisgICAgVW5wcmVtdWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi40YWFiNDY4Njc2OGYxYTI4MmQ1ODgxYzkzOTc5NDZkNWJhMjAwNjkwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3Mg
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA6IHB1YmxpYyBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiAsIHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5n
IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT47CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBj
cmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
aG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihz
dGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgZGF0YUJhY2tlbmQsIGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFC
YWNrZW5kKSkKKyAgICAgICAgLCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAg
ICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAg
eworICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRl
eHQoKSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0
OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3
aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250
ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4
NmRkNGIyYWY5MWY0NTY1NTM1YTcwMjkzOTIzYWYyYmFhZGJhMi4uMzViZDU4YzNkMTJmZjg0YzBl
NjY0MmY4MTgyNzA5OWNlODM3ZTI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6
CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsK
ICNlbmRpZgogICAgIGJvb2wgaXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5k
ZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCByZXN0b3JlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzVHlwZXMuY3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5
Njk2NGI0OTFiMTguLjAwYmUwZmVhMDYwNTVjYTMxYjJjODg3NGRkMzc0ZWVhMWQ0Mjg0NjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCkBAIC0yOCw2ICsyOCw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NUeXBlcy5oIgogCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorCiAj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKaW5kZXggY2VlYTFkYTQwZWIzMmZm
NzhhMWU3NWUxN2JmZTAwOTIwMWI3NmYxMi4uMjZhMTJkZTNiZTRhYzZiODg0MzY0YzU1NDM5N2Y3
ZjcxYzc4YWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzVHlwZXMuaApAQCAtMjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1
ZGUgIlJlbmRlcmluZ01vZGUuaCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0
Zi9FbnVtVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyMiwxNyArMTIz
LDYgQEAgZW51bSBUZXh0QWxpZ24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1lbnVtIFJl
bmRlcmluZ01vZGUgewotICAgIFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2NlbGVyYXRlZE5vblBs
YXRmb3JtQnVmZmVyLCAvLyBVc2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24gcmF0aGVyIHRoYW4g
cGxhdGZvcm0gQVBJIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAgQWNjZWxlcmF0ZWQK
LX07Ci0KLWVudW0gY2xhc3MgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0gICAgUHJlbXVsdGlw
bGllZCwKLSAgICBVbnByZW11bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21wb3NpdGVPcGVyYXRv
ck5hbWUoV2ViQ29yZTo6Q29tcG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBT
dHJpbmcgYmxlbmRNb2RlTmFtZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9vbCBwYXJzZUJsZW5k
TW9kZShjb25zdCBTdHJpbmcmLCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAgLTE0Myw3ICsxMzMs
NiBAQCBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgV2ViQ29yZTo6Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIFdFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2Fw
KTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBMaW5lSm9pbik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IGMwMTI2MzcwY2I4NjU5MjdhMzJiZjExZjYxNDg2ZDcx
YWY3YjQ3NTguLjRlMmJlNzFjNzQxYzU1ZjU2YzBhZDA0NmE3OTdlNTBhMDk3MTg4YjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAg
LTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yOCwzOCArMjgsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2lu
Y2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgZmxv
YXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCit7CisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0Jh
Y2tlbmQoaG9zdFdpbmRvdykuY3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKK30KIAotV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyKTsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNy
ZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Cit9
CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3
IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5n
TW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAo
c2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZm
ZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwg
Y29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3Jh
cGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNp
emUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLSNpZiBVU0UoRElSRUNU
MkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29s
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
cihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5k
ZXJpbmdNb2RlLCBob3N0V2luZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYg
KCFzdWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOwor
ICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSk7CiB9Ci0jZW5kaWYKKworc3RhdGljIGNvbnN0IGZsb2F0IE1h
eENsYW1wZWRMZW5ndGggPSA0MDk2Oworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVh
ID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKIGJvb2wgSW1hZ2VCdWZm
ZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKQEAgLTEwNSw5
NyArMTExLDEyIEBAIEZsb2F0UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgIHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlvbigpLCBjbGFt
cGVkU2l6ZShyZWN0LnNpemUoKSkpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShDQUlSTykK
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzIGZvciBvdGhlciBiYWNrZW5kcy4KLSAgICByZXR1cm4g
eyB9OwotfQotI2VuZGlmCi0KLSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSkKLQotRmxv
YXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBzaXpl
KSBjb25zdAotewotICAgIHJldHVybiBzaXplOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFu
c2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RD
b2xvclNwYWNlKQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBw
b3J0ZWQgYXQgdGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAg
ICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JT
cGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRz
dENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAg
ICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29s
b3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29s
b3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nh
c3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2Ug
PT0gQ29sb3JTcGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3Ip
OwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNl
UmdiTFVUKTsKLSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIElt
YWdlQnVmZmVyOjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50UmVj
dCBsdW1pbmFuY2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNy
Y1BpeGVsQXJyYXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7Ci0g
ICAgaWYgKCFzcmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWdu
ZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAo
dW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7
IHBpeGVsT2Zmc2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+
aXRlbShwaXhlbE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCk7Ci0gICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQg
KyAxKTsKLSAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNl
dCArIDIpOwotICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcg
KiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNy
Y1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRC
eXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAg
ICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0
VG9MdW1pbmFuY2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2soKTsKLX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZl
cjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1h
Z2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYs
IEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0ludFNp
emUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxzZTsK
KyAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9y
bSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9uIHRo
YW4gb25lIHBpeGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAq
IGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogewpAQCAtMjA0LDYzICsxMjUsMjcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QKIAog
ICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZShyZWN0LnNpemUoKSwgY29udGV4dCk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRl
eHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJ1
ZmZlci0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUo
c2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAg
IGlmICghYnVmZmVyKQorICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAg
ICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIFNl
dCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0
LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICBy
ZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgcmV0dXJuIGNyZWF0ZShz
aXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZW5kaWYKLX0KLQot
SW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgLy8gRW5sYXJn
ZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBp
dCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBw
ZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxl
RmFjdG9yKCkpOworICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0
aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLWJv
b2wgSW1hZ2VCdWZmZXI6OmlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50
b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7
Ci0gICAgcmV0dXJuIGFyZUVzc2VudGlhbGx5RXF1YWwoY29udGV4dC5zY2FsZUZhY3RvcigpLCB0
aGlzLT5jb250ZXh0KCkuc2NhbGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5z
aW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRp
b24pCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBm
cm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0
YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50
ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0g
ICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVp
Z2h0KCk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVz
b2x1dGlvbik7CiB9CiAKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkg
Y29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQogewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVm
ZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
IH0KLSNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCAzYmRlZTRlZTAwZWQxN2Fl
MzQzYjJmNmE4ZGRkMDA5Mzg5YzJlNmJmLi5jNjBiNzVkNGZiZmJhNWQyYmQ0NTBiMTNhNzUzMTMw
ZmM2YmNjYWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTI3LDE3MCArMjcsODEgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgi
Ci0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdP
cHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1
ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBo
aWNzQ29udGV4dDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7
Ci1jbGFzcyBJbWFnZURhdGE7Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFz
cyBIb3N0V2luZG93OwotCi1lbnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5n
U3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29w
eS4KLSAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZl
Y3QgdGhlIGNvcHkuCi19OwotCi1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAg
Tm8sCi0gICAgWWVzLAotfTsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5n
Q29udGV4dDsKK30KIAogY2xhc3MgSW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURURfRVhQT1JUKEltYWdlQnVmZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBw
dWJsaWM6Ci0gICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBm
YWlsdXJlLgogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9z
dFdpbmRvdyogPSBudWxscHRyKTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0
V2luZG93KiA9IG51bGxwdHIpOwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVm
ZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBi
dWZmZXIgaW50byB0aGlzIG5ldyBvbmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYpOwogCi0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRp
YmxlIHdpdGggdGhlIGNvbnRleHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2lu
ZyBpbnRvIHRoZSBidWZmZXIgYW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKIAotICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotICAgIGJvb2wgaXND
b21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAg
ICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKLQotICAgIC8vIFRoZSBhY3R1YWwgcmVz
b2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFs
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotCi0gICAgRmxvYXRTaXpl
IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKSBjb25zdDsKLQotICAgIGZsb2F0IHJl
c29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAg
Ly8gVGhlc2UgZnVuY3Rpb25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVy
IHdoaWNoIGlzIGNyZWF0ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3Rh
dGljIGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGlj
IGJvb2wgc2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2Fs
ZSk7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsK
KyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0
U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxv
YXRSZWN0Jik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdDsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0
b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOwotICAgIC8vIEdpdmUgaGludHMgb24gdGhlIGZhc3RlciBjb3B5SW1h
Z2UgTW9kZSwgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlIGlmIGl0IHN1cHBvcnRzIHRoZSBE
b250Q29weUJhY2tpbmdTdG9yZSBiZWhhdmlvcgotICAgIC8vIG9yIHJldHVybiBDb3B5QmFja2lu
Z1N0b3JlIGlmIGl0IGRvZXNuJ3QuICAKLSAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0
Q29weUltYWdlTW9kZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVy
KCkgPSBkZWZhdWx0OwogCi0gICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0sIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFs
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Zmx1c2hDb250ZXh0KCkgPSAwOwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRl
U3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNp
b25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KSBjb25zdDsKKyAgICB2aXJ0dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2lu
Z0NvbnRleHQoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJh
d2luZ0NvbnRleHQoKSB7IH0KIAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IElu
dFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSk7CisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBJbnRTaXplIGludGVybmFsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0ID0gMDsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1
bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJl
c29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdDsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0
ID0gMDsKIAotI2lmIFVTRShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgp
IGNvbnN0OwotI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVj
dFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOwogCi0jaWYgIVVTRShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9y
bSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zv
cm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xv
clNwYWNlKTsKLSAgICB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAs
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZv
cm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25z
dDsKLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgc3RhdGljIE5h
dGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9J
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAw
LCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgLy8g
RklYTUU6IGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJl
c3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5IHdvcmsKLSAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQg
YXJlIFJHQiBvciBSR0JBIGZvcm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVt
LCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCB2
b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RD
b2xvclNwYWNlKSA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBj
bGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNr
ZXIgb3IgY2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVj
dCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0g
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5v
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCA9IDA7CiAKLXByaXZhdGU6Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFn
ZSBtaWdodCBiZSBsYXJnZXIgdGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRo
ZSBzbWFsbGVyCi0gICAgLy8gaW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRv
TmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVz
aENvbnRleHQoKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9y
ZSkgY29uc3Q7Ci0gICAgc3RhdGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4
dCgpIGNvbnN0OwotI2VuZGlmCi0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZs
b2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0p
OwotICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAg
dmlydHVhbCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0
ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29v
cmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKIAotICAgIHN0
YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVy
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NH
TGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBp
bmxpbmUgdm9pZCBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5k
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7
Ci0gICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBj
bGFzcyBOYW1lZEltYWdlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50
SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0KLXByaXZhdGU6Ci0g
ICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRT
aXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAv
LyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4g
b3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3Vs
ZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAg
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0Nv
bG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNj
ZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0j
ZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7CiB9OwogCi0jaWYgVVNFKENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rv
cjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNDVjOWI3ZDViY2IwMDQ5NmJlN2YzNzk4
M2IyZDA5MjhiNGRjNTMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFn
ZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6
ZSkKKyAgICAsIG1faW50ZXJuYWxTaXplKGludGVybmFsU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlv
blNjYWxlKHJlc29sdXRpb25TY2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQor
eworfQorCitJbnRTaXplIEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZs
b2F0U2l6ZSBzY2FsZWRTaXplID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRo
KCkpLCBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChz
Y2FsZWRTaXplLmlzRW1wdHkoKSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXpl
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IElu
dFNpemUoc2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4gYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGlu
dGVybmFsU2l6ZS53aWR0aCgpKTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgp
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJm
bG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5h
bFNpemUuaGVpZ2h0KCkpICogYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJm
bG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gaW50ZXJuYWxT
aXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9J
bWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVy
biBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAg
ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgSW50
UmVjdCBsdW1pbmFuY2VSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplKTsKKyAg
ICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LCBDb29yZGluYXRlU3lzdGVtOjpMb2dp
Y2FsKTsKKyAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIHVu
c2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVu
Z3RoOyBwaXhlbE9mZnNldCArPSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJy
YXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQpOworICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zm
c2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxP
ZmZzZXQgKyAyKTsKKyAgICAgICAgCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUg
KyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAg
ICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAg
ICBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAq
c3JjUGl4ZWxBcnJheSwgbHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBv
aW50KCksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworfQorCitSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkoY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRl
c3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBh
cmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsKKyAgICBhcmVhICo9IHNyY1Jl
Y3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIWFycmF5IHx8ICFh
cnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJlY3QgYnVm
ZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAgICBzcmNS
ZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBzcmNSZWN0KTsKKyAgICBkZXN0
UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07CisKKyAg
ICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNSZWN0Lngo
KSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKC1z
cmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Quc2l6ZSgp
KQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAgICByZXR1cm4gYXJyYXk7Cit9
CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyhj
b25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJl
Y3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwg
c3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGRhdGFSZWN0LCBz
cmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RS
ZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisg
ICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkpOworCisgICAg
aWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkg
LSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6
ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJ1ZmZlclJl
Y3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICBpZiAoc3Jj
Q29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQ
aXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxb
Ml0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZv
cm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90
IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsK
KyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQs
IHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7Cisg
ICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAg
ICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBk
ZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3
YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3Jj
UGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFd
ICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JG
b3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4
ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29weVBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0
UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRl
c3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAg
ZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAg
ICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBd
ID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAo
c3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxw
aGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3RvcikoQ29sb3JGb3JtYXQsIGNvbnN0
IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3RhdGljIGlubGluZSB2b2lkIGNv
cHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoCisgICAgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3Jt
YXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIENvbG9y
Rm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90
KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnl0ZXNQZXJS
b3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWln
aHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7
IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0LCAmc3JjUm93
c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBzcmNSb3dzICs9
IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Cisg
ICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0Nv
bG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dz
LCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9
PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5SW1h
Z2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihz
cmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRl
ZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBk
ZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgY29weUlt
YWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
PihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1h
dCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBJbnRS
ZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAg
ICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBJbnRS
ZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0byBhcnJh
eSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RDbGlwcGVk
LCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogc3Jj
UmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXktPmRhdGEo
KSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7Cisg
ICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVp
bnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHNyY1Jl
Y3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsK
KworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNS
b3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQ
ZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFycmF5Owor
fQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCB2b2lkKiBk
YXRhKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAgSW50UmVj
dCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBD
b29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpIHsKKyAg
ICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHNy
Y1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAgIEludFJl
Y3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxjdWxhdGVQ
dXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0UG9pbnQs
IHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAq
IHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJyYXkuZGF0
YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0Q2xpcHBl
ZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNDA4NjMxZGFiMWRlMDA2OGM4
MWM0MzgzMTc2NjljNGMxODQ2ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVkZSAiQ29s
b3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUgIk5hdGl2
ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgewor
ICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0
IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50
IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVz
b2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3Mg
Q29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2VudW0g
Y2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisgICAgQmFj
a2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsK
KyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9u
U2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmly
dHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsg
cmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0
dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAg
ICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdl
PiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIFdFQkNP
UkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVy
dFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNl
KENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCB7IHJldHVybiB7IH07IH0KKworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5
c3RlbSkgPSAwOworICAgIAorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwg
Ym9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIFdFQkNPUkVf
RVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGNyZWF0ZUdldEltYWdlRGF0
YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJ
bnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxjdWxhdGVQdXRJbWFnZURhdGFS
ZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgpOyB9CisgICAgdmlydHVhbCBD
b2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7IHJldHVybiBDb2xvckZvcm1h
dDo6UkdCQTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBp
eGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90
KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRp
bmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBV
aW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0sIHZv
aWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIEludFNpemUgbV9p
bnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29sb3JTcGFj
ZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZiZDEyYWJlNTQzYzNmMjAzNGY2MTU4
YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgi
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlz
aWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlz
aWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2OTRkMzgxYWNiYzkyNjBkYmI0N2U5
ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVi
bGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1
ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEltYWdlQnVmZmVy
LCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tl
bmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2lu
ZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1h
Z2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNhbEltYWdlQnVm
ZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1f
YmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQaHlzaWNhbElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJl
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJh
c2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJh
Y2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgaW50ZXJu
YWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJl
QmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZsb2F0IHJlc29s
dXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVu
c3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBzaXplX3QgbWVt
b3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3Vy
ZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJh
Y2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2Fs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJh
dyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgc2lu
a0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4
dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
biA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvSW1hZ2Uo
cHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3Q29uc3Vt
aW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAg
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmNvbnZl
cnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENv
bG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0
Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsK
KyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7
CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1
c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBl
LCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5h
dGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQ
aHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5k
LT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAg
ICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVzdGluYXRp
b25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWRhMmI4MzFmMzNjZDU3MjJiZDcyOTc3MzRjNzlmMWEwMTM0MGNlNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworI2lm
IFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorI2VsaWYg
VVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisj
ZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBV
U0UoQ0cpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBs
YXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0
MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7
CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgUGxhdGZvcm1B
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3Vz
aW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
OworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVm
ZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3Jt
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlz
dEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjgwMDZkOTc5NTE0NTYxNzAwOWIzNDk2ZTEy
YjA2NTNkYWViYTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjZWxp
ZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIK
KyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7CisjZWxpZiBVU0Uo
RElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRhMGFmYTc5ZDc0NjFjZDlm
MmYxMDkxMzUwYzgxNWRiYmJkN2JjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNo
cm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcg
UmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRl
cmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAq
c2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAg
IHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBG
QUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2Nl
bGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAg
ICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MWI5MmQ1ODRmZWU4ZjRhZjdhODU5NjRlYWFi
YzFjZWQ1MDE3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93Owor
Y2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JFX0VYUE9S
VCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tl
bmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
KyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJp
bmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2Rh
NzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgewor
ICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBS
ZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEwNzY3OGM1
NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMz
MzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRj
aEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2Nl
bGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVu
YWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VC
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAg
fQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3co
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllcklt
YWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxs
YmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBV
bmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAg
IHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RT
aGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAK
IHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5k
ZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQ
cm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAg
YXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5
ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUs
NyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3Jh
dGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBs
YXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNj
ZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBh
dXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03
MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5n
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAg
YXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hC
dWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAg
IGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0g
bGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2
b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2Us
IGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJs
dXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBs
YXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBs
YXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJS
ZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0
ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRh
dGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50
U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJ
bnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxh
eWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdl
UHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVBy
b3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAg
IGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApp
bmRleCA2MmM3OWYxM2ExYzcyNGRkZjM3YTk0NjRmODMyY2Q2Zjc3OWUwN2Q4Li44MGEwMjVlOGU2
Y2E4OGE2YjQ3ZmM3ZmRjNWU1YzVlMjUwZjlmZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAg
LTE3NCw3ICsxNzQsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBk
cmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4
dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2lu
LCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0
YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkp
IHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNv
bnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmln
aW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNo
YWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFs
cGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODIsNyArMTgyLDcgQEAgc3RhdGlj
IHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9y
bUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdT
aGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRy
YXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFn
ZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAg
aWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFj
ZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRl
T3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAg
IH0KIH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBs
YXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAg
IHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllcklt
YWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VC
dWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmln
aW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxT
b3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJl
MTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAy
ZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2
OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1Bs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUlt
YWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBs
YXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDljNzZlMjkxMmY4MWZjOTRhZGI1YzQ4
NDQ1MjcxMzQ2MGRjZmIyOGYuLjI5YTBlYzQ5OTRmMzYxNWQ4N2IxYmI0ZTFlMzNkNzY4ODA3Y2Jh
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDExLDcgKzQx
MSw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAog
dm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVm
ZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBi
dWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fp
cm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBk
ZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3OTY1N2UzYjI5OWVkNmViNGM1Y2MzNWRiOTUzMjQ1Nzg3Nzc1YjkuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSw3ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlS
TykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25z
LmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8
RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYg
VVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VT
KQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRl
eHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmlu
Z01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJ
TkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAg
ICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01v
ZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAg
ICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykp
OwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0K
LQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5k
ZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYg
VVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1h
cHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNl
bmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6
OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3Np
dGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBp
ZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwot
Ci0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0
dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsK
LSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0g
ICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0g
ICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJ
bWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29t
cG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBt
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3Vy
ZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0
KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0
cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwot
fQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkK
LXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3Vy
cmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0
ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAg
ICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5s
b2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1f
c2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAg
ICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8
Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5p
bXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZv
cm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0
IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2Vi
Z2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNl
cyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28g
d2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZm
ZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBt
X3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0
b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2Nv
bXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAg
ICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2Vu
ZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgp
LCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1
dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGlu
ZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNh
dXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20g
YSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUp
OwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0g
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURf
QllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9E
ZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNl
IGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVh
ZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xP
Ul9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0g
ICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNv
cHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJB
VE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJm
YWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29w
eTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2Vy
Y2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3Vy
ZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAg
ICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5U
X0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWly
b1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6
OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNv
ZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0g
ICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJu
IGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSks
IHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29s
dXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8g
TWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0g
Y2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxl
ZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlv
bj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJl
c3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNp
emUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6
ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdN
b2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFj
ZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0
dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAg
ICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxs
b2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0K
LSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQotI2Vsc2UK
LSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7Ci0jZW5k
aWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNl
RGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jf
d2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lk
KiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5o
ZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFj
ZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9p
ZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUND
RVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNl
dCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2Nh
bGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0
ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0
LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VC
dWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4g
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsK
LX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNj
YWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0g
ICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVh
c2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1h
cEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkp
OwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgp
Ci17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0
LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgp
KSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAg
ICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAg
ICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlG
b3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFs
aXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRl
c3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3Rp
bmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6
Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAg
ICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2Uu
Z2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNl
LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0g
ICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRl
ZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJm
YWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9k
YXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCog
cm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICog
eSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewot
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9y
IHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAg
ICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3Jl
ZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxD
b2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3Iu
YWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xv
cihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtf
ZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNp
emUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1
cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVy
bHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZh
Y2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdF
KQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAg
cmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsK
LX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEs
IGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSBy
ZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFy
ZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWln
aHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5p
bml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcg
MiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0Lngo
KSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAv
LyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0g
MDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0
LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0Lngo
KTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBk
ZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAo
ZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBp
bnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0
LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBp
ZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwot
ICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwg
YmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5z
IDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8g
VGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGlu
YXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRo
ZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1h
Z2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFk
anVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJm
YWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lu
eSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRv
bmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFy
ZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUu
d2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25l
U3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgp
LCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIq
IGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0
OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2ln
bmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJp
ZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1
bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
dW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2
b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBv
bmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNp
dmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+
PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+
PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDAp
ID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYp
OwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0g
cmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVz
UGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVu
YW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0g
SW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9
PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0g
ICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9y
ZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYg
KGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29y
ZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2
YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRp
b25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2lj
YWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJ
bnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6
ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3Np
emUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4
Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25z
dCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJl
Y3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0
LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJy
YXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3Rv
cmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2Rh
dGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lk
IEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJj
ZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNv
dXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0
IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3Rv
cmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNh
bERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9y
ZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+
IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBp
bnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxl
ZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERl
c3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAg
QVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsK
LSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRT
b3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkg
KyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2Fs
RGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5k
eCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0
eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0
eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRl
c3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGlu
dCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0
LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXpl
LmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lu
eSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERl
c3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVu
ZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAg
ICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNh
bERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBk
ZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVy
LgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93
cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZh
Y2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3Qp
OwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9y
ZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVj
dC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxE
YXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0
aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1h
Z2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2Uu
ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkg
KyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykg
ewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCog
cGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcg
Q29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAg
ICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAg
ICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9
IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChh
bHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBi
bHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
fQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5n
bGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNh
bE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0g
bV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ug
b3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNv
cHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEu
bV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVt
bnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2lj
YWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVj
dC55KCkpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLX0KLQotI2lmICFQTEFURk9S
TShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0gICAg
aWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVu
ZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9S
OwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJvb2wgZW5j
b2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
VmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwg
bWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVk
IGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFt
KGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOwot
fQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFs
aXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwot
Ci0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRh
OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkp
OwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNv
ZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBl
LCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVybiBlbmNv
ZGVkSW1hZ2U7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpw
YWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBG
bG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWly
byBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5n
ZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVD
b250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFw
cGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQs
IG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0
Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9k
YXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAg
ICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1f
ZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0
YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdM
JiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZh
cyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5
cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFy
Z2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdl
dCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zm
c2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3Qg
ZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVm
ZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xf
RlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEu
bV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5h
bGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZm
ZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1l
YnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlw
bHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0j
ZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1Zjk2MmQ3
MmFmZmI1YTQwM2JjNjA3ZWEzYjAxMDdmNDU3MTY5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5jcHAKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
SG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIK
KworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgi
CisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFj
ZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29u
dGV4dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmJ5dGVzUGVyUm93
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1f
c3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3Rv
cmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNh
aXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdAoreworICAgIEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yOworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQoKSkg
PT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
bV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQorICAgICAgICBj
b3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9yZTsKKyAgICBlbHNlCisgICAgICAgIGNv
cHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmU7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFn
ZShjb3B5QmVoYXZpb3IpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKK3sKKyAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBh
c3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcikpOworfQorCitSZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRh
aW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9u
cy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNv
bnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5n
U3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFnZSgq
ZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRp
b25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWly
bzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZvcm1D
b250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwg
cGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9
PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwt
PiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xv
clNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9y
U3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpM
aW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5l
YXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAg
Y29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7Cisg
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAgIH0g
ZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgeworICAgICAgICBz
dGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10gewor
ICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxv
YXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9T
UkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3Rh
dGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9CisKK1N0cmluZyBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAg
IFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkp
OworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gImRhdGE6
LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoZW5j
b2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7CisKKyAg
ICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5j
b2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0
X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOworICAgIHJldHVybiBk
YXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJm
YWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1
c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAg
IGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBp
bWFnZURhdGE7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1Np
emUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRl
c3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YSht
X3N1cmZhY2UuZ2V0KCkpKTsKKworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7
CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgY2Fpcm9f
c3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIGRlc3RQb2ludC54
KCksIGRlc3RQb2ludC55KCksIHNyY1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5o
ZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
QUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZWM4MGQw
NWM2MjlmZmI0MzQyMDNkMTExZDE0YmYzZGExMTNiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1
dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2Uo
Q29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSBvdmVy
cmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0p
IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYpOworCisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25z
dCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBjYWly
b1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3co
KSBjb25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bV9zdXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsg
bnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4
dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wZTkxMDBmNzRlYTBhZWNmMTAyMWMwMzM4NDk5ZDczMTE2YWU4NDc5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lu
Y2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1
ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJF
UE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+
CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBP
WFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYK
KworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJT
dXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2Fs
Y3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVy
bmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byog
Y29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwor
CisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2Ug
dGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBhIHBy
ZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRleHR1
cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1
cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBf
UywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQs
IEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAg
IGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdM
X0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwor
CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEs
IGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVy
ICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90
KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJl
bmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAg
IGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAg
YXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1
cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCB0ZXh0dXJlLCBpbnRlcm5hbFNp
emUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZh
Y2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5l
dyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSwgdGV4dHVyZSkpOwor
fQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6
ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0ZXh0dXJl
KQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQorICAgICwg
bV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorI2lm
IFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVy
OjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZh
Y3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJl
ZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyNlbmRpZgor
fQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpICYmIFVT
RShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRlQ2xpZW50KCk7CisjZW5k
aWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0Ojpj
dXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRp
bmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaWYg
KG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICBpZiAobV9jb21wb3NpdG9yVGV4dHVy
ZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Cisj
ZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3Vz
QWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIq
IEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyNpZiBVU0UoTklDT1NJQSkK
KyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7CisjZWxzZQorICAgIGlmIChtX3RleHR1
cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBH
Q0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZ
KQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAi
U2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9u
IGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOworICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8
IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0MzRGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Cisg
ICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIGJp
bmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9D
VUJFX01BUDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENvbnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNy
ZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNv
bXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVp
bnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICBnbEJpbmRG
cmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVy
ZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xPUl9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0
aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5h
bGZvcm1hdCwgMCwgMCwgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVp
Z2h0KCksIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIDApOworICAg
IGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICBnbEZsdXNoKCk7Cisg
ICAgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKK3sKKyAgICBhdXRvKiBjb250
ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFy
aW5nR0xDb250ZXh0KCk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xQaXhl
bFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICBnbFRleEltYWdlMkQoR0xfVEVY
VFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxT
aXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1f
Y29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3Jf
dGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFs
U2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfYW50aWFsaWFz
KG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQor
eworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJy
ZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKKyAgICAgICAgY3JlYXRl
Q29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQorICAg
ICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5Lmxv
Y2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9p
bnRlcm5hbFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAg
ICAgICAgICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRv
d25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFM
YXllci0+aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCpt
X3BsYXRmb3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBi
ZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3
aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZy
YW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJh
bWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0
b3IgYnVmZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5n
ZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9j
b21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFp
bnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4
dCkKKyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
K30KKyNlbHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRv
VGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJl
Y3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IG9wYWNpdHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkg
Y2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBi
YWNrIGFmdGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0
ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZh
Y2UuZ2V0KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CisKKyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5k
cmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1faW50
ZXJuYWxTaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOworfQorI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4ZDdjMWFlNWJjZjVjMGUxM2Q0NTZlODgxMDM1NTFm
ZmViYWVjMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1t
ZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5
IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRv
cmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9y
bUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIH5JbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxh
dGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0
dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUs
IEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxp
cFkpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVy
bmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lk
IGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0
Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWlu
dFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQ
dHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5
OworI2VuZGlmCisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFj
ZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9j
b21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7
IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlS
TykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OGMzZmJl
NTNjNGE1YzJiMDIxM2YxYjk1MWEyNTc1NzU0NmU4ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNv
bG9yLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5l
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1Q
TChJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikK
K3sKKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7CisK
KyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRl
X2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSk7Cisg
ICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGludGVy
bmFsU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihz
dXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVybmFsU2l6ZS53aWR0aCgpLCBp
bnRlcm5hbFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3Vz
ZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtd
KHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICBy
ZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
PihuZXcgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30K
KworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9J
TUFHRSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBs
YXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4m
IGxvb2tVcFRhYmxlKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgaW50IHN0cmlkZSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIHVu
c2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBz
dHJpZGUgKiB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xvZ2ljYWxTaXplLndp
ZHRoKCk7IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKKyAg
ICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigq
cGl4ZWwpOworICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVs
Q29sb3IucmVkKCldLCBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLCBsb29rVXBUYWJs
ZVtwaXhlbENvbG9yLmJsdWUoKV0sIHBpeGVsQ29sb3IuYWxwaGEoKSk7CisgICAgICAgICAgICAq
cGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFj
ZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdo
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjcyMDNhZjRmMTUyMmYzMzQwMzU2YzAxMjFmZjFlOTE2MzVhYmQ5ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJP
KQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQg
eworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXpl
JiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7
CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjph
cnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2
OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1
ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVT
RShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAi
UmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5j
bHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclBy
b3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZv
cm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEo
Y29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVy
RGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBs
YXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBS
ZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBC
dWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9z
aXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9y
U3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxj
YWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxO
aWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0j
ZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1
cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsK
LSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENB
SVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTJiY2U5YTk3NTk3NTBiMDYxNzQ2
MTExODFmNjJiMzczZDRmZDcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKQEAgLTAs
MCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBM
QVRGT1JNKEdUSykKKyNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9V
dGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1Vu
aXF1ZVB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9S
TShHVEspCisKK3N0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1
dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlm
ICghcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWludDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQo
ZGF0YSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsK
KyAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBib29sIGVuY29k
ZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZl
Y3Rvcjx1aW50OF90Piogb3V0cHV0KQoreworICAgIEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1p
bWVUeXBlID09ICJpbWFnZS9wbmciKTsgLy8gT25seSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBm
b3Igbm93LgorCisgICAgcmV0dXJuIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShp
bWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0cHV0KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30K
KworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPikKK3sKKyAgICBWZWN0b3I8dWludDhfdD4g
ZW5jb2RlZEltYWdlOworICAgIGlmICghaW1hZ2UgfHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1l
VHlwZSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGVu
Y29kZWRJbWFnZTsKK30KKworI2Vsc2UKKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJT
aXplKQoreworICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNv
bWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZl
bG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcu
aHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1l
VHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOworICAgIGlmICh0eXBlICE9ICJqcGVnIiAm
JiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlw
ZSAhPSAiYm1wIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhi
dWY+IHBpeGJ1ZjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBk
b2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRo
YXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgorICAgICAgICAvLyBjb21w
b3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBv
cnQgYWxwaGEuCisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7Cisg
ICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSkgeworICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAg
ICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAg
ICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNp
emUoc3VyZmFjZSk7CisgICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOworICAgICAgICAgICAgY2Fpcm9f
cGFpbnQoY3IuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihj
YWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNl
KSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0
eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmlu
ZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0
eSAqIDEwMC4wICsgMC41KSk7CisgICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4
YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0
YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0
YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZl
cihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0Zjgo
KS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7CisKKyAgICByZXR1cm4gIWVycm9yOwor
fQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1
ZU91dFB0cjxnY2hhcj4gYnVmZmVyOworICAgIGdzaXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFl
bmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOwor
ICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1
cm4gaW1hZ2VEYXRhOworfQorCisjZW5kaWYgLy8gIVBMQVRGT1JNKEdUSykKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWly
by5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDYWlyby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkZTMzYzdjYTA5NmNhZDg5MjI2MzczOWM3NWY5
NWIyMGZlZGMwMzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+
IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmluZGV4IDQ5NmVjYTMyNGQzZTRkYTIyZmNhNTk5
OThlYjVlZjVlZTczZDIwOWEuLjcyMmVlZmZlNmM5ZTVmZDI4NjZiZTI3Mjg3YTQ3MDIxMDBjYmZj
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTUwMCw3ICs1MDAsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxv
YXRSZWN0JiBkZQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlvblNpemUgPSBidWZmZXIuc2l6ZUZvckRl
c3RpbmF0aW9uU2l6ZShkZXN0UmVjdC5zaXplKCkpOworICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0
aW5hdGlvblNpemUgPSBkZXN0UmVjdC5zaXplKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAK
ICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzU2ZjE5NjRkMDk1NTJiZDFhMjdmYzBkMjI4
MDlkOGEzZGE2Yjc1Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDY1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cp
Ci0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3Qu
aCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0lt
YWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+
Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8
cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0Iz
MiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6
ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFn
ZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVm
ZmVyKTsKLQotc3RhdGljIEZsb2F0U2l6ZSBzY2FsZVNpemVUb1VzZXJTcGFjZShjb25zdCBGbG9h
dFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNraW5nU3RvcmVTaXplLCBjb25z
dCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCi17Ci0gICAgZmxvYXQgeE1hZ25pZmljYXRpb24gPSBz
dGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKSAvIGludGVybmFsU2l6
ZS53aWR0aCgpOwotICAgIGZsb2F0IHlNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpIC8gaW50ZXJuYWxTaXplLmhlaWdodCgpOwotICAg
IHJldHVybiBGbG9hdFNpemUobG9naWNhbFNpemUud2lkdGgoKSAqIHhNYWduaWZpY2F0aW9uLCBs
b2dpY2FsU2l6ZS5oZWlnaHQoKSAqIHlNYWduaWZpY2F0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAg
ICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkK
LSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsK
LSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NH
Q29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRH
ZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJG
QUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3Bh
Y2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAg
IGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0
Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0g
ICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VS
ZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5k
aWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01v
ZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1
ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxl
ZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nl
c3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3Mg
Y29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7
Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYg
Y29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQot
ICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNj
YWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBm
bG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgp
KTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciBy
ZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQp
LmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXpl
ID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJl
bmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAg
fHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJm
bG93PiB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVy
Zmxvdz4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50
IGludGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8
dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
KTsKLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsK
LSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVu
c2FmZUdldCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmlu
ZyA9IGZhbHNlOwotI2Vsc2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJh
dGVkKTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0g
ICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICAgICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0
U2l6ZSh3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0LnVuc2FmZUdldCgpKSk7Ci0gICAgICAgIG1f
ZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUs
IEludFNpemUodXNlckJvdW5kcyksIGNvbG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1
cmZhY2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQ
bGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQot
ICAgICAgICAgICAgICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0
UmVjdChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0g
ICAgICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNn
Q29udGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYg
YWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAg
IH0KLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0
YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9y
ZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAg
ICBpZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQo
IShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBV
U0VfQVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAg
IG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2Vu
ZGlmCi0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1f
ZGF0YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2lu
Z1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBt
X2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0
byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qp
IHsKLSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+
KGRhdGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0
IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1f
ZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJv
dmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRh
dGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAg
aWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNv
bnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4
dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAg
IGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQot
ICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VD
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJp
bmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdl
QnVmZmVyKCkgPSBkZWZhdWx0OwotCi1GbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0
aW5hdGlvblNpemUoRmxvYXRTaXplIGRlc3RpbmF0aW9uU2l6ZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gc2NhbGVTaXplVG9Vc2VyU3BhY2UoZGVzdGluYXRpb25TaXplLCBtX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZSwgaW50ZXJuYWxTaXplKCkpOwotfQotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17
Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEg
R0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBh
Y2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxT
aXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8g
SXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNh
biBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZl
ci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVz
KCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAo
bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRl
cygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6
ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQg
Y29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwg
YWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJl
IGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAv
LyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVz
ZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1
cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAg
IHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNv
bnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2Ut
PmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29u
dGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAg
ICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0
aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENH
SW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2Ug
JiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMu
d2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwg
Ym91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0
cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUgbG9naWNh
bFNpemUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1h
Z2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCks
IGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNv
bG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAg
IENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsK
LSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxv
YXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VT
aXplSW5Vc2VyU3BhY2UgPSBzY2FsZVNpemVUb1VzZXJTcGFjZShsb2dpY2FsU2l6ZSwgYmFja2lu
Z1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXplKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNl
clNwYWNlKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGlmICghaW1h
Z2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRt
YXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUo
KSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNj
YWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
OjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIs
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBp
bnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBs
b2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFj
a2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAg
ICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7
Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5r
SW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dp
Y2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi1SZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNl
KQotICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3Vy
ZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxz
ZQotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewot
ICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRh
LmRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAg
ICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRl
SW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1
ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0g
aW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLmdldCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBv
cHRpb25zKTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KTsgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAg
ICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQu
ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAg
ICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkg
Ly8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAg
ICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JS
ZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAg
ICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4g
Y29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAg
SW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFy
cmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
LmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYg
KGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQo
KTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291
cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KTsKLSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGlt
YWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUlt
YWdlKCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxS
ZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdS
ZWYganBlZ1VUSSgpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lO
KQotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJs
aWMuanBlZyIpOwotI2VuZGlmCi0gICAgcmV0dXJuIGtVVFR5cGVKUEVHOwotfQotICAgIAotc3Rh
dGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICAvLyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVz
ZSB0aGUgQ29yZVNlcnZpY2VzIHZlcnNpb24/Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVy
biBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhy
ZWFkc2FmZS4KLQotICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhl
IHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVU
SSByZWxpYWJseSBpcyBmb3VuZC4KLSAgICAvLyBGb3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBK
UEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+LgotICAgIHN0YXRpYyBj
b25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBz
dGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2
ZS5naWYiKTsKLQotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgImltYWdlL3BuZyIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZVBORzsKLSAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9qcGVnIikpCi0gICAg
ICAgIHJldHVybiBqcGVnVVRJKCk7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlR0lGOwot
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0jZW5k
aWYKLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJp
bmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0
YSkKLXsKLSAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlv
bkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOwotICAgIGlmICghZGVzdGluYXRpb24p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+
IGltYWdlUHJvcGVydGllczsKLSAgICBpZiAoQ0ZFcXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVh
bGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8v
IEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0
aW9uLgotICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJD
cmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5
KSk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNv
bXByZXNzaW9uUXVhbGl0eTsKLSAgICAgICAgY29uc3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lv
blF1YWxpdHkuZ2V0KCk7Ci0gICAgICAgIGltYWdlUHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0
aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2Fs
bEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykpOwotICAgIH0KLQotICAg
IC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRDb2xvciB0byBibGFjayBm
b3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCi0g
ICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdv
cmsuCi0KLSAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwg
aW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7Ci0gICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5h
dGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKLX0KLQotc3RhdGljIFN0cmluZyBkYXRh
VVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIFZlY3Rv
cjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRh
dGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJk
YXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1zdGF0aWMg
VmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKLXsKLSAgICBWZWN0
b3I8dWludDhfdD4gZGF0YTsKLSAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0
YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKLSAgICByZXR1cm4gZGF0YTsKLX0KLQotU3Ry
aW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0
eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQo
KSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1p
bWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJu
IGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRy
PENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAg
ICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBB
U1NFUlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1
YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlm
ICghcHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNh
bFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChw
cmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHBy
ZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlm
ICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JH
QkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxw
aGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmlu
Z0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEg
fHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAg
ICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBp
bWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5h
bFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXpl
KCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAg
IENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dp
Y2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxv
YXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShsb2dp
Y2FsU2l6ZSgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENH
UmVjdE1ha2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5V
c2VyU3BhY2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0g
ICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9y
RGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQo
KSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJl
Zj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAg
ICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBB
U1NFUlQodXRpKTsKLQotICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0lt
YWdlQWxwaGFMYXN0OwotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5k
YXRhKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgo
KSAqIHNvdXJjZS5oZWlnaHQoKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOwotICAgICAgICB1bnNpZ25lZCBjaGFy
ICpidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IGRhdGFbaSArIDNdOwotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OwotICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OwotICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1Owot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0
YVtpICsgMF07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOwot
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9u
ZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgICAgIGRhdGEgPSBw
cmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAgfQotCi0gICAgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwot
ICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhE
YXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOwot
ICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwg
a0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5n
ZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLQotICAgIGF1dG8g
Y2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxp
dHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJu
IFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkK
LXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkp
KQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0
dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0
YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFs
aXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29u
c3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGZsdXNoQ29udGV4dCgpOwotICAgIHJldHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjNkOWVkZDBlZjUxZjM4NDFhYzU4YzhiNjFlMTVjZTJkNGE1Y2Y3
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KCkKK3sKKyAgICBj
b250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7CisgICAgY29udGV4dCgpLnRyYW5zbGF0
ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmlj
ZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdl
LCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCit7CisgICAgaWYgKGltYWdlICYmIChDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndp
ZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4o
aW50ZXJuYWxTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VD
cmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXpl
LndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9
CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXplIGlt
YWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNp
emVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2
ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNl
cnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdl
ID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dp
Y2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50
b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJ
bWFnZSgpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAg
c3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlC
YWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0
LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBz
cmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNv
cHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBE
b250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIAor
ICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAg
IEFTU0VSVCh1dGkpOworCisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOworICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZF
cXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2
ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0
b3Agb2YgYmxhY2suCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwg
bG9naWNhbFNpemUoKSksIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgICAgICBpZiAo
IXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAg
ICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxT
aXplKCkuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJl
bXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOworICAgICAgICBhdXRvIGRhdGFQcm92
aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVt
dWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAo
IWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlt
YWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNh
bFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhh
Tm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8
IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAg
ICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxT
aXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgp
LmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0
U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBD
R0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNh
bFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7CisgICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXpl
KCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAg
ICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0
KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0
YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFn
ZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRh
ID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQor
ICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9Owor
fQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRh
KG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAgICAgICByZXR1cm4g
ZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9
CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtl
VkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiByb3dzLCBjb25zdCBJ
bnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVmZmVyOworICAgIAor
ICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50Pihz
aXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1h
Z2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOworICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9
IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZlci5kYXRhID0gcm93czsKKyAgICByZXR1cm4g
dkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNj
ZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBk
ZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RD
b2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBj
aGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsg
MiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNy
YywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZv
cm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4
KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9y
Rm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4
KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQp
IHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQ
ZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVs
cygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jv
d3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBk
ZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFG
b3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZv
cm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNB
bHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0
QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywg
c2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9
IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJ
bWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0
Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZv
cm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3Jt
YXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhYjdhNzQ2OTMzZGQx
ZDI3NzY4Y2E0NDhlYThmYzYxZmE0MWU3NDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFn
ZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgor
ICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2lu
Z1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7
CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVy
QmFja2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250ZXh0KCk7CisgICAgdmlydHVhbCBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7CisKKyNpZiBVU0UoQUND
RUxFUkFURSkKKyAgICB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9y
bWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJ
bnRTaXplJikgY29uc3Qgb3ZlcnJpZGU7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kM2Y3M2NmYjgwMTRlNzBkNzUzZGE1OWFmMjQ4YTU2MzMwNGY0Mjc1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENH
KQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAi
SW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCitjb25zdGV4cHIgY29uc3Qg
Q0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKKyNlbHNlCitjb25zdGV4cHIgY29u
c3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRMYXN0OworI2VuZGlmCisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1
bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5h
bFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRh
dGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7
CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW50ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1Bl
clJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNT
RVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXpl
X3QgbnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2
ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8g
Y2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxT
aXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hl
ZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAo
IWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQg
PSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNv
bnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAg
ICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3Jl
YXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RGTW92ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNv
bnRleHQpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3Zp
ZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJ
bWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3Zp
ZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRl
eHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7
CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBo
aWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAor
eworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJl
aGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBD
b3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRD
cmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKyAgICAKKyAgICBjYXNl
IERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3Jl
YXRlKAorICAgICAgICAgICAgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUu
aGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xv
clNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5n
ZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9C
R1JBRGF0YSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogbV9sb2dp
Y2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBkZXN0Qnl0ZXNQZXJSb3cg
PSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50OF90Kj4obV9kYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3Vs
dC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEltYWdlQnVmZmVy
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX2RhdGEpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MGFhOTY2MzEzYzljM2E4MGEwMWViYzhmMDFiMGUzZDRmMTE1
ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1Ymxp
YzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZTsKKyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4m
Jiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBi
eXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53
aWR0aCgpOyB9CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdS
QTsgfQorI2VuZGlmCisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVBy
b3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgi
Ci0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3Vy
ZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3Nw
aS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3Ig
dGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0j
ZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0
KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAg
ICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
U3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2Vz
IGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4
KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBy
ZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFn
ZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVz
dC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JB
LiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0
IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZv
aWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlu
cHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0
KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNy
Yy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5
dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9IGlucHV0OwotCi0gICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdo
dCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0
YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQp
OwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAg
ICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5v
dCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3
aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRh
dGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdo
dCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAg
YXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4
X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAg
aWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8
aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1h
eFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2Fm
ZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgp
KQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJl
Y3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3Jp
Z2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0g
ICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53
aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRo
KCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRo
ID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAg
ICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7
Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAg
ICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBk
ZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBv
cmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5
IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWln
aHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHgg
KiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlm
ICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQ
ZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAg
ICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0
KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0
OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93
Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93
czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1
dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAg
ICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlz
IGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9
IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNl
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVH
ZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNS
b3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3Vy
ZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsK
LSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBz
cmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdo
dC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5o
ZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYg
KG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
Ci0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRv
IFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3
aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAg
ICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdl
dCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVu
c2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7
Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAg
ICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dz
W2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVH
ZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VS
ZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3Vy
Y2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQ
b2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQo
KSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6
ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBB
U1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0g
ICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291
cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lk
dGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgp
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8
aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NF
UlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgp
IDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwot
ICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgp
KSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBz
aXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0Lmhl
aWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAg
ICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAg
ICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3Jj
Qnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNj
ZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7
Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAo
ZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3Jj
LnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0
X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAg
ICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5y
b3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RS
b3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBk
aWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3Nb
YmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNy
Y1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBp
ZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3Mg
KyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElP
U3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0
ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAq
IGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdl
dCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3Jj
LmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dC
eXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0K
LSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZy
b20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vs
c2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Vp
bnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xv
clNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVy
UmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJ
bnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0g
ICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBu
dWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7
Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NmE1ODE5N2Q2MzhlODkyMDU2
YjFmNDU2ZDc1ZTU1Mzg5ZjlhYjJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRl
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNp
emUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJl
c29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1T
aXplKCk7CisgICAgaWYgKGludGVybmFsU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8
IGludGVybmFsU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29s
dXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50
ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29u
dGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJl
Y3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYm
IHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RG
TW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRl
eHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNz
Q29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hD
b250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0
KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3Np
emVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBD
b2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0
KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RC
eXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
Km1fc3VyZmFjZSk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworCisgICAgY29weUltYWdlUGl4ZWxz
KAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBDb2xvckZv
cm1hdDo6QkdSQSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRl
c1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0pIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJy
YXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkK
K3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9j
a2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50
LCBjb29yZGluYXRlU3lzdGVtLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAgIC8v
IEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxh
aW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9h
dFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMzNlYTQ2MWJhNjU3NmMzYTg2NDE2NDBmNjI2NzEwYzk0MmY4NzAx
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2Vu
ZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSU9TdXJmYWNlOworCitj
bGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1
bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpOworICAgIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4
dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0
aXZlSW1hZ2UoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsgICAgCisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIChVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTBkYjUw
MWFjOTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uZDA5MTM5ZjAxYmQzMzZmMjg0OGFlYTUyNmE0Zjlm
ODAwZWU3ODVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDE4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oIgogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5j
bHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkK
KyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTQxLDQgKzUyLDE0MCBAQCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91
Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAgICByZXR1cm4gKih1
aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCit7CisjaWYgIVBM
QVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9
IENGU1RSKCJwdWJsaWMuanBlZyIpOworI2VuZGlmCisgICAgcmV0dXJuIGtVVFR5cGVKUEVHOwog
fQorCitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJu
IFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyNlbHNlCisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJl
YWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUg
c3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJ
IHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQ
RUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCisgICAgc3RhdGljIGNv
bnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOworICAgIHN0
YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZl
LmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBl
LCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOworICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKKyAgICAg
ICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNh
c2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1VUVHlwZVBORzsKKyNlbmRp
ZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0
aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCit7Cisg
ICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVBy
b3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYg
KnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0
aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAg
ICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAg
ICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lv
blF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5
LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNy
ZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywg
JmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0
aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcg
aW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGlu
IHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorICAg
IENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1h
Z2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxp
emUoZGVzdGluYXRpb24uZ2V0KCkpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4g
Y2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBh
dXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NF
UlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdl
QWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRh
KCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENG
RXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhh
dmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24g
dG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNl
cnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICB1bnNpZ25lZCBjaGFyKiBi
dWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRh
dGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OworICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OworICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtp
ICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNr
aXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGRhdGEgPSBwcmVt
dWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOworICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAg
IGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
aW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWln
aHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NH
Qml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQo
KSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAp
KTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHks
IGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdU
Rk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAg
YmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRh
KSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0
LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQor
eworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkp
CisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1
cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVm
IGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZChD
RkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKKyAgICBy
ZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkK
K3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkp
KQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlhYmQxZmI4M2FiMzFhMTE1YzY4OTUwNDkx
ZDQxOTU1Mi4uODRjNTdkMmZlZTkzMzhlZDVlMGVmYzRhOGUzMzY1YTE5YTgwMjA0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjUsOCArMjUsMzEgQEAKIAogI3ByYWdtYSBvbmNlCiAK
KyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVy
U2l6ZSk7CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdVVEkoKTsKK1JldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CisKK2Jvb2wgZW5j
b2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworVmVj
dG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRh
KGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShD
RykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRv
Y3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERG
RG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggODBmNmIxODcyNTIyOTY4ZWE3ZDk1NzZiN2UwMDU2MzMz
MjU4ODIzYy4uMjgyMWVmODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmViMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
ICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NHUERGRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQ
SS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1JBTVNpemUu
aD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCmluZGV4IDI0M2M0OGI5NTFiMTc0YjZi
MjRiYWM1MzY0YzlhMDRmZjk2OWNkYjMuLjRjYzBmYTNmNzk3MjdlYjlkZWVkYzRhZDBlMTE3MzRk
YWIyMTRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oCkBAIC0xMDAsMTAgKzEwMCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNlUmVm
LCBDR0NvbG9yU3BhY2VSZWYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2UoQ0dJbWFnZVJlZik7CiAgICAgCi0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4pOwotI2VuZGlmCi0KICAgICBXRUJDT1JFX0VYUE9SVCB+SU9TdXJmYWNlKCk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBtb3ZlVG9Qb29sKHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IGMyMTI1YzNlZjE2MGMwODEwMTA5ODIzYjRi
OTAzNmRkZjZmYmNmNjcuLjM5MWZjMjNjZDBhOGY4NjlhY2MxMDczMmQxNGZkZjQ1MGZjMjg1NTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3Vy
ZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW0KQEAgLTMzLDcgKzMzLDYgQEAKICNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKICNpbXBv
cnQgIklPU3VyZmFjZVBvb2wuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0ICJJ
bWFnZUJ1ZmZlckRhdGFDRy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUGxhdGZv
cm1TY3JlZW4uaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC0x
MTAsMTMgKzEwOSw2IEBAIHZvaWQgSU9TdXJmYWNlOjptb3ZlVG9Qb29sKHN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKICAgICBJT1N1cmZhY2VQb29sOjpzaGFyZWRQb29sKCku
YWRkU3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKTsKIH0KIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi1zdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBJT1N1cmZhY2U6
OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyKQotewotICAgIHJldHVybiBXVEZNb3ZlKGltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFj
ZSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIE5TRGljdGlvbmFyeSAqb3B0aW9uc0ZvckJpcGxhbmFy
U3VyZmFjZShJbnRTaXplIHNpemUsIHVuc2lnbmVkIHBpeGVsRm9ybWF0LCBzaXplX3QgZmlyc3RQ
bGFuZUJ5dGVzUGVyUGl4ZWwsIHNpemVfdCBzZWNvbmRQbGFuZUJ5dGVzUGVyUGl4ZWwpCiB7CiAg
ICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAy
OGUyNjQ0ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi4yYzY3N2Y2YjczNmU3NTJl
NDFmOGIzZjI0MzQ3NmQ0NTA4NDI0MzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMTc3
LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbGlzdFtpbmRleF0uZ2V0KCk7
CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xl
YXIoKTsKICAgICB2b2lkIHJlbW92ZUl0ZW1zRnJvbUluZGV4KHNpemVfdCk7CiAKICAgICBzaXpl
X3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQpAQCAtMjUxLDYg
KzI1MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29k
ZXImIGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFt
JiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0gLy8gV2ViQ29yZQotCi11
c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERy
YXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZjFjZTI3MzU0
NTBiZGFjM2JiZGYxMWEzMDg1ZDlhN2YzYzllMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5n
Q29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNv
cmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlM
aXN0IHsKKworY2xhc3MgRHJhd2luZ0NvbnRleHQgeworcHVibGljOgorICAgIERyYXdpbmdDb250
ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpCisgICAgICAgIDogbV9jb250ZXh0KFsm
XShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgeworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlz
dCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBB
ZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIH0pCisgICAgeworICAgIH0KKworICAgIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0Nv
bnRleHQmPigqdGhpcykubV9jb250ZXh0OyAgfQorICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlz
dCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlz
cGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlz
cGxheUxpc3QqIHJlcGxheURpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXlEaXNw
bGF5TGlzdC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShi
b29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgIHsKKyAgICAgICAgbV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAgICAgICBtX3JlcGxh
eURpc3BsYXlMaXN0LnJlc2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwbGF5RGlzcGxh
eUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICgh
bV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBSZXBsYXllciByZXBsYXllcihkZXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAg
IGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNw
bGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAg
bV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0Nv
bnRleHQgbV9jb250ZXh0OworICAgIERpc3BsYXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBtX3JlcGxheURpc3BsYXlMaXN0OworICAgIGJvb2wg
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07Cit9OworCit9IC8vIERpc3BsYXlM
aXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMx
NzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLmFmM2FhZGUyYTMzMmNjMTBhOTYxM2YyMTI2MTcx
N2RkMWQ4NThiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjg2LDEzICsyODYsMTUgQEAg
dm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXN1
bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdp
b25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3Qg
aW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJ
bnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3Vs
dEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURp
bWVuc2lvbnMpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOwog
ICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPGZsb2F0
PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKIAorICAgIEludFNpemUgcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBwaXhl
bEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1bHRJbWFnZS0+cmVzb2x1dGlvblNjYWxlKCkpOwor
CiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktO
T1dOOgogICAgICAgICBicmVhazsKQEAgLTMxMSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRy
aXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAg
IHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQ
b2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQXJyYXksIGltYWdlUmVjdC5zaXplKCksIGlt
YWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXgg
MjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMjVkNTdhZjA2YzAxYTdj
NzhhN2ZiOTQ3ZDQwNTgwMDRlYTcxNzJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMTAwLDEz
ICsxMDAsMTMgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAK
ICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2
b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9p
bnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJy
YXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzaGFkb3dBcmVhLCBu
dWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAg
YXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLCBDb29yZGluYXRlU3lzdGVt
OjpCYWNraW5nU3RvcmUpOwogICAgIGlmICghc3JjUGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRh
KCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7CiAK
LSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJl
YSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0p
OworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXksIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dB
cmVhLCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtOjpCYWNraW5nU3RvcmUpOwogCiAgICAg
cmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNv
dXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCA0
OWU4YzVhMjZlNzcxYzQyNDk2NzgxOTUyN2E1NjI3MzUzZGY0NDk2Li5kZDM1Y2M2NWIxMzdkODIy
YzcwMTUzMmRhYmQyNDkwMDRiZjJhOWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7CiAgICAgRmxv
YXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0
ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFVuYWNjZWxl
cmF0ZWQgfTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQgfTsKICAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5
NzJiNTkwZmEuLjVjOGIzYjRkZTBhZmE3MTQ1OGNkY2Y2YzZiYzBmZmQyY2NiZDE0MzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlckVmZmVjdC5jcHAKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZm
ZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJ
bnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRl
QXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3Qs
IEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAg
IGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3VubXVs
dGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7
CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBk
ZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3Rp
bmF0aW9uLCBjb25zdAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAg
ICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAg
ICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwor
ICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAg
ICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5h
dGlvbiwgY29uc3QKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAg
ICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAg
ICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1h
Z2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsK
KyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFiNWEwZDUwZjhjZTFhYWY2NTM1ZGVlYzk0MGI4NWRjNTUxN2U0YjEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
Ci0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgot
I2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgot
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0
YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdj
aGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKLXsKLSAgICAvLyBMaXN0IG9mIHN1cHBv
cnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1l
bnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0
YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZl
cnYKLQotICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2Ui
KTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0
aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7Ci0gICAgaWYgKHR5cGUgPT0g
ImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwu
IFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEg
UG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBp
bWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgotICAgICAgICBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOwotICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKLSAgICAgICAgICAg
IG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAgICAg
IENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9oZWlnaHQoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJ
bnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOwotICAgICAgICAgICAgbmV3
U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1B
VF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBSZWZQ
dHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkp
OwotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNl
LCAwLCAwKTsKLSAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLSAgICAgICAgfQot
ICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3Vy
ZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fp
cm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOwotICAgIGlmICghcGl4YnVmKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAg
aWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFs
aXR5IDw9IDEuMCkgewotICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVt
YmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOwotICAgICAgICBn
ZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwg
JmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0
eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0
cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5V
TEwpOwotCi0gICAgcmV0dXJuICFlcnJvcjsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0
YSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGltYWdlRGF0YS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRE
YXRhOwotICAgIGJhc2U2NEVuY29kZShpbWFnZURhdGEuZGF0YSgpLCBpbWFnZURhdGEuc2l6ZSgp
LCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2
NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0Rh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25z
dAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVm
ZmVyOwotICAgIGdzaXplIGJ1ZmZlclNpemU7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBidWZmZXJTaXplKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0g
ICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotICAgIHJldHVy
biBpbWFnZURhdGE7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5j
cHAKaW5kZXggNGM0YzQyNjk2MTI3MWM3YjdhMTlkMjk2YTk0MDBlZmRjMGZhYzlhZS4uNzU3MDAz
YjFmMTFkZjRiMjc2NmI0MDllODIyY2Q4YjQyMGZiNGE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAv
Tmljb3NpYUdDM0RMYXllci5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBHQzNETGF5ZXI6OnN3
YXBCdWZmZXJzSWZOZWVkZWQoKQogICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0Lm1f
Y3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKICAgICBUZXh0dXJlTWFw
cGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEg
PyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMDsKICNpZiBVU0UoQU5HTEUpCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpj
cmVhdGUodGV4dHVyZVNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAppbmRleCA3ZDJjZWZkNjI2MWRlZTJh
MzlhODlkMTAxNzAyZWI1MDI1MmY0ZjVlLi5mMDM5MTM4MDYwZDM0NDM0ZTZjZGRiZjk2ZWE2NGMz
MDFhNjM1NTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgQml0
bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYsIEdyYXBoaWNzTGF5ZXIq
IHNvdXJjZUxheWVyLCBjCiB7CiAgICAgLy8gTWFraW5nIGFuIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkIGJ1ZmZlciBoZXJlIGlzIE9LIGJlY2F1c2UgdGhpcyBjb2RlCiAgICAgLy8gaXNu
J3QgdXNlZCBieSBhbnkgcGxhdGZvcm1zIHRoYXQgcmVzcGVjdCB0aGUgYWNjZWxlcmF0ZWQgYml0
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZSh0YXJnZXRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAg
ICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4
IGNhMTFiYjhiYTBiMTkxMGM2Mjc5NjdkNGQyNjBiMDRjNjg0ODY3MzEuLjVhYzlkNjYwNmM0MjIx
MjQ4YmM0MWRlOTM4OWNlNWM4N2U0YTQxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgsNyAr
NDU4LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZl
cigpIGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
Y2FwdHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDViOTFiMjY4NmFl
MjYxZWI1M2MwNjg5YmVlYzYyZjU1ZTNmYjQ1OC4uOGY1MGU1NzU3MWQ3YjM4NTAwZWVkN2JjZGE2
YjNhNjQyYWJmNzk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CkBAIC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWlu
dGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0g
ICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQo
KSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5idWlsZEZp
bHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5z
ZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVu
ZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4NjNj
MWVkMmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFjNjE1MjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0xODEsMTQgKzE4MSwxNCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSog
aW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBw
ZWRJbnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0
ZXJTaGFwZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsK
ICAgICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRp
dGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGlj
c0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAg
ICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmlt
YWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkp
OworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1
ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3Ro
ID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZz
ZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAKaW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3N2I2
M2M2ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApA
QCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNs
aXBwaW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hv
dWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJl
IHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRl
eHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFza0lt
YWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3Qs
IGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29u
dGV4dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0Ojpj
cmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3Bh
Y2U6OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAgICAg
ICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNl
RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0MzE2
MWIuLjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhlODAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6
YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBl
ZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwog
ICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNv
bHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5k
ZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVk
IDogVW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5k
ZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRv
IHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihm
aWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6
OkxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFw
aGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMo
JnJlbmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMK
ICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29s
dXRlVHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdy
YXBoaWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIg
PSBudWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9u
ZVxuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0Y2Zj
MDIyYjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4Mjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
UmVzb3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3Vy
Y2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJl
bmRlCiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3Zn
U3R5bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJ
bnRlcnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xvclNw
YWNlOjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICAvLyBGSVhNRSAoMTQ5
NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNr
aW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9y
bSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tlckRh
dGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6
VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFza0lt
YWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL1NWR0ltYWdlLmNwcAppbmRleCBiODIxNDExYWRlNzc1MDg1NjE2ODg1NmVkMjJiNjJlYTZi
NWNkM2Q5Li45Nzg2N2FhZDNjMjdiNWI1MzhkM2E3OWZiNDk1ZGRkNGYwZjQzZDkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBAQCBO
YXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3Qg
R3JhcGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBDYWly
byBkb2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywgc28gaXQncyBPSyB0
byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtl
TGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCA1MzI2NzhmMzc2
MDMzYzNjMDBmOWY2YmQ1YTMwYzM4NjkwZTMzNGJmLi4wYWI5MjAxNjI0ZTg2MGEwZDljYzBmMDcx
OWZhNjMxNWYyZjE1NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAgc2V0
KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V2ViS2l0X0RFUklWRURfU09VUkNF
U19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAgIiR7V0VCS0lUX0RJUn0v
R1BVUHJvY2VzcyIKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAgICAgIiR7V0VCS0lUX0RJ
Un0vTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CmluZGV4IGVkZmI2ZTFlMDVlNTY0MDA4YjdkNTdhODc0NTM3OGM0M2Q2NmNmOTYu
LjdhNTIxNDI1ZmY5MzE3MmI1YWI3ZTFkYzI0MjBhZmU2NWM5NzZmNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE1LDYgKzE1LDggQEAg
JChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVND
UklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
bWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgog
JChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
ci5tZXNzYWdlcy5pbgpAQCAtMTAyLDYgKzEwNCw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvQ2FjaGUvV2ViQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25Ub1Nl
cnZlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9GdWxsU2NyZWVuL1dl
YkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
TGliV2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQ
VS93ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29kZWNzLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCBkZmJjMGVmZTZiODQ3
MjZmOTZjODk4MjhjZDgzZDBlZDc1OTA1YTA2Li45MGQ5MTExZmQxMGU4NjM0NWI3ZWY0ZmY1M2Ix
NTlhMGMzMTJjYWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QKQEAgLTEyMCw2ICsxMjAsMTIgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJvY2Vzc1Byb3h5TWVzc2FnZXNSZXBsaWVzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlc1JlcGxpZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eU1lc3NhZ2VzUmVwbGllcy5oCkBAIC0xNDIsNiArMTQ4LDkgQEAgJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXJN
ZXNzYWdlc1IKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlcy5o
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdl
c1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXNSZXBsaWVzLmgKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMubWFrZQppbmRleCBlMjkwOTMwOTdjZDliZGViMzQ1YTE5YTVkMzdmZTU3YTU0
MGRlYjcwLi44Yzc1M2QxNmY0MGRmZGRjZmUxNzQ1YmFhNWZlNTliZjI5Njg3N2U0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yNSw2ICsyNSw3IEBAIFZQQVRIID0gXAogICAgICQo
V2ViS2l0MikvR1BVUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21hYyBcCiAg
ICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21lZGlhIFwKKyAgICAkKFdlYktpdDIpL0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL3dlYnJ0YyBc
CiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3Jr
UHJvY2Vzcy9Db29raWVzIFwKQEAgLTUyLDYgKzUzLDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJL
aXQyKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3Mv
R1BVIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21lZGlhIFwKKyAgICAkKFdlYktp
dDIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvV2Vi
UHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvSWNvbkRhdGFi
YXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFDYWNoZSBcCkBAIC0xNDAsNiAr
MTQyLDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1Z2luUHJvY2Vzc0Nvbm5lY3Rp
b25NYW5hZ2VyIFwKICAgICBQbHVnaW5Qcm9jZXNzUHJveHkgXAogICAgIFBsdWdpblByb3h5IFwK
KyAgICBSZW1vdGVJbWFnZUJ1ZmZlciBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBcCiAg
ICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBcCiAgICAgUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSBcCkBAIC0xNDcs
NiArMTUxLDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUmVtb3RlTWVkaWFSZWNvcmRl
ck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyIFwKICAgICBSZW1vdGVP
YmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IFwKICAgICBS
ZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yUHJveHkg
XAogICAgIFJlbW90ZVdlYkluc3BlY3RvclVJIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA2MjBiNDFmMjhk
NjY3NmEzZGUxN2Y0NzZiMmRmMzg4ZmZmNjQ3NzBkLi5hMzcxY2YyM2RhNzdmYTc2ZTNlNDAzZGRj
MmQzYWRiNjYxOTAxYzQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0xNjAsNTIgKzE2MCw2OCBAQCBMaWJX
ZWJSVENDb2RlY3NQcm94eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bGliV2ViUlRDQ29k
ZWNzUHJveHkoKQogfQogI2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZy
b21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCku
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAg
dXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90
ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBsaWJXZWJSVENDb2RlY3NQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9p
ZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVl
X3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9u
LCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiBy
ZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09
IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVj
ZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlF
bmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHko
KS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
LCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1l
c3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rl
ciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoKnRoaXMsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVy
aW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOwor
ICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+cmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCmluZGV4IGY0ODU5NjRkNDZjNTJlMzM4ZDJhYmU0Zjc2NWRkY2I1YTk0YTA3
OTAuLjAyNzAzN2ZlOTk0NjQwOWYwNmMyM2JmNmNlY2QzNzg1M2E1NmU3YjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApA
QCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdl
c1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNs
dWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
aCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAj
aW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5j
bHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCkBAIC00NywxOCArNDksMjAgQEAgY2xhc3MgVXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXJQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDog
cHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpD
b25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRp
ZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBQQUw6OlNlc3Npb25JRCk7CiAgICAg
dmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogCiAgICAgSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVz
c2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2VzcyYgZ3B1UHJvY2VzcygpIHsgcmV0dXJu
IG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdl
YlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmll
cjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVuc2lvbihGdW5jdGlvbjx2b2lkKCk+JiYp
OwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0gICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50
aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXImIHJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXImIGxvZ2dlcigpOwpAQCAtNzcsMTQgKzgx
LDIxIEBAIHByaXZhdGU6CiAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZv
aWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZl
SW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVz
c2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFs
OwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5h
bDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAKICAgICBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsK
IAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVjdGlvbjsKICAgICBSZWY8R1BVUHJv
Y2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2Fn
ZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2Vi
UHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eT4gbV9yZW1vdGVNZWRpYVBsYXllck1h
bmFnZXJQcm94eTsKQEAgLTk2LDYgKzEwNyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09D
T0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVj
c1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2Fn
ZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMy
YzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
IAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lk
IENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdC
YWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3MGY0MjJjM2U0Njkz
YTAxMjg5ODE4YTFjMzI5NDRlZGNmMzNkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VC
dWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2
ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpCit7CisgICAgaWYg
KGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VS
ZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
ci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0
KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlv
bigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSBoYW5kbGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxlKSksIG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQo
Y29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0
KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0
Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM2
OGI2MjY0ZmQxMGFkNDMxN2VlNGYzZjZkNjgzNGVkNTcxZjA2NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2
YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAg
IElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAg
dm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSk7CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAg
dmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRp
ZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMGFlNzhlMmNlNGFi
OTUxOWI2NWFiODRiNGQ3MmRkZWI1ZWM5NThjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90
ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQo
V2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6Oklt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2ZlNGUxZTNhZDUyMTg1NDVjOTUxZjZjYzE0Y2Zl
NmQwZGYxZGVmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAg
KzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDogcHVi
bGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIg
PSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBC
YXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVy
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4g
QmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0
ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAg
ICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRy
PEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNr
ZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJlbW90ZUNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2Vu
ZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2Vu
ZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRs
ZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25z
dCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVw
bGF5ZXIoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOwor
ICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXI6OmZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kYTUwZDdlZjcwYWQzZDk4MDZk
Y2Y2Njk0NWJlYmQ5ZmQzNzI5MmQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5
LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAi
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHk8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kPjsKK3VzaW5nIFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5
ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxNzBiMzMwNzAzZTBjZGY1MjQ4M2VkNjEy
NmMyYzAwMmE0YzQ2MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0w
LDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdl
YktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVh
dGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+
KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAg
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAg
aWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3Nh
Z2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7
CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRf
dCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJ
bnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAo
bV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
YXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAg
IHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7
CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6UmVtb3RlOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShp
bWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVs
ZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVj
ZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlu
cyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGlt
YWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTkzOGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3
ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VT
ZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25u
ZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVp
bnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZv
aWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUlt
YWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZl
ck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFw
OworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUy
NmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3Jl
YXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29y
ZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0
OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3Jp
cHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVz
c2FnZXMucHkKaW5kZXggY2VmZjNjMjYwNWExZjg1ZDVkOTkwYTY0YzNmMjgyMDNkMTE1MjMyMC4u
MzE0MDQ3OGY0MTdkMGNmZTBkMzA0YTg4MzQ3YWU1YTQ3NGVjYmZhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMK
IGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUg
PSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAn
V2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2Fj
eVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNv
dW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiAr
MjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAn
U3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAg
ICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElk
ZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVz
X3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBh
Z2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdX
ZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjE4LDEwICsyMjIsMTQgQEAgZGVm
IHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNv
cmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNv
cmU6OlNXU2VydmVyQ29ubmVjdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rp
dml0eVN0YXRlQ2hhbmdlSUQnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisg
ICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJp
dmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVy
JywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAg
ICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0Vu
Y29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVy
JywKQEAgLTc2MiwxMyArNzcwLDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVj
ZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5k
KG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdl
cyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklC
VVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlcilcbicg
JSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRl
KExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBw
ZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVG
Q09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICBy
ZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3Ig
bWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJp
YnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlc
bicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAg
ICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJl
Y2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzc3LDEzICs3ODgsMTYgQEAg
ZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQu
YXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3Nh
Z2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRS
SUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlm
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAn
JykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZl
ci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVj
ZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlm
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUp
OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDg0ZDQzOWM1MDU0MDRiN2U1OTA1YjM2ZTdk
ZWM3Njg5ZGRmYTk0NTQuLjA5YTE0MmVmYzA1MTJiZDVkYWE0NDA0NThhYjM3NzMyMzdhZTFmZmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0y
Niw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtMzYsNiAr
MzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Ob3RpZmljYXRpb25EaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jl
YWx0aW1lTWVkaWFTb3VyY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU2VydmljZVdvcmtlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yZWRDcmVk
ZW50aWFsc1BvbGljeS5oPgpAQCAtODAzLDYgKzgwNSwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1l
c3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAg
ICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3Ry
dWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0
QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisg
ICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0
IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDMwNmNk
MWU2OTM1NjYxYWQ0MWMwNjA5Mjg0OGJmOWFmMzZiMWI3MjYuLmJiMWZlYzJhYTYxNzcwOTZiMzQy
YzAzNTkwMGJiMmFlZjFhODY1NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dApAQCAtMzEsNiArMzEsOCBAQCBHUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuY3BwCiBHUFVQcm9jZXNzL21lZGlh
L1JlbW90ZU1lZGlhUmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVz
b3VyY2VMb2FkZXIuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyLmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNw
cAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUxNCw2ICs1
MTYsOSBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUuY3Bw
CiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCiBXZWJQ
cm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIEBuby11
bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNwcAor
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyLmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAK
IFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJpdmF0ZS5jcHAKIFdlYlByb2Nl
c3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVyUHJvdmlkZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQKaW5kZXggMDg3NmFkZDEzNTQzZWU4ZmNlZWJhNjM1YmE5OTkzNmVkN2M4NmM1Ni4uNjMwZDBj
NDk2NGY5NzQzMzcwYmEyOTY2ZDM5OGUzMTA3OWYzNmYyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4
dApAQCAtNTUxLDYgKzU1MSw4IEBAIFdlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1t
CiAKIFdlYlByb2Nlc3MvRW50cnlQb2ludC9Db2NvYS9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2
aWNlRW50cnlQb2ludC5tbQogCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKKwogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VCYW5uZXIuY3BwCiAKIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvbWFjL1dLQnVuZGxlTWFjLm1tCkBAIC02MzUsMTAgKzYzNywxNCBA
QCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVz
c2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZl
ci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vz
c1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAK
IExpYldlYlJUQ0NvZGVjc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNz
TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1l
c3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyTWVzc2FnZVJlY2Vp
dmVyLmNwcAogU2VydmljZVdvcmtlckZldGNoVGFza01lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGFmYmRj
MjU3NWU0NDgxODVlNGJjYmM4NDJlNGY3YTU0NDMxM2I0MzkuLjAxNThhMzFhMzNhYTQ4MzQ2OGFk
MWJkNDcwODUzOWZhODU4MDI3YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzk3NSw4ICszOTc1LDMyIEBACiAJCTcxQTY3NkE0MjJD
NjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
Lmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNo
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3Mv
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNl
RXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDEyM0M4RkUwMjAwNDE4ODFGIC8qIEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0MjIzQzhGRTAzMDA0MTg4MUYgLyogSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjAxNzU0MzIzQzhGRTA0MDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIwMTc1NDQyM0M5MDBEQTAwNDE4ODFGIC8qIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDYyM0M5NDVEODAwNDE4ODFGIC8qIElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjAxNzU0NzIzQzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdl
QnVmZmVyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QjIz
QUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBOTIzQUQ3
QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZF
RjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFj
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNr
ZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDBGMjNBQjA0OEIw
MEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1v
dGVJbWFnZUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEw
MjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQx
MTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQkJFNDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5t
ZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTcyM0IzODQyMTAw
RjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQz
IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJE
NUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRh
U3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJ
bnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRh
U3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQwOSw2ICs2
NDMzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMx
MkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlhICovLAorCQkJCTcyQkJFNDBFMjNBQjA0NTgwMEE2
MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4
NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nl
c3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAgLTY0MjUsNiArNjQ1MCw3IEBACiAJCQkJMkQ5RkIy
MDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5
MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywK
KwkJCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJ
CQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3
NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQky
RDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICov
LApAQCAtNzgwMSw2ICs3ODI3LDUyIEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzIwMTc1NDUyM0M5NDVCMTAwNDE4ODFGIC8qIGNnICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjAxNzU0NjIzQzk0
NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCAq
LywKKwkJCQk3MjAxNzU0NzIzQzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNnOworCQkJc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRl
cmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNw
cCAqLywKKwkJCQk3MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oICovLAorCQkJCTcyMUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAv
KiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0
RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJ
NzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAgKi8sCisJCQkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oICovLAorCQkJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJl
bmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MkJC
RTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIwMTc1NDUyM0M5NDVCMTAwNDE4ODFG
IC8qIGNnICovLAorCQkJCTcyMDE3NTQ0MjNDOTAwREEwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUuaCAqLywKKwkJCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLywKKwkJCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcg
LyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8sCisJCQkJNzIwMTc1NDEyM0M4RkUwMjAwNDE4
ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzIw
MTc1NDIyM0M4RkUwMzAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZC5oICovLAorCQkJCTcyMDE3NTQzMjNDOEZFMDQwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVm
ZmVyU2hhcmVhYmxlQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8sCisJCQkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjND
IC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjND
IC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovLAorCQkJCTcyMzVDOTYwMjNDMTgy
ODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0
MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJ
CQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAg
Ki8sCisJCQkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaCAqLywKKwkJCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2
MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29u
bmVjdGlvbi5jcHAKaW5kZXggMThlOTM2ZGUzMjMwNzcwZjI0MzYxYjZhYmFhOGUxN2U0ZDJlNWFj
MC4uMTg4ZmFjMjBhMWU5MjNkZjYyYmIxYTM4MDU1MGFhYTRmOTRkOGUzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAK
QEAgLTYwLDI5ICs2MCwzNSBAQCB2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJ
UEM6OkNvbm5lY3Rpb24mKQogewogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQotewotfQotCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6
RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikK
IHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAg
IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5h
Z2VyPigpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBF
TkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUo
KSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBpZiAoYXV0byogY2FwdHVyZU1hbmFnZXIgPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyPigpKQogICAgICAg
ICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29u
bmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogI2VuZGlmCiAjaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCiAg
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJS
VENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5saWJXZWJSVENDb2RlY3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9u
LCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNv
ZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVy
KQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vz
c0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCit7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IGE4YWQ0ZmVlODZiMjY1OWI0YWZmYjdjNDg0ZGEx
ODFjM2JlZjI3ZDAuLmU4ZWU4NWRjMzJmZTU3OGYxNzUzOGJhM2Q4OWZkNzQ2MDc0NmJhMGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IApAQCAtNDYsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgfkdQVVByb2Nlc3NDb25uZWN0aW9uKCk7
CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25u
ZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNl
aXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAKICNpZiBIQVZFKEFV
RElUX1RPS0VOKQogICAgIHZvaWQgc2V0QXVkaXRUb2tlbihPcHRpb25hbDxhdWRpdF90b2tlbl90
PiBhdWRpdFRva2VuKSB7IG1fYXVkaXRUb2tlbiA9IGF1ZGl0VG9rZW47IH0KQEAgLTU4LDExICs2
MCwxNSBAQCBwcml2YXRlOgogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9p
ZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOworICAgIHZv
aWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYs
IHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUp
IG92ZXJyaWRlOwogCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisK
ICAgICAvLyBUaGUgY29ubmVjdGlvbiBmcm9tIHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgR1BVIHBy
b2Nlc3MuCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwotCisgICAgSVBD
OjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAjaWYgSEFWRShBVURJ
VF9UT0tFTikKICAgICBPcHRpb25hbDxhdWRpdF90b2tlbl90PiBtX2F1ZGl0VG9rZW47CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4
M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5
YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7
CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7
CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmE1OTYzMDY5ZjY2MTgxODNkMDc4YTY0YzJkZWFjYzJkODNhNGNkZTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
U2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKyNpbmNs
dWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlID0gVmFyaWFudDwKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBN
YWNoU2VuZFJpZ2h0LAorI2VuZGlmCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUKKz47CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jNDJjZjI0NWUzNDVlMWRmZWM2MmRjMWQ3YTNlY2FlZmNkOWFiNWQwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3Rm
L09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
YTFiYzlhZTg3ZGM4ZDcyNDI4YTBiODA5Y2FkMGQ4MGE0Y2QxY2I5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVm
ZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVu
dGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVySWRlbnRp
ZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRp
ZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjNkZDg0Y2U5NTIxZmM3MmM0MjBhZTM5ZjI4ZTljNDAzM2ViYTBlNWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cu
aD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7Cisg
ICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9u
IGNvbmZpZ3VyYXRpb247CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgY29uZmlndXJhdGlvbi5j
b2xvclNwYWNlID0geyBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkgfTsKKyNlbmRpZgor
ICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW50ZXJu
YWxTaXplLCBjb25maWd1cmF0aW9uKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29u
dGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShiaXRtYXApLCBXVEZNb3Zl
KGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRsZSkpOworCisgICAgYXV0byBiaXRtYXAg
PSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShXVEZNb3ZlKFdURjo6Z2V0PFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlPihoYW5kbGUpKSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+
KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQobG9naWNhbFNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGJpdG1hcCksIFdU
Rk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBiaXRt
YXAsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IFBs
YXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBwaHlzaWNhbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fYml0bWFwKFdURk1vdmUoYml0bWFwKSkK
KyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworfQorCitJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdAoreworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlIGhhbmRsZTsKKyAgICBtX2JpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgcmV0
dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShXVEZNb3ZlKGhhbmRsZSkpOworfQorCitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICByZXR1cm4g
bV9iaXRtYXAtPm1ha2VDR0ltYWdlQ29weSgpOworI2Vsc2UKKyAgICByZXR1cm4gbnVsbHB0cjsK
KyNlbmRpZgorfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9iaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKK1JlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0
LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX2JpdG1hcC0+ZGF0YSgpKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJy
YXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkK
K3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJy
YXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9iaXRt
YXAtPmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzNGEyZGE1NGIwMmVkYzNlMjVm
NDBiMDJjNzA0MmFjNDg0NTUyODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWFibGVCaXRtYXA7CisKK2Ns
YXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RX
aW5kb3cqKTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSgpIGNvbnN0OworICAgIAorICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2NvbnRleHQ7IH0KKworICAgIFdl
YkNvcmU6Ok5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3Rv
cmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
UmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29w
eSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlv
biA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmLCBX
ZWJDb3JlOjpDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNyY1NpemUsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBk
ZXN0UG9pbnQsIFdlYkNvcmU6OkNvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tl
bmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JB
OyB9CisjZW5kaWYKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJl
YWJsZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzE5MzExNWRlMTFmMTUyM2RjMDkwZjAxMWMxNDY1
MTQ5NDk3NWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUGxhdGZv
cm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kOworCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCit1
c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOworI2Vsc2UKK3VzaW5nIFBsYXRmb3Jt
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBQbGF0Zm9ybVVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ7CisjZW5kaWYKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTUxYjRjZTgwZjdiMWE2ZWNiYzgy
YmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApAQCAtMCww
ICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9uLmgiCisjaW5j
bHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdl
QnVmZmVyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIC8vIFJlZ2lzdGVy
IGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJl
Y2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihN
ZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFn
ZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisgICAgLy8gQ3JlYXRlIHRo
ZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitSZW1vdGVJbWFnZUJ1ZmZlcjo6flJl
bW90ZUltYWdlQnVmZmVyKCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNz
YWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZl
ck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLnJlbW92ZU1l
c3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlSW1hZ2VC
dWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmll
ci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9u
ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJC
YWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246
OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jvb2wgUmVtb3Rl
SW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQoreworICAgIFJlZjxJUEM6OkNv
bm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQ
cm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+
d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVy
OjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6
V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30K
Kwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKQoreworICAg
IGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50ID0gMzsKKyAgICBmb3IgKHVu
c2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNCYWNrZW5kQ3JlYXRlZCgpICYm
IHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyBpc1BlbmRp
bmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0U2V0Rmx1c2hJZGVudGlm
aWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcihJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbV9yZWNl
aXZlZEZsdXNoSWRlbnRpZmllciA9IGZsdXNoSWRlbnRpZmllcjsKK30KKwordm9pZCBSZW1vdGVJ
bWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVy
ID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Rmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0LCBt
X3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgZW5z
dXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRkZDkxOTk1ZmFlNWVhNmUzZjQ4NzRmNzZhNGNjMzg0NjRjYWJiMWQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNs
dWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3
dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3Rl
SW1hZ2VCdWZmZXIKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICB+UmVtb3RlSW1hZ2VCdWZm
ZXIoKTsKKworcHJvdGVjdGVkOgorICAgIFJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisg
ICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gQmxvY2tlcnMKKyAg
ICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKyAgICBib29sIHdhaXRTZXRG
bHVzaElkZW50aWZpZXIoKTsKKworICAgIHZvaWQgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAg
ICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlm
aWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworICAgIC8vIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVJbWFnZUJ1
ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdl
YkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSkgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRG
bHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOyAgICAgICAgCisgICAg
dm9pZCByZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50
aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAgICBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CisgICAgSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKKyAgICBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMzQxZmQyNGYyOTY5YWE3N2QyYmJlZTcyNzE1YmYyNmYzYzliYWQyOAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
IyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
CisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
K21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQg
Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwg
V2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRGbHVzaElkZW50aWZpZXIoV2ViS2l0OjpJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40Y2UwMjRjN2JiNGMwNzU4Njc1ZjZiMTA3ZmVkOGZkM2Q3ZTNl
ZWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDg2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xh
c3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyIHsKKyAgICB1c2luZyBC
YXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgICAg
IGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25T
Y2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPihuZXcgUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHNp
emUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlIGhhbmRsZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9iYWNrZW5k
KTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShsb2dpY2FsU2l6ZSwg
aW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxl
KSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2VuZFR5cGUqIGVuc3Vy
ZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tlbmQp
CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlz
cGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4
dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViZDIwMTYzODA0YjAyNGQ0ZjE0MDFk
NDQ2NjM2MjNhZDUzYTk3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRm
b3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47Cit1c2luZyBSZW1v
dGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4w
YzU4YWFjNzNlMjViY2E3ZDBhOTMwOTdjNzM2MTk2M2ZlNDBlYmRmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5n
QmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIENyZWF0ZSB0
aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp+UmVt
b3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsK
K30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3Rp
bmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0Y2gg
KHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJh
dGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGltYWdlQnVmZmVyID0g
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgIH0KKyAgICAKKyAg
ICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBmMzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlk
MWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdCYWNrZW5kLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kCisg
ICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRl
KCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8gSVBDOjpNZXNz
YWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24o
KSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVyaW5nQmFja2VuZAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93
Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOwor
ICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQyMzU0NzBjY2ZlN2I3OWJiOTI0NTc4YWZiNDE3MDM1YzkxM2RkMDIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2Jq
ZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZT47CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yODgzMWExYjcxYjQzYjZjMTEwYjg0
OTI2NzU5NDI1YjRmN2VmZTZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQu
aCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURf
SU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRl
SW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNl
ID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hlZENH
Q29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1
cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3Qo
Y2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5hbFNp
emUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RG
TW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIEFTU0VSVChXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpOworCisgICAgYXV0byBzdXJmYWNl
ID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoV1RGOjpnZXQ8TWFjaFNl
bmRSaWdodD4oaGFuZGxlKSksIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAg
aWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4obmV3
IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsK
K30KKworSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKG1fc3VyZmFjZS0+Y3JlYXRlU2VuZFJp
Z2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDRykg
JiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpKQorI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmU3MDEwODk2MmM3MjQyOTI5ZGVlYTllMzZkZWViYjIw
YTY5Njc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5o
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisjaWYgVVNF
KENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oPgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFNoYXJlYWJsZUJpdG1hcDsKKworY2xhc3MgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kIDogcHVibGljIFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5kb3cqKTsKKyAgICAKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJD
b3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICB1c2luZyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3
NWQ3YjhjYzEwZmZhMDA4MDNkNDgyMTczYmU1YTM1NThhLi43NzI2ZmU5NDhhMjI3OWJiZjkzOWYw
NjQ0ZjY0NTY4MmVkNmI3OTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTAyLDYgKzEw
MiwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbi5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtODgx
LDE1ICs4ODUsMjIgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4g
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1f
cGFnZS5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURp
c3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQor
I2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKyAgICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxz
ZQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2
b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFw
aGljc0xheWVyKiBsYXllcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1
NWUxYzFkNjA4NTBlNDcxZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUx
YjRmNTNiMmQxZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZp
bmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFj
a2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9z
aXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5h
bAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZs
YWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNk
MTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFi
MWVjYmJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBA
QCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVu
dFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8g
VGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFu
IHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1
cm4gbmlsOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYzMwMDdiM2ZjMjNkODlmODMyMmUyZjA4MTk1MWJjYWQ3YmJiOGIw
Mi4uOTY4MGVjY2JkMGQ3YzU5MTZmZDdmNDAwYWViZDMyYjViMjBmODdlYSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyIEBACisyMDIwLTAxLTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXls
aXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMS0xMSAgQW50
dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSW50ZWdyYXRp
b25dIGZhc3QvdGV4dC9zaW1wbGUtbGluZXMtZmxvYXQuaHRtbCBzaG91bGQgYmUgYWJvdXQgc2lt
cGxlIGxpbmUgbGF5b3V0IG9ubHkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0
cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Rpc3BsYXls
aXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3ZTc5MWI3MmFj
Y2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJmMTE0MWM2YmZi
Mzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFz
LWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEgQEAKICAKKyhz
YXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdlLWZsYWdzIDI1
NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1MDkxMikKKyAg
KHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkKKyAgKHNoYWRv
d3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQgYXQgKDEwLDEw
KSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387474</attachid>
            <date>2020-01-12 10:39:35 -0800</date>
            <delta_ts>2020-01-12 11:02:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200112103934.patch</filename>
            <type>text/plain</type>
            <size>496239</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM1MWQ3NGM4ZGRhNmM2
ODdjMjY2MzdmMDM0ZTAyMzhhYjQyZDMwMS4uZjJkOGJmOGYyYWJiNTJlMjdlNDRkNzIxNDdlZmQw
MjZmNDE0ZjljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3NiBAQAorMjAyMC0wMS0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworICAg
ICAgICAgICAgLS0gU2hhcmluZyB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIGRhdGEKKworICAgICAg
ICBUaGlzIGlzIHRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIEltYWdlQnVmZmVyOgorCisgICAgICAg
IEltYWdlQnVmZmVyCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNr
ZW5kVHlwZT4KKyAgICAgICAgICAgICstIFBoeXNpY2FsSW1hZ2VCdWZmZXIgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQgICAgIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRU
eXBlPiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgICstIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgLS0tLS0rICAgUmVtb3RlSW1hZ2VCdWZm
ZXIgLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAg
ICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAg
IHwgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciAtKyAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgLSsKKyAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
KyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgICAgICAgICstIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eSAtLS0tLS0tLS0tLS0tLSsKKworCisgICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNo
eSBmb3IgSW1hZ2VCdWZmZXJCYWNrZW5kOgorCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZAor
ICAgICAgICAgICAgfAorICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAg
ICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAg
Ky0tIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgfCAgICAgICB8ICAg
ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwg
ICAgICAgKy0tIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorICAgICAgICAgICAg
fCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZAorICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kCisg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICstLSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tIEltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorCisgICAgICAgIEFzIGFuIGV4YW1wbGUgZm9yIHRo
ZSBwbGF0Zm9ybXMsIHdoaWNoIHVzZSBDRywgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHdpbGwgCisg
ICAgICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIEltYWdlQnVmZmVyOgorCisgICAg
ICAgICAgICBJbi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJh
dGVkOiAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4KKyAg
ICAgICAgICAgICAgICBBY2NlbGVyYXRlZDogICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAgICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRl
cmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJhdGVkOiAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdQVVByb2Nl
c3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ+CisKKyAgICAgICAgICAgICAgICBBY2NlbGVyYXRlZDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlByb2Nlc3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPgorICAgICAgICAgICAgICAgICAgICAgICAg
R1BVUHJvY2VzczogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZD4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAg
ICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRpemVEYXRhSWZOZWVkZWQpOgorICAg
ICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21h
a2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRt
YXApOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBodG1sL0N1c3Rv
bVBhaW50Q2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpj
b3BpZWRJbWFnZSBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3RE
cmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3Bw
OgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRp
bmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Y3JlYXRlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogaHRtbC9j
YW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCBjb25zdCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50
b0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpM
UlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
bWFnZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9t
ZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c25hcHNob3RGcmFt
ZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAg
ICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vSG9zdFdpbmRvdy5o
OgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmguCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRU
b0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRleHQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3aW5nQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWlu
Zyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWlu
YW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRl
R2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjppbnRlcm5hbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZENv
bG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbElt
YWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OlBoeXNp
Y2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6
ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdNb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhv
dXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93
V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNo
YWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0
U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyU2hh
ZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXll
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5ZXJCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFj
ZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBp
eGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2Vu
ZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpqcGVnVVRJKToKKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRl
RnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlz
cGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlE
aXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXll
ci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpHQzNETGF5ZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3Rl
clNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5
Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKwogMjAyMC0wMS0xMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtMRkNdIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRhYmxlQ2VsbEJv
eCBzaG91bGQgdGFrZSBIb3Jpem9udGFsQ29uc3RyYWludHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMmMzMGYxN2Ey
MjRiZmJlYzc3NjhmZWY0NzM1NGQ4NzA5YjBmNjJkNC4uZDE1YzJjNmY2MjhiZDI2NzI0NGE0YmJk
MDRiY2MzZmJjM2RmMzFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMjAtMDEtMTIg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3Nh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om1lc3Nh
Z2VSZWNlaXZlck1hcCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OndlYlByb2Nlc3NJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6
OmZsdXNoQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBH
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Ogor
ICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktp
dDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmRIYW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Oklt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0
Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVz
aCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdl
QnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAxLTExICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBjb3JyZWN0IGdyYW5kZmF0aGVyaW5n
IGZ1bmN0aW9uYWxpdHkgdG8gdGhlIElUUCBkYXRhYmFzZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKaW5kZXggMzFkODIyNDBiMTk4MDkxYTVlYzJmZGE5ZmVlNjAwYTZjOWM3N2Ni
Ny4uMmYxYWMwMjI2MTAxZTAyOTI0MGMyZDcwYzRiZmNhNjM4NDNiZmQwNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTEyICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNh
bnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgor
ICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2
aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQgVEFSR0VUX09TX01BQ0NBVEFMWVNUIGluIG1v
cmUgcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJk
ZDI1ZTg5M2I5OTY0ZTc3Li44NWE3YmMwMmZkMDc1YWYzZTgwNTdhM2Q3OGQyODBmNzZhODE0ZmI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92
aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1
ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBA
IC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5n
T3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTggQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9u
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
VGFiU2l6ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBi
b2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwCmluZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBkMWNmYjZlODBiMjMxZGQ1NmQ2YjAuLjc0NjVk
MGU2YTg2Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhlN2FhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0Ns
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCkBAIC0yODQsNyArMjg0LDcgQEAgdm9p
ZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRl
cjo6c2FuaXRpemVEYXRhSWZOZWUKIAogICAgICAgICBhdXRvIGJpdG1hcEltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBiaXRtYXBJbWFnZS0+c2V0RGF0YShXVEZNb3ZlKGJ1
ZmZlclRvU2FuaXRpemUpLCB0cnVlKTsKLSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAg
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5z
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICBpZiAoIWltYWdl
QnVmZmVyKSB7CiAgICAgICAgICAgICBtX2RhdGEgPSB7IG51bGxTdHJpbmcoKSB9OwogICAgICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcx
MjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZC4uNWU1NDI2YzExNGQzYWNmNTBi
NDcxOGJjY2Y0NmEzN2MyY2NhZjk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNt
YWtlCkBAIC0xMzIsOCArMTMyLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9T
dXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3
Niw3ICsxNzcsOSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CmluZGV4IGMwM2NlNmI1MTMxODIxYTAxY2M3ZDY2NTNkMTY5MTkxZGJiNzlhODEuLjBiMmJjY2M1
YjU2NjYwMzU0NTIzN2JkNWFjMDM1YWMxMWI0ZDJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCkBAIC0yODksOCArMjg5LDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQ
b2ludENHLmNwcApAQCAtNTI1LDcgKzUyNyw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA0MTEyMTU1N2FlNmYzNWRiOWFkNWY0YzFlOGFjY2NhMDg2NjNlNmZiLi43
YTIwOWE4NjdkM2UxYTE0MGRiMjAzNDQ1ZWQzYWRlZTI3Njg4ZTYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTg2OSw2ICsxODY5LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcApAQCAtMTg4OCw2ICsxODg5LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxl
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGU0NTNkODkwOTdlNjg2YjJjMzM1MmJhZDY2ZWU3MTIzNDdjMTY2YjUuLjRmMDNl
YzIzZDhjNDBmYjk2YTJlNTc3MDFlMzY2YWIwMTRjZWNmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMjg4LDggKzI4OCw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0dUSy50eHQKaW5kZXggNzIwNWUyMGQzYWI0ZTM5ZmJlZTRiYjk0MzFhZWNiNGJjY2MyOGJkMi4u
OTdmMzM2ZTdjNWM5ZThkMGRhMjVlMmJkNGU2MWFkNzFhZTUyZGYyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dU
Sy50eHQKQEAgLTg0LDcgKzg0LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckd0ay5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9JY29uR3RrLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3Rr
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAogCiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YmI4NDMxNDUzOWFk
MDk1MTQ2MzFiMjEzMDYxNmFmNjBiYTlhMWMzLi41MzYwZjQ3Yzg2NzliMTJmODg1Yzc5MjAwMmQ5
NzNjYzJlMjRmMWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAw
MDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAy
OTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMy
ODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAv
KiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
Q0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQky
NEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1
MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5
NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBE
MjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTND
QTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8q
IEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC0yMTMwLDE0ICsyMTI4LDI2IEBACiAJ
CTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFMkM0MjQyMUM5MzUx
RDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFFQURDRDgyMjA4N0U3MjAwNjVBNDVGIC8q
IFBvaW50ZXJJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzFFQURDRDYyMjA4N0U2RDAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3
QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZl
Y3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MjAxNzU0QTIzQzk2OURGMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDE3NTQ4MjND
OTY5M0UwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMxMjIzRUM4NTQw
MEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzIyMjNF
Qzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMz
MzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQ
cm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIx
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4
QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgw
MDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2
QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBS
ZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgy
NkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIy
MzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJs
ZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0
eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAw
QTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcy
QkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3
MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgx
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBD
RTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDIsOSArNjU1Miw2IEBACiAJCTIyNUExNkIzMEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
MjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdy
YXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0Yx
MUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMw
MEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTYwMiw4ICs5NjA5LDEyIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQx
MSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9y
dC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3Vw
cG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYw
MDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjAxNzU0ODIzQzk2OTNFMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBG
MTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0
NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgy
NkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QzEyM0M1
NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBwYXRoID0gLi4vQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRF
RDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5N
YXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1h
eC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjI0LDcgKzk2MzUsMjAgQEAK
IAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVm
ZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
QmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1
MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8q
IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIz
MEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJE
NUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1
QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkwNEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjY4OCw3ICsxMjcxMiw2IEBACiAJ
CUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNz
VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0
IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZH
Rm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRF
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNW
R0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg4LDYg
KzE2NzExLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJD
QSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNB
IC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8sCkBAIC0yNDg4Nyw2ICsyNDkxMSw3IEBACiAJ
CUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyog
Q29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9p
bnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENH
LmNwcCAqLywKQEAgLTI0ODk2LDkgKzI0OTIxLDEyIEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAw
N0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAw
QTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlE
RUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJ
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQky
MjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJ
CTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJ
CTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8s
CisJCQkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmgg
Ki8sCisJCQkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JB
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0
OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJ
CUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8s
CiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywK
QEAgLTI0OTk0LDYgKzI1MDIyLDcgQEAKIAkJCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyog
Q3VzdG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBE
YXNoQXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdP
cHRpb25zLmggKi8sCisJCQkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0yNTA4NSw3ICsyNTEx
NCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3Jl
LmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAq
LywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJ
CQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJ
NzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJ
CQkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAog
CQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJ
CUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2
QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTE0Miw2ICsy
NTE3Miw5IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMu
aCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJ
CQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNG
RTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJF
NDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzIw
MTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8s
CiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJ
CQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVy
LmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNr
LmggKi8sCkBAIC0yNTE1MSw2ICsyNTE4NCw5IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhB
QUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1v
dGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJl
bW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJl
bmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBS
ZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJl
bmRlcmluZ01vZGUuaCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRl
ZFJlY3QuY3BwICovLAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVj
dC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAq
LywKQEAgLTI4OTkzLDYgKzI5MDI5LDcgQEAKIAkJCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcg
LyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1
RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNC
QjVDODgxRDVENkY0NTAwNUE3MUY0IC8qIEFsbERlc2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAv
KiBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUy
QjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5Njg4LDYgKzI5NzI1LDggQEAKIAkJCQkxMTJG
QjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAw
NzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlM
aXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyOTYsOCArMzAzMzUsMTAgQEAKIAkJ
CQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEw
QjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0Mg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjND
MTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIxRjFFQTcyM0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8q
IEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThD
RTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc2Nyw2ICszMTgwOCw3IEBACiAJCQkJQTU1
NEI1RjMxRTM4MzkzQTAwMUQ0RTAzIC8qIFBlcmZvcm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQ1ODFGQjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkUwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUND
MDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURC
QzFCNTYyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUQyQzgyQjcyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1
cmVTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjgg
LyogUGljdHVyZUluUGljdHVyZVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc4Niw2ICsz
MTgyOCw4IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUg
LyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1
NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
MzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjAxNzU0QTIzQzk2OURGMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAv
KiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3
M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0
Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMzE5NjMsNiArMzIwMDcsOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4
IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIx
NDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJp
bmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyog
UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1
RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKaW5kZXggNjRkZmYyZDk4NGVmNzJkZDllYmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0
ZTQ5MGFiNGQ4MWJkNmZmMTI4ZTI1YTc3Njc0MWQ5ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEs
OCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgp
OwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdo
dCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXpl
KCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0
YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0
aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAg
ICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxX
aWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29s
dXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVm
ZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAg
ICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIElu
dFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAK
ICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZm
ZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBn
ZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZh
NTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJ
bWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZl
ci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNv
bmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThm
ZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3
YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNw
cApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdl
KCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1f
Y29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFz
Ojpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVs
bHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1f
Y29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9j
b3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45
MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVk
ZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
KyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlm
CisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRp
YVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAs
NiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVD
b250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkp
OwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5z
ZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAg
ZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9z
aXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1M
Q2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25z
dAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJv
b2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJh
d2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAK
ICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwot
Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkK
LSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5z
ZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAK
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wg
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQot
ICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0g
ICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAg
aWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlz
cGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewot
ICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNU
ZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlE
aXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURp
c3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+
cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRB
Y2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBh
dXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCkt
PnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxs
cHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxp
c3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0g
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRp
c3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5l
dyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVt
b3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOwor
ICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3Vs
ZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDog
UmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdp
bmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlz
cGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cp
KTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAg
ICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBp
ZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3Vs
YXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdl
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1
ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5
YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7
IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07
CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wg
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDky
Li4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVy
YXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJS
ZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZl
clJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAK
IFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFm
NGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZl
MzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2
LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNh
bnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0
cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRl
ZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9Owor
ICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9Owog
CiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICgh
YnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJ
bWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkg
Y29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9m
ZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBy
ZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFi
NzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNs
YXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29t
cG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYg
YnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0
LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2Nl
bGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpj
b21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVy
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRp
b25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsg
Q2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJ
bWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAg
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQp
LCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDog
QWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCkt
PnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAo
IWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3
NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlz
dE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykg
Y29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxh
Z3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlz
cGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewot
ICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMp
OwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJu
IGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIx
NDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9h
dCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4g
Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5
LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRh
Pj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwg
ZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBi
ZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4i
KSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlm
ICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRh
UmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsK
KyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xl
TWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRv
IGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0y
MjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdl
QnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwg
ZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBk
aXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9h
dCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWln
aHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsK
ICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZm
ZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0
aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJl
Y3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkg
OiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUo
KSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJ
bnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRh
LCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAs
IGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgp
LCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3Jk
aW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndp
ZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwg
Y29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3
QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkx
ZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsg
fQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJp
bmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAg
ICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdz
KSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAg
IGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDgg
KzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENh
bnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0
aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9h
dCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYs
IENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9h
dCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJv
b2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcApp
bmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEz
ZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAg
LTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
c3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOwor
c3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmlu
Z01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1
bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFz
RWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBi
b29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0
dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9
CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVm
UHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1
ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2
MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1Yklt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVy
LT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgp
LCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyAr
NDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1l
bnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2
aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdl
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0
ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlm
IChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlk
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxh
dGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCks
IGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRh
cmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0
aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0
aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYg
KGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpE
T01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEp
OwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4
dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAo
aXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0
YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5j
b3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5v
YmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBh
Y2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRv
UGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2
MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAgLy8g
Tm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVv
RnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUo
KSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRl
by5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcK
ICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7CiAgICAg
RmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0
KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+
Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4g
YnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJ
REVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9
CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3
OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcg
KzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdS
ZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1F
ICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdl
QnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNl
U2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3
OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2
ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwx
MyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlk
ZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91
c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBD
aHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5k
ZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQo
KTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBh
YmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZm
NDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAg
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiAr
MTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9p
c0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5k
aWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRl
cmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEy
YWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1l
bnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIK
ICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5
UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwog
ICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSBy
b290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFt
ZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVy
bGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZm
ZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzEx
MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRo
Q2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hv
dE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2FsZUZhY3Rv
ciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFn
ZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODVi
YmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9p
ZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBp
bWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50
KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0
ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291
cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9E
YXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZ
ZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1
ZC4uMTJhMmQ3NGZmYmU4ZmNjNzNmMDY4YmJmY2JhMDA1NDA3NzU3MTc3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8u
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJv
LmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4
MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIx
N2NhZWNlMGNlMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2lu
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQg
KzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAot
I2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5n
QmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVy
aW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVB
bmltYXRpb24oKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJ
RCgpIGNvbnN0ID0gMDsKQEAgLTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA0MjFkZmJkOTU3NTRjNDYyNzU3Yjc4ZGJmYTQx
MDI1NDMyYWYwYjdkLi42ZmE0ZmZlMTQ2MGVhNzEzODIxYmNhMzYyMjZkMjZhOTdlNWQ5OTg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcgKzMwLDEx
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lu
dFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUwNTQxNmNkYTJmMmE3Zjc5MjZlMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhh
UHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11bHRpcGxpZWQsCisgICAgVW5wcmVt
dWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWFiNDY4Njc2OGYx
YTI4MmQ1ODgxYzkzOTc5NDZkNWJhMjAwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA6IHB1YmxpYyBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdl
QnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNl
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7
CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFj
a2VuZFR5cGU+JiYgZGF0YUJhY2tlbmQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAg
OiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAg
LCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAg
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDog
RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJl
dHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURp
c3BsYXlMaXN0KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0KK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4NmRkNGIyYWY5MWY0NTY1NTM1
YTcwMjkzOTIzYWYyYmFhZGJhMi4uMzViZDU4YzNkMTJmZjg0YzBlNjY0MmY4MTgyNzA5OWNlODM3
ZTI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJvb2wg
aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0
ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLjAwYmUw
ZmVhMDYwNTVjYTMxYjJjODg3NGRkMzc0ZWVhMWQ0Mjg0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsyOCw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCisj
aW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmgKaW5kZXggY2VlYTFkYTQwZWIzMmZmNzhhMWU3NWUxN2JmZTAwOTIw
MWI3NmYxMi4uMjZhMTJkZTNiZTRhYzZiODg0MzY0YzU1NDM5N2Y3ZjcxYzc4YWEyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUu
aCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyMiwxNyArMTIzLDYgQEAgZW51bSBUZXh0QWxp
Z24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAg
IFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBV
c2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24gcmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFs
bG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAgQWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3Mg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0gICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11
bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29t
cG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFt
ZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcm
LCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAgLTE0Myw3ICsxMzMsNiBAQCBXRUJDT1JFX0VYUE9S
VCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6
Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7
Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CmluZGV4IGMwMTI2MzcwY2I4NjU5MjdhMzJiZjExZjYxNDg2ZDcxYWY3YjQ3NTguLjRlMmJlNzFj
NzQxYzU1ZjU2YzBhZDA0NmE3OTdlNTBhMDk3MTg4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwz
OCArMjgsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQgTWF4
Q2xhbXBlZExlbmd0aCA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEg
PSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0
dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdyku
Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKK30KIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KEltYWdlQnVmZmVyKTsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Cit9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywg
c3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXpl
IHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29u
dGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAg
YSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAg
ICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICBy
ZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2lu
ZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBjcmVhdGUo
c2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSk7CiB9Ci0jZW5kaWYKKworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0
MDk2Oworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0
aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKQEAgLTEwNSw5NyArMTExLDEyIEBAIEZsb2F0
UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
IHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUo
KSkpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIGZvciBvdGhlciBiYWNrZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0K
LSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSkKLQotRmxvYXRTaXplIEltYWdlQnVmZmVy
OjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBzaXplKSBjb25zdAotewotICAgIHJl
dHVybiBzaXplOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAg
IGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVu
dAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3Jj
Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3Ip
OwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFy
UmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JH
QikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmlj
ZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNv
bG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAg
IGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAg
ICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19
Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KElu
dFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0
aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZz
ZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQp
IHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCAr
IDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWlu
dDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4
X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWlu
dDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAK
LSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4w
NzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChw
aXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNl
UmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0g
c3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhl
cmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLX0KLQotI2lm
ICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9y
bUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VCdWZmZXI6OmNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBFbmxhcmdlIHRo
ZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNv
IHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1
bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0
b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpAQCAtMjA0LDYz
ICsxMjUsMjcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29w
eVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QKIAogICAgIEludFNpemUgc2NhbGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShyZWN0LnNpemUoKSwgY29u
dGV4dCk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVm
ZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0K
LSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNj
YWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQorICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihz
Y2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRp
bmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29u
dGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRl
cmluZ01vZGUoKSwgJmNvbnRleHQsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxz
ZQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZl
cjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUg
aWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGln
aGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1
cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIGlt
YWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlv
bigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6Omlz
Q29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGFyZUVz
c2VudGlhbGx5RXF1YWwoY29udGV4dC5zY2FsZUZhY3RvcigpLCB0aGlzLT5jb250ZXh0KCkuc2Nh
bGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdl
KCk7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVf
dCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVt
b3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBh
bmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBh
bmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVz
ZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRl
cm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5n
KGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAppbmRleCAzYmRlZTRlZTAwZWQxN2FlMzQzYjJmNmE4ZGRkMDA5Mzg5
YzJlNmJmLi5jNjBiNzVkNGZiZmJhNWQyYmQ0NTBiMTNhNzUzMTMwZmM2YmNjYWY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI3LDE3MCArMjcsODEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyRGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQmFja2VuZC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7
Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1l
bnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRl
ZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJh
Y2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19Owot
Ci1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsK
K25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xh
c3MgSW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdl
QnVmZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VC
dWZmZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2ls
bCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBD
b2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRy
KTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01v
ZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENv
bG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIp
OwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0
aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5l
dyBvbmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwog
Ci0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRl
eHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIg
YW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAot
ICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aENvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+
SW1hZ2VCdWZmZXIoKTsKLQotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFj
a2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotCi0gICAgRmxvYXRTaXplIHNpemVGb3JEZXN0aW5hdGlv
blNpemUoRmxvYXRTaXplKSBjb25zdDsKLQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgLy8gVGhlc2UgZnVuY3Rpb25z
IGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQg
Zm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRz
Q2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRT
aXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAg
IHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwot
ICAgIC8vIEdpdmUgaGludHMgb24gdGhlIGZhc3RlciBjb3B5SW1hZ2UgTW9kZSwgcmV0dXJuIERv
bnRDb3B5QmFja2luZ1N0b3JlIGlmIGl0IHN1cHBvcnRzIHRoZSBEb250Q29weUJhY2tpbmdTdG9y
ZSBiZWhhdmlvcgotICAgIC8vIG9yIHJldHVybiBDb3B5QmFja2luZ1N0b3JlIGlmIGl0IGRvZXNu
J3QuICAKLSAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0Q29weUltYWdlTW9kZSgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0g
ICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAw
OwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0
ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29v
cmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICB2aXJ0
dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0K
IAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIElu
dFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGludGVy
bmFsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgp
IGNvbnN0ID0gMDsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAg
ICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAot
ICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9w
dCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotI2lmIFVTRShD
QUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlmCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0jaWYgIVVT
RShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lk
IHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0
UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1w
bGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhl
eSBvbmx5IHdvcmsKLSAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZv
cm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0
LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29s
b3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSA9IDA7CiAK
LSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VC
dWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBz
dGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUm
IHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwg
RmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6
Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIg
dGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8g
aW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAg
ICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsK
LSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3Rh
dGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlm
Ci0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwg
LTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lz
dGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25z
dW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRS
ZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Cisg
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0sIFBsYXRmb3JtR0xP
YmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBpbmxpbmUgdm9pZCBnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRh
IG1fZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7
Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9y
IHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAg
Ly8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4K
LSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5k
b3cqLCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElS
RUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCi0jaWYgVVNF
KENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYzA1Y2FmZDI4ODc3ZmQ1ZDA3NmM3NzhlYjQwZjZjZmM3OThmZGQwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1faW50ZXJu
YWxTaXplKGludGVybmFsU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25T
Y2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIElt
YWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXpl
ID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0
aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHko
KSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEludFNpemUoc2NhbGVkU2l6ZSk7
CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3cgPSA0
ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS53aWR0aCgp
KTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpICog
Ynl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2Vu
ZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0
KEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJy
YXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBsdW1pbmFuY2VSZWN0LCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNy
Y1BpeGVsQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCAr
PSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZz
ZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1
aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAg
IHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAg
ICAgCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAq
IDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5z
ZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVt
aW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVT
eXN0ZW06OkxvZ2ljYWwpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5k
Ojp0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
c3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBk
ZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBz
cmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRD
b2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5
dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJCYWNrZW5k
OjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0
JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVj
dC53aWR0aCgpOworICAgIGFyZWEgKj0gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5o
YXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJh
eSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZl
R2V0KCkpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygp
LCBtX2ludGVybmFsU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1
ZmZlclJlY3QsIHNyY1JlY3QpOworICAgIGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBz
cmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAg
ICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3QueSgpKTsKKworICAgIGlmIChkZXN0
UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgp
OworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEludFJlY3QmIHNy
Y1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGRh
dGFSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNTaXplIH07CisgICAgc3JjUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oZGF0YVJlY3QsIHNyY1JlY3QpOworICAgIAorICAgIGRlc3RSZWN0
ID0gc3JjUmVjdENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludCk7CisgICAg
CisgICAgaWYgKHNyY1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0UmVj
dC54KCkgLSBzcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAg
ICBkZXN0UmVjdC5zZXRZKGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpKTsKKworICAgIEludFJl
Y3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAg
ICBkZXN0UmVjdC5pbnRlcnNlY3QoYnVmZmVyUmVjdCk7CisKKyAgICBzcmNSZWN0Q2xpcHBlZC5z
ZXRTaXplKGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29u
c3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhf
dCogZGVzdFBpeGVsKQoreworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3Jt
YXQpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0g
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBS
R0JBLgorICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9
IHNyY1BpeGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQ
aXhlbFszXSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11
bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29u
c3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhf
dCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBp
ZiAoIWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRv
UHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZv
cm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1Bp
eGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxb
MV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAq
IDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBS
R0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAg
ICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBp
eGVsWzJdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFszXSA9
IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3Jj
UGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQor
eworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhIHx8IGFs
cGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChz
cmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVz
dENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdS
QSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNv
cHlGdW5jdG9yKShDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50
OF90Kik+CitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgK
KyAgICBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNp
Z25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1
bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0
Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0
Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAg
ICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCk7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11
bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dz
LCBzaXplKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCB2
b2lkKiBkYXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7
CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAm
JiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50
UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXko
c3JjUmVjdFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5
IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWlu
dDhfdCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JG
b3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNp
emUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0sIHZvaWQqIGRhdGEpCit7CisgICAgSW50U2l6ZSBzcmNTaXpl
U2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYg
bV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVkLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRS
ZWN0IGRlc3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNyY1NpemVTY2Fs
ZWQsIHNyY1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsK
KyAgICAKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAg
IHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBk
ZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZVNjYWxlZC53aWR0aCgpOworICAg
IHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBz
cmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQ
aXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBk
ZXN0UmVjdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZjMjFmMjg4MDYzOWJlZjE4NDQwZTY0NGQ5MTUyZGVjZTVkZjg0YjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7
CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3Vh
cmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRD
b3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4K
K307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7CisgICAgTm8s
CisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAg
IFJHQkEsCisgICAgQkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGluYXRlU3lzdGVtIDogdWlu
dDhfdCB7CisgICAgTG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307CisKK2NsYXNzIEltYWdl
QnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1h
Z2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorICAg
IAorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXpl
OyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFs
U2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFs
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLmFy
ZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3QgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5r
SW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1h
Z2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmly
dHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSkgeyB9
CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6
ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgPSAwOworICAgIAorICAgIHZpcnR1YWwgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0
LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVj
dGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3Qm
IHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxj
dWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0
Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgp
OyB9CisgICAgdmlydHVhbCBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7
IHJldHVybiBDb2xvckZvcm1hdDo6UkdCQTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IElu
dFNpemUmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtLCB2b2lkKiBkYXRhKSBjb25z
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSk7CisKKyAgICBJbnRTaXplIG1f
bG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2ludGVybmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jl
c29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVj
MGQzNmZlZmJkMTJhYmU1NDNjM2YyMDM0ZjYxNThiM2QyY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoQ0cpCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1
ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NzcyYzY5NGQzODFhY2JjOTI2MGRiYjQ3ZTlmZTI3MDFlNDI3NjVhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2Ns
YXNzIFBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IFBoeXNpY2FsSW1hZ2VCdWZm
ZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZmZXIsIEltYWdlQnVmZmVyVHlwZT46OnZhbHVlKTsK
KyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBpZiAoIWJhY2tlbmQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5k
KSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisg
ICAgeworICAgIH0KKworICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVy
biBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
YmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJh
Y2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNm
b3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50
U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmludGVybmFsU2l6ZSgpIDog
SW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5yZXNvbHV0aW9uU2Nh
bGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5tZW1vcnlDb3N0KCkgOiAw
OyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+ZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weU5hdGl2ZUlt
YWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVo
YXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAg
Zmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAg
ICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7Cisg
ICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFj
a2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRv
THVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3Jj
Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT50cmFuc2Zvcm1D
b2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50
b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5
c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50
b0JHUkFEYXRhKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgp
KSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcyku
Zmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRh
KG91dHB1dEZvcm1hdCwgcmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFy
cmF5LCBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
ID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaENv
bnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
YXJyYXksIGRhdGFTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGJvb2wgY29weVRvUGxhdGZvcm1U
ZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1
cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0
Zm9ybVRleHR1cmUodGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBw
cmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGEyYjgzMWYzM2NkNTcy
MmJkNzI5NzczNGM3OWYxYTAxMzQwY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
UGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOwor
I2VsaWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8p
Cit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDsKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAo
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOworI2Vsc2UK
K3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9ybVVu
YWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1J
bWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9
IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2Vu
ZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjViODAwNmQ5Nzk1MTQ1NjE3MDA5YjM0OTZlMTJiMDY1M2RhZWJhNGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0Uo
Q0FJUk8pCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mZGEwYWZhNzlkNzQ2MWNkOWYyZjEwOTEzNTBjODE1ZGJiYmQ3YmM3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
QmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFj
a2VuZD4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitS
ZW5kZXJpbmdCYWNrZW5kJiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPj4gc2hhcmVkUmVuZGVyaW5nQmFj
a2VuZCB7IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpIH07CisgICAgcmV0dXJuIGhvc3RXaW5k
b3cgJiYgaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpID8gKmhvc3RXaW5kb3ct
PnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA6ICpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kLmdldCgp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbmRlcmluZ0JhY2tlbmQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToK
KyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxh
dGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZl
ciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTcxYjkyZDU4NGZlZThmNGFmN2E4NTk2NGVhYWJjMWNlZDUwMTczMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIElu
dFNpemU7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7
CisKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChj
b25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworICAgIAorICAgIHZpcnR1YWwgflJlbmRlcmlu
Z0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOwor
ICAgIAorcHJvdGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cit9Owor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2Rl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmNjMzk4OGZkNjQzZGE3MDQ0MWU1MzM4YjE2YTExYjA1NDYzMTM4NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ01vZGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSB7CisgICAgQWNjZWxlcmF0ZWQsCisgICAgVW5hY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAor
ICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3Njc4YzU2YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjYx
MmY5ZTlkMjJkNjcxZjY4ZDU2NWYxMjQ0OTRlYzMzMmQ1Zjk0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNoQnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hh
ZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2VsZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sg
dG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAg
IG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2Vs
ZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
cm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJv
cGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1
dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVy
SW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8g
bGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1h
Z2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwog
ICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcg
QEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRT
aGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVj
dCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXll
ckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJD
YWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUp
LCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1Jl
Y3RTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25z
CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNj
cmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVy
SW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdl
QnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGNvbgogI2lmIFVTRShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1
ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UK
LSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRl
U2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2Vu
ZGlmCiAKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1
ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVT
aXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Qp
OwogICAgIGlmICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJ
bWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgp
ICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0
LCB7IH0pOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVj
dCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdl
QnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCkBAIC05MTIs
NyArOTEyLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogICAgIGFkanVzdEJsdXJSYWRp
dXModHJhbnNmb3JtKTsKIAotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBVbmFj
Y2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDYyYzc5ZjEzYTFjNzI0ZGRmMzdhOTQ2
NGY4MzJjZDZmNzc5ZTA3ZDguLjgwYTAyNWU4ZTZjYTg4YTZiNDdmYzdmZGM1ZTVjNWUyNTBmOWZl
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIGVudW0gUGF0aERy
YXdpbmdTdHlsZSB7CiAKIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9y
bUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwg
Y29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0U2l6ZSYgbGF5ZXJTaXpl
LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFj
ZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBs
YXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAg
ICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRS
ZWN0KHJvdW5kZWRJbnRQb2ludChsYXllck9yaWdpbiksIGxheWVyU2l6ZSksIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIGxheWVyU2l6ZSksIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0K
IH0KQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIo
UGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdQogLy8gRklYTUU6
IFRoaXMgaXMgbW9zdGx5IHNhbWUgYXMgZHJhd1NoYWRvd0xheWVyQnVmZmVyLCBzbyB3ZSBzaG91
bGQgbWVyZ2UgdHdvLgogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0ltYWdlKFBsYXRmb3JtQ29udGV4
dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFNoYWRv
d1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFn
ZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZl
SW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwg
eyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9i
YWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTkxLDcgKzE5MSw3IEBAIHN0
YXRpYyB2b2lkIGZpbGxTaGFkb3dCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgSW1hZ2VCdWZmZXImCiB7CiAgICAgc2F2ZShwbGF0Zm9ybUNvbnRleHQpOwogCi0g
ICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAo
YXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQogICAgICAgICBjbGlwVG9JbWFnZUJ1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIHN1cmZh
Y2UuZ2V0KCksIEZsb2F0UmVjdChsYXllck9yaWdpbiwgZXhwYW5kZWRJbnRTaXplKGxheWVyU2l6
ZSkpKTsKIAogICAgIEZpbGxTb3VyY2UgZmlsbFNvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAppbmRleCA5YjAyNWUxNDc2NzM1MmUxNGFkNDhmODY3YjA0NTg1ZWU4MDM0MTM0Li40
ZTFiZjJiNDM2N2YzNDM1OWQ4NTRlYjc4YzIyMDJkZjU3YjI3NDc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGUKICAgICB9CiAKICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNl
ID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAg
IENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqcGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0
KCksIGRlc3RSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAK
aW5kZXggOWM3NmUyOTEyZjgxZmM5NGFkYjVjNDg0NDUyNzEzNDYwZGNmYjI4Zi4uMjlhMGVjNDk5
NGYzNjE1ZDg3YjFiYjRlMWUzM2Q3Njg4MDdjYmE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCkBAIC00MTEsNyArNDExLDcgQEAgSW50UmVjdCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNsaXBCb3VuZHMoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdl
KCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0
Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5NjU3ZTNiMjk5ZWQ2ZWI0
YzVjYzM1ZGI5NTMyNDU3ODc3NzViOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJDYWlyb1V0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxjYWlyby5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJF
cG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jZW5kaWYKLSNlbmRpZgot
I2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBv
eHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0j
ZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKLSNlbmRp
ZgotI2VuZGlmCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZUJ1ZmZlckRhdGE6Oklt
YWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCi0gICAgOiBtX3BsYXRmb3JtQ29udGV4dCgwKQotICAgICwgbV9zaXplKHNpemUpCi0g
ICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAsIG1fY29t
cG9zaXRvclRleHR1cmUoMCkKLSNlbmRpZgotICAgICwgbV90ZXh0dXJlKDApCi0jZW5kaWYKLXsK
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCkgewotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBtX25pY29zaWFMYXllciA9IE5pY29z
aWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAgICAgICBtX3BsYXRmb3Jt
TGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
KTsKLSNlbmRpZgotICAgIH0KLSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1
ZmZlckRhdGEoKQotewotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gQWNjZWxlcmF0ZWQpCi0g
ICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2FzdDxO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmlt
cGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBHTENvbnRleHQqIHByZXZp
b3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIFBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBpZiAocHJldmlvdXNB
Y3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpj
cmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7
Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbEdlblRleHR1cmVz
KDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBB
Q0tfQUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdM
X1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCks
IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0
X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOwot
fQotCi0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3Bs
YXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1ZmZl
ckRhdGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAgIEdMQ29udGV4dCogcHJldmlvdXNB
Y3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fY29tcG9z
aXRvclRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAg
ICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgcHJv
eHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZEJsZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQotICAg
ICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAg
ICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBi
dWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNl
cwotICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVy
ZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKLSAg
ICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAgICBjYWlyb19zZXRfc291cmNlX3N1
cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAg
Y2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9T
T1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKLQotICAgIGlm
IChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBjbGVhclN1cmZhY2UoY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhz
dXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKLSAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAg
ICBjYWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVh
dGVDYWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gV2UgbXVzdCBnZW5lcmF0
ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZv
ciBleHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgotICAg
IGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19B
TElHTk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2
ZWwgKi8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAgLyogYm9y
ZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIGNhaXJvX2Rldmlj
ZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwotCi0gICAgLy8gVGhyZWFkLWF3
YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgot
ICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOwotCi0g
ICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1
cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVhclN1cmZhY2UobV9zdXJmYWNlLmdl
dCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJv
U3VyZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGF1dG8gY29weSA9
IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIs
Ci0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgIGF1dG8g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9v
cGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRf
c291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENB
SVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250
ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCi0gICAgICAgIHJldHVy
biBzdXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZSk7Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAg
YXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShtX2RhdGEubV9zdXJmYWNl
LmdldCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOwotCi0gICAg
VmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMo
c3VyZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0KLSAgICBhdXRvIHBp
eGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Ci0gICAg
aW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShz
dXJmYWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChz
dXJmYWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi1OYXRpdmVJbWFn
ZVB0ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rh
dGEubV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3Mp
Ci0gICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9kZSkKLSAgICAsIG1fbG9n
aWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkK
LXsKLSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGVycm9y
LgotCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNp
emUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYobV9yZXNvbHV0aW9u
U2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21h
dGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0
KTsKLSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQpIHsKLSAgICAg
ICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAgICAgIGlmICghbV9kYXRhLm1f
c3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAh
PSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5tX3JlbmRlcmluZ01v
ZGUgPSBVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8g
bm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdN
b2RlID09IFVuYWNjZWxlcmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJp
bmdNb2RlICE9IEFjY2VsZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAgICAgICAgc3RhdGljIGNh
aXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0gICAgICAgIGludCBzdHJp
ZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBt
X3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRhOwotICAgICAgICBpZiAo
IXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShz
dXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLm1fc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwotICAgICAgICBjYWly
b19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFj
ZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZhc3RGcmVlKGRhdGEpOyB9
KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsgIC8vIGNy
ZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6ZWQgYW5kIGZhaWwuCi0K
LSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBt
X3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsK
LSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fZGF0
YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCkpOwotICAg
IHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUs
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5tX2NvbnRleHQ7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNhaXJvSW1hZ2VTdXJmYWNl
IGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAgIGlmIChjb3B5QmVo
YXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLQot
ICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24g
ZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1h
Z2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNr
aW5nU3RvcmU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsICBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoZGVzdGluYXRp
b25Db250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAgICAgICAgaWYgKCZkZXN0aW5hdGlv
bkNvbnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAgICAgICAgIHN1cmZhY2UgPSBjYWlyb1N1cmZh
Y2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0aW5hdGlvbkNvbnRl
eHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8m
IGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7Ci0g
ICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGluYXRpb25Db250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9u
Q29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRp
b25Db250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChjb250ZXh0
LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3Vy
ZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKLXsKLSAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgotICAgIGlmIChjYWlyb19z
dXJmYWNlX2dldF90eXBlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0Vf
VFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNy
YyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7
Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQo
KTsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1
bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBtX3NpemUud2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwg
PSByb3cgKyB4OwotICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11
bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci0gICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9v
a1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxDb2xvci5hbHBoYSgpKTsKLSAgICAgICAgICAgICpwaXhl
bCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9kYXRhLm1fc3Vy
ZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhl
aWdodCgpKTsKLX0KLQotUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdl
QW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIEludFJlY3QmIHJlY3QpCi17
Ci0gICAgY2Fpcm9fc3VyZmFjZV90eXBlX3Qgc3VyZmFjZVR5cGUgPSBjYWlyb19zdXJmYWNlX2dl
dF90eXBlKHN1cmZhY2UpOwotCi0gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlLCB3
ZSB3cml0ZSBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBkYXRhOwotICAgIC8vIG90aGVyd2lz
ZSB3ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3VyZmFjZSBpbWFnZQotICAgIGlmIChzdXJmYWNlVHlw
ZSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwot
ICAgIAotICAgIHJlY3Quc2V0WCgwKTsKLSAgICByZWN0LnNldFkoMCk7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotfQotCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBwcmVtdWx0aXBsaWVkPgotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3Qs
IGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3Qg
SW50U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICAvLyBU
aGUgYXJlYSBjYW4gb3ZlcmZsb3cgaWYgdGhlIHJlY3QgaXMgdG9vIGJpZy4KLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0Lndp
ZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENh
biBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwot
ICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFk
ZGluZyAyIGludHMuCi0gICAgaW50IGVuZHkgPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJl
Y3QueSgpLCByZWN0LmhlaWdodCgpLCBlbmR5KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0
aCgpIHx8IGVuZHkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7
Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAg
aWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9y
aWdpbnggPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQotICAgICAg
ICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdp
bng7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0g
ICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAg
IG9yaWdpbnkgPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAg
ICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3Jp
Z2lueTsKLQotICAgIC8vIE5vdGhpbmcgd2lsbCBiZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRo
ZSByZXN1bHQuCi0gICAgaWYgKG51bUNvbHVtbnMgPD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJm
YWNlIGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0
byBzZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMg
SW1hZ2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3Qob3JpZ2lueCwgb3JpZ2lueSwgbnVt
Q29sdW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJm
YWNlID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChkYXRhLm1fc3VyZmFjZS5nZXQo
KSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZh
Y2UuZ2V0KCksIHJlc29sdXRpb25TY2FsZSwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBvcmlnaW54
ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBvcmlnaW55ID0gaW1hZ2VSZWN0LnkoKTsKLSAgICBpZiAo
aW1hZ2VTdXJmYWNlICE9IGRhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMg
Y2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bS4KLSAgICAgICAgSW50UmVjdCBsb2dpY2FsQXJlYSA9IGludGVyc2VjdGlvbihsb2dpY2FsUmVj
dCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQo
KSkpOwotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGRhdGEubV9zdXJm
YWNlLmdldCgpLCBpbWFnZVN1cmZhY2UuZ2V0KCksIEludFNpemUoLWxvZ2ljYWxBcmVhLngoKSwg
LWxvZ2ljYWxBcmVhLnkoKSksIEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbEFyZWEuc2l6ZSgp
KSwgSW50U2l6ZSgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3Vy
ZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHJlc3VsdC0+ZGF0YSgp
OwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VT
dXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53
aWR0aCgpOwotCi0gICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkg
KiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
dW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3JpZ2lueSkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsg
b3JpZ2lueDsKLQotICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBDb2xvcjo6Y29sb3JGcm9t
UHJlbXVsdGlwbGllZEFSR0IoKSBiZWNhdXNlIG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24g
Y2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gKCpwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAgICAgICAgdW5zaWduZWQg
cmVkID0gKCpwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAgICAgICAgICAgdW5zaWduZWQg
Z3JlZW4gPSAoKnBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgICAgIGlmIChwcmVtdWx0
aXBsaWVkID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAg
ICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVu
ID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAgPSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gZ3JlZW47Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYmx1
ZTsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQot
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2lj
YWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1
dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBV
bml0PgotaW5saW5lIFVuaXQgYmFja2luZ1N0b3JlVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0g
SW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNj
YWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZhbHVl
KTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURp
bWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAg
ICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJh
Y2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1l
bnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0
YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJl
Y3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpn
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9y
ZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1
dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhl
bEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAgIHJldHVybiBn
ZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oYmFja2lu
Z1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBt
X3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtKQotewotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IGJhY2tpbmdT
dG9yZVVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNl
U2l6ZSwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50
IHNjYWxlZERlc3RQb2ludCA9IGJhY2tpbmdTdG9yZVVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBsb2dpY2FsU291cmNlUmVj
dCA9IGxvZ2ljYWxVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICBJbnRQb2ludCBsb2dpY2FsRGVzdFBvaW50ID0gbG9naWNhbFVuaXQoZGVz
dFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBBU1NF
UlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNjYWxlZFNvdXJj
ZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLQotICAgIGludCBvcmlnaW54ID0gc2NhbGVkU291cmNlUmVj
dC54KCk7Ci0gICAgaW50IGRlc3R4ID0gc2NhbGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJj
ZVJlY3QueCgpOwotICAgIGludCBsb2dpY2FsRGVzdHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSAr
IGxvZ2ljYWxTb3VyY2VSZWN0LngoKTsKLSAgICBBU1NFUlQoZGVzdHggPj0gMCk7Ci0gICAgQVNT
RVJUKGRlc3R4IDwgbV9zaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54ID49IDApOwot
ICAgIEFTU0VSVChvcmlnaW54IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIGlu
dCBlbmR4ID0gc2NhbGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJjZVJlY3QubWF4WCgpOwot
ICAgIGludCBsb2dpY2FsRW5keCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJj
ZVJlY3QubWF4WCgpOwotICAgIEFTU0VSVChlbmR4IDw9IG1fc2l6ZS53aWR0aCgpKTsKLQotICAg
IGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwotICAgIGludCBsb2dpY2FsTnVtQ29sdW1u
cyA9IGxvZ2ljYWxFbmR4IC0gbG9naWNhbERlc3R4OwotCi0gICAgaW50IG9yaWdpbnkgPSBzY2Fs
ZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsg
c2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eSA9IGxvZ2ljYWxEZXN0
UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpOwotICAgIEFTU0VSVChkZXN0eSA+PSAw
KTsKLSAgICBBU1NFUlQoZGVzdHkgPCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmln
aW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4WSgp
KTsKLQotICAgIGludCBlbmR5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJl
Y3QubWF4WSgpOwotICAgIGludCBsb2dpY2FsRW5keSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsg
bG9naWNhbFNvdXJjZVJlY3QubWF4WSgpOwotICAgIEFTU0VSVChlbmR5IDw9IG1fc2l6ZS5oZWln
aHQoKSk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7Ci0gICAgaW50IGxvZ2ljYWxO
dW1Sb3dzID0gbG9naWNhbEVuZHkgLSBsb2dpY2FsRGVzdHk7Ci0KLSAgICAvLyBUaGUgc2l6ZSBv
ZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0u
Ci0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQg
c3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZGVz
dHgsIGRlc3R5LCBudW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNl
U2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGRlc3R4ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBkZXN0eSA9IGltYWdlUmVj
dC55KCk7Ci0KLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IDQgKiBzY2FsZWRTb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQ
ZXJSb3cgKyBvcmlnaW54ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsr
eSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWdu
ZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBkZXN0eDsKLQot
ICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBDb2xvcjo6cHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoKSBiZWNhdXNlIG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4
ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd3Nb
YmFzZXhdOwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAg
ICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0KLSAgICAgICAgICAg
IGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0KSB8
IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGNhaXJvIHN1cmZh
Y2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgY2Fp
cm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShpbWFnZVN1cmZhY2UuZ2V0KCksIGxvZ2lj
YWxEZXN0eCwgbG9naWNhbERlc3R5LCBsb2dpY2FsTnVtQ29sdW1ucywgbG9naWNhbE51bVJvd3Mp
OwotCi0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBtX2RhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0g
ICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhl
cihpbWFnZVN1cmZhY2UuZ2V0KCksIG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIEludFNpemUoKSwg
SW50UmVjdCgwLCAwLCBsb2dpY2FsTnVtQ29sdW1ucywgbG9naWNhbE51bVJvd3MpLCBJbnRTaXpl
KGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgpLCBsb2dpY2FsRGVz
dFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKSksIENBSVJPX09QRVJBVE9SX1NPVVJD
RSk7Ci0gICAgfQotfQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLXN0YXRpYyBjYWlyb19zdGF0dXNf
dCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9y
PHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCi0gICAgICAgIHJl
dHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7Ci0gICAgcmV0dXJuIENBSVJPX1NUQVRVU19T
VUNDRVNTOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIGlt
YWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91dHB1dCkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7IC8v
IE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KLQotICAgIHJldHVybiBjYWly
b19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rpb24sIG91dHB1
dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVk
SW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2Uu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
YmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2Rl
ZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVU
eXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4p
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIGlt
YWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkp
OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKLSAgICBpZiAoIWltYWdlIHx8
ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1hZ2UpKQotICAgICAgICBy
ZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGVuY29kZWRJbWFnZTsKLX0KLQotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NF
UlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250
ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0g
ICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQo
KTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0
PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwg
VGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgs
IG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0
Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
I2lmIFVTRShOSUNPU0lBKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxh
eWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAobV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJEYXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRp
ZgotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9
PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJl
c29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5
QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRh
Lm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRl
eHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0
ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBj
b250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJfdCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0g
ICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRl
eHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5
VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFy
Z2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAg
Z2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVy
biB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQp
OwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0o
ZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQzNTk1OWFkMTNkNDI3YTYyNTE2Nzk5ZDAwZTRjYWE4Mjk0
MjE2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJP
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0
aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RDb250ZXh0LCBv
cHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0
aW9uQ29udGV4dFN0YXRlID0gZGVzdENvbnRleHQuc3RhdGUoKTsKKworICAgIGlmIChhdXRvIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJh
Y2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZHJhd05hdGl2ZUlt
YWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0
LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6
OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZk
ZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChzcmNDb2xvclNw
YWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNS
R0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNy
Y0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0g
Q29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6Okxp
bmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykg
eworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAg
ICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0o
KTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Cisg
ICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBb
XSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5l
YXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0g
PSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30KKworU3RyaW5n
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVh
bGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAi
ZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29k
ZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsK
KworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0
YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAor
eworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWly
b19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7CisgICAgcmV0
dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTFiM2I0MDkyNDUwNWIxNDU4Yzc3MzcxOThlYjViN2I3ODVhOTUy
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDog
cHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOwor
CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29s
b3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGQzNjdhNWVkNTM0NTFhODFlMWE1MjY0MWU0MTVlNDRlOTVhNDIxOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNs
dWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBP
WFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgor
I2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZ
KQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5LmgiCisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3Vy
ZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNy
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5n
ZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1
bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5h
bFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNv
bnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNo
YXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRo
ZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUt
ZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJl
cygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJl
KTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKwor
ICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBp
bnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAq
LywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2VfdCog
ZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2FyZW5l
c3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAgICBj
YWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAgIGF1
dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJl
KGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwgaW50ZXJuYWxTaXpl
LndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBjbGVhclN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPihuZXcg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30K
KworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkK
KyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCisg
ICAgLCBtX3RleHR1cmUodGV4dHVyZSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50
TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3Jl
YXRlRmFjdG9yeSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorI2Vu
ZGlmCit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQoKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykg
JiYgVVNFKE5JQ09TSUEpCisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsK
KyNlbmRpZgorCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRl
eHQ6OmN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUp
OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JU
ZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyNlbmRpZgorCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJl
dmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1M
YXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFVTRShOSUNP
U0lBKQorICAgIHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsKKyNlbHNlCisgICAgaWYgKG1f
dGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30K
KworYm9vbCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1
cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAx
LjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29s
dXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYgKHByZW11bHRpcGx5QWxw
aGEgfHwgZmxpcFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV90ZXh0dXJl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdl
dDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAg
ICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhU
VVJFX0NVQkVfTUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0
KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4
dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgdWludDMyX3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAgIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQs
IGRlc3RpbmF0aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGlu
dGVybmFsZm9ybWF0LCAwLCAwLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6
ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7
CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2go
KTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8q
IGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygp
LnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRl
cm5hbFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworCisg
ICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRl
X2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1Jf
QUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50
ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOworICAgIGNhaXJvX3NldF9hbnRp
YWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRl
ZCgpCit7CisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6
OmN1cnJlbnQoKTsKKworICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgeworICAgICAgICBj
cmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisKKyAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9
CisgICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJv
eHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJv
eHkubG9jaygpKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5p
cXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJl
LCBtX2ludGVybmFsU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkp
OworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAgcHJveHlPcGVyYXRp
b24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIEl0IHdv
dWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdl
IGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAgICAvLyB3aGVyZSBv
bmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91
cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8gaW50byB0aGUgY29t
cG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRv
ckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX3NldF9vcGVyYXRv
cihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWly
b19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVD
b250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnBh
aW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKworICAgIC8vIENhaXJv
IG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdl
IGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNv
bnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1f
c3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBw
ZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwg
bV9pbnRlcm5hbFNpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ0NzQ0YWQ4YWQxZjk4YTEzNzA3NDkzZDFi
OWQyZTgwMmE2OTRmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1
YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93Kik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKTsKKworICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
ZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBz
d2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisj
ZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNF
KE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5
ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBt
X3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNy
OworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisjZW5kaWYKKyAgICB1
aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzhjM2ZiZTUzYzRhNWMyYjAyMTNmMWI5NTFhMjU3NTc1NDZlOGYyMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJ
Uk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQp
OworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+
IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBz
X3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJ
bnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbnQgc3RyaWRlID0g
Y2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW50ZXJu
YWxTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFz
dFplcm9lZE1hbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1
cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRl
cm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBj
YWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFL
ZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEp
OworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZN
b3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1
cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7
CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBD
QUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjph
cnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBk
YXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpOwor
ICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNl
LmdldCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7
ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5z
aWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBw
aXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9t
UHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xv
cihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5n
cmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhh
KCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4
ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5
X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwZGI3OWJhOWEzZTZkNmRiMWM5MmMzMDZh
NDc1MjA3MTRkYzNhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1Ymxp
YyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExP
Q0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29r
VXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kMTUyMDk0N2RiOTg1OTM1NTAwZjVkZGUwMDZlY2U4ODZiYjRl
MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisjaWYg
VVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBp
bnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFj
ZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyht
X3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxj
YWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAg
ICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRl
RmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICptX2NvbnRleHQ7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAg
ICBjYXNlIENvcHlCYWNraW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYo
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAg
ICAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAg
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwor
ICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQo
KSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1
cm4gY29weTsKKyAgICB9CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAg
ICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJD
YWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3QKK3sK
KyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSAm
JiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fQ09O
VEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5n
U3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3Jl
OworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNv
bnN0Cit7CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOwor
ICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8dWlu
dDhfdD4gaW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdl
dCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURhdGEu
YXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0
KCkpICoKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0
KCkpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29y
ZGluYXRlU3lzdGVtLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQo
KSkpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0
Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lz
dGVtLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisg
ICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVj
dGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50LngoKSwgZGVzdFBvaW50LnkoKSwgc3Jj
UmVjdFNjYWxlZC53aWR0aCgpLCBzcmNSZWN0U2NhbGVkLmhlaWdodCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDRlYzg5YTM4ODZlZTdm
MDViMGQzOWM5MjU5MDFlMzZmMjA0ZTU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xn
ZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworcHVi
bGljOgorICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3Qg
SW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAg
ICBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgTmF0aXZlSW1h
Z2VQdHIgY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5
dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3Jt
Q29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdl
QnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3Jt
Q29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1
ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5o
IgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklD
T1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEK
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAg
IDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQK
LSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1
YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUp
OwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyRGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1D
b250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsK
LSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsK
LQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWly
b0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShO
SUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UK
LSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25z
dCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNl
bmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBv
c2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lm
IFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3Np
YUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lk
IHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRp
ZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJE
YXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YTJiY2U5YTk3NTk3NTBiMDYxNzQ2MTExODFmNjJiMzczZDRmZDcyCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28u
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisKKyNp
ZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJHUmVmUHRy
R3RrLmgiCisjaW5jbHVkZSAiR2RrQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRlIDxndGsvZ3Rr
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmICFQTEFURk9STShHVEspCisKK3N0YXRpYyBjYWlyb19zdGF0dXNf
dCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlmICghcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8dWlu
dDhfdD4qPihvdXRwdXQpLT50cnlBcHBlbmQoZGF0YSwgbGVuZ3RoKSkKKyAgICAgICAgcmV0dXJu
IENBSVJPX1NUQVRVU19XUklURV9FUlJPUjsKKyAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NF
U1M7Cit9CisKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2Us
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFZlY3Rvcjx1aW50OF90Piogb3V0cHV0KQoreworICAg
IEFTU0VSVF9VTlVTRUQobWltZVR5cGUsIG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsgLy8gT25s
eSBQTkcgb3V0cHV0IGlzIHN1cHBvcnRlZCBmb3Igbm93LgorCisgICAgcmV0dXJuIGNhaXJvX3N1
cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShpbWFnZSwgd3JpdGVGdW5jdGlvbiwgb3V0cHV0KSA9
PSBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9f
c3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PikKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlOworICAgIGlmICghaW1hZ2Ug
fHwgIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAg
IHJldHVybiB7IH07CisgICAgcmV0dXJuIGVuY29kZWRJbWFnZTsKK30KKworI2Vsc2UKKworc3Rh
dGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2No
YXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQoreworICAgIC8vIExpc3Qgb2Ygc3VwcG9y
dGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVu
dGF0aW9uLgorICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3Rh
YmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVy
dgorCisgICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIp
OworICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRp
ZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAiYm1wIikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgR1JlZlB0cjxHZGtQaXhidWY+IHBpeGJ1ZjsKKyAgICBpZiAodHlwZSA9PSAi
anBlZyIpIHsKKyAgICAgICAgLy8gSlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4g
VGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQ
b3J0ZXItRHVmZgorICAgICAgICAvLyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGlt
YWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxwaGEuCisgICAgICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7CisgICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90
eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkgeworICAgICAgICAgICAg
bmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZSksCisgICAgICAgICAgICAgICAg
Q0FJUk9fRk9STUFUX1JHQjI0LAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIElu
dFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZSk7CisgICAgICAgICAgICBuZXdT
dXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFU
X1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7
CisgICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2Us
IDAsIDApOworICAgICAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworICAgICAgICB9Cisg
ICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJm
YWNlLmdldCgpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWly
b1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBp
ZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxp
dHkgPD0gMS4wKSB7CisgICAgICAgIFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1i
ZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMC4wICsgMC41KSk7CisgICAgICAgIGdk
a19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAm
YnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5
IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRy
KCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVM
TCk7CisKKyAgICByZXR1cm4gIWVycm9yOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWly
b19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHkpCit7CisgICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVmZmVyOworICAgIGdz
aXplIGJ1ZmZlclNpemU7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsIHF1
YWxpdHksIGJ1ZmZlciwgYnVmZmVyU2l6ZSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdl
dCgpLCBidWZmZXJTaXplKTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCisjZW5kaWYgLy8g
IVBMQVRGT1JNKEdUSykKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNk
ZTMzYzdjYTA5NmNhZDg5MjI2MzczOWM3NWY5NWIyMGZlZGMwMzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NhaXJvLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBO
aWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCmlu
ZGV4IDQ5NmVjYTMyNGQzZTRkYTIyZmNhNTk5OThlYjVlZjVlZTczZDIwOWEuLjcyMmVlZmZlNmM5
ZTVmZDI4NjZiZTI3Mjg3YTQ3MDIxMDBjYmZjNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTUw
MCw3ICs1MDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5h
dGlvblNpemUgPSBidWZmZXIuc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShkZXN0UmVjdC5zaXplKCkp
OworICAgIEZsb2F0U2l6ZSBidWZmZXJEZXN0aW5hdGlvblNpemUgPSBkZXN0UmVjdC5zaXplKCk7
CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBs
YXRmb3JtQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MzU2ZjE5NjRkMDk1NTJiZDFhMjdmYzBkMjI4MDlkOGEzZGE2Yjc1Yi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY1NCArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVy
bWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIklt
YWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENH
LmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdl
RGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhp
Y3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2Nn
L0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVk
ZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgot
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0j
ZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVk
ZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4K
LSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBB
UkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRP
Ul9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJ
VEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLQotc3RhdGljIEZsb2F0U2l6ZSBzY2Fs
ZVNpemVUb1VzZXJTcGFjZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBiYWNraW5nU3RvcmVTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUpCi17Ci0g
ICAgZmxvYXQgeE1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpKSAvIGludGVybmFsU2l6ZS53aWR0aCgpOwotICAgIGZsb2F0IHlNYWduaWZp
Y2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpIC8g
aW50ZXJuYWxTaXplLmhlaWdodCgpOwotICAgIHJldHVybiBGbG9hdFNpemUobG9naWNhbFNpemUu
d2lkdGgoKSAqIHhNYWduaWZpY2F0aW9uLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSAqIHlNYWduaWZp
Y2F0aW9uKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JT
cGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0g
Y29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUo
Y2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNv
bG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAg
ICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJ
T1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xv
clNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoK
LSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3Bh
Y2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBj
b2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9
IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUg
PSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJl
bmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNj
YWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQo
KS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1h
Z2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQot
ICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1
dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4g
bWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNj
YWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNv
bHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2Ug
YXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXpl
KHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVk
SGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7Ci0g
ICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwot
ICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgp
OwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRh
LmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3Jk
T3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIEludFNpemUgbWF4U2l6ZSA9
IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPiBt
YXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwotI2Vsc2UKLSAgICBBU1NFUlQo
cmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNv
bG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dD
b250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBz
aXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSh3aWR0aC51bnNhZmVHZXQoKSwgaGVpZ2h0
LnVuc2FmZUdldCgpKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVh
dGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyksIGNvbG9yU3Bh
Y2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4
dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0g
ICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29udGV4dENsZWFy
UmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51
bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93
KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJh
dGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRv
IG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRl
cmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJv
ZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90Piht
X2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRt
YXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVP
cmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRh
LmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1h
cEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQq
LCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFs
bG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAg
Ly8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQo
KSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVy
Q3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxl
YXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29u
dGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxv
YXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFj
dG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFn
ZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0g
ICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFj
ZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQot
ewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1GbG9hdFNp
emUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplIGRlc3RpbmF0
aW9uU2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2NhbGVTaXplVG9Vc2VyU3BhY2UoZGVzdGlu
YXRpb25TaXplLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXplKCkpOwotfQot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1
ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBp
bnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBj
YXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0
J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFu
eSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3Vy
ZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25z
dHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNz
IG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24n
dCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVy
biBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxT
aXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1h
Z2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxN
ZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQs
IGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJl
IGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNh
dXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24g
b2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5z
dXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBw
b2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEu
c3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBo
aWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2Vu
ZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUm
IGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0g
c3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChp
bWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAg
cmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0
TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVy
biBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRl
clNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBp
bnRlcm5hbFNpemUsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKQotewotICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29s
dXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICog
bG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0
LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChj
b250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkp
OwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzY2FsZVNpemVUb1Vz
ZXJTcGFjZShsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgaW50ZXJuYWxTaXplKTsKLSAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAg
ICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQo
KSkpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOwotfQotCi1S
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17
Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmIChtX3Jlc29sdXRpb25T
Y2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKLSAgICBl
bHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdU
Rk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQot
Ci1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50
ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dp
Y2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5t
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFn
ZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VC
dWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2luZ1N0b3JlU2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1CYWNraW5nU3RvcmVDb3B5
IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5
QmFja2luZ1N0b3JlOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNp
bmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
cikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICgh
aW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXIt
PmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gSU9T
dXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdU
Rk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxzZQotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLSNlbmRpZgotfQotCi1SZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAg
ICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewotICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0
b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCks
IDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNl
LCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRhLmRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1h
Z2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJu
IGltYWdlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3Vy
ZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFT
U0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICBmbG9h
dCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAg
SW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlID0gSU9TdXJmYWNlOjpz
aW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1h
Z2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVz
dENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBiYWNraW5nU3RvcmVTaXplLCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZm
ZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSNlbmRp
ZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBk
ZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVm
ZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3Rl
ZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9u
cyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0
ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAg
ICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNv
cHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVy
LCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
aWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0
dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5z
Zm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0
b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVy
OjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSog
cGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAg
ICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBp
ZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAg
c3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURp
bWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgp
OwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1
ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRT
aXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkK
LSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0Owot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAg
ICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFy
cmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5z
aXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNl
UmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNl
U2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
fQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJj
ZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0
aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdo
IENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUltYWdlKCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRo
aXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCi17Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkgfHwgUExBVEZPUk0oV0lOKQotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1Jl
ZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOwotI2VuZGlmCi0gICAgcmV0dXJu
IGtVVFR5cGVKUEVHOwotfQotICAgIAotc3RhdGljIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRp
RnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICAv
LyBGSVhNRTogV2h5IGRvZXNuJ3QgaU9TIHVzZSB0aGUgQ29yZVNlcnZpY2VzIHZlcnNpb24/Ci0j
aWYgUExBVEZPUk0oTUFDKQotICAgIHJldHVybiBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNy
ZWF0ZUNGU3RyaW5nKCk7Ci0jZWxzZQotICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0
IGlzIHVuY2xlYXIgaWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KLQotICAgIC8vIEZJWE1FOiBBZGQg
V2luZG93cyBzdXBwb3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8g
Y29udmVydCBmcm9tIE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KLSAgICAvLyBG
b3Igbm93LCBvbmx5IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzYwOTUyODY+LgotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0g
Q0ZTVFIoInB1YmxpYy5wbmciKTsKLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZUdJRiA9IENGU1RSKCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKLQotICAgIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQotICAgICAgICByZXR1
cm4ga1VUVHlwZVBORzsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWlt
ZVR5cGUsICJpbWFnZS9qcGVnIikpCi0gICAgICAgIHJldHVybiBqcGVnVVRJKCk7Ci0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikpCi0g
ICAgICAgIHJldHVybiBrVVRUeXBlR0lGOwotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGJvb2wgZW5jb2RlSW1h
Z2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKLXsKLSAgICBpZiAoIWltYWdlIHx8ICF1dGkg
fHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwg
MCkpOwotICAgIGlmICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKLSAgICBpZiAoQ0ZF
cXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1
YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5
IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgotICAgICAgICBhdXRvIGNvbXByZXNzaW9u
UXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NG
TnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIGtleSA9
IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKLSAgICAgICAgY29u
c3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7Ci0gICAgICAgIGltYWdl
UHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwg
MSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOwotICAgIH0KLQotICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlv
bkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0
aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCi0gICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25z
LCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCi0KLSAgICBDR0ltYWdlRGVzdGluYXRpb25B
ZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7
Ci0gICAgcmV0dXJuIENHSW1hZ2VEZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgp
KTsKLX0KLQotc3RhdGljIFN0cmluZyBkYXRhVVJMKENGRGF0YVJlZiBkYXRhLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQotewotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2
NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoZGF0YSksIGJh
c2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIg
KyBiYXNlNjREYXRhOwotfQotCi1zdGF0aWMgVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZE
YXRhUmVmIGNmRGF0YSkKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBkYXRhLmFw
cGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsK
LSAgICByZXR1cm4gZGF0YTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEg
PSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0
YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAg
aWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAg
cmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWlt
ZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRpKTsKLQotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRp
cGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0g
ICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0
byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBs
aWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBs
b2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9n
aWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVy
aWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRh
U2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRl
ckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFT
aXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUo
bG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAq
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0
ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5n
ZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2Ug
aWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNl
cnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENv
cHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAg
ICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2Fs
U2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6
ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwg
a0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXpl
KCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0g
c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShsb2dpY2FsU2l6ZSgpKTsKLSAgICAgICAgQ0dDb250ZXh0
RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2Vy
U3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQo
KSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShj
b250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0
YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2Rl
SW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQot
Ci1zdGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291
cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17
Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRpKTsKLQotICAgIENHSW1hZ2VBbHBo
YUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OwotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHBy
ZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkp
KSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2Ug
aGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBzaXpl
X3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKLSAgICAgICAg
aWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNp
emUpOwotICAgICAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5k
YXRhKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFbaSArIDNdOwotICAgICAgICAgICAgaWYg
KGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kg
KyAwXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRh
W2kgKyAxXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBk
YXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF07Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOwotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0g
PSBkYXRhW2kgKyAyXTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGRhdGFB
bHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhh
IGNoYW5uZWwuCi0gICAgICAgIGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7Ci0gICAg
fQotCi0gICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndp
ZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwotICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRD
RihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgo
KSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOwotICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVh
dGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRh
dGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0lu
dGVudERlZmF1bHQpKTsKLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGlt
YWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotU3RyaW5n
IGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRh
KHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRh
LmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1
aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IGNm
RGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0
b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IElt
YWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAgIHJldHVybiBt
X2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwgbV9zaXpl
LndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjNkOWVkZDBlZjUx
ZjM4NDFhYzU4YzhiNjFlMTVjZTJkNGE1Y2Y3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDIzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKwor
I2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6c2V0dXBDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0x
KSk7CisgICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkp
OworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxl
KTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUp
Cit7CisgICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19j
YXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oaW50ZXJuYWxTaXplLmhlaWdodCgpKSkpCisgICAg
ICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENH
UmVjdE1ha2UoMCwgMCwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQo
KSkpKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYg
aW1hZ2UsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVS
ZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwor
ICAgIGVsc2UgeworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwg
NCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29u
dGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNp
emUpKTsKKyAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNp
emU7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsK
KyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRl
eHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsK
K30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jl
c29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29s
dXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9y
KTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9sb2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVz
b2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVy
bmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3Zv
aWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3Jj
UmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwg
bV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBzcmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRl
eHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAg
IGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVj
dCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZp
bmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAor
eworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNp
emUuaGVpZ2h0KCkpOworfQorCitSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOworICAgIAorICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVm
ZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IGltYWdlOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVs
dGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsK
KyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZl
IHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHByZW11bHRp
cGxpZWREYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSksIENvb3JkaW5hdGVTeXN0
ZW06OkxvZ2ljYWwpOworICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gNCAqIGxvZ2lj
YWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNp
emUpOworICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6
ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVP
cmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0
KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlm
IChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5
QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAg
YXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNp
emUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUo
KS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtD
R0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0
KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgp
LmhlaWdodCgpKSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWln
aHQoKSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0
YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7
CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBj
ZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZN
b3ZlKGNmRGF0YSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRh
LmdldCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7Cisg
ICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJl
c29sdXRpb24pKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7
CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRp
YyBpbmxpbmUgdkltYWdlX0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVy
Um93LCB1aW50OF90KiByb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9C
dWZmZXIgdkltYWdlQnVmZmVyOworICAgIAorICAgIHZJbWFnZUJ1ZmZlci5oZWlnaHQgPSBzdGF0
aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLmhlaWdodCgpKTsKKyAgICB2SW1hZ2VCdWZm
ZXIud2lkdGggPSBzdGF0aWNfY2FzdDx2SW1hZ2VQaXhlbENvdW50PihzaXplLndpZHRoKCkpOwor
ICAgIHZJbWFnZUJ1ZmZlci5yb3dCeXRlcyA9IGJ5dGVzUGVyUm93OworICAgIHZJbWFnZUJ1ZmZl
ci5kYXRhID0gcm93czsKKyAgICByZXR1cm4gdkltYWdlQnVmZmVyOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoCisgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHZJbWFn
ZV9CdWZmZXImIHNyYywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQorewor
ICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNT
RVJUKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCk7CisgICAgICAgIEFTU0VSVChk
ZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCk7
CisKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAg
ICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQ
ZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3Mp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlm
IChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFn
ZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdklt
YWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xv
ckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFu
bmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwg
MSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3Qs
ICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3Jj
Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQg
ZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkg
Y29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNy
Y0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJS
b3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VC
dWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQ
aXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVz
dEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjlhYjdhNzQ2OTMzZGQxZDI3NzY4Y2E0NDhlYThmYzYxZmE0MWU3NDIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFn
ZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+
IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQg
ZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKwor
ICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZvaWQgc2V0dXBDb250
ZXh0KCk7CisgICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3Q7CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyAgICB2b2lkIGNvcHlJbWFnZVBp
eGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29s
b3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90
KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Qgb3ZlcnJpZGU7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjMzMzk0N2VmNTVk
YjkwNzllZTJlYzllNWI4YmE1NzllYjVhZWIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJbmZv
ID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMy
SG9zdDsKKyNlbHNlCitjb25zdGV4cHIgY29uc3QgQ0dCaXRtYXBJbmZvIERlZmF1bHRCaXRtYXBJ
bmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OworI2VuZGlmCisKK1dURl9NQUtF
X0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJ
bnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHZvaWQqIGRhdGE7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3cg
PSA0ICogaW50ZXJuYWxTaXplLndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2MoaW50
ZXJuYWxTaXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4oZGF0YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBpbnRlcm5hbFNpemUuaGVp
Z2h0KCkgKiBieXRlc1BlclJvdzsKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRh
dGEsIG51bUJ5dGVzKTsKKworICAgIGF1dG8gY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUoZGF0YSwgaW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWln
aHQoKSwgOCwgYnl0ZXNQZXJSb3csIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgRGVm
YXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4o
Y2dDb250ZXh0LmdldCgpKTsKKworICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtd
ICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNv
bnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAgICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIg
PSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMs
IHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgZGF0YSwgV1RGTW92
ZShkYXRhUHJvdmlkZXIpLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dE
YXRhUHJvdmlkZXJSZWY+JiYgZGF0YVByb3ZpZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6
ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2Rh
dGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAg
ICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VSVChtX2RhdGEpOwor
ICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAg
c2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQor
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAo
Y29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1
cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCkpKTsKKyAgICAKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAg
ICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAgICAgICAgICAgbV9pbnRlcm5hbFNp
emUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygp
LAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRC
aXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOworfQorCitSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICByZXR1
cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0
LCBjb29yZGluYXRlU3lzdGVtLCBtX2RhdGEpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBzcmNTaXplLCBzcmNSZWN0LCBkZXN0
UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fZGF0YSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcwYWE5NjYzMTNjOWMzYTgwYTAxZWJjOGYwMWIwZTNkNGYxMTVlZDgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
Q0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9J
c29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRl
OworICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0
ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25z
dCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVy
Um93KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLndpZHRoKCk7
IH0KKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xv
ckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9Cisj
ZW5kaWYKKworICAgIHZvaWQqIG1fZGF0YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+IG1fZGF0YVByb3ZpZGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+
IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyRGF0YUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFm
YzAzMWNjMDY2NGRlN2E1NzdkMWJjYjViNDk2MmZkZDJlYWJhYy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lm
IFVTRShDRykKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJl
Y3QuaCIKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5
cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJB
VEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgi
Ci0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlzcGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29h
L0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJl
cyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUg
VVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShj
b25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0g
ICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChr
dkltYWdlTm9FcnJvciAhPSB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNo
YW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJH
UkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7
IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3Qs
ICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlw
bHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZl
ciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEp
OwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3Vy
ZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhf
dCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJH
Qjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBV
U0UoQUNDRUxFUkFURSkgJiYgKFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0
cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRl
c1BlclJvdykKLXsKLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAg
IEFTU0VSVChvdXRwdXQpOwotCi0gICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRo
ID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdodCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBp
bnB1dEJ5dGVzUGVyUm93OwotICAgIHNyYy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVm
ZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVp
Z2h0OwotICAgIGRlc3Qucm93Qnl0ZXMgPSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0
cHV0OwotCi0gICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3Qs
IGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGlucHV0KTsKLSAgICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNF
RF9QQVJBTShoZWlnaHQpOwotICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VM
RVJBVEUuCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVp
bnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4g
cmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdodCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJp
bmcpIHsKLSAgICAgICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBo
ZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVz
dWx0OwotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1
bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJm
YWNlLT5ieXRlc1BlclJvdygpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0j
ZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nKSBjb25zdAotewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92
ZXJmbG93PiBhcmVhID0gNDsKLSAgICBhcmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9
IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVz
dWx0RGF0YSA9IHJlc3VsdCA/IHJlc3VsdC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJl
c3VsdERhdGEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVu
ZHggPSByZWN0Lm1heFgoKTsKLSAgICBDaGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgpOwot
ICAgIGlmIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkg
PiBzaXplLndpZHRoKCkgfHwgZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgp
OwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0
aCgpOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54Owot
ICAgICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0g
ICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkg
LSBvcmlnaW54KTsKLSAgICBpZiAoZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAg
ICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4
IC0gb3JpZ2lueDsKLSAgICAKLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBk
ZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBp
ZiAob3JpZ2lueSA8IDApIHsKLSAgICAgICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVz
dHkgPSAtb3JpZ2lueTsKLSAgICAgICAgb3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0g
c3RkOjptaW48aW50PihkZXN0aC51bnNhZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkp
OwotICAgIGlmIChlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5k
eSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmln
aW55OwotICAgIAotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNh
ZmVHZXQoKSA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJv
d3MgPSByZXN1bHREYXRhICsgZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0g
ICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93czsK
LSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRh
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9
IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oZGF0YSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54
ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAg
ICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2Fm
ZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3Jj
LmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAg
ICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0
LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0j
aWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBk
ZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4
OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAg
ICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFT
SCgpOwotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7
ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZl
R2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAg
ICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNp
ZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVy
ZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgICAg
ICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBh
bHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3Jj
Um93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsg
Ml07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93
c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAg
ICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1
KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+
KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0
Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5
KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4
ICs9IDQpCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihk
ZXN0Um93cyArIHgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4
KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsK
LSAgICAgICAgc3JjQnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAg
ICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0Uo
QUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0
aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2Fm
ZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
c3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAg
ICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9
IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0cHV0
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAg
ICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4K
LSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAg
ICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwg
a3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRoICog
NCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAo
b3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkg
ewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsr
eSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0
KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAg
ICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1
KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IChiICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXgg
KyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyAr
K3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdl
dCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAg
ICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAg
ICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBB
U1NFUlQoc291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVp
Z2h0KCkgPiAwKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3Qu
eCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50Lngo
KSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDAp
OwotICAgIEFTU0VSVF9VTlVTRUQoc2l6ZSwgZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRo
KCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChv
cmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVj
a2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0
Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsK
LSAgICAKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAg
Q2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5keCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9y
aWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0
eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXpl
LmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBB
U1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0g
ICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291
cmNlUmVjdC5tYXhZKCkpOwotICAgIEFTU0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVp
Z2h0KCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7
Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3RoID0gZW5keSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3
aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0
IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1Bl
clJvdyArIG9yaWdpbnggKiA0KS51bnNhZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgdWludDhfdCogZGVzdFJvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAg
ICAgZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0eSAq
IGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7
Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0
ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1
aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAg
ICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRl
c3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVz
ID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0K
LSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBk
ZXN0KTsKLSNlbHNlCi0gICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICog
NDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwot
I2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVu
dCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICBpZiAo
c291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAm
JiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0g
KHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSAr
IDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAo
c3JjUm93c1tiYXNleCArIDBdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCAr
IDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3Jj
Um93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChzb3Vy
Y2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFs
cGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3Jj
Um93c1tiYXNleF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8g
MjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3Nb
YmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNl
eClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4
KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJmYWNl
OjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1BlclJv
dyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gc3RhdGljX2Nh
c3Q8dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5
dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRF
KQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0g
ICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9
IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBk
ZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0g
ZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAg
ICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JB
IHRvIEJHUkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwg
MyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZk
ZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAg
ICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3Jj
Um93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9
IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBh
bHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0
Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyRGF0YUNHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTVhNTRh
ZDkxMTc5NTNjYTVlNjk2ZGEwN2U2ZTBkZjY4MTQzZDU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UK
LQotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFt
cGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VS
ZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10
eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUg
YmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4g
Ynl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBP
bmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIg
fTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBD
R0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250
ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkK
LSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+
IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNj
ZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVu
ZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmNDg4YzgxMjdiYjY4YzFmNTZmY2FmZmU0
NzMwYTMyMjEyNDViZTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
MTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCIKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsK
KyAgICBpZiAoaW50ZXJuYWxTaXplLndpZHRoKCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaW50ZXJu
YWxTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6
ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNp
emUsIGludGVybmFsU2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBp
ZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENH
Q29udGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhv
c3RXaW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9h
dFBvaW50Ojp6ZXJvKCksIGludGVybmFsU2l6ZSkpOworICAgIAorICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFj
ZSkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1
cmZhY2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dCgpOwor
fQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0
KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQo
KQoreworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9
CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25z
dAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKworc2l6ZV90IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbWVtb3J5Q29zdCgpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNl
LT5ieXRlc1BlclJvdygpOworfQorCitDb2xvckZvcm1hdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yRm9y
bWF0OjpCR1JBOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVy
biBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJu
IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lk
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAg
IEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0
aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3Vy
ZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1
cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
Km1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbG9jay5zdXJmYWNlQmFz
ZUFkZHJlc3MoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNl
LCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKKyAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbG9jay5zdXJmYWNlQmFzZUFkZHJl
c3MoKSk7CisKKyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGlt
YWdlLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU3OTY2IGZvciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0
KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzZWE0NjFiYTY1NzZjM2E4NjQxNjQw
ZjYyNjcxMGM5NDJmODcwMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IElPU3VyZmFjZTsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyop
OworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
dm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFn
ZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7
ICAgIAorICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5
c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJ
bnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAg
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CisKKyAgICB1bnNpZ25lZCBi
eXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xv
ckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCmluZGV4
IDg5ZDA0MzljMjEwZGI1MDFhYzkzOWViMTE0MTQ4ODFlZWVjNjViMjQuLmQwOTEzOWYwMWJkMzM2
ZjI4NDhhZWE1MjZhNGY5ZjgwMGVlNzg1ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3Bw
CkBAIC0yNiw3ICsyNiwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuaCIKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9D
aGVja2VkQXJpdGhtZXRpYy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYg
UExBVEZPUk0oQ09DT0EpCisjaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCisjZW5kaWYKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw0ICs1MiwxNDAgQEAgdWludDhfdCB2ZXJpZnlJbWFn
ZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUp
CiAgICAgcmV0dXJuICoodWludDhfdCopbGFzdEJ5dGU7CiB9CiAKK0NGU3RyaW5nUmVmIGpwZWdV
VEkoKQoreworI2lmICFQTEFURk9STShDT0NPQSkKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdS
ZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKKyNlbmRpZgorICAgIHJldHVy
biBrVVRUeXBlSlBFRzsKIH0KKworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VC
dWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworI2lmIFBMQVRGT1JNKENP
Q09BKQorICAgIHJldHVybiBVVElGcm9tTUlNRVR5cGUobWltZVR5cGUpLmNyZWF0ZUNGU3RyaW5n
KCk7CisjZWxzZQorICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7IC8vIEl0IGlzIHVuY2xlYXIg
aWYgQ0ZTVFIgaXMgdGhyZWFkc2FmZS4KKworICAgIC8vIEZJWE1FOiBBZGQgV2luZG93cyBzdXBw
b3J0IGZvciBhbGwgdGhlIHN1cHBvcnRlZCBVVElzIHdoZW4gYSB3YXkgdG8gY29udmVydCBmcm9t
IE1JTUVUeXBlIHRvIFVUSSByZWxpYWJseSBpcyBmb3VuZC4KKyAgICAvLyBGb3Igbm93LCBvbmx5
IHN1cHBvcnQgUE5HLCBKUEVHLCBhbmQgR0lGLiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzYwOTUyODY+
LgorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZTVFIoInB1Ymxp
Yy5wbmciKTsKKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUdJRiA9IENGU1RS
KCJjb20uY29tcHVzZXJ2ZS5naWYiKTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL3BuZyIpKQorICAgICAgICByZXR1cm4ga1VUVHlwZVBO
RzsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFn
ZS9qcGVnIikpCisgICAgICAgIHJldHVybiBqcGVnVVRJKCk7CisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvZ2lmIikpCisgICAgICAgIHJldHVy
biBrVVRUeXBlR0lGOworCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGtV
VFR5cGVQTkc7CisjZW5kaWYKK30KKworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdl
LCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0
YVJlZiBkYXRhKQoreworICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURl
c3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7CisgICAgaWYgKCFkZXN0
aW5hdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmV0YWluUHRyPENGRGljdGlv
bmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOworICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgp
KSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAg
ICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2Ug
ZGVzdGluYXRpb24uCisgICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihD
Rk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAm
KnF1YWxpdHkpKTsKKyAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlv
bkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNv
bXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKKyAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25h
cnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CisgICAg
fQorCisgICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRv
IGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21l
IG1hdGgKKyAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNl
ZW0gdG8gd29yay4KKyAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5n
ZXQoKSwgaW1hZ2UsIGltYWdlUHJvcGVydGllcy5nZXQoKSk7CisgICAgcmV0dXJuIENHSW1hZ2VE
ZXN0aW5hdGlvbkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKK30KKworc3RhdGljIFJldGFp
blB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOworCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1l
VHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBo
YUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291
cmNlLmRhdGEoKS0+ZGF0YSgpOworICAgIFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0
YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAv
LyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFs
bHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgc2l6ZV90IHNpemUgPSA0ICog
c291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7CisgICAgICAgIGlmICghcHJlbXVsdGlw
bGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEuZ3JvdyhzaXplKTsKKyAgICAgICAg
dW5zaWduZWQgY2hhciogYnVmZmVyID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0gNCkgeworICAgICAgICAgICAgdW5z
aWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKKyAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUp
IHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAv
IDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBo
YSAvIDI1NTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBh
bHBoYSAvIDI1NTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAwXSA9IGRhdGFbaSArIDBdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBk
YXRhW2kgKyAxXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NH
SW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgorICAg
ICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOworICAgIH0KKworICAgIHZlcmlm
eUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNl
LmhlaWdodCgpKTsKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlk
ZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVp
Z2h0KCksIDApKTsKKyAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0
aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xv
clNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBk
YXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7
CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxv
Y2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRp
LmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9CisKK1N0cmluZyBkYXRhVVJMKENGRGF0
YVJlZiBkYXRhLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIFZlY3RvcjxjaGFyPiBi
YXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZShDRkRhdGFHZXRCeXRlUHRyKGRhdGEpLCBDRkRh
dGFHZXRMZW5ndGgoZGF0YSksIGJhc2U2NERhdGEpOworICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKK30KKworU3RyaW5nIGRhdGFVUkwoY29u
c3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWlt
ZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1l
VHlwZSk7CisgICAgcmV0dXJuICJkYXRhOiwiX3M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRh
VmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Cisg
ICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgo
Y2ZEYXRhKSk7CisgICAgcmV0dXJuIGRhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNv
bnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1p
bWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCmluZGV4IDE2MTI4YTE5YWJkMWZiODNh
YjMxYTExNWM2ODk1MDQ5MWQ0MTk1NTIuLjg0YzU3ZDJmZWU5MzM4ZWQ1ZTBlZmM0YThlMzM2NWEx
OWE4MDIwNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKQEAgLTI1LDggKzI1LDMxIEBACiAK
ICNwcmFnbWEgb25jZQogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEltYWdlRGF0YTsKKwogV0VCQ09SRV9FWFBP
UlQgdWludDhfdCB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGNvbnN0IHZvaWQqIGJ1ZmZl
ciwgc2l6ZV90IGJ1ZmZlclNpemUpOwogCi19CitDRlN0cmluZ1JlZiBqcGVnVVRJKCk7CitSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYpOworCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYsIENGU3RyaW5nUmVmIHV0aSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmKTsKKworU3RyaW5nIGRhdGFV
UkwoQ0ZEYXRhUmVmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKK1N0cmluZyBkYXRhVVJMKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZik7CitWZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCmluZGV4IDgwZjZiMTg3MjUyMjk2OGVh
N2Q5NTc2YjdlMDA1NjMzMzI1ODgyM2MuLjI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1
OGI1NjJlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9DR1BERkRvY3VtZW50Lmg+CisjaW5jbHVkZSA8cGFsL3NwaS9j
Zy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAppbmRleCAy
NDNjNDhiOTUxYjE3NGI2YjI0YmFjNTM2NGM5YTA0ZmY5NjljZGIzLi40Y2MwZmEzZjc5NzI3ZWI5
ZGVlZGM0YWQwZTExNzM0ZGFiMjE0YTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaApAQCAtMTAwLDEwICsxMDAsNiBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21TdXJm
YWNlKElPU3VyZmFjZVJlZiwgQ0dDb2xvclNwYWNlUmVmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlKENHSW1hZ2VS
ZWYpOwogICAgIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSNlbmRpZgotCiAgICAgV0VCQ09SRV9FWFBP
UlQgfklPU3VyZmFjZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgbW92ZVRv
UG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYx
NjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJk
MTRmZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0
V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZl
ci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIK
ICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFw
aGljc1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9v
bChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9v
bDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3Vy
ZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZl
ci0+bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9w
dGlvbnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1h
dCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRl
c1BlclBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNhMTE0OWUzZjJhZTQ5Mi4u
MmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xp
c3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXpl
X3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXpl
KCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdD4gRGlzcGxheUxp
c3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwogCiB9
IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Owot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45OWYxY2UyNzM1NDUwYmRhYzNiYmRmMTFhMzA4NWQ5YTdmM2M5ZTE1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUg
IkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250ZXh0IHsKK3B1YmxpYzoK
KyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplKQorICAgICAg
ICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRl
eHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0s
IGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICB9KQorICAgIHsKKyAg
ICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgIH0KKyAgICBEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3Qg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsg
fQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICB7CisgICAg
ICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsK
KyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisgICAg
eworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxh
eUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAgICAg
ICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIucmVw
bGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rpc3Bs
YXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNwbGF5
TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OworfTsK
KworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRl
eCBlNjE0MWJkZTMyMDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1Li5hZjNhYWRlMmEzMzJj
YzEwYTk2MTNmMjEyNjE3MTdkZDFkODU4YjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTI4
NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVm
ZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7
CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+bG9naWNh
bFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9uczsKLSAgICBhdXRvIHBp
eGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVj
dCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKKyAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCwgaW1hZ2VSZWN0KTsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFZlY3RvcjxmbG9hdD4gdmFsdWVzID0gbm9ybWFsaXplZEZsb2F0cyhtX3ZhbHVlcyk7CiAK
KyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gcmVzdWx0SW1hZ2UtPmxvZ2ljYWxT
aXplKCk7CisgICAgcGl4ZWxBcnJheURpbWVuc2lvbnMuc2NhbGUocmVzdWx0SW1hZ2UtPnJlc29s
dXRpb25TY2FsZSgpKTsKKwogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9S
TUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAg
dm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCks
IGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpwaXhlbEFycmF5LCBpbWFn
ZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFk
b3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCmluZGV4IDIzNjY2YTFhZWY1MzUzMjE0OTNjOWVhMmQ1NjE4ZThmZGRkODRlY2Iu
LjI1ZDU3YWYwNmMwMWE3Yzc4YTdmYjk0N2Q0MDU4MDA0ZWE3MTcyZDggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAKQEAgLTEwMCwxMyArMTAwLDEzIEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFn
ZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCiAgICAgSW50UmVjdCBz
aGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAg
YXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURh
dGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5h
dGVTeXN0ZW0pOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSwg
Q29vcmRpbmF0ZVN5c3RlbTo6QmFja2luZ1N0b3JlKTsKICAgICBpZiAoIXNyY1BpeGVsQXJyYXkp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHRTaGFkb3cuYmx1ckxheWVySW1hZ2Uoc3Jj
UGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAqIHNoYWRvd0FyZWEuc2l6
ZSgpLndpZHRoKCkpOwogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxB
cnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYS5z
aXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBzaGFkb3dBcmVh
LnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6QmFja2lu
Z1N0b3JlKTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBv
c2l0ZU9wZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9h
dFJlY3QoRmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93
Q29sb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmgKaW5kZXggNDllOGM1YTI2ZTc3MWM0MjQ5Njc4MTk1MjdhNTYyNzM1M2RmNDQ5Ni4u
ZGQzNWNjNjViMTM3ZDgyMmM3MDE1MzJkYWJkMjQ5MDA0YmYyYTlmNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCkBAIC03MSw3ICs3
MSw3IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBtX3NvdXJj
ZUltYWdlOwogICAgIEZsb2F0U2l6ZSBtX2ZpbHRlclJlc29sdXRpb247CiAgICAgQWZmaW5lVHJh
bnNmb3JtIG1fYWJzb2x1dGVUcmFuc2Zvcm07Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmlu
Z01vZGUgeyBVbmFjY2VsZXJhdGVkIH07CisgICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmluZ01v
ZGUgeyBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkIH07CiAgICAgZmxvYXQgbV9maWx0ZXJT
Y2FsZSB7IDEgfTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5
NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi41YzhiM2I0ZGUwYWZhNzE0NThjZGNmNmM2YmMwZmZk
MmNjYmQxNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VC
dWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBk
ZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwog
ICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwg
ZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICpt
X3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGlu
YXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5
dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJl
Y3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0KTsK
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDQzLDcgKzQ0
Myw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xh
bXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9tIHRoZSBp
bWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0gICAgICAg
ICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpAQCAtNDY5LDcgKzQ2OSw3
IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1w
ZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGlt
YWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAg
ICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWlu
dFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjVhMGQ1MGY4Y2UxYWFmNjUzNWRlZWM5NDBi
ODVkYzU1MTdlNGIxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMp
IDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiQ2Fp
cm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHUmVmUHRyR3RrLmgiCi0jaW5jbHVkZSAiR2RrQ2Fp
cm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8
Y2Fpcm8uaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1
ZVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
R1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCi17Ci0gICAg
Ly8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUg
R2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCi0gICAgLy8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5v
cmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhi
dWYtc2F2ZS10by1idWZmZXJ2Ci0KLSAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmlu
ZyhzaXplb2YgImltYWdlIik7Ci0gICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBu
ZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOwot
ICAgIGlmICh0eXBlID09ICJqcGVnIikgewotICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9y
dCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwo
KSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCi0gICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Ut
b3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KLSAg
ICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKLSAgICAgICAgaWYgKGNh
aXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdF
KSB7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwK
LSAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCi0gICAgICAgICAgICAgICAgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsK
LSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2Ny
ZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwot
ICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5l
d1N1cmZhY2UuZ2V0KCkpKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgICAgICAgICBjYWlyb19wYWludChjci5nZXQo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRv
R2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcGl4YnVm
ID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKLSAgICBpZiAo
IXBpeGJ1ZikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOwotICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5
ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJp
bmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAw
LjUpKTsKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZi
dWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5v
dXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOwot
ICAgIH0gZWxzZQotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQo
KSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVy
cm9yLm91dFB0cigpLCBOVUxMKTsKLQotICAgIHJldHVybiAhZXJyb3I7Ci19Ci0KLVN0cmluZyBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1
aW50OF90PiBpbWFnZURhdGEgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChp
bWFnZURhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0
b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoaW1hZ2VEYXRhLmRhdGEoKSwg
aW1hZ2VEYXRhLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1p
bWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIEdVbmlxdWVP
dXRQdHI8Z2NoYXI+IGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAgIGlmICghZW5j
b2RlSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbWltZVR5cGUsIHF1YWxpdHksIGJ1ZmZl
ciwgYnVmZmVyU2l6ZSkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBWZWN0b3I8dWludDhf
dD4gaW1hZ2VEYXRhOwotICAgIGltYWdlRGF0YS5hcHBlbmQoYnVmZmVyLmdldCgpLCBidWZmZXJT
aXplKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05p
Y29zaWFHQzNETGF5ZXIuY3BwCmluZGV4IDRjNGM0MjY5NjEyNzFjN2I3YTE5ZDI5NmE5NDAwZWZk
YzBmYWM5YWUuLjc1NzAwM2IxZjExZGY0YjI3NjZiNDA5ZTgyMmNkOGI0MjBmYjRhNWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05p
Y29zaWFHQzNETGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwCkBAIC05NCw3ICs5NCw3IEBAIHZv
aWQgR0MzRExheWVyOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKICAgICBJbnRTaXplIHRleHR1cmVT
aXplKG1fY29udGV4dC5tX2N1cnJlbnRXaWR0aCwgbV9jb250ZXh0Lm1fY3VycmVudEhlaWdodCk7
CiAgICAgVGV4dHVyZU1hcHBlckdMOjpGbGFncyBmbGFncyA9IG1fY29udGV4dC5jb250ZXh0QXR0
cmlidXRlcygpLmFscGhhID8gVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCA6IDA7CiAjaWYg
VVNFKEFOR0xFKQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIg
PSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSh0ZXh0dXJlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKaW5kZXgg
N2QyY2VmZDYyNjFkZWUyYTM5YTg5ZDEwMTcwMmViNTAyNTJmNGY1ZS4uZjAzOTEzODA2MGQzNDQz
NGU2Y2RkYmY5NmVhNjRjMzAxYTYzNTUzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcApAQCAtMzgsNyAr
MzgsNyBAQCB2b2lkIEJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKFRleHR1cmVNYXBwZXIm
LCBHcmFwaGljc0xheWVyKiBzb3VyY2VMYXllciwgYwogewogICAgIC8vIE1ha2luZyBhbiB1bmNv
bmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIgaGVyZSBpcyBPSyBiZWNhdXNlIHRoaXMg
Y29kZQogICAgIC8vIGlzbid0IHVzZWQgYnkgYW55IHBsYXRmb3JtcyB0aGF0IHJlc3BlY3QgdGhl
IGFjY2VsZXJhdGVkIGJpdC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgVW5hY2NlbGVy
YXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogCiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVv
U291cmNlLmNwcAppbmRleCBjYTExYmI4YmEwYjE5MTBjNjI3OTY3ZDRkMjYwYjA0YzY4NDg2NzMx
Li41YWM5ZDY2MDZjNDIyMTI0OGJjNDFkZTkzODljZTVjODdlNGE0MTdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNl
LmNwcApAQCAtNDU4LDcgKzQ1OCw3IEBAIEltYWdlQnVmZmVyKiBNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6aW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChtX2ltYWdlQnVmZmVyKQogICAgICAg
ICByZXR1cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKIAotICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIG1faW1h
Z2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNhcHR1cmVTaXplKCksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9pbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmlu
ZGV4IGQ1YjkxYjI2ODZhZTI2MWViNTNjMDY4OWJlZWM2MmY1NWUzZmI0NTguLjhmNTBlNTc1NzFk
N2IzODUwMGVlZDdiY2RhNmIzYTY0MmFiZjc5NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcApAQCAtNjkwNSw3ICs2OTA1LDcgQEAgdm9pZCBSZW5kZXJMYXllcjo6
dXBkYXRlRmlsdGVyUGFpbnRpbmdTdHJhdGVneSgpCiAgICAgfQogICAgIAogICAgIGVuc3VyZUxh
eWVyRmlsdGVycygpOwotICAgIG1fZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFn
ZSgpLmRldmljZVNjYWxlRmFjdG9yKCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRl
ZEZpbHRlcnNFbmFibGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIG1f
ZmlsdGVycy0+YnVpbGRGaWx0ZXIocmVuZGVyZXIoKSwgcGFnZSgpLmRldmljZVNjYWxlRmFjdG9y
KCksIHJlbmRlcmVyKCkuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVkKCkgPyBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogfQogCiB2b2lkIFJlbmRlckxheWVyOjpmaWx0ZXJOZWVkc1JlcGFpbnQoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA5MTQyMDI5YTJkNDQ2NGRmNWNi
N2IzYTQ0MTkzYmUyODYzYzFlZDJhLi45MzVhNmVlOWU3NmZmNDQwMmY5ODRiNWQyYjUyMWE2OTkx
YzYxNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcApAQCAt
MTgxLDE0ICsxODEsMTQgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlUmFz
dGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICBJbnRSZWN0IG1h
cmdpblJlY3QgPSBzbmFwcGVkSW50UmVjdChtYXJnaW5SKTsKICAgICBhdXRvIGludGVydmFscyA9
IG1ha2VVbmlxdWU8UmFzdGVyU2hhcGVJbnRlcnZhbHM+KG1hcmdpblJlY3QuaGVpZ2h0KCksIC1t
YXJnaW5SZWN0LnkoKSk7CiAgICAgLy8gRklYTUUgKDE0OTQyMCk6IFRoaXMgYnVmZmVyIHNob3Vs
ZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VS
ZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoaW1hZ2VCdWZmZXIpIHsK
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQgPSBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQuZHJhd0ltYWdlKCppbWFnZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgp
KSk7CiAKLSAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhlbEFycmF5ID0gaW1h
Z2VCdWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGlt
YWdlUmVjdC5zaXplKCkpKTsKKyAgICAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwaXhl
bEFycmF5ID0gaW1hZ2VCdWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwaXhlbEFycmF5KTsKICAgICAgICAgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25l
ZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JB
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCmluZGV4IDA4ZTQ5MjgyYWQ5M2JjYWNkMjk3NzViODQ2ZjA1OWQ1
YTJjYTcxM2UuLjFkNzdiNjNjNmZlMjgzMTJhZTExZWQ4MjViNTIzYWFjZTcxN2VjNWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlw
cGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKQEAgLTE0Miw3ICsxNDIsNyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNl
Q2xpcHBlcjo6YXBwbHlDbGlwcGluZ1RvQ29udGV4dChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwg
YwogCiAgICAgaWYgKHNob3VsZENyZWF0ZUNsaXBwZXJNYXNrSW1hZ2UgJiYgIXJlcGFpbnRSZWN0
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBGSVhNRSAoMTQ5NDY5KTogVGhpcyBpbWFnZSBidWZm
ZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0
IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBuZXN0ZWQgY2xpcHBpbmcsIHRob3VnaC4KLSAgICAg
ICAgY2xpcHBlck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVm
ZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgVW5h
Y2NlbGVyYXRlZCwgJmNvbnRleHQpOworICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJh
bnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCAm
Y29udGV4dCk7CiAgICAgICAgIGlmICghY2xpcHBlck1hc2tJbWFnZSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAppbmRleCA3NWI1OWI2M2MzZTQ5NjBiZDRlM2Jk
YmQ4NzQ5MmE5MzJmNDMxNjFiLi4xMmU3ZjE1ZDYzMmQ3NmQ5OWY2YmFiYTkzOGQwZDllMjYzNGQ4
ZTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgUmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNv
bnN0IFJlbmRlCiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLnNjYWxlKHNjYWxlLndpZHRoKCksIHNj
YWxlLmhlaWdodCgpKTsKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0ubXVsdGlwbHkoZmlsdGVyRGF0
YS0+c2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVk
KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7CisgICAgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlID0gcmVuZGVyZXIuc2V0dGluZ3MoKS5hY2NlbGVyYXRlZEZpbHRlcnNFbmFibGVk
KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CiAgICAgYXV0byBzb3VyY2VHcmFwaGljID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIoZmlsdGVyRGF0YS0+ZHJhd2luZ1JlZ2lvbiwgZWZmZWN0aXZlVHJhbnNm
b3JtLCBDb2xvclNwYWNlOjpMaW5lYXJSR0IsIHJlbmRlcmluZ01vZGUsIGNvbnRleHQpOwogICAg
IGlmICghc291cmNlR3JhcGhpYykgewogICAgICAgICBBU1NFUlQoIW1fcmVuZGVyZXJGaWx0ZXJE
YXRhTWFwLmNvbnRhaW5zKCZyZW5kZXJlcikpOwpAQCAtMjg2LDcgKzI4Niw3IEBAIHZvaWQgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBHcmFwaGljCiAgICAgICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZmlsdGVyRGF0
YS5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZmls
dGVyRGF0YS5zb3VyY2VHcmFwaGljQnVmZmVyLnJlc2V0KCk7CisgICAgZmlsdGVyRGF0YS5zb3Vy
Y2VHcmFwaGljQnVmZmVyID0gbnVsbHB0cjsKIAogICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJz
LCBzdHJlYW0gPDwgIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyICIgPDwgdGhpcyA8PCAiIHBvc3RB
cHBseVJlc291cmNlIGRvbmVcbiIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAppbmRleCAxNzg3ZTE4YzJk
Y2VmNWJkZjk5MjQ3NGNmYzAyMmI1MTY2YWQ1ODQ4Li4xMjBjNTdiNTY5Nzg3MjIwNDY1YmM2YWVj
MGI1ODA0YzQ1NWNkODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcApAQCAtNzEsNyArNzEsNyBAQCBib29s
IFJlbmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBjb25zdCBSZW5kZQogICAgICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5
bGUgPSBzdHlsZSgpLnN2Z1N0eWxlKCk7CiAgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSA9
IHN2Z1N0eWxlLmNvbG9ySW50ZXJwb2xhdGlvbigpID09IENvbG9ySW50ZXJwb2xhdGlvbjo6TGlu
ZWFyUkdCID8gQ29sb3JTcGFjZTo6TGluZWFyUkdCIDogQ29sb3JTcGFjZTo6U1JHQjsKICAgICAg
ICAgLy8gRklYTUUgKDE0OTQ3MCk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBi
cmVha3MgYWxwaGEgbWFza2luZywgdGhvdWdoLgotICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1h
Z2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2UsIFVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwor
ICAgICAgICBtYXNrZXJEYXRhLT5tYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVh
dGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIGNvbnRleHQpOwogICAgICAgICBpZiAoIW1h
c2tlckRhdGEtPm1hc2tJbWFnZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKaW5kZXggYjgyMTQxMWFkZTc3NTA4NTYx
Njg4NTZlZDIyYjYyZWE2YjVjZDNkOS4uOTc4NjdhYWQzYzI3YjViNTM4ZDNhNzlmYjQ5NWRkZDRm
MGY0M2Q5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCkBAIC0y
MTgsNyArMjE4LDcgQEAgTmF0aXZlSW1hZ2VQdHIgU1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKGNvbnN0IEdyYXBoaWNzQ29udGV4dCopCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCiAgICAgLy8gQ2Fpcm8gZG9lcyBub3QgdXNlIHRoZSBhY2NlbGVyYXRlZCBkcmF3aW5nIGZs
YWcsIHNvIGl0J3MgT0sgdG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBi
dWZmZXIuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpIC8vIGZhaWxlZCB0byBh
bGxvY2F0ZSBpbWFnZQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQK
aW5kZXggNTMyNjc4ZjM3NjAzM2MzYzAwZjlmNmJkNWEzMGMzODY5MGUzMzRiZi4uMGFiOTIwMTYy
NGU4NjBhMGQ5Y2MwZjA3MTlmYTYzMTVmMmYxNTYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC0x
Nyw2ICsxNyw3IEBAIHNldChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dlYktp
dF9ERVJJVkVEX1NPVVJDRVNfRElSfS9pbmNsdWRlIgogICAgICIke1dFQktJVF9ESVJ9IgogICAg
ICIke1dFQktJVF9ESVJ9L0dQVVByb2Nlc3MiCisgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzIgog
ICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0NsYXNzaWZpZXIiCiAgICAgIiR7V0VC
S0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ29va2llcyIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCBlZGZiNmUxZTA1ZTU2NDAwOGI3ZDU3YTg3
NDUzNzhjNDNkNjZjZjk2Li43YTUyMTQyNWZmOTMxNzJiNWFiN2UxZGMyNDIwYWZlNjVjOTc2ZjU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxp
c3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBA
IC0xNSw2ICsxNSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW9k
ZWxzLnB5CiAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQ
Uk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2Vz
LmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQo
UFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
clByb3h5Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1Rf
RElSKS9HUFVQcm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KICQo
UFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXIubWVzc2FnZXMuaW4KQEAgLTEwMiw2ICsxMDQsNyBAQCAkKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL0NhY2hlL1dlYkNhY2hlU3RvcmFnZUNvbm5lY3Rpb24ubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvRGF0YWJhc2VzL0luZGV4ZWREQi9XZWJJ
REJDb25uZWN0aW9uVG9TZXJ2ZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nl
c3MvRnVsbFNjcmVlbi9XZWJGdWxsU2NyZWVuTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKyQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL1Jl
bW90ZU1lZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJ
UikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ1JlbW90ZUNvZGVjcy5tZXNzYWdlcy5p
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxl
bGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5k
ZXggZGZiYzBlZmU2Yjg0NzI2Zjk2Yzg5ODI4Y2Q4M2QwZWQ3NTkwNWEwNi4uOTBkOTExMWZkMTBl
ODYzNDViN2VmNGZmNTNiMTU5YTBjMzEyY2FjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9E
ZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2
ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjAsNiArMTIwLDEyIEBAICQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb2Nlc3NQcm94eU1l
c3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVzc2FnZXMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlc1Jl
cGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVy
TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktp
dDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAtMTQyLDYgKzE0OCw5IEBA
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJl
Z2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZVJlY2VpdmVy
LmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzUmVw
bGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTI5MDkzMDk3Y2Q5YmRlYjM0
NWExOWE1ZDM3ZmU1N2E1NDBkZWI3MC4uOGM3NTNkMTZmNDBkZmRkY2ZlMTc0NWJhYTVmZTU5YmYy
OTY4NzdlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUsNyBAQCBW
UEFUSCA9IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0MikvR1BV
UHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisgICAgJChX
ZWJLaXQyKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvR1BV
UHJvY2Vzcy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAogICAgICQo
V2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBAIFZQQVRI
ID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAgJChXZWJL
aXQyKS9XZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9tZWRp
YSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIFwKICAg
ICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQ
cm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL01lZGlhQ2Fj
aGUgXApAQCAtMTQwLDYgKzE0Miw4IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFBsdWdp
blByb2Nlc3NDb25uZWN0aW9uTWFuYWdlciBcCiAgICAgUGx1Z2luUHJvY2Vzc1Byb3h5IFwKICAg
ICBQbHVnaW5Qcm94eSBcCisgICAgUmVtb3RlSW1hZ2VCdWZmZXIgXAorICAgIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkgXAogICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgXAogICAg
IFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHkgXApAQCAtMTQ3LDYgKzE1MSw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFJl
bW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
ciBcCiAgICAgUmVtb3RlT2JqZWN0UmVnaXN0cnkgXAorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXAogICAgIFJlbW90ZVdl
Ykluc3BlY3RvclByb3h5IFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JVSSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAK
aW5kZXggNjIwYjQxZjI4ZDY2NzZhM2RlMTdmNDc2YjJkZjM4OGZmZjY0NzcwZC4uYTM3MWNmMjNk
YTc3ZmE3NmUzZTQwM2RkYzJkM2FkYjY2MTkwMWM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMTYwLDUy
ICsxNjAsNjggQEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OmxpYldlYlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12b2lkIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRl
Y29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
ID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkg
PT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCkpIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJj
ZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBN
ZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZl
TWVzc2FnZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5k
aWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigp
LmRpZFJlY2VpdmVSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5k
aWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJl
dHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVj
b2Rlcik7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24s
IGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29u
bmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkt
PnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gbnVsbHB0cjsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAppbmRleCBmNDg1OTY0ZDQ2YzUyZTMzOGQyYWJl
NGY3NjVkZGNiNWE5NGEwNzkwLi4wMjcwMzdmZTk5NDY0MDlmMDZjMjNiZjZjZWNkMzc4NTNhNTZl
N2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmgKQEAgLTI4LDEzICsyOCwxNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZXNSZXBsaWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlz
dEl0ZW1zLmg+CisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgi
CisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFs
L1Nlc3Npb25JRC5oPgogI2luY2x1ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNDcsMTggKzQ5LDIwIEBAIGNsYXNz
IFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MKICAgICA6IHB1YmxpYyBSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M+CisgICAgLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cz4KICAgICAsIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IGNyZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciwgUEFMOjpT
ZXNzaW9uSUQpOwogICAgIHZpcnR1YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAog
ICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5n
ZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAo
KSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVBy
b2Nlc3MoKSB7IHJldHVybiBtX2dwdVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9j
ZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2Vi
UHJvY2Vzc0lkZW50aWZpZXI7IH0KIAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVu
Y3Rpb248dm9pZCgpPiYmKTsKICAgICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNv
cmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyJiByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcigpOwogCiAgICAgTG9nZ2VyJiBsb2dnZXIo
KTsKQEAgLTc3LDE0ICs4MSwyMSBAQCBwcml2YXRlOgogCiAgICAgLy8gSVBDOjpDb25uZWN0aW9u
OjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIGZpbmFsOwotICAg
IHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3Ry
aW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VOYW1lKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6
OkVuY29kZXI+JikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwg
SVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOworCisgICAgYm9vbCBkaXNw
YXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBk
aXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6
dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKKyAgICB2b2lkIGNyZWF0ZVJlbmRlcmluZ0Jh
Y2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZVJlbmRl
cmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwogCiAgICAgUmVmUHRyPExv
Z2dlcj4gbV9sb2dnZXI7CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247
CiAgICAgUmVmPEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNl
aXZlck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNz
SWRlbnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk7CkBAIC05Niw2ICsxMDcsNyBAQCBwcml2YXRlOgog
I2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIHN0ZDo6dW5pcXVlX3B0
cjxMaWJXZWJSVENDb2RlY3NQcm94eT4gbV9saWJXZWJSVENDb2RlY3NQcm94eTsKICNlbmRpZgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDNkNDBhNTcxMmUwMmQxNDlkMTRmOTJmNTZlNDQ1
MzQ2YzAxMjIxZDguLjkzMmMwMTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJjNTI1OWJhNGQ3MDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5IEBACiAKICNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mg
eworbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rpc3BhdGNoTWVz
c2FnZSB7CisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgdm9pZCBS
ZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5lNzBmNDIyYzNlNDY5M2EwMTI4OTgxOGExYzMyOTQ0ZWRjZjMzZDE1Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVm
ZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdl
QnVmZmVySWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtl
V2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkK
KyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCku
YWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0
aGlzKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVyUHJv
eHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVzc2Fn
ZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFn
ZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAorewor
ICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3Qg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQor
Cit2b2lkIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZUltYWdlQnVmZmVyOjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNpemUsIGludGVy
bmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRsZSkpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6Zmx1c2hDb250ZXh0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxp
c3QsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBs
b2NhbEZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
SW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdl
QnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmYzNjhiNjI2NGZkMTBhZDQzMTdlZTRmM2Y2ZDY4MzRlZDU3MWYwNjUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJN
ZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBD
OjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHko
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIEltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
flJlbW90ZUltYWdlQnVmZmVyUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAgIC8vIElQQzo6TWVz
c2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9u
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9u
SUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAg
dm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBv
dmVycmlkZTsKKworICAgIHZvaWQgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNl
LCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgdm9pZCBmbHVzaENvbnRleHQoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKSA9IDA7CisKKyAgICBXZWFrUHRyPEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjBhZTc4ZTJjZTRhYjk1MTliNjVhYjg0YjRkNzJkZGViNWVjOTU4YwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgor
IyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCitt
ZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZv
aWQgRmx1c2hDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5
TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIp
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdmZTRlMWUzYWQ1MjE4
NTQ1Yzk1MWY2Y2MxNGNmZTZkMGRmMWRlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVy
UHJveHkuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJlcGxheWVyLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9QaHlzaWNhbEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRU
eXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVzaW5nIEJhc2VQaHlz
aWNhbEltYWdlQnVmZmVyID0gV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlw
ZT47CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVi
bGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kLCBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVm
ZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eShn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgewor
ICAgICAgICByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQobV9iYWNrZW5kLT5sb2dpY2Fs
U2l6ZSgpLCBtX2JhY2tlbmQtPmludGVybmFsU2l6ZSgpLCBtX2JhY2tlbmQtPnJlc29sdXRpb25T
Y2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5jcmVhdGVJbWFnZUJ1
ZmZlckJhY2tlbmRIYW5kbGUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgbG9jYWxG
bHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNw
bGF5TGlzdCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICghZGlzcGxheUxpc3QuaXRlbUNv
dW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OlJlcGxheWVyIHJlcGxheWVyKEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250ZXh0KCks
IGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgICAgIEJhc2VQ
aHlzaWNhbEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGE1
MGQ3ZWY3MGFkM2Q5ODA2ZGNmNjY5NDViZWJkOWZkMzcyOTJkMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0g
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdl
QnVmZmVyU2hhcmVhYmxlQmFja2VuZD47Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxQbGF0Zm9y
bUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTcwYjMzMDcw
M2UwY2RmNTI0ODNlZDYxMjZjMmMwMDJhNGM0NjJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmNwcApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQ
cm94eS5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgi
CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6
dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5PihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7Cit9CisKK1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDog
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MpKQorICAgICwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOwor
fQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkoKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9n
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoTWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNv
bm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24oKSBjb25zdAoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
ID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpCit7CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCk7CisgICAgaWYgKCFncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyOworICAgIAorICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAg
IGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVm
ZmVyID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShs
b2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAg
ICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlQnVmZmVyTWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50
aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZVN1cmZhY2UgbWVzc2FnZSBzaG91
bGQgaGF2ZSBiZWVuIHJlY2VpdmVkIGJlZm9yZSB0aGlzIG9uZS4KKyAgICBpZiAoIW1faW1hZ2VC
dWZmZXJNYXAuY29udGFpbnMoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ltYWdlQnVm
ZmVyTWFwLnJlbW92ZShpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk5MzhiZWU1MTFlNjlk
ZmVmZmRlNTQ5ZDA4MjIyNzg5ZTQ4MDgxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNp
bmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5k
ZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUo
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsK
KyAgICB2aXJ0dWFsIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKKworICAgIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsgfQorCitwcml2YXRlOgorICAg
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVy
LgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBv
dmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOwor
ICAgICAgICAKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworCisgICAg
dXNpbmcgSW1hZ2VCdWZmZXJNYXAgPSBIYXNoTWFwPEltYWdlQnVmZmVySWRlbnRpZmllciwgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPj47CisgICAgSW1hZ2VCdWZmZXJNYXAg
bV9pbWFnZUJ1ZmZlck1hcDsKKyAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZTRkY2Y3ZjMyYjQ1MjZkZGZiZWJiNzg3ZjgwMmMzNmZkOTU3YmM0OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKK21lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3VudGVk
IHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2Fs
U2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZUlt
YWdlQnVmZmVyKFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRp
ZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IGNlZmYzYzI2MDVhMWY4NWQ1ZDk5MGE2NGMz
ZjI4MjAzZDExNTIzMjAuLjMxNDA0NzhmNDE3ZDBjZmUwZDMwNGE4ODM0N2FlNWE0NzRlY2JmYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKKysr
IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQpAQCAtMjcsNiArMjcs
NyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdlYmtpdCBpbXBvcnQgcGFyc2VyCiAKIFdBTlRTX0NPTk5F
Q1RJT05fQVRUUklCVVRFID0gJ1dhbnRzQ29ubmVjdGlvbicKK1dBTlRTX0RJU1BBVENIX01FU1NB
R0VfQVRUUklCVVRFID0gJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJwogTEVHQUNZX1JFQ0VJVkVSX0FU
VFJJQlVURSA9ICdMZWdhY3lSZWNlaXZlcicKIE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJ
QlVURSA9ICdOb3RSZWZDb3VudGVkJwogU1lOQ0hST05PVVNfQVRUUklCVVRFID0gJ1N5bmNocm9u
b3VzJwpAQCAtMjA0LDYgKzIwNSw4IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJk
X2RlY2xhcmVkKCk6CiAgICAgcmV0dXJuIGZyb3plbnNldChbCiAgICAgICAgICdNYWNoU2VuZFJp
Z2h0JywKICAgICAgICAgJ1N0cmluZycsCisgICAgICAgICdXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uJywKKyAgICAgICAgJ1dlYkNvcmU6OkNvbG9yU3BhY2UnLAogICAgICAgICAnV2Vi
Q29yZTo6RG9jdW1lbnRJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZldGNoSWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXInLApAQCAtMjExLDYgKzIx
NCw3IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6CiAgICAg
ICAgICdXZWJDb3JlOjpQYWdlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpQb2ludGVy
SUQnLAogICAgICAgICAnV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXInLAorICAgICAgICAnV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZScsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VySm9iSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyT3JDbGllbnREYXRhJywKQEAgLTIxOCwx
MCArMjIyLDE0IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2RlY2xhcmVkKCk6
CiAgICAgICAgICdXZWJDb3JlOjpTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJDb3JlOjpTV1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6QWN0aXZpdHlTdGF0ZUNoYW5nZUlEJywKKyAgICAgICAgJ1dlYktpdDo6SW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0SUQnLAogICAgICAgICAnV2ViS2l0
OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6
TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVNZWRpYVJl
c291cmNlSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRGVjb2RlcklkZW50aWZpZXInLAogICAgICAg
ICAnV2ViS2l0OjpSVENFbmNvZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlN0b3Jh
Z2VBcmVhSWRlbnRpZmllcicsCkBAIC03NjIsMTMgKzc3MCwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVz
c2FnZV9oYW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzeW5j
X21lc3NhZ2VzLmFwcGVuZChtZXNzYWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6CisgICAg
aWYgYXN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRD
SF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRp
ZFJlY2VpdmUlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29k
ZXImIGRlY29kZXIpXG4nICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2
ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19h
dHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtc
bicpCiAKICAgICAgICAgcmVzdWx0ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZl
ciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJl
Y2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICBy
ZXR1cm47XG4nKQogICAgICAgICBpZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgICAgJXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpO1xuJyAlIChyZWNlaXZlci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAgLTc3
NywxMyArNzg4LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgog
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVzc2FnZXM6Cisg
ICAgaWYgc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BB
VENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAg
ICAgICByZXN1bHQuYXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwg
cmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9B
VFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAg
ICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9B
VFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21lc3Nh
Z2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21lc3Nh
Z2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01F
U1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlz
cGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxuJykK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCA4NGQ0MzljNTA1
NDA0YjdlNTkwNWIzNmU3ZGVjNzY4OWRkZmE5NDU0Li4wOWExNDJlZmMwNTEyYmQ1ZGFhNDQwNDU4
YWIzNzczMjM3YWUxZmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3Jl
QXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaApAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQXV0b3BsYXlFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQ29sb3JTcGFjZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGll
bnQuaD4KQEAgLTM2LDYgKzM3LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtMb2FkTWV0
cmljcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90aWZpY2F0aW9uRGlyZWN0aW9uLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWFsdGltZU1lZGlhU291cmNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9S
ZW5kZXJpbmdNb2RlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1NlcnZpY2VXb3JrZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3kuaD4KQEAgLTgwMyw2ICs4MDUsMjYgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpTZXJpYWxpemVkQXR0YWNobWVu
dERhdGE+IHsKIAogbmFtZXNwYWNlIFdURiB7CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9
IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBX
ZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZAorICAgID47Cit9Owor
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlbmRlcmluZ01vZGU+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGUsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6
OkRpc3BsYXlMaXN0LAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJh
dGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZQorICAgID47Cit9OworCiB0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1
c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2Vz
LnR4dAppbmRleCAzMDZjZDFlNjkzNTY2MWFkNDFjMDYwOTI4NDhiZjlhZjM2YjFiNzI2Li5iYjFm
ZWMyYWE2MTc3MDk2YjM0MmMwMzU5MDBiYjJhZWYxYTg2NTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTMx
LDYgKzMxLDggQEAgR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5LmNwcAog
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlLmNwcAogR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVNZWRpYVJlc291cmNlTG9hZGVyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlci5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKIAogTmV0d29ya1Byb2Nlc3MvQWRDbGlja0F0dHJp
YnV0aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtBY3Rpdml0eVRyYWNrZXIu
Y3BwCkBAIC01MTQsNiArNTE2LDkgQEAgV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJN
YW5hZ2VyLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNSU1FVHlw
ZUNhY2hlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUmVz
b3VyY2VQcm94eS5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJX
ZWJSVENDb2RlY3MuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByaXZh
dGUuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclByb3ZpZGVyLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDA4NzZhZGQxMzU0M2VlOGZjZWViYTYzNWJhOTk5MzZl
ZDdjODZjNTYuLjYzMGQwYzQ5NjRmOTc0MzM3MGJhMjk2NmQzOThlMzEwNzlmMzZmMjcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU1MSw2ICs1NTEsOCBAQCBXZWJQcm9jZXNzL2NvY29hL1dl
YlByb2Nlc3NDb2NvYS5tbQogCiBXZWJQcm9jZXNzL0VudHJ5UG9pbnQvQ29jb2EvWFBDU2Vydmlj
ZS9XZWJDb250ZW50U2VydmljZUVudHJ5UG9pbnQubW0KIAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCisK
IFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlQmFubmVyLmNwcAog
CiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1bmRsZU1hYy5tbQpAQCAt
NjM1LDEwICs2MzcsMTQgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2VzCiBFZGl0YWJsZUlt
YWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2VSZWNlaXZl
ci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NNZXNz
YWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAK
IExpYldlYlJUQ0NvZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyTWVz
c2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5j
cHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90
ZU1lZGlhUmVjb3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRhc2tNZXNzYWdlUmVj
ZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagppbmRleCBhZmJkYzI1NzVlNDQ4MTg1ZTRiY2JjODQyZTRmN2E1NDQzMTNiNDM5Li4wMTU4
YTMxYTMzYWE0ODM0NjhhZDFiZDQ3MDg1MzlmYTg1ODAyN2FlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5NzUsOCArMzk3NSwzMiBA
QAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25H
ZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2du
aXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3
RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
Lm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNp
dGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQxMjNDOEZFMDIwMDQxODgx
RiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDIyM0M4RkUwMzAwNDE4
ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDMyM0M4RkUwNDAwNDE4ODFGIC8q
IFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ0MjNDOTAwREEwMDQxODgxRiAvKiBJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ2MjNDOTQ1
RDgwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDcyM0M5NDVEODAwNDE4ODFG
IC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5OTIzQUQy
RkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3
IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0MTAw
MjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAvKiBX
ZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0
aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVt
b3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3Rl
SW1hZ2VCdWZmZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
RDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVE
MjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlDOUUg
LyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4
RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyogV0tX
ZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTY0MDksNiArNjQzMyw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3MkJC
RTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4
ODIzQjYxMjYxMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3NTJDRDkwMEVB
NUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1MkNE
OTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02NDI1LDYgKzY0NTAs
NyBAQAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5RkIy
MDYyMzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4OEU2
NUIgLyogbWVkaWEgKi8sCisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmlu
Z0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywK
IAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuaCAqLywKQEAgLTc4MDEsNiArNzgyNyw1MiBAQAogCQkJbmFtZSA9IG1hYzsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMDE3NTQ1MjNDOTQ1QjEwMDQx
ODgxRiAvKiBjZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNzIwMTc1NDYyM0M5NDVEODAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzIwMTc1NDcyM0M5NDVEODAwNDE4ODFGIC8qIEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBj
ZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyMUYxRTk3MjNBRDJGNUMw
MEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5jcHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFGRjcg
LyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2NDIz
QzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJ
CQkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQ
cm94eS5oICovLAorCQkJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQjIzQjRDN0E5MDBG
NjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJ
KTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQg
Ki8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3NTQ1
MjNDOTQ1QjEwMDQxODgxRiAvKiBjZyAqLywKKwkJCQk3MjAxNzU0NDIzQzkwMERBMDA0MTg4MUYg
LyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmggKi8sCisJCQkJNzIxRjFFQTkyM0FEN0JERjAw
QkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzIxRjFFOUIy
M0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyMDE3
NTQxMjNDOEZFMDIwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
Y3BwICovLAorCQkJCTcyMDE3NTQyMjNDOEZFMDMwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MjAxNzU0MzIzQzhGRTA0MDA0MTg4MUYgLyog
UGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRjIz
QUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAorCQkJCTcyQkJFNDEw
MjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJFNDE0
MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLywKKwkJ
CQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5o
ICovLAorCQkJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyLmggKi8sCisJCQkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8q
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRl
cmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QTg0M0Ex
RDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRlMzIzMDc3MGYyNDM2MWI2
YWJhYThlMTdlNGQyZTVhYzAuLjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEzODA1NTBhYWE0Zjk0ZDhl
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwCkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9jZXNzQ29ubmVj
dGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQcm9jZXNz
Q29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsKLX0KLQotdm9pZCBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRl
Y29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgp
ID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5h
bWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhj
b25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5hZ2Vy
ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJlTWFu
YWdlcj4oKSkKICAgICAgICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2FnZUZy
b21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFVTRShMSUJXRUJSVEMpICYmIFBM
QVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBN
ZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlkUmVjZWl2ZU1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgp
LmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rl
cj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlz
cGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQor
Cit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNl
KQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCBhOGFkNGZlZTg2YjI2
NTliNGFmZmI3YzQ4NGRhMTgxYzNiZWYyN2QwLi5lOGVlODVkYzMyZmU1NzhmMTc1MzhiYTNkODlm
ZDc0NjA3NDZiYTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9j
ZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigp
IHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVy
TWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsg
fQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKICAgICB2b2lkIHNldEF1ZGl0VG9rZW4oT3B0aW9u
YWw8YXVkaXRfdG9rZW5fdD4gYXVkaXRUb2tlbikgeyBtX2F1ZGl0VG9rZW4gPSBhdWRpdFRva2Vu
OyB9CkBAIC01OCwxMSArNjAsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246
OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJyaWRl
OwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAorICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBD
OjpFbmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHByb2Nl
c3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29ubmVj
dGlvbjsKLQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFw
OwogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4gbV9h
dWRpdFRva2VuOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCBkMzZmOGEw
OTVmNmE3N2JiYjZjYWM4ODNhNjUxZTg0Y2U5ZDY0YjMwLi41N2ZlY2RlOWRmMjdjNzM5YTZjYmYw
MjY5ODA2NTkyYjVlMjE3OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTIyLDcg
KzIyLDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24geworbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gV2FudHNE
aXNwYXRjaE1lc3NhZ2UgewogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTk2MzA2OWY2NjE4MTgzZDA3OGE2NGMyZGVhY2My
ZDgzYTRjZGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPHd0Zi9NYWNoU2Vu
ZFJpZ2h0Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3VzaW5nIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSA9IFZhcmlhbnQ8CisjaWYgUExBVEZP
Uk0oQ09DT0EpCisgICAgTWFjaFNlbmRSaWdodCwKKyNlbmRpZgorICAgIFNoYXJlYWJsZUJpdG1h
cDo6SGFuZGxlCis+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVu
dGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyY2YyNDVlMzQ1ZTFkZmVjNjJkYzFkN2EzZWNhZWZjZDlh
YjVkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitlbnVtIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOWExYmM5YWU4N2RjOGQ3MjQyOGEwYjgwOWNhZDBkODBhNGNkMWNiOQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
IDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVySWRlbnRpZmll
ciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZT47CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hNWU3ZmI1NGI3MTRlOTIyYmY2ZmFmMzAzNTNjYTg2MGE4ZjhmMmEy
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dENHLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CisK
K3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJu
YWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIFNoYXJlYWJsZUJpdG1h
cDo6Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOworI2lmIFBMQVRGT1JNKENPQ09BKQorICAg
IGNvbmZpZ3VyYXRpb24uY29sb3JTcGFjZSA9IHsgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3Bh
Y2UpIH07CisjZW5kaWYKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRl
U2hhcmVhYmxlKGludGVybmFsU2l6ZSwgY29uZmlndXJhdGlvbik7CisgICAgaWYgKCFiaXRtYXAp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5j
cmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQo
c2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
Yml0bWFwKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIGlmIChXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9
CisKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKFdURk1vdmUoV1RG
OjpnZXQ8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRsZSkpKTsKKyAgICBpZiAoIWJpdG1h
cCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBiaXRtYXAt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IFdURk1vdmUoYml0bWFwKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiYmIGJpdG1hcCwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4m
JiBjb250ZXh0KQorICAgIDogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNpemUs
IHBoeXNpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9iaXRt
YXAoV1RGTW92ZShiaXRtYXApKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCit7
Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0Cit7CisgICAg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIG1fYml0bWFwLT5jcmVhdGVIYW5k
bGUoaGFuZGxlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKFdURk1vdmUo
aGFuZGxlKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7CisjaWYg
VVNFKENHKQorICAgIHJldHVybiBtX2JpdG1hcC0+bWFrZUNHSW1hZ2VDb3B5KCk7CisjZWxpZiBV
U0UoRElSRUNUMkQpCisgICAgcmV0dXJuIG51bGxwdHI7CisjZWxpZiBVU0UoQ0FJUk8pCisgICAg
cmV0dXJuIG1fYml0bWFwLT5jcmVhdGVDYWlyb1N1cmZhY2UoKTsKKyNlbmRpZgorfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9iaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIHJldHVy
biBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9iaXRtYXAtPmRhdGEoKSk7Cit9CisK
K1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0
cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX2JpdG1hcC0+ZGF0YSgpKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZv
cm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9iaXRtYXAtPmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NzBlYzY5OWJi
M2VkNjlhZTAwYzY3NGYzNmQ1MjcyMjY4MjcwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaD4KKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWFibGVCaXRt
YXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCA6IHB1YmxpYyBX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FM
TE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CitwdWJsaWM6
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNv
cmU6Okhvc3RXaW5kb3cqKTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0OworICAgIAorICAgIFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2NvbnRleHQ7IH0K
KworICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpC
YWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2lu
Z1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZl
UmVzb2x1dGlvbiA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJy
aWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsK
KyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYs
IFdlYkNvcmU6OkNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc3JjU2l6ZSwg
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGRlc3RQb2ludCwgV2ViQ29yZTo6Q29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKGNvbnN0IFdlYkNvcmU6
OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2Fs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0PiYmKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFj
a2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJH
UkE7IH0KKyNlbmRpZgorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hh
cmVhYmxlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3MTkzMTE1ZGUxMWYxNTIzZGMwOTBmMDExYzE0
NjUxNDk0OTc1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQu
aApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBQbGF0
Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ7CisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkK
K3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZv
cm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCA9IFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZDsKKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNTFiNGNlODBmN2IxYTZlY2Jj
ODJiZTQ2NWQ5YTgxZmQxZDM5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCkBAIC0w
LDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgLy8gUmVnaXN0
ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlv
bi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2Vi
UHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdl
UmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2lt
YWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBDcmVhdGUg
dGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2Rl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyOjp+
UmVtb3RlSW1hZ2VCdWZmZXIoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1l
c3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2Vp
dmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIobV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFn
ZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAm
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25u
ZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVy
RGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlm
aWVyLnRvVUludDY0KCk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJ
bWFnZUJ1ZmZlckJhY2tlbmQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rp
b24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigp
LmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNo
SW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVJbWFnZUJ1ZmZl
ckJhY2tlbmQ+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlv
bjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKworYm9vbCBSZW1v
dGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcigpCit7CisgICAgUmVmPElQQzo6
Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQ
VVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9u
LT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OlNldEZsdXNoSWRlbnRpZmllcj4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBD
OjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOwor
fQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2VuZCgpCit7Cisg
ICAgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOworICAgIGZvciAo
dW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7ICFpc0JhY2tlbmRDcmVhdGVkKCkg
JiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
KTsKKworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7IGlzUGVu
ZGluZ0ZsdXNoKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRTZXRGbHVzaElkZW50
aWZpZXIoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVy
KEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBtX3Jl
Y2VpdmVkRmx1c2hJZGVudGlmaWVyID0gZmx1c2hJZGVudGlmaWVyOworfQorCit2b2lkIFJlbW90
ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBtX3NlbnRGbHVzaElkZW50aWZp
ZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpGbHVzaENvbnRleHQoZGlzcGxheUxpc3Qs
IG1fc2VudEZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICBl
bnN1cmVVcGRhdGVkQmFja2VuZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZGRkOTE5OTVmYWU1ZWE2ZTNmNDg3NGY3NmE0Y2MzODQ2NGNhYmIxZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2lu
Y2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUg
PHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1v
dGVJbWFnZUJ1ZmZlcgorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHBy
aXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIH5SZW1vdGVJbWFnZUJ1
ZmZlcigpOworCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29y
ZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisK
KyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBCbG9ja2Vycwor
ICAgIGJvb2wgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworICAgIGJvb2wgd2FpdFNl
dEZsdXNoSWRlbnRpZmllcigpOworCisgICAgdm9pZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOwor
ICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50
aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQorCisgICAgLy8gSVBDOjpNZXNz
YWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNl
dEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7ICAgICAgICAKKyAg
ICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRl
bnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zNDFmZDI0ZjI5NjlhYTc3ZDJiYmVlNzI3MTViZjI2ZjNjOWJhZDI4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAgdm9p
ZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXpl
LCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlIGhhbmRsZSkKKyAgICB2b2lkIFNldEZsdXNoSWRlbnRpZmllcihXZWJLaXQ6OkltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjZTAyNGM3YmI0YzA3NTg2NzVmNmIxMDdmZWQ4ZmQzZDdl
M2VlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+Citj
bGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVibGljIERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXIgeworICAgIHVzaW5n
IEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNr
ZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2Vu
ZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KG5ldyBSZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVu
ZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCisgICAgICAgIDogQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIo
c2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tl
bmRIYW5kbGUgaGFuZGxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tl
bmQpOworICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShoYW5k
bGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5z
dXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2Vu
ZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5lbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdl
dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpk
aXNwbGF5TGlzdCgpOworICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250
ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJkMjAxNjM4MDRiMDI0ZDRmMTQw
MWQ0NDY2MzYyM2FkNTNhOTdhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgK
QEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcg
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxh
dGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKK3VzaW5nIFJl
bW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBjNThhYWM3M2UyNWJjYTdkMGE5MzA5N2M3MzYxOTYzZmU0MGViZGYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
Kworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gQ3JlYXRl
IHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigp
OworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRj
aCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxl
cmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaW1hZ2VCdWZmZXIg
PSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpbWFnZUJ1ZmZlciA9
IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmJlOWRjYmQ2MGYzOTU4NzdmNDhlNTE3MTg1MDlk
OWQxZjQ0YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0JhY2tlbmQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQK
KyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kCisgICAgLCBwcml2YXRlIElQ
Qzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVh
dGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisKKyAgICAvLyBJUEM6Ok1l
c3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNrZW5kCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5k
b3cqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7
CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZDIzNTQ3MGNjZmU3Yjc5YmI5MjQ1NzhhZmI0MTcwMzVjOTEzZGQwMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9P
YmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlPjsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MjQ2YzJkOTVkZGZiNWVlMGUz
YTVkMTc2M2JmMmEyMjFmNzYwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2lmIFVTRShDRykgJiYgKFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpKQorCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxh
dGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxT
aXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZh
Y2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUsIGludGVybmFsU2l6ZSwgY2FjaGVk
Q0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0ID0g
c3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOworICAgIGlmICghY2dD
b250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFyUmVj
dChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGludGVybmFs
U2l6ZSkpOworICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKCFXVEY6OmhvbGRz
X2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpIHsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8g
c3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKFdURjo6Z2V0
PE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkp
OworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAg
cmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUs
IGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZh
Y2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShtX3N1cmZhY2UtPmNyZWF0
ZVNlbmRSaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBV
U0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
Y2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZlNzAxMDg5NjJjNzI0MjkyOWRlZWE5ZTM2
ZGVlYmIyMGE2OTY3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
I2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitjbGFzcyBTaGFyZWFibGVCaXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7CisgICAg
CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAg
IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUo
KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdXNpbmcgV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXgg
OGU0YzkzNzVkN2I4Y2MxMGZmYTAwODAzZDQ4MjE3M2JlNWEzNTU4YS4uNzcyNmZlOTQ4YTIyNzli
YmY5MzlmMDY0NGY2NDU2ODJlZDZiNzk4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTEw
Miw2ICsxMDIsMTAgQEAKICNpbmNsdWRlIDxXZWJDb3JlL01vY2tXZWJBdXRoZW50aWNhdGlvbkNv
bmZpZ3VyYXRpb24uaD4KICNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2luY2x1
ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
QEAgLTg4MSwxNSArODg1LDIyIEBAIEdyYXBoaWNzTGF5ZXJGYWN0b3J5KiBXZWJDaHJvbWVDbGll
bnQ6OmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCkgY29uc3QKIH0KIAogI2lmIFVTRShSRVFVRVNUX0FO
SU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1v
bml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCkgY29uc3QKIHsKICAgICBpZiAoYXV0byogZHJhd2luZ0Fy
ZWEgPSBtX3BhZ2UuZHJhd2luZ0FyZWEoKSkKICAgICAgICAgcmV0dXJuIGRyYXdpbmdBcmVhLT5j
cmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlEKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KKyNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gV2ViQ2hy
b21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgp
OworI2Vsc2UKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CiAjZW5kaWYK
K30KIAogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1l
JiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZmRhMzM4
ZWNmYTY4NTVlMWMxZDYwODUwZTQ3MWY2Nzk0ZWQxYzJjZC4uNGRlZGZlZTc4NDExNjVlNTc3ZDk0
MDMyMzU1MWI0ZjUzYjJkMWRmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjMxLDYgKzIzMSw4
IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4g
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBj
b25zdCBmaW5hbDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OlJlbmRl
cmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBmaW5hbDsKKwogICAg
IENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJzKCkgY29u
c3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDb21wb3NpdGluZ1Ry
aWdnZXJGbGFncz4oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCmluZGV4IGVmMDM1MDM0MmJi
ODIyNDZjZDE5ZjM1NGQ5YmNjMDI5MWYyOTA0M2QuLjI0MDdmMTA2OWI1N2ZiZjY1OTQ4ODc1NDEy
OGNlOGZhYjFlY2JiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNv
cmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0yMDIsNyAr
MjAyLDcgQEAgUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZv
ckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0KICAgICAgICAgcmV0dXJuIG5pbDsKIAog
ICAgIC8vIFRoaXMgaXMgZWZmZWN0aXZlbHkgYSBzbmFwc2hvdCwgYW5kIHdpbGwgYmUgcGFpbnRl
ZCBpbiBhbiB1bmFjY2VsZXJhdGVkIGZhc2hpb24gaW4gbGluZSB3aXRoIEZyYW1lU25hcHNob3R0
aW5nLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG5pbDsKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGMzMDA3YjNmYzIzZDg5ZjgzMjJlMmYwODE5NTFiY2Fk
N2JiYjhiMDIuLjFhMzBhYTIyOTNiMGJlMGFmMWUyNGM5ZmRjYzBjMDU3Y2IwMDZhYjggMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAyMC0wMS0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRl
cmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0
OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBk
aXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDEt
MTEgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0lu
dGVncmF0aW9uXSBmYXN0L3RleHQvc2ltcGxlLWxpbmVzLWZsb2F0Lmh0bWwgc2hvdWxkIGJlIGFi
b3V0IHNpbXBsZSBsaW5lIGxheW91dCBvbmx5CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9kaXNw
bGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9k
aXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKaW5kZXggMWI1N2U3
OTFiNzJhY2NhODc3NjE0NDc5YjRkYzdmZTVjOTU5NGQ3Ny4uMzRjODdiOWIwNDI5NDU1YTliZjEx
NDFjNmJmYjM5NzFjNzUyMGI4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dApAQCAtMSw3ICsxLDExIEBA
CiAgCisoc2F2ZQorICAocmVzdG9yZS1pbmRleCAwKSkKIChzZXQtc3RhdGUKLSAgKGNoYW5nZS1m
bGFncyAyNTYpCi0gIChmaWxsLWNvbG9yICNDODAwMDApKQorICAoY2hhbmdlLWZsYWdzIDEwNTA5
MTIpCisgIChzdHJva2UtdGhpY2tuZXNzIDEuMDApCisgIChmaWxsLWNvbG9yICNDODAwMDApCisg
IChzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIDEpKQogKGZpbGwtcmVjdAogICAoZXh0ZW50IGF0
ICgxMCwxMCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQgKDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387478</attachid>
            <date>2020-01-12 11:02:36 -0800</date>
            <delta_ts>2020-01-12 23:49:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200112110234.patch</filename>
            <type>text/plain</type>
            <size>496246</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM1MWQ3NGM4ZGRhNmM2
ODdjMjY2MzdmMDM0ZTAyMzhhYjQyZDMwMS4uZjJkOGJmOGYyYWJiNTJlMjdlNDRkNzIxNDdlZmQw
MjZmNDE0ZjljNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3NiBAQAorMjAyMC0wMS0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgcmUtZmFjdG9yaW5nCisgICAgICAgIHdhcyBuZWVk
ZWQgdG8gYWxsb3cgZGVjb3VwbGluZyB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20g
dGhlIGludGVyZmFjZQorICAgICAgICBvZiBvZiB0aGUgYmFzZSBjbGFzcyBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAgICAgLS0gSW1hZ2VCdWZmZXJCYWNrZW5kCisgICAgICAgICAgICAtLSBEcmF3
aW5nQ29udGV4dAorICAgICAgICAgICAgLS0gUmVtb3RlIElQQyBjb21tdW5pY2F0aW9ucworICAg
ICAgICAgICAgLS0gU2hhcmluZyB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIGRhdGEKKworICAgICAg
ICBUaGlzIGlzIHRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIEltYWdlQnVmZmVyOgorCisgICAgICAg
IEltYWdlQnVmZmVyCisgICAgICAgICAgICB8CisgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNr
ZW5kVHlwZT4KKyAgICAgICAgICAgICstIFBoeXNpY2FsSW1hZ2VCdWZmZXIgICAgICBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQgICAgIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICAgICAgICAg
ICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXIKKyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAg
ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRU
eXBlPiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgICstIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgLS0tLS0rICAgUmVtb3RlSW1hZ2VCdWZm
ZXIgLS0tLS0tLS0tLS0tLSsKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAg
ICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAg
IHwgICAgICAgfCAgdGVtcGxhdGU8QmFja2VuZFR5cGU+ICAgICAgfCAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwKKyAgICAgICAgICAgICAgIHwgICAgICAgKy0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlciAtKyAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgLSsKKyAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAg
ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK
KyAgICAgICAgICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgICAgICAgICAgICAg
ICAgICAgIHwKKyAgICAgICAgICAgICAgICstIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94
eSAtLS0tLS0tLS0tLS0tLSsKKworCisgICAgICAgIFRoaXMgaXMgdGhlIGNsYXNzIGhpZXJhcmNo
eSBmb3IgSW1hZ2VCdWZmZXJCYWNrZW5kOgorCisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZAor
ICAgICAgICAgICAgfAorICAgICAgICAgICAgfF9fIEltYWdlQnVmZmVyQ0dCYWNrZW5kCisgICAg
ICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwgICAgICAg
Ky0tIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgfCAgICAgICB8ICAg
ICAgIHwKKyAgICAgICAgICAgIHwgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAgIHwg
ICAgICAgKy0tIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorICAgICAgICAgICAg
fCAgICAKKyAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZAorICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQKKyAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAg
ICAgICAgIHwgICAgICAgKy0tIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kCisg
ICAgICAgICAgICAgICAgICAgIHwgICAgICAgfAorICAgICAgICAgICAgICAgICAgICB8ICAgICAg
ICstLSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAgKy0tIEltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZAorCisgICAgICAgIEFzIGFuIGV4YW1wbGUgZm9yIHRo
ZSBwbGF0Zm9ybXMsIHdoaWNoIHVzZSBDRywgSW1hZ2VCdWZmZXI6OmNyZWF0ZSgpIHdpbGwgCisg
ICAgICAgIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIEltYWdlQnVmZmVyOgorCisgICAg
ICAgICAgICBJbi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJh
dGVkOiAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4KKyAg
ICAgICAgICAgICAgICBBY2NlbGVyYXRlZDogICAgUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAgICAgICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRl
cmluZzoKKyAgICAgICAgICAgICAgICBVbmFjY2VsZXJhdGVkOiAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdQVVByb2Nl
c3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ+CisKKyAgICAgICAgICAgICAgICBBY2NlbGVyYXRlZDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlByb2Nlc3M6IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPgorICAgICAgICAgICAgICAgICAgICAgICAg
R1BVUHJvY2VzczogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5PEltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZD4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAg
ICAgICogTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNv
dXJjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291
cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRlcjo6c2FuaXRpemVEYXRhSWZOZWVkZWQpOgorICAg
ICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMuY21h
a2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoK
KyAgICAgICAgKiBTb3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2VyaWFsaXplcjo6ZHVtcEltYWdlQml0
bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVyOjpyZWFkSW1hZ2VCaXRt
YXApOgorICAgICAgICAqIGNzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0ZpbHRlckltYWdlVmFsdWU6OmltYWdlKToKKyAgICAgICAgKiBodG1sL0N1c3Rv
bVBhaW50Q2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbVBhaW50Q2FudmFzOjpj
b3BpZWRJbWFnZSBjb25zdCk6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3RE
cmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICog
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSW1hZ2VCaXRtYXAuY3Bw
OgorICAgICAgICAqIGh0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9mZnNjcmVlbkNhbnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIgY29uc3QpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRp
bmdCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6Y3JlYXRlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmg6CisgICAgICAgICogaHRtbC9j
YW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCBjb25zdCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50
b0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpM
UlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgICogaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFDb250cm9s
VGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25J
bWFnZSk6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9t
ZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpD
aHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBh
Z2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c25hcHNob3RGcmFt
ZVJlY3RXaXRoQ2xpcCk6CisgICAgICAgICogcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdCk6CisgICAgICAg
ICogcGxhdGZvcm0vQ2Fpcm8uY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vSG9zdFdpbmRvdy5o
OgorICAgICAgICAqIHBsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQ6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6IENvcGllZCBmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmguCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRlcmluZ01vZGUgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5j
ZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvbnZlcnRU
b0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRleHQgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3aW5nQ29udGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpk
cmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWlu
Zyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZl
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0lt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWlu
YW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRl
R2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5
SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
OjppbnRlcm5hbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZvcm1MYXllciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmJ5dGVzUGVyUm93
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFja2VuZENv
bG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbElt
YWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI6OlBoeXNp
Y2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6
ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVuZGVyaW5nQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdNb2RlLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhv
dXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93
V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3UmVjdFNo
YWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZHJhd0luc2V0
U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyU2hh
ZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmRyYXdTaGFkb3dMYXll
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hhZG93TGF5ZXJCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6
Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9C
YWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
OjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyU3VyZmFj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxh
eWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oOiBSZW5hbWVkIGZy
b20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXJEYXRhLmguCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNhaXJvU3VyZmFj
ZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpkYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBp
eGVsc0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5k
Ojpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpj
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2Vu
ZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpqcGVnVVRJKToKKyAgICAgICAgKFdlYkNvcmU6OnV0aUZyb21JbWFnZUJ1ZmZlck1JTUVU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNmRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpkYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OmRhdGFWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbToKKyAgICAgICAgKFdlYkNvcmU6OklPU3VyZmFjZTo6Y3JlYXRl
RnJvbUltYWdlQnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6RHJhd2luZ0NvbnRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlz
cGxheUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpkaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkp
OgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlE
aXNwbGF5TGlzdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXll
ci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpHQzNETGF5ZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRlbnRzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlciBjb25zdCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6OmNyZWF0ZVJhc3Rl
clNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5
Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291
cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvU1ZHSW1h
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVu
dEZyYW1lKToKKwogMjAyMC0wMS0xMCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtMRkNdIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dFRhYmxlQ2VsbEJv
eCBzaG91bGQgdGFrZSBIb3Jpem9udGFsQ29uc3RyYWludHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMmMzMGYxN2Ey
MjRiZmJlYzc3NjhmZWY0NzM1NGQ4NzA5YjBmNjJkNC4uZDE1YzJjNmY2MjhiZDI2NzI0NGE0YmJk
MDRiY2MzZmJjM2RmMzFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTAgQEAKKzIwMjAtMDEtMTIg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJ
bXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAg
ICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAg
ICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3Nh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6Om1lc3Nh
Z2VSZWNlaXZlck1hcCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3M6OndlYlByb2Nlc3NJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6
OmZsdXNoQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuaDogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbi4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBH
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Ogor
ICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKyAgICAgICAgKiBTb3Vy
Y2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0
aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKFdlYktp
dDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmRIYW5kbGUgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6Oklt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRh
IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0
Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5l
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVz
aCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbi4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIu
aDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdl
QnVmZmVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDogQ29waWVkIGZyb20g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21l
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5oOgorCiAyMDIwLTAxLTExICBLYXRlIENoZW5leSAgPGthdGhlcmlu
ZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBjb3JyZWN0IGdyYW5kZmF0aGVyaW5n
IGZ1bmN0aW9uYWxpdHkgdG8gdGhlIElUUCBkYXRhYmFzZSBiYWNrZW5kCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKaW5kZXggMzFkODIyNDBiMTk4MDkxYTVlYzJmZGE5ZmVlNjAwYTZjOWM3N2Ni
Ny4uMmYxYWMwMjI2MTAxZTAyOTI0MGMyZDcwYzRiZmNhNjM4NDNiZmQwNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTEyICBTYWlkIEFib3Ut
SGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNh
bnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgor
ICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2
aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMDkgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRv
bkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRvcHQgVEFSR0VUX09TX01BQ0NBVEFMWVNUIGluIG1v
cmUgcGxhY2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCAyOTZkZWE3ODMxYmVlNDljZjAwNGE2ODJk
ZDI1ZTg5M2I5OTY0ZTc3Li44NWE3YmMwMmZkMDc1YWYzZTgwNTdhM2Q3OGQyODBmNzZhODE0ZmI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwMTUsNiArMTAxNSw3IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9nYW1lcGFkL0dhbWVwYWRQcm92
aWRlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9QbGF0Zm9ybUdhbWVwYWQuaAogCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0F1
ZGlvVHJhY2tQcml2YXRlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCkBA
IC0xMDI0LDYgKzEwMjUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29tcGxleFRleHRDb250cm9sbGVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5n
T3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAtMTA3Myw3ICsxMDc1
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZU9yaWVudGF0aW9uLmgKQEAgLTExMDUsMTMgKzExMDcsMTggQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dHRlcm4uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9u
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
VGFiU2l6ZS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBi
b2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2Uu
Y3BwCmluZGV4IDQ2NDFkNTgwOGE1MjdlYzZlMzBkMWNmYjZlODBiMjMxZGQ1NmQ2YjAuLjc0NjVk
MGU2YTg2Njg3MzhmNGViZGM1NzRmOTI2Yzc0ODhlN2FhNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFT
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0Ns
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwCkBAIC0yODQsNyArMjg0LDcgQEAgdm9p
ZCBDbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlOjpDbGlwYm9hcmRJdGVtVHlwZUxvYWRl
cjo6c2FuaXRpemVEYXRhSWZOZWUKIAogICAgICAgICBhdXRvIGJpdG1hcEltYWdlID0gQml0bWFw
SW1hZ2U6OmNyZWF0ZSgpOwogICAgICAgICBiaXRtYXBJbWFnZS0+c2V0RGF0YShXVEZNb3ZlKGJ1
ZmZlclRvU2FuaXRpemUpLCB0cnVlKTsKLSAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAg
ICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcEltYWdlLT5z
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICBpZiAoIWltYWdl
QnVmZmVyKSB7CiAgICAgICAgICAgICBtX2RhdGEgPSB7IG51bGxTdHJpbmcoKSB9OwogICAgICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcx
MjkyN2NjOTE4ZjNhYjBmZTcwOGE4YWMwMTdiZDBmM2NmOTQwZC4uNWU1NDI2YzExNGQzYWNmNTBi
NDcxOGJjY2Y0NmEzN2MyY2NhZjk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1BcHBsZVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNt
YWtlCkBAIC0xMzIsOCArMTMyLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9T
dXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
Ry5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dpbi5jcHAKQEAgLTE3
Niw3ICsxNzcsOSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAor
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtl
CmluZGV4IGMwM2NlNmI1MTMxODIxYTAxY2M3ZDY2NTNkMTY5MTkxZGJiNzlhODEuLjBiMmJjY2M1
YjU2NjYwMzU0NTIzN2JkNWFjMDM1YWMxMWI0ZDJjN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNt
YWtlCkBAIC0yODksOCArMjg5LDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNw
cAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQ
b2ludENHLmNwcApAQCAtNTI1LDcgKzUyNyw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCA0MTEyMTU1N2FlNmYzNWRiOWFkNWY0YzFlOGFjY2NhMDg2NjNlNmZiLi43
YTIwOWE4NjdkM2UxYTE0MGRiMjAzNDQ1ZWQzYWRlZTI3Njg4ZTYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtMTg2OSw2ICsxODY5LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGllcy5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVyLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
U291cmNlLmNwcApAQCAtMTg4OCw2ICsxODg5LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVy
bi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxl
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0CmluZGV4IGU0NTNkODkwOTdlNjg2YjJjMzM1MmJhZDY2ZWU3MTIzNDdjMTY2YjUuLjRmMDNl
YzIzZDhjNDBmYjk2YTJlNTc3MDFlMzY2YWIwMTRjZWNmY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29h
LnR4dApAQCAtMjg4LDggKzI4OCw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRpZW50Q0cu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5j
cHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0dUSy50eHQKaW5kZXggNzIwNWUyMGQzYWI0ZTM5ZmJlZTRiYjk0MzFhZWNiNGJjY2MyOGJkMi4u
OTdmMzM2ZTdjNWM5ZThkMGRhMjVlMmJkNGU2MWFkNzFhZTUyZGYyYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0dU
Sy50eHQKQEAgLTg0LDcgKzg0LDYgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckd0ay5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9HZGtDYWlyb1V0aWxpdGllcy5jcHAKIHBsYXRmb3JtL2dyYXBo
aWNzL2d0ay9JY29uR3RrLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3Rr
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlR3RrLmNwcAogCiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5YmI4NDMxNDUzOWFk
MDk1MTQ2MzFiMjEzMDYxNmFmNjBiYTlhMWMzLi41MzYwZjQ3Yzg2NzliMTJmODg1Yzc5MjAwMmQ5
NzNjYzJlMjRmMWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAw
MDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZCNTBENUMxMUU5MDAwOTAy
OTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTIyOEMy
ODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAv
KiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY3
RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAy
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRh
Q0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQky
NEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjkwMTNDQTk1
MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5
NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5NDEzQ0E5NTYxMDBE
MjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjlBMTND
QTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NBOTcxNDAwRDIxOTE1IC8q
IEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC0yMTMwLDE0ICsyMTI4LDI2IEBACiAJ
CTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFMkM0MjQyMUM5MzUx
RDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFFQURDRDgyMjA4N0U3MjAwNjVBNDVGIC8q
IFBvaW50ZXJJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzFFQURDRDYyMjA4N0U2RDAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUZDRURDMjAyQjM4QTkwMEQ3
QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZl
Y3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MjAxNzU0QTIzQzk2OURGMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMDE3NTQ4MjND
OTY5M0UwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMxMjIzRUM4NTQw
MEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzIyMjNF
Qzg1RjAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMz
MzIyM0VDOEIwMDBGMTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQ
cm9wZXJ0eS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyMTQ0MzM0MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIx
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMUYxRUE3MjNBRDUwQTEwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4
QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzVDOTYxMjNDMTk1QTgw
MDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyMzVDOTYzMjNDMTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzODI2
QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBS
ZW5kZXJpbmdNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzgy
NkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUQzMzIxQTNBOEIy
MzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJs
ZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0YwMEE5MUZGQiAvKiBBY3Rpdml0
eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyNEVFNTUxMURDODBEODQwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURDN0YyNUIwMEE5MUZGQiAvKiBB
Y3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
MkJCRTQxQzIzQUMyMUNDMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkUzRkUyM0FBQkZBMjAw
QTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcy
QkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDAwMjNBQUM0QzEwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJENUMyRTYyM0IzODI3
MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGlt
ZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0
b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgx
MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBD
RTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNz
YWdlRXZlbnQuaCAqLzsgfTsKQEAgLTY1NDIsOSArNjU1Miw2IEBACiAJCTIyNUExNkIzMEQ1QzEx
RTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
MjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdy
YXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFi
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0Yx
MUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVm
ZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMw
MEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1MUUwMEQy
MTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtOTYwMiw4ICs5NjA5LDEyIEBACiAJCTcxRUZDRURFMjAyQjM5QzcwMEQ3QzQx
MSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9y
dC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3Vw
cG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYw
MDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjAxNzU0ODIzQzk2OTNFMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIElt
YWdlQnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBG
MTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0
NDM0NjIyNDBDQUQyMDBGMTJGRjcgLyogU1ZHVmFsdWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTVkdWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgy
NkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlcmluZ01vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QzEyM0M1
NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBwYXRoID0gLi4vQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRF
RDMyOTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjRFRDMyQTFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5N
YXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkIxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRCbGVuZE1pbk1h
eC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjI0LDcgKzk2MzUsMjAgQEAK
IAkJNzI3QUZFRDExQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyN0FGRUQyMUEyRUE2QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVm
ZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
QmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDcyM0FBQ0Q1
MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEMyM0FBRUIxRTAwQTYx
MjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkJFNDBEMjNBQUVDQTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8q
IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RE
cmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkMxOEEzRjIz
MEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJE
NUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1
QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MkYxQUQ5RjFBMzkwNEMzMDAwMTRFMTggLyogRVhURnJhZ0RlcHRo
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEZyYWdEZXB0aC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjY4OCw3ICsxMjcxMiw2IEBACiAJ
CUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNz
VHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0
IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3
MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZH
Rm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRF
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYw
MDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNW
R0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg4LDYg
KzE2NzExLDcgQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJD
QSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJMEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8q
IERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJCQkU0MjYyM0FDQjA5QjAwQTYxMjNDIC8qIERpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJCQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJCQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNB
IC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJCQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8sCkBAIC0yNDg4Nyw2ICsyNDkxMSw3IEBACiAJ
CUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyog
Q29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9p
bnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENH
LmNwcCAqLywKQEAgLTI0ODk2LDkgKzI0OTIxLDEyIEBACiAJCQkJOTM0OTA3RTMxMjVCQkJDODAw
N0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2QzExMTI2MzM5OTAw
QTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4MEQ2NzA3MEU5RTlE
RUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5oICovLAotCQkJ
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLywKLQkJCQky
MjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovLAotCQkJ
CTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovLAorCQkJ
CTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8s
CisJCQkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmgg
Ki8sCisJCQkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyog
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwNjIzQUFDQ0JB
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8sCiAJCQkJQ0Q1ODk0
OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwICovLAogCQkJ
CUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggKi8s
CiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLywK
QEAgLTI0OTk0LDYgKzI1MDIyLDcgQEAKIAkJCQk0QjdBRTQ5MjIxNzdCNTZGMDBDNTk5NTkgLyog
Q3VzdG9tUGFpbnRJbWFnZS5oICovLAogCQkJCUE4Q0I0MTAyMEU4NUI4QTUwMDMyQzRGMCAvKiBE
YXNoQXJyYXkuaCAqLywKIAkJCQk1NTUxMzAwMDFFN0NDQ0NBMDBBNjlFMzggLyogRGVjb2RpbmdP
cHRpb25zLmggKi8sCisJCQkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZBNkE4IC8qIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaCAqLywKIAkJCQk0OUZDN0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxh
eVJlZnJlc2hNb25pdG9yLmNwcCAqLywKIAkJCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyog
RGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8sCiAJCQkJMkQyOUVDQzExOTJFQ0M4MzAwOTg0Qjc4
IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgKi8sCkBAIC0yNTA4NSw3ICsyNTEx
NCw4IEBACiAJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3Jl
LmggKi8sCiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAq
LywKIAkJCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKLQkJ
CQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJ
NzIwMjgwRDEyM0JBOTM3QjAwNkY0NzY3IC8qIEltYWdlQnVmZmVyQmFja2VuZC5jcHAgKi8sCisJ
CQkJNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovLAog
CQkJCUNEMTlGRUE3MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuY3BwICovLAogCQkJ
CUNEMTlGRUE2MUY1NzM5NzIwMDBDNDJGQiAvKiBJbWFnZURlY29kZXIuaCAqLywKIAkJCQk1NTc2
QTU2MjFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5jcHAgKi8sCkBAIC0yNTE0Miw2ICsy
NTE3Miw5IEBACiAJCQkJMkQ1MDAyRkExQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMu
aCAqLywKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5jcHAgKi8sCiAJ
CQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywKKwkJCQk3MkJCRTNG
RTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJF
NDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzIw
MTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8s
CiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJ
CQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVy
LmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNr
LmggKi8sCkBAIC0yNTE1MSw2ICsyNTE4NCw5IEBACiAJCQkJQkNBQjQxODAxM0UzNTZFODAwRDhB
QUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0EzOTgwMEVBMDhGMiAvKiBSZW1v
dGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3QTM5QTAwRUEwOEYyIC8qIFJl
bW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8qIFJl
bmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBS
ZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJl
bmRlcmluZ01vZGUuaCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRl
ZFJlY3QuY3BwICovLAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVj
dC5oICovLAogCQkJCTBGM0RENDREMTJGNUVBMUIwMDBEOTE5MCAvKiBTaGFkb3dCbHVyLmNwcCAq
LywKQEAgLTI4OTkzLDYgKzI5MDI5LDcgQEAKIAkJCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcg
LyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODREMEM0MDYxMTE1
RjFFQTAwMThBQTM0IC8qIEFmZmluZVRyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODNC
QjVDODgxRDVENkY0NTAwNUE3MUY0IC8qIEFsbERlc2NlbmRhbnRzQ29sbGVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzIzODI2QzIyM0M1NkY3OTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFREExMkQ3MTUyQ0ExQ0IwMEQ5RTA4RCAv
KiBBbHRlcm5hdGl2ZVRleHRDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFMDhDM0QyMTUy
QjU5OUEwMDIxQjhDMiAvKiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRTdCMkRCMzE1ODZBQkFEMDA5OEIzRkEgLyogQWx0ZXJuYXRpdmVUZXh0VUlDb250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTI5Njg4LDYgKzI5NzI1LDggQEAKIAkJCQkxMTJG
QjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyNzIzQUNCM0UwMDBBNjEyM0MgLyogRGlzcGxheUxp
c3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJCMDk5MDEyM0MwOTIzQzAw
NzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlM
aXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzAyOTYsOCArMzAzMzUsMTAgQEAKIAkJ
CQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEw
QjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQyMDIzQUMyQjc3MDBBNjEyM0Mg
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzVDOTYzMjND
MTk1Q0UwMDI2MjYzMyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzIxRjFFQTcyM0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0QzRTIxREQyMTgzNDQ0QTAwRTY2RjU1IC8q
IEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEMjUzOTYzMThD
RTdGNjIwMDI3MDIyMiAvKiBJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVudE1hYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTEwMTkyRDYxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc2Nyw2ICszMTgwOCw3IEBACiAJCQkJQTU1
NEI1RjMxRTM4MzkzQTAwMUQ0RTAzIC8qIFBlcmZvcm1hbmNlVXNlclRpbWluZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkQ1ODFGQjUxNTIwRjkzQjAwM0E3QTc1IC8qIFBlcmlvZGljV2F2ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNDlENURDMkUwRjQyM0E3MzAwOEYyMEZEIC8qIFBlcnNwZWN0aXZl
VHJhbnNmb3JtT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkJCRTQxQzIzQUMyMUND
MDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMURC
QzFCNTYyMzQ3QjNEMjAwQjkwMUFGIC8qIFBpY3R1cmVJblBpY3R1cmVPYnNlcnZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMUQyQzgyQjcyMzZBM0Y2QTAwNTVENkM1IC8qIFBpY3R1cmVJblBpY3R1
cmVTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJGOEUwNjIzNDQ3NTIzMDA5OTNCNjgg
LyogUGljdHVyZUluUGljdHVyZVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTc4Niw2ICsz
MTgyOCw4IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0IC8qIFBsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3QjE0ODRDQTRDMDA4QzZEQkUg
LyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNUJFMTk1MUQ1
NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcy
MzVDOTYxMjNDMTk1QTgwMDI2MjYzMyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3MjAxNzU0QTIzQzk2OURGMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAv
KiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3
M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0
Rjc4OTE1Q0ZCMkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMzE5NjMsNiArMzIwMDcsOCBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4
IC8qIFJlbmRlckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIx
NDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzJENUMyRUEyM0I0QzBGODAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBSZW5kZXJp
bmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyog
UmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5
N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQlCNTk1
RkY0NzE4MjRDRUUzMDBGRjUxQ0QgLyogUmVuZGVySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHAKaW5kZXggNjRkZmYyZDk4NGVmNzJkZDllYmE1MTAyNDA2MTBmYzE4ZTIxZDk0Ny4uZmE0
ZTQ5MGFiNGQ4MWJkNmZmMTI4ZTI1YTc3Njc0MWQ5ZWY3Nzk5OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05MjEs
OCArOTIxLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgp
OwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdo
dCgpKSk7CisgICAgICAgIEludFNpemUgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXpl
KCk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6
ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwogICAgICAgICBpZiAoIWltYWdlRGF0
YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlOjpWYWxpZGF0
aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNzg1LDEzICsyNzg1LDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lk
dGgsIGxvZ2ljYWxIZWlnaHQpLCBVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOworICAg
ICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxX
aWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsIHJlc29s
dXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAgICAgICAgICAgICBmYWlsKCk7
CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgYnVm
ZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOworICAgICAg
ICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCAqaW1hZ2VEYXRhLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIElu
dFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CiAK
ICAgICAgICAgYXV0byBiaXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZm
ZXIpLCBzdGF0aWNfY2FzdDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBn
ZXRKU1ZhbHVlKGJpdG1hcCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmls
dGVySW1hZ2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAKaW5kZXggZTViOGFiNDY5Y2VjNGJjMDU4YzQzN2QxOTk1MDQwYjUwMjFjNzQzMS4uMmZh
NTNhYTM4YzFmY2MxMTczNTZhZjlmMTU1ZDAxNWQ0NDM3ZjBjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcApAQCAtMTE2LDcgKzExNiw3IEBAIFJlZlB0cjxJ
bWFnZT4gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1hZ2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IGNvbnN0IEZsb2F0U2l6CiAKICAgICAvLyBUcmFuc2Zvcm0gSW1hZ2UgaW50byBJbWFnZUJ1ZmZl
ci4KICAgICAvLyBGSVhNRSAoMTQ5NDI0KTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNv
bmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gdGV4dHVyZSA9IEltYWdl
QnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCF0ZXh0dXJlKQogICAgICAgICByZXR1cm4gJkltYWdlOjpudWxsSW1hZ2UoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcAppbmRleCBmNGI3NzA3ZTk3YThm
ZTUxZjhlMjU3NzU4YWRlNGI2ZGRmZjUwMmU1Li42NWQ0NjRmZGQ3ZDU4OGVjNzMxNjE2Yjc0MDM3
YTg0MjhlZWYzMWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNw
cApAQCAtOTMsNyArOTMsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdl
KCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIG1fY29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworICAgIG1f
Y29waWVkQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6
OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbV9jb3BpZWRCdWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCkBAIC0xMDIsNyArMTAyLDcgQEAgSW1hZ2UqIEN1c3RvbVBhaW50Q2FudmFz
Ojpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKTsKICAgICBtX2Rlc3RpbmF0aW9uR3JhcGhpY3NDb250ZXh0ID0gbnVs
bHB0cjsKIAotICAgIG1fY29waWVkSW1hZ2UgPSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKG1f
Y29waWVkQnVmZmVyLT5mYXN0Q29weUltYWdlTW9kZSgpLCBQcmVzZXJ2ZVJlc29sdXRpb246Olll
cyk7CisgICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICByZXR1cm4gbV9j
b3BpZWRJbWFnZS5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAppbmRleCAyM2Q5YjM0ZTg0OGY2ZDAxZDM0YTlkYWZmYmEzMDUwZmM3YTcxMzE2Li45
MDkzM2UyM2FjMDgxODAzM2M3NmZjM2UyODIxMTkxODAxNDg2YzcyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkNhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVkZSAiQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2lu
Z0NvbnRleHQuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKQEAgLTYwLDYgKzYxLDEwIEBACiAjaW5jbHVk
ZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAK
KyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2VuZGlm
CisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2luY2x1ZGUgIkNhbnZhc0NhcHR1cmVNZWRp
YVN0cmVhbVRyYWNrLmgiCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW0uaCIKQEAgLTM0NSw5ICszNTAs
NiBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVD
b250ZXh0MmQoY29uc3QgU3RyaW5nJiB0eXBlKQogCiAgICAgbV9jb250ZXh0ID0gQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjcmVhdGUoKnRoaXMsIGRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkp
OwogCi0gICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5z
ZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7Ci0gICAg
ZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKLQogI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCiAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29tcG9z
aXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMuCiAgICAgaW52YWxpZGF0ZVN0
eWxlQW5kTGF5ZXJDb21wb3NpdGlvbigpOwpAQCAtODE4LDM5ICs4MjAsMjcgQEAgYm9vbCBIVE1M
Q2FudmFzRWxlbWVudDo6c2hvdWxkQWNjZWxlcmF0ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25z
dAogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKGJv
b2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKIHsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJh
d2luZyA9PSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpCi0gICAgICAgIHJldHVybjsKLSAgICAK
ICAgICBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSB1c2VzRGlzcGxheUxpc3REcmF3aW5nOwot
Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkK
LSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5z
ZXRVc2VzRGlzcGxheUxpc3REcmF3aW5nKG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyk7CiB9CiAK
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wg
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCiB7Ci0gICAgaWYgKHRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5ID09IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCi0gICAgICAgIHJldHVybjsKLQogICAg
IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsKLQot
ICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0g
ICAgICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0
VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAg
aWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6ZGlz
cGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewot
ICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0g
ICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRl
eHQpLmRpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpLT5kaXNwbGF5TGlzdCgpLmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OnJlcGxheURpc3BsYXlMaXN0QXNU
ZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1
cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5yZXBsYXlE
aXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURp
c3BsYXlMaXN0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+
cmVwbGF5RGlzcGxheUxpc3QoKS0+YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7
CiB9CiAKQEAgLTg4NSwxMSArODc1LDI3IEBAIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0
ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBzaG91bGRB
Y2NlbGVyYXRlKHNpemUoKSkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7Ci0KICAgICBh
dXRvIGhvc3RXaW5kb3cgPSAoZG9jdW1lbnQoKS52aWV3KCkgJiYgZG9jdW1lbnQoKS52aWV3KCkt
PnJvb3QoKSkgPyBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCkgOiBudWxs
cHRyOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgRGlzcGxheUxp
c3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nID0g
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9jdW1lbnQoKS5zZXR0aW5ncygpLmRp
c3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5l
dyBzZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVt
b3RlRHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOwor
ICAgIGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3Vs
ZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDog
UmVuZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdp
bmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlz
cGxheUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cp
KTsKIAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAg
ICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBp
ZiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3Vs
YXRlIGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdl
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1
ODc0Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5
YzZiYzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52
YXNFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7
IGZhbHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07
CisgICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wg
bV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdl
Qml0bWFwLmNwcAppbmRleCA1ZjQ5ZjczOWExZjVjM2JlMGVlMTcxZjM0Zjk2M2UwMjY2YmM0NDky
Li4yYjgxOTg5ZThmZDYyZWZlMzQ1Mzg3YTkwMmZlNjkyYjMwOTk1NGZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0ltYWdlQml0bWFwLmNwcApAQCAtNjEsOSArNjEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXApOwogCiAjaWYgVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVy
YXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJp
bmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJS
ZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZl
clJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAK
IFJlZjxJbWFnZUJpdG1hcD4gSW1hZ2VCaXRtYXA6OmNyZWF0ZShJbnRTaXplIHNpemUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggZjc0NDg1MTIwMDE1NzViNGFm
NGJiYTI0ZWFhNTdhYmU2YTA2NDNjOS4uNzU1ZjExZWY4OWUxMTgxYmUwNmQ1ZWEyZjAwNzg2OTZl
MzliZTRkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcApAQCAtMTI2
LDcgKzEyNiw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZUJpdG1hcD4+IE9mZnNjcmVlbkNh
bnZhczo6dHJhbnNmZXJUb0ltYWdlQml0bWFwKCkKICAgICAgICAgICAgIHJldHVybiB7IFJlZlB0
cjxJbWFnZUJpdG1hcD4geyBudWxscHRyIH0gfTsKIAogICAgICAgICBpZiAoIW1faGFzQ3JlYXRl
ZEltYWdlQnVmZmVyKQotICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7
IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9Owor
ICAgICAgICAgICAgcmV0dXJuIHsgSW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSwgdHJ1ZSB9KSB9Owog
CiAgICAgICAgIGF1dG8gYnVmZmVyID0gdGFrZUltYWdlQnVmZmVyKCk7CiAgICAgICAgIGlmICgh
YnVmZmVyKQpAQCAtMjQzLDcgKzI0Myw3IEBAIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJ
bWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
KCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9mZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkg
Y29uc3QKQEAgLTI1Nyw3ICsyNTcsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IE9m
ZnNjcmVlbkNhbnZhczo6dGFrZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoc2l6ZSgpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gc2V0SW1hZ2VC
dWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpKTsKKyAgICBy
ZXR1cm4gc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogdm9pZCBPZmZzY3JlZW5DYW52YXM6OnJlc2V0
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKaW5kZXggODlkOGY0MjQzYjJiOTJkZmJjYjMyYWEyMjFi
NzUzYzkzZjFmNTk0MS4uNWIxYjA3ZWY3NzM4NDMzNjA4ZTg4MmZiOWUzYmE5YTJiMWE0YzljMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAKQEAgLTE4MDYsNyArMTgwNiw3IEBAIHRlbXBsYXRlPGNs
YXNzIFQ+IEludFJlY3QgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y2FsY3VsYXRlQ29t
cG9zaXRpbmdCdWZmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlQ29tcG9zaXRpbmdCdWZmZXIoY29uc3QgSW50UmVjdCYg
YnVmZmVyUmVjdCkKIHsKLSAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0
LnNpemUoKSwgaXNBY2NlbGVyYXRlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShidWZmZXJSZWN0LnNpemUoKSwgaXNBY2Nl
bGVyYXRlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpj
b21wb3NpdGVCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgSW50UmVjdCYgYnVmZmVy
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3Igb3ApCkBAIC0xOTkwLDcgKzE5OTAsNyBAQCBFeGNlcHRp
b25PcjxSZWZQdHI8Q2FudmFzUGF0dGVybj4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OmNyZWF0ZVBhdHRlcm4oSAogICAgICAgICByZXR1cm4gUmVmUHRyPENhbnZhc1BhdHRlcm4+IHsg
Q2FudmFzUGF0dGVybjo6Y3JlYXRlKEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShuYXRpdmVJ
bWFnZSkpLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikgfTsKICNlbmRpZgogCi0gICAg
YXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQp
LCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDog
QWNjZWxlcmF0ZWQpOworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRyYXdpbmdDb250ZXh0KCkt
PnJlbmRlcmluZ01vZGUoKSA6IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKICAgICBpZiAo
IWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMjA3NSwyMSArMjA3
NSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5CiAgICAgICAgIGNvbnRleHREaXNwbGF5TGlz
dE1hcCgpLnJlbW92ZSh0aGlzKTsKIH0KIAotU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykg
Y29uc3QKLXsKLSAgICBpZiAoIW1fcmVjb3JkaW5nQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICByZXR1cm4gbV9yZWNvcmRpbmdDb250ZXh0LT5kaXNwbGF5TGlzdC5hc1RleHQoZmxh
Z3MpOwotfQotCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlz
cGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewot
ICAgIGF1dG8qIGRpc3BsYXlMaXN0ID0gY29udGV4dERpc3BsYXlMaXN0TWFwKCkuZ2V0KHRoaXMp
OwotICAgIGlmICghZGlzcGxheUxpc3QpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJu
IGRpc3BsYXlMaXN0LT5hc1RleHQoZmxhZ3MpOwotfQotCiBjb25zdCBWZWN0b3I8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZTo6U3RhdGUsIDE+JiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpzdGF0ZVN0YWNrKCkKIHsKICAgICByZWFsaXplU2F2ZXMoKTsKQEAgLTIxNTksMTAgKzIx
NDQsMTAgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OmNyZWF0ZUltYWdlRGF0YShmbG8KIAogRXhjZXB0aW9uT3I8UmVmUHRyPElt
YWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9h
dCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKLSAgICByZXR1cm4g
Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5
LCBzdywgc2gpOworICAgIHJldHVybiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbTo6TG9n
aWNhbCwgc3gsIHN5LCBzdywgc2gpOwogfQogCi1FeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRh
Pj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVy
OjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwg
ZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAorRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0
IHNoKSBjb25zdAogewogICAgIGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAg
ICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9T
VEFUSUNfU1RSSU5HX0lNUEwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBi
ZWNhdXNlIHRoZSBjYW52YXMgaGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4i
KSk7CkBAIC0yMTk2LDcgKzIxODEsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlm
ICghYnVmZmVyKQogICAgICAgICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRh
UmVjdC5zaXplKCkpOwogCi0gICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShpbWFnZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsK
KyAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSk7CiAgICAgaWYgKCFieXRlQXJyYXkpIHsKICAgICAgICAgU3RyaW5nQnVpbGRlciBjb25zb2xl
TWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2UuYXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRv
IGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1ZXN0ZWQgc2l6ZSB3YXMgIik7CkBAIC0y
MjE4LDEwICsyMjAzLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxvYXQgZHgsIGZsb2F0CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7Ci0gICAgcHV0SW1hZ2VEYXRhKGRhdGEsIEltYWdl
QnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgZHgsIGR5LCBkaXJ0eVgsIGRpcnR5WSwg
ZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOworICAgIHB1dEltYWdlRGF0YShkYXRhLCBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBk
aXJ0eUhlaWdodCk7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCit2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9h
dCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWln
aHQpCiB7CiAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsK
ICAgICBpZiAoIWJ1ZmZlcikKQEAgLTIyNDUsNyArMjIzMCw4IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZm
ZXI6OkNvCiAgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0
aWNfY2FzdDxpbnQ+KGR5KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QoY2xpcFJlY3QpOwogICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJl
Y3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFn
ZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkg
OiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CisgICAgCisgICAgZGVzdFJlY3QuaW50ZXJzZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVt
OjpMb2dpY2FsID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUo
KSkpOwogICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBJ
bnRSZWN0IHNvdXJjZVJlY3QoZGVzdFJlY3QpOwpAQCAtMjI1Myw3ICsyMjM5LDcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRh
LCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBzb3VyY2VSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAs
IGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSkpOwogCiAgICAgaWYgKCFzb3VyY2VSZWN0Lmlz
RW1wdHkoKSkKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmRhdGEuZGF0YSgpLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFNpemUoZGF0YS53aWR0aCgp
LCBkYXRhLmhlaWdodCgpKSwgc291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3Jk
aW5hdGVTeXN0ZW0pOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpkYXRhLmRhdGEoKSwgSW50U2l6ZShkYXRhLndp
ZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwg
Y29vcmRpbmF0ZVN5c3RlbSk7CiAKICAgICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3
QXBwbHlOb25lKTsgLy8gaWdub3JlIHRyYW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzljOWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkx
ZC4uOTY0MDBkMWFmNTAwZDU4ZTFkZDliZDExMTc0ODIxNDFhNzJiYjViMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaApAQCAtMjIyLDkgKzIyMiw2IEBAIHB1YmxpYzoKICAgICBib29sIHRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KCkgY29uc3QgeyByZXR1cm4gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheTsg
fQogICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCk7CiAKLSAgICBTdHJp
bmcgZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzKSBjb25zdDsKLSAg
ICBTdHJpbmcgcmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdz
KSBjb25zdDsKLQogICAgIHVzaW5nIERpcmVjdGlvbiA9IENhbnZhc0RpcmVjdGlvbjsKIAogICAg
IGNsYXNzIEZvbnRQcm94eSA6IHB1YmxpYyBGb250U2VsZWN0b3JDbGllbnQgewpAQCAtMzcxLDgg
KzM2OCw4IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENh
bnZhc0NvbXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0
UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFn
ZURhdGE+PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dElt
YWdlRGF0YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQg
ZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0
aCwgZmxvYXQgZGlydHlIZWlnaHQpOworICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9h
dCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYs
IENvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9h
dCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKIAogICAgIGJv
b2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcApp
bmRleCAxNGVhMzdkOGQ3ZWFmYjAxYjVjNGNlMTllYmU3NmM1MThjZmNkNGE4Li5iNTFiNGRiZjEz
ZWU1MDZlYjk0OThjNDNlZjQ1Yzk0NGRkNzNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAg
LTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dCk7CiAKICNpZiBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
c3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOwor
c3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmlu
Z01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogc3RkOjp1
bmlxdWVfcHRyPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4gSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGUoQ2FudmFzQmFzZSYgY2FudmFzLCBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHRTZXR0aW5ncyYmIHNldHRpbmdzKQpAQCAtNjksNyArNjksNyBAQCBIVE1MQ2FudmFz
RWxlbWVudCogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpjYW52YXMoKSBjb25zdAogCiBi
b29sIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6aXNBY2NlbGVyYXRlZCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQ7CisgICAgcmV0
dXJuIGJ1ZmZlclJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiB9
CiAKIHZvaWQgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0OjpzZXRPdXRwdXRCaXRtYXAoUmVm
UHRyPEltYWdlQml0bWFwPiBpbWFnZUJpdG1hcCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5kZXggMTdlYWE1
ZDE1YjcwY2UxOGEwYWY1NmQxY2JmMmIyMjk2YjkyYjY1Mi4uMTVmYzNhNTU1ZmY2MmY1ZjQyYmQ2
MmU1ZGRjZmE2NmJkYTdhYmVkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTM5MzksNyArMzkzOSw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1Yklt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghYnVmZmVyKQogICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVy
LT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0
YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgp
LCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTQwNjEsNyAr
NDA2MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMCiAgICAgICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UsIFNvdXJjZUhUTUxWaWRlb0VsZW1l
bnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsRm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2
aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFn
ZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlby5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdl
KQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwg
R3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NTAwLDcgKzQ1MDAsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdl
dCwgR0NHTGludAogICAgICAgICAgICAgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHRHTDo6VU5T
SUdORURfQllURSkgewogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0
ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlm
IChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlk
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxh
dGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCks
IGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRh
cmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRleHR1cmUt
PnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgYml0bWFwLT53aWR0
aCgpLCBiaXRtYXAtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NTA4LDcgKzQ1MDgsNyBAQCBFeGNlcHRpb25P
cjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAgLy8gTm9ybWFsIHB1cmUgU1cgcGF0
aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFn
ZSA9IGJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYg
KGltYWdlKQogICAgICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpE
T01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEp
OwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDU3Nyw3ICs0NTc3LDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJn
ZXQsIEdDR0xpbnQKICAgICAgICAgICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4
dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAo
aXNSR0JGb3JtYXQodGV4dHVyZUludGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0
YXJnZXQsIGxldmVsKSkgewogICAgICAgICAgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOwotICAgICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5j
b3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5v
YmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBh
Y2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRv
UGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC00NjIyLDcgKzQ2
MjIsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJ
bWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICB9CiAKICAgICAgICAgLy8g
Tm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVv
RnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUo
KSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRl
by5nZXQoKSwgRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoIWltYWdlKQogICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dEdMOjpET01Tb3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEpOwpAQCAtNDY0Nyw3ICs0NjQ3LDcgQEAgUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlJiBpbWFnZSwgaW50IHcK
ICAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLnNpemUoKSk7CiAgICAg
RmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CiAgICAgYnVmLT5jb250ZXh0
KCkuZHJhd0ltYWdlKGltYWdlLCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+
Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICByZXR1cm4g
YnVmLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogfQogCiAjaWYgRU5BQkxFKFZJ
REVPKQpAQCAtNjM0Myw3ICs2MzQzLDcgQEAgSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEkKICAgICB9
CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIzKTogU2hvdWxkIHRoaXMgSW1hZ2VCdWZmZXIgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQ/Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2VsZXJhdGVkKTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGVtcCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgQVNTRVJUKG1fYnVmZmVycy5zaXplKCkgPiAwKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1l
bnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAppbmRleCAwY2JkMGEzY2NlMDM5Mjk1YjQ5MjVjZTMxYTA1NGUxZjY5MTBkOTMwLi42ZWE3
OTIxNGY4YTZlMDA1YjBiZTI0NDlhMmRkNjcyODhmYzNhYzI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCkBAIC0xNDQ2LDcg
KzE0NDYsNyBAQCBSZWZQdHI8SW1hZ2U+IE1lZGlhQ29udHJvbFRleHRUcmFja0NvbnRhaW5lckVs
ZW1lbnQ6OmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aQogICAgIEludFJlY3QgcGFpbnRpbmdS
ZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+c2l6ZSgpKTsKIAogICAgIC8vIEZJWE1F
ICgxNDk0MjIpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdl
QnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgZGV2aWNl
U2NhbGVGYWN0b3IpKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5nUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3
OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2
ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwx
MyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlk
ZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91
c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBD
aHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5k
ZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQo
KTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBh
YmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjQ2OGMxNzAwOGFhZmE0N2ZhYTIzN2M3NGZm
NDhmNDAyMzBkZGJhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgCiAgICAgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpIG92ZXJyaWRlIHsgfQogCiAgICAg
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xOTUsNiAr
MTk3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIGJvb2wgbV9p
c0Rpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlU3VwcHJlc3NlZCB7IGZhbHNlIH07CiAjZW5k
aWYKKyAgICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBtX3JlbmRl
cmluZ0JhY2tlbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaAppbmRleCA2MjYxN2Y3OGYzZTJmMDQ3NDhhYTU4YWRhZWI4ZmEzMGJkNzEy
YWQ0Li5jOTlkMzZhZmZhYTg2NWE5ZTZhOTVkYzUzNWI0ODc0OGM3ZWUzZTFhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQb3B1cE1l
bnVDbGllbnQuaCIKICNpbmNsdWRlICJSZWdpc3RyYWJsZURvbWFpbi5oIgogI2luY2x1ZGUgIlJl
bmRlckVtYmVkZGVkT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogI2lu
Y2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIK
ICNpbmNsdWRlICJTZWFyY2hQb3B1cE1lbnUuaCIKQEAgLTMwMyw2ICszMDQsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5
UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7
IH0KICNlbmRpZgogCisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKwog
ICAgIC8vIFBhc3MgbnVsbHB0ciBhcyB0aGUgR3JhcGhpY3NMYXllciB0byBkZXRhdGNoIHRoZSBy
b290IGxheWVyLgogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFt
ZSYsIEdyYXBoaWNzTGF5ZXIqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFZpZXdPdmVy
bGF5R3JhcGhpY3NMYXllcihHcmFwaGljc0xheWVyKikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lU25hcHNob3R0aW5nLmNwcAppbmRleCAwYTQ0YzJmYTFhMDk0OTdjZmRmNTU4ODgzMmZm
ZGZmMTAyMzMzMGUxLi5lMjRkOTJlNmYzZTYxZDM4YTliMjQ0ODVmNGQxM2RlNTBlNTMzYTJkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcApAQCAtMTExLDcgKzEx
MSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3RGcmFtZVJlY3RXaXRo
Q2xpcChGcmFtZSYgZnJhbWUsIGNvbnN0IEludFJlCiAgICAgaWYgKG9wdGlvbnMgJiBTbmFwc2hv
dE9wdGlvbnNQYWludFdpdGhJbnRlZ3JhbFNjYWxlRmFjdG9yKQogICAgICAgICBzY2FsZUZhY3Rv
ciA9IGNlaWxmKHNjYWxlRmFjdG9yKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkLCBzY2FsZUZhY3Rvcik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC1pbWFn
ZVJlY3QueCgpLCAtaW1hZ2VSZWN0LnkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNv
bGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgyOGVmODVi
YmMuLjIxMDdhOWUxZTk5Y2YzNTFkOWU2MTY2ODA1YzRhNTYzM2FlNDdkYWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcgQEAgdm9p
ZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNpemUgPSBp
bWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KEludFBvaW50
KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0Qnl0
ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEtPmRhdGEoKSwgc291cmNlU2l6ZSwgc291
cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZlci0+dG9E
YXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZ
ZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Q2Fpcm8uY21ha2UKaW5kZXggOWEzYThiZjk0M2FkNjU4NmRhNDNjZWQwZGE3ZTYzZjA1NWFiOWE1
ZC4uMTJhMmQ3NGZmYmU4ZmNjNzNmMDY4YmJmY2JhMDA1NDA3NzU3MTc3MiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9VdGls
aXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8u
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgK
KyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJv
LmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2FkYzI0ZDk4
MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li5mNWYyMTdjY2Q4NDA2MDgwMDI1NWMyMDNkMjIx
N2NhZWNlMGNlMjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2lu
ZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsMTQg
KzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5kb3dfaAot
I2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lkZ2V0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVuZGVyaW5n
QmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQsOCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVz
KGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVkUmVuZGVy
aW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVB
bmltYXRpb24oKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJ
RCgpIGNvbnN0ID0gMDsKQEAgLTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU291cmNlc0NhaXJvLnR4dAppbmRleCA0MjFkZmJkOTU3NTRjNDYyNzU3Yjc4ZGJmYTQx
MDI1NDMyYWYwYjdkLi42ZmE0ZmZlMTQ2MGVhNzEzODIxYmNhMzYyMjZkMjZhOTdlNWQ5OTg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcgKzMwLDEx
IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lu
dFJlY3RDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8u
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9u
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNmQxY2FlZjg1NDFkZWUwNjJiZmUwNTQxNmNkYTJmMmE3Zjc5MjZlMgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhh
UHJlbXVsdGlwbGljYXRpb24uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiA6IHVpbnQ4X3QgeworICAgIFByZW11bHRpcGxpZWQsCisgICAgVW5wcmVt
dWx0aXBsaWVkCit9OworCitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YWFiNDY4Njc2OGYx
YTI4MmQ1ODgxYzkzOTc5NDZkNWJhMjAwNjkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciA6IHB1YmxpYyBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAsIHB1YmxpYyBE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdl
QnVmZmVyID0gUGh5c2ljYWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNl
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7
CisgICAgfQorCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFj
a2VuZFR5cGU+JiYgZGF0YUJhY2tlbmQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAg
OiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGRhdGFCYWNrZW5kKSkKKyAgICAgICAg
LCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAg
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDog
RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZSB7IHJl
dHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnJlcGxheURp
c3BsYXlMaXN0KEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjpjb250ZXh0KCkpOworICAgIH0KK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggZjU4NmRkNGIyYWY5MWY0NTY1NTM1
YTcwMjkzOTIzYWYyYmFhZGJhMi4uMzViZDU4YzNkMTJmZjg0YzBlNjY0MmY4MTgyNzA5OWNlODM3
ZTI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKQEAgLTM1MCw3ICszNTAsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRJc0FjY2VsZXJhdGVkQ29udGV4dChib29sKTsKICNlbmRpZgogICAgIGJvb2wg
aXNBY2NlbGVyYXRlZENvbnRleHQoKSBjb25zdDsKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8gQWNjZWxlcmF0
ZWQgOiBVbmFjY2VsZXJhdGVkOyB9CisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkg
Y29uc3QgeyByZXR1cm4gaXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsgfQogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzYXZlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN0b3JlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5
cGVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
Y3BwCmluZGV4IDQ1OGFlNzJmMmFlMDI1NjI0NzY4ZTg3OWRiZDQ5Njk2NGI0OTFiMTguLjAwYmUw
ZmVhMDYwNTVjYTMxYjJjODg3NGRkMzc0ZWVhMWQ0Mjg0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwCkBAIC0yOCw2ICsyOCw4
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgogCisj
aW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorCiAjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc1R5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmgKaW5kZXggY2VlYTFkYTQwZWIzMmZmNzhhMWU3NWUxN2JmZTAwOTIw
MWI3NmYxMi4uMjZhMTJkZTNiZTRhYzZiODg0MzY0YzU1NDM5N2Y3ZjcxYzc4YWEyZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaApAQCAt
MjUsNiArMjUsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUu
aCIKICNpbmNsdWRlICJXaW5kUnVsZS5oIgogI2luY2x1ZGUgPHd0Zi9FbnVtVHJhaXRzLmg+CiAj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTEyMiwxNyArMTIzLDYgQEAgZW51bSBUZXh0QWxp
Z24gewogICAgIFJpZ2h0VGV4dEFsaWduCiB9OwogCi1lbnVtIFJlbmRlcmluZ01vZGUgewotICAg
IFVuYWNjZWxlcmF0ZWQsCi0gICAgVW5hY2NlbGVyYXRlZE5vblBsYXRmb3JtQnVmZmVyLCAvLyBV
c2UgcGxhaW4gbWVtb3J5IGFsbG9jYXRpb24gcmF0aGVyIHRoYW4gcGxhdGZvcm0gQVBJIHRvIGFs
bG9jYXRlIGJhY2tpbmcgc3RvcmUuCi0gICAgQWNjZWxlcmF0ZWQKLX07Ci0KLWVudW0gY2xhc3Mg
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiB7Ci0gICAgUHJlbXVsdGlwbGllZCwKLSAgICBVbnByZW11
bHRpcGxpZWQKLX07Ci0KIFN0cmluZyBjb21wb3NpdGVPcGVyYXRvck5hbWUoV2ViQ29yZTo6Q29t
cG9zaXRlT3BlcmF0b3IsIFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBTdHJpbmcgYmxlbmRNb2RlTmFt
ZShXZWJDb3JlOjpCbGVuZE1vZGUpOwogYm9vbCBwYXJzZUJsZW5kTW9kZShjb25zdCBTdHJpbmcm
LCBXZWJDb3JlOjpCbGVuZE1vZGUmKTsKQEAgLTE0Myw3ICsxMzMsNiBAQCBXRUJDT1JFX0VYUE9S
VCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2ViQ29yZTo6
Q29tcG9zaXRlTwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIFdpbmRSdWxlKTsKIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lQ2FwKTsKIFdFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBMaW5lSm9pbik7
Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3Bw
CmluZGV4IGMwMTI2MzcwY2I4NjU5MjdhMzJiZjExZjYxNDg2ZDcxYWY3YjQ3NTguLjRlMmJlNzFj
NzQxYzU1ZjU2YzBhZDA0NmE3OTdlNTBhMDk3MTg4YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICog
Q29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCwz
OCArMjgsNDQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgogCi0jaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgZmxvYXQgTWF4
Q2xhbXBlZExlbmd0aCA9IDQwOTY7Ci1zdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEg
PSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgcmV0
dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoaG9zdFdpbmRvdyku
Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBob3N0V2luZG93KTsKK30KIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBM
KEltYWdlQnVmZmVyKTsKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoc2l6ZSwgQ29sb3JTcGFjZTo6U1JHQiwgY29udGV4dCk7Cit9CiAKLXN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywg
c3VjY2VzcykpOwotICAgIGlmICghc3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXpl
IHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29u
dGV4dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAg
YSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAg
ICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICBy
ZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFy
Z2V0Q29udGV4dCwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2lu
ZG93LCB0YXJnZXRDb250ZXh0LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYnVmZmVyOworICAgIHJldHVybiBjcmVhdGUo
c2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSk7CiB9Ci0jZW5kaWYKKworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0
MDk2Oworc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0
aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKIGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1w
aW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKQEAgLTEwNSw5NyArMTExLDEyIEBAIEZsb2F0
UmVjdCBJbWFnZUJ1ZmZlcjo6Y2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAg
IHJldHVybiBGbG9hdFJlY3QocmVjdC5sb2NhdGlvbigpLCBjbGFtcGVkU2l6ZShyZWN0LnNpemUo
KSkpOwogfQogCi0jaWYgIVVTRShDRykgJiYgIVVTRShDQUlSTykKLVZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIGZvciBvdGhlciBiYWNrZW5kcy4KLSAgICByZXR1cm4geyB9OwotfQotI2VuZGlmCi0K
LSNpZiAhKFVTRShDRykgfHwgVVNFKERJUkVDVDJEKSkKLQotRmxvYXRTaXplIEltYWdlQnVmZmVy
OjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBzaXplKSBjb25zdAotewotICAgIHJl
dHVybiBzaXplOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENv
bG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQotewotICAg
IGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVu
dAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3Jj
Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0Q29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29s
b3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwot
ICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3Ip
OwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsK
LSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFy
UmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JH
QikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmlj
ZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5
OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAgICAgICAgIGNv
bG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAgICAgICAgICAg
IGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAgfSgpOwotICAg
ICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKLSAgICB9Ci19
Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVyOjpnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0KElu
dFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFzcmNQaXhlbEFy
cmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0
aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZz
ZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQp
IHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCAr
IDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdWlu
dDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAgICAgIHVpbnQ4
X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAgICAgICAgdWlu
dDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwotICAgICAgICAK
LSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4w
NzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChw
aXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXkoKnNyY1BpeGVs
QXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNl
UmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQgcGxhdGZvcm0g
c3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFuY2VNYXNrIGhl
cmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKLX0KLQotI2lm
ICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6OmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9y
bUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VCdWZmZXI6OmNv
bXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBFbmxhcmdlIHRo
ZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNv
IHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1
bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0
b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpAQCAtMjA0LDYz
ICsxMjUsMjcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y29w
eVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QKIAogICAgIEludFNpemUgc2NhbGVk
U2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShyZWN0LnNpemUoKSwgY29u
dGV4dCk7CiAKLSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVm
ZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGJ1ZmZlci0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0K
LSAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNj
YWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQorICAg
IGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihz
Y2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRp
bmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29u
dGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRl
cmluZ01vZGUoKSwgJmNvbnRleHQsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxz
ZQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZW5kaWYKLX0KLQotSW50U2l6ZSBJbWFnZUJ1ZmZl
cjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUg
aWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGln
aGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1
cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIGlt
YWdlQnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlv
bigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7CiB9CiAKLWJvb2wgSW1hZ2VCdWZmZXI6Omlz
Q29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkgY29u
c3QKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCiB7Ci0gICAgcmV0dXJuIGFyZUVz
c2VudGlhbGx5RXF1YWwoY29udGV4dC5zY2FsZUZhY3RvcigpLCB0aGlzLT5jb250ZXh0KCkuc2Nh
bGVGYWN0b3IoKSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdl
KCk7CiB9CiAKLSNpZiAhVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVf
dCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0CitSZWZQdHI8SW1hZ2U+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7Ci0gICAgLy8gbWVt
b3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBh
bmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBh
bmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVz
ZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRl
cm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKLXNp
emVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1
ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQogewotICAgIHJldHVybiAwOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5n
KGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKIH0KLSNlbmRpZgogCi19Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuaAppbmRleCAzYmRlZTRlZTAwZWQxN2FlMzQzYjJmNmE4ZGRkMDA5Mzg5
YzJlNmJmLi5jNjBiNzVkNGZiZmJhNWQyYmQ0NTBiMTNhNzUzMTMwZmM2YmNjYWY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKQEAgLTEsNiAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTggQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmls
ZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKQEAgLTI3LDE3MCArMjcsODEgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdl
QnVmZmVyRGF0YS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQmFja2VuZC5oIgogI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNz
IEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7
Ci1jbGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1l
bnVtIEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRl
ZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJh
Y2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19Owot
Ci1lbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsK
K25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xh
c3MgSW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdl
QnVmZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VC
dWZmZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2ls
bCByZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBD
b2xvclNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRy
KTsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01v
ZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENv
bG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIp
OwotI2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0
aCB0aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5l
dyBvbmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwog
Ci0gICAgLy8gQ3JlYXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRl
eHQsIHdpdGggc3VpdGFibGUgcmVzb2x1dGlvbiBmb3IgZHJhd2luZyBpbnRvIHRoZSBidWZmZXIg
YW5kIHRoZW4gaW50byB0aGlzIGNvbnRleHQuCiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmKTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIENvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAot
ICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwotICAgIGJvb2wgaXNDb21wYXRpYmxlV2l0aENvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JikgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB+
SW1hZ2VCdWZmZXIoKTsKLQotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFj
a2luZyBzdG9yZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2l6ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQotCi0gICAgRmxvYXRTaXplIHNpemVGb3JEZXN0aW5hdGlv
blNpemUoRmxvYXRTaXplKSBjb25zdDsKLQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgLy8gVGhlc2UgZnVuY3Rpb25z
IGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQg
Zm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRz
Q2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxvYXRT
aXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOworICAg
IHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAgICBX
RUJDT1JFX0VYUE9SVCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdDsKKyAgICBzdGF0
aWMgSW50U2l6ZSBjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOwot
ICAgIC8vIEdpdmUgaGludHMgb24gdGhlIGZhc3RlciBjb3B5SW1hZ2UgTW9kZSwgcmV0dXJuIERv
bnRDb3B5QmFja2luZ1N0b3JlIGlmIGl0IHN1cHBvcnRzIHRoZSBEb250Q29weUJhY2tpbmdTdG9y
ZSBiZWhhdmlvcgotICAgIC8vIG9yIHJldHVybiBDb3B5QmFja2luZ1N0b3JlIGlmIGl0IGRvZXNu
J3QuICAKLSAgICBzdGF0aWMgQmFja2luZ1N0b3JlQ29weSBmYXN0Q29weUltYWdlTW9kZSgpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0g
ICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJhY2tp
bmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgPSAw
OwogCi0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoY29uc3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0
ciwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29v
cmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICB2aXJ0
dWFsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQoKSB7IHJldHVy
biBudWxscHRyOyB9CisgICAgdmlydHVhbCB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSB7IH0K
IAotICAgIHZvaWQgcHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUs
IGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIElu
dFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGludGVy
bmFsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGZsb2F0IHJlc29sdXRpb25TY2FsZSgp
IGNvbnN0ID0gMDsKICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAg
ICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZp
cnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAot
ICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2
ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9w
dCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0g
Q29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotI2lmIFVTRShD
QUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlmCisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZs
b2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0jaWYgIVVT
RShDRykKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9Ci0gICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKTsKLSAgICB2b2lk
IHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1
Nj4mKTsKLSNlbHNlCi0gICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oMSwgMCwgMCwgLTEsIDAsIG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpKTsgfQotI2VuZGlmCi0gICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0
UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsg
fSkgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgc3RhdGljIE5hdGl2ZUltYWdlUHRyIHNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7CisgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKTsKKyAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwogCi0gICAgLy8gRklYTUU6IGN1cnJlbnQgaW1w
bGVtZW50YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhl
eSBvbmx5IHdvcmsKLSAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZv
cm1hdCwgYW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4
dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0
LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWlu
YW5jZU1hc2soKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29s
b3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKSA9IDA7CiAK
LSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VC
dWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KLSAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKLSAgICBz
dGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUm
IHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwg
RmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVz
ZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLXByaXZhdGU6
Ci0jaWYgVVNFKENHKQotICAgIC8vIFRoZSByZXR1cm5lZCBpbWFnZSBtaWdodCBiZSBsYXJnZXIg
dGhhbiB0aGUgaW50ZXJuYWxTaXplKCkuIElmIHlvdSB3YW50IHRoZSBzbWFsbGVyCi0gICAgLy8g
aW1hZ2UsIGNyb3AgdGhlIHJlc3VsdC4KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAg
ICBzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsK
LSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3Rh
dGljIENPTVB0cjxJRDJEMUJpdG1hcD4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VuZGlm
Ci0gICAgCi0gICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwg
LTEpLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOwotICAgIHZvaWQgZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CisgICAgdmlydHVhbCBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lz
dGVtOjpMb2dpY2FsKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmIGRhdGFTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50ID0gSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbSA9IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpID0gMDsKIAotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25z
dW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRS
ZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Cisg
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0sIFBsYXRmb3JtR0xP
YmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKSBjb25zdCA9IDA7CisgICAgCitwcm90ZWN0ZWQ6
CisgICAgSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBpbmxpbmUgdm9pZCBnZW5lcmlj
Q29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKLSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2Vu
ZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5k
IGNsYXNzIEN1c3RvbVBhaW50SW1hZ2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRh
IG1fZGF0YTsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7
Ci0gICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9y
IHdpbGwgcGxhY2UgaXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAg
Ly8gc28gdGhhdCBjcmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4K
LSAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5k
b3cqLCBib29sJiBzdWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRl
cmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElS
RUNUMkQpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFs
IE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCi0jaWYgVVNF
KENHKQotU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLVZlY3Rvcjx1aW50OF90PiBkYXRhKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7Ci0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYzA1Y2FmZDI4ODc3ZmQ1ZDA3NmM3NzhlYjQwZjZjZmM3OThmZGQwCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIklu
dFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQorICAgIDogbV9sb2dpY2FsU2l6ZShsb2dpY2FsU2l6ZSkKKyAgICAsIG1faW50ZXJu
YWxTaXplKGludGVybmFsU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25T
Y2FsZSkKKyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIElt
YWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEZsb2F0U2l6ZSBzY2FsZWRTaXpl
ID0geyBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpLCBjZWlsZihyZXNvbHV0
aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKSB9OworICAgIGlmIChzY2FsZWRTaXplLmlzRW1wdHko
KSB8fCAhc2NhbGVkU2l6ZS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IEludFNpemUoc2NhbGVkU2l6ZSk7
CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3cgPSA0
ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS53aWR0aCgp
KTsKKyAgICBpZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENo
ZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpICog
Ynl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICAKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQ
dHI8SW1hZ2U+IEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2Vu
ZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCit7CisgICAgSW50UmVjdCBsdW1pbmFuY2VSZWN0
KEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJy
YXkgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBsdW1pbmFuY2VSZWN0LCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICBpZiAoIXNy
Y1BpeGVsQXJyYXkpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlM
ZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVs
T2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCAr
PSA0KSB7CisgICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZz
ZXQgKyAzKTsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1
aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAg
IHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKyAgICAg
ICAgCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAq
IDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5LT5z
ZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgbHVt
aW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCksIENvb3JkaW5hdGVT
eXN0ZW06OkxvZ2ljYWwpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5k
Ojp0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
c3VsdCg0ICogbV9sb2dpY2FsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCkpOworICAgIHNpemVfdCBk
ZXN0Qnl0ZXNQZXJSb3cgPSBtX2xvZ2ljYWxTaXplLndpZHRoKCkgKiA0OworICAgIHNpemVfdCBz
cmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisKKyAgICB1aW50OF90KiBzcmNSb3dzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMo
CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRD
b2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBDb2xvckZvcm1hdDo6QkdSQSwgZGVzdEJ5
dGVzUGVyUm93LCByZXN1bHQuZGF0YSgpLCBtX2xvZ2ljYWxTaXplKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJCYWNrZW5k
OjpjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0
JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgQ2hlY2tl
ZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OworICAgIGFyZWEgKj0gc3JjUmVj
dC53aWR0aCgpOworICAgIGFyZWEgKj0gc3JjUmVjdC5oZWlnaHQoKTsKKyAgICBpZiAoYXJlYS5o
YXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBhcnJh
eSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZl
R2V0KCkpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygp
LCBtX2ludGVybmFsU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGJ1
ZmZlclJlY3QsIHNyY1JlY3QpOworICAgIGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBz
cmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0LngoKSA8IDApCisgICAg
ICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3QueSgpKTsKKworICAgIGlmIChkZXN0
UmVjdC5zaXplKCkgIT0gc3JjUmVjdC5zaXplKCkpCisgICAgICAgIGFycmF5LT56ZXJvRmlsbCgp
OworICAgIAorICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0
IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIEludFJlY3QmIHNy
Y1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBJbnRSZWN0IGRh
dGFSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBzcmNTaXplIH07CisgICAgc3JjUmVjdENsaXBw
ZWQgPSBpbnRlcnNlY3Rpb24oZGF0YVJlY3QsIHNyY1JlY3QpOworICAgIAorICAgIGRlc3RSZWN0
ID0gc3JjUmVjdENsaXBwZWQ7CisgICAgZGVzdFJlY3QubW92ZUJ5KGRlc3RQb2ludCk7CisgICAg
CisgICAgaWYgKHNyY1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WChkZXN0UmVj
dC54KCkgLSBzcmNSZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAg
ICBkZXN0UmVjdC5zZXRZKGRlc3RSZWN0LnkoKSAtIHNyY1JlY3QueSgpKTsKKworICAgIEludFJl
Y3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAg
ICBkZXN0UmVjdC5pbnRlcnNlY3QoYnVmZmVyUmVjdCk7CisKKyAgICBzcmNSZWN0Q2xpcHBlZC5z
ZXRTaXplKGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29u
c3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhf
dCogZGVzdFBpeGVsKQoreworICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3Jt
YXQpIHsKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0g
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUGl4ZWwpWzBdOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBS
R0JBLgorICAgIGRlc3RQaXhlbFswXSA9IHNyY1BpeGVsWzJdOworICAgIGRlc3RQaXhlbFsxXSA9
IHNyY1BpeGVsWzFdOworICAgIGRlc3RQaXhlbFsyXSA9IHNyY1BpeGVsWzBdOworICAgIGRlc3RQ
aXhlbFszXSA9IHNyY1BpeGVsWzNdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11
bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29u
c3QgdWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhf
dCogZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBp
ZiAoIWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRv
UHJlbXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwg
ZGVzdFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZv
cm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1Bp
eGVsWzBdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxb
MV0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAq
IDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBS
R0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkgLyBhbHBoYTsKKyAg
ICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBp
eGVsWzJdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFszXSA9
IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCogc3Jj
UGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCogZGVzdFBpeGVsKQor
eworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAoIWFscGhhIHx8IGFs
cGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZChz
cmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVzdFBpeGVsKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVz
dENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdS
QSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKwordGVtcGxhdGU8dm9pZCAoKmNv
cHlGdW5jdG9yKShDb2xvckZvcm1hdCwgY29uc3QgdWludDhfdCosIENvbG9yRm9ybWF0LCB1aW50
OF90Kik+CitzdGF0aWMgaW5saW5lIHZvaWQgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZCgK
KyAgICBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cs
IHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNp
Z25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBz
aXplKQoreworICAgIHNpemVfdCBieXRlc1BlclJvdyA9IHNpemUud2lkdGgoKSAqIDQ7CisgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgZm9yIChz
aXplX3QgeCA9IDA7IHggPCBieXRlc1BlclJvdzsgeCArPSA0KQorICAgICAgICAgICAgY29weUZ1
bmN0b3Ioc3JjQ29sb3JGb3JtYXQsICZzcmNSb3dzW3hdLCBkZXN0Q29sb3JGb3JtYXQsICZkZXN0
Um93c1t4XSk7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgICAgIGRl
c3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNB
bHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVz
UGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0
Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAg
ICBBU1NFUlQoc3JjQWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCAmJiBkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCk7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVBy
ZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJv
dywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBz
aXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11
bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlV
bnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1Bl
clJvdywgc3JjUm93cywgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dz
LCBzaXplKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCB2
b2lkKiBkYXRhKSBjb25zdAoreworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7
CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAm
JiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKworICAgIEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50
UmVjdCBkZXN0UmVjdDsKKyAgICBhdXRvIGFycmF5ID0gY3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXko
c3JjUmVjdFNjYWxlZCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsKKyAgICBpZiAoIWFycmF5
IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWlu
dDhfdCogZGVzdFJvd3MgPSBhcnJheS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKyAgICAKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJS
b3cgKyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAg
ICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JG
b3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIG91dHB1dEZvcm1hdCwg
Q29sb3JGb3JtYXQ6OlJHQkEsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNp
emUoKSk7CisKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0sIHZvaWQqIGRhdGEpCit7CisgICAgSW50U2l6ZSBzcmNTaXpl
U2NhbGVkID0gc3JjU2l6ZTsKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0Owor
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYg
bV9yZXNvbHV0aW9uU2NhbGUgIT0gMSkgeworICAgICAgICBzcmNTaXplU2NhbGVkLnNjYWxlKG1f
cmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRp
b25TY2FsZSk7CisgICAgfQorCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRS
ZWN0IGRlc3RSZWN0OworICAgIGNhbGN1bGF0ZVB1dEltYWdlRGF0YVJlY3RzKHNyY1NpemVTY2Fs
ZWQsIHNyY1JlY3RTY2FsZWQsIGRlc3RQb2ludCwgc3JjUmVjdENsaXBwZWQsIGRlc3RSZWN0KTsK
KyAgICAKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAg
IHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBk
ZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc3JjU2l6ZVNjYWxlZC53aWR0aCgpOworICAg
IHVpbnQ4X3QqIHNyY1Jvd3MgPSBhcnJheS5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBz
cmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQ
aXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBk
ZXN0UmVjdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjZjMjFmMjg4MDYzOWJlZjE4NDQwZTY0NGQ5MTUyZGVjZTVkZjg0YjgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ckJhY2tlbmQuaApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUxheWVyLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7
CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3Vh
cmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAgIERvbnRD
b3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4K
K307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7CisgICAgTm8s
CisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3QgeworICAg
IFJHQkEsCisgICAgQkdSQQorfTsKKworZW51bSBjbGFzcyBDb29yZGluYXRlU3lzdGVtIDogdWlu
dDhfdCB7CisgICAgTG9naWNhbCwKKyAgICBCYWNraW5nU3RvcmUKK307CisKK2NsYXNzIEltYWdl
QnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1h
Z2VCdWZmZXJCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUpOworCisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorICAg
IAorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXpl
OyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFs
U2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVz
b2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFs
IHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gNCAqIG1faW50ZXJuYWxTaXplLmFy
ZWEoKS51bnNhZmVHZXQoKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29z
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29w
eU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3QgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRy
YXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JikgPSAwOworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5r
SW50b05hdGl2ZUltYWdlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZWZQdHI8SW1h
Z2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9u
OjpObyk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpOworCisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmly
dHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSkgeyB9
CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6
ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgPSAwOworICAgIAorICAgIHZpcnR1YWwgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0
LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVj
dGVkOgorICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3Qm
IHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3Q7CisgICAgdm9pZCBjYWxj
dWxhdGVQdXRJbWFnZURhdGFSZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0
Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0OworCisgICAgdmlydHVhbCB1bnNpZ25l
ZCBieXRlc1BlclJvdygpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53aWR0aCgp
OyB9CisgICAgdmlydHVhbCBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCB7
IHJldHVybiBDb2xvckZvcm1hdDo6UkdCQTsgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5z
aWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3Jt
YXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IElu
dFNpemUmKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtLCB2b2lkKiBkYXRhKSBjb25z
dDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50
U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSk7CisKKyAgICBJbnRTaXplIG1f
bG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2ludGVybmFsU2l6ZTsKKyAgICBmbG9hdCBtX3Jl
c29sdXRpb25TY2FsZTsKKyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4OWVj
MGQzNmZlZmJkMTJhYmU1NDNjM2YyMDM0ZjYxNThiM2QyY2YuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJEYXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZiBVU0UoQ0cpCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENBSVJPKQotI2luY2x1
ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NzcyYzY5NGQzODFhY2JjOTI2MGRiYjQ3ZTlmZTI3MDFlNDI3NjVhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oCkBAIC0wLDAgKzEsMjE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2Ns
YXNzIFBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IFBoeXNpY2FsSW1hZ2VCdWZm
ZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2Vy
dChzdGQ6OmlzX2Jhc2Vfb2Y8SW1hZ2VCdWZmZXIsIEltYWdlQnVmZmVyVHlwZT46OnZhbHVlKTsK
KyAgICAgICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBpZiAoIWJhY2tlbmQp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5k
KSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRU
eXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUoYmFja2VuZCkpCisg
ICAgeworICAgIH0KKworICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CisKKyAg
ICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbV9i
YWNrZW5kLmdldCgpOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgICAgIHJldHVy
biBtX2JhY2tlbmQtPmNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
YmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBZmZpbmVU
cmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJh
Y2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNm
b3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50
U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmludGVybmFsU2l6ZSgpIDog
SW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5yZXNvbHV0aW9uU2Nh
bGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5tZW1vcnlDb3N0KCkgOiAw
OyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+ZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weU5hdGl2ZUlt
YWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorCisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVo
YXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAg
Zmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAg
ICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7Cisg
ICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFj
a2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1
bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRv
THVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAg
ICB9CisgICAgfQorCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3Jj
Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT50cmFuc2Zvcm1D
b2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50
b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90
PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5
c2ljYWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UGh5c2ljYWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50
b0JHUkFEYXRhKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgp
KSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcyku
Zmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRh
KG91dHB1dEZvcm1hdCwgcmVjdCwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFy
cmF5LCBjb25zdCBJbnRTaXplJiBkYXRhU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
ID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaENv
bnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwg
YXJyYXksIGRhdGFTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0pOwor
ICAgICAgICB9CisgICAgfQorCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGJvb2wgY29weVRvUGxhdGZvcm1U
ZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1
cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0
Zm9ybVRleHR1cmUodGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBw
cmVtdWx0aXBseUFscGhhLCBmbGlwWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZGEyYjgzMWYzM2NkNTcy
MmJkNzI5NzczNGM3OWYxYTAxMzQwY2U1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAi
UGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOwor
I2VsaWYgVVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8p
Cit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDsKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAo
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOworI2Vsc2UK
K3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBQbGF0Zm9ybVVu
YWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ7CisjZW5kaWYKKwordXNpbmcgUGxhdGZvcm1J
bWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9
IFBoeXNpY2FsSW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2Vu
ZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjViODAwNmQ5Nzk1MTQ1NjE3MDA5YjM0OTZlMTJiMDY1M2RhZWJhNGUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKQorI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxpZiBVU0Uo
Q0FJUk8pCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mZGEwYWZhNzlkNzQ2MWNkOWYyZjEwOTEzNTBjODE1ZGJiYmQ3YmM3Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
QmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFj
a2VuZD4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitS
ZW5kZXJpbmdCYWNrZW5kJiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPj4gc2hhcmVkUmVuZGVyaW5nQmFj
a2VuZCB7IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpIH07CisgICAgcmV0dXJuIGhvc3RXaW5k
b3cgJiYgaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpID8gKmhvc3RXaW5kb3ct
PnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA6ICpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kLmdldCgp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbmRlcmluZ0JhY2tlbmQ6OmNy
ZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7Cisg
ICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01v
ZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToK
KyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxh
dGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZl
ciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFM
TFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDoKKyAgICAgICAg
aWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGlt
YWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTcxYjkyZDU4NGZlZThmNGFmN2E4NTk2NGVhYWJjMWNlZDUwMTczMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApA
QCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAi
RmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIElu
dFNpemU7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7
CisKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChj
b25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworICAgIAorICAgIHZpcnR1YWwgflJlbmRlcmlu
Z0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOwor
ICAgIAorcHJvdGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7Cit9Owor
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdNb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2Rl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmNjMzk4OGZkNjQzZGE3MDQ0MWU1MzM4YjE2YTExYjA1NDYzMTM4NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRl
cmluZ01vZGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2VudW0gY2xhc3MgUmVuZGVyaW5nTW9kZSB7CisgICAgQWNjZWxlcmF0ZWQsCisgICAgVW5hY2Nl
bGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0LAor
ICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwCmluZGV4IDQwNDFiM2Y4MTA3Njc4YzU2YWNkYjBjNTMzYTA5ODZmN2U2NDU1OTYuLjYx
MmY5ZTlkMjJkNjcxZjY4ZDU2NWYxMjQ0OTRlYzMzMmQ1Zjk0NTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC04Myw3ICs4Myw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2xlYXJTY3JhdGNoQnVmZmVyKCk7CiAKICAgICAgICAgLy8gU2hh
ZG93Qmx1ciBpcyBub3QgdXNlZCB3aXRoIGFjY2VsZXJhdGVkIGRyYXdpbmcsIHNvIGl0J3MgT0sg
dG8gbWFrZSBhbiB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZCBidWZmZXIuCi0gICAgICAg
IG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBVbmFjY2Vs
ZXJhdGVkLCAxKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
cm91bmRlZFNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgICAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlci5nZXQoKTsKICAgICB9CiAKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmRyYXdJbnNldFNoYWRvdyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgY29uc3QgSW50UmVjdAogCiB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0
aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0
JiBzaGFkb3dlZFJlY3QsIGNvbnN0IExheWVySW1hZ2VQcm9wZXJ0aWVzJiBsYXllckltYWdlUHJv
cGVydGllcywgY29uc3QgRHJhd0J1ZmZlckNhbGxiYWNrJiBkcmF3QnVmZmVyKQogewotICAgIGF1
dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVy
SW1hZ2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8g
bGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1h
Z2VQcm9wZXJ0aWVzLmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwog
ICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC02MjEsNyArNjIxLDcg
QEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXQKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRT
aGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UmVj
dCYgZnVsbFJlY3QsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3QmIGhvbGVSZWN0LCBjb25zdCBMYXll
ckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJD
YWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUp
LCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAg
ICAgIHJldHVybjsKIApAQCAtNjg1LDcgKzY4NSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1Jl
Y3RTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25z
CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNj
cmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGxheWVy
SW1hZ2VQcm9wZXJ0aWVzKTsKLSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHRlbXBsYXRlU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXll
ckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdl
QnVmZmVyLmdldCgpOwogI2VuZGlmCiAKQEAgLTczOSw3ICs3MzksNyBAQCB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdJbnNldFNoYWRvd1dpdGhUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGNvbgogI2lmIFVTRShDRykKICAgICBhdXRvKiBsYXllckltYWdlID0gU2NyYXRjaEJ1
ZmZlcjo6c2luZ2xldG9uKCkuZ2V0U2NyYXRjaEJ1ZmZlcih0ZW1wbGF0ZVNpemUpOwogI2Vsc2UK
LSAgICBhdXRvIGxheWVySW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRlbXBsYXRl
U2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpOwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBsYXllckltYWdlQnVmZmVyLmdldCgpOwogI2Vu
ZGlmCiAKQEAgLTg4NCwxMiArODg0LDEyIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1
ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAg
ICAgIHJldHVybjsKIAogICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVT
aXplKTsKLSAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKGJsdXJSZWN0KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Qp
OwogICAgIGlmICghbGF5ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKICAgICBibHVyTGF5ZXJJ
bWFnZShsYXllckRhdGEtPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgp
ICogNCk7Ci0gICAgbGF5ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0
LCB7IH0pOworICAgIGxheWVySW1hZ2UucHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKmxheWVyRGF0YSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVj
dCk7CiB9CiAKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdl
QnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCkBAIC05MTIs
NyArOTEyLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93TGF5ZXIoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogICAgIGFkanVzdEJsdXJSYWRp
dXModHJhbnNmb3JtKTsKIAotICAgIGF1dG8gbGF5ZXJJbWFnZSA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoZXhwYW5kZWRJbnRTaXplKGxheWVySW1hZ2VQcm9wZXJ0aWVzLT5sYXllclNpemUpLCBVbmFj
Y2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCmluZGV4IDYyYzc5ZjEzYTFjNzI0ZGRmMzdhOTQ2
NGY4MzJjZDZmNzc5ZTA3ZDguLjgwYTAyNWU4ZTZjYTg4YTZiNDdmYzdmZGM1ZTVjNWUyNTBmOWZl
ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Nh
aXJvT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBAIGVudW0gUGF0aERy
YXdpbmdTdHlsZSB7CiAKIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9y
bUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwg
Y29uc3QgRmxvYXRQb2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0U2l6ZSYgbGF5ZXJTaXpl
LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFj
ZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBs
YXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAg
ICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRS
ZWN0KHJvdW5kZWRJbnRQb2ludChsYXllck9yaWdpbiksIGxheWVyU2l6ZSksIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIGxheWVyU2l6ZSksIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0K
IH0KQEAgLTE4Miw3ICsxODIsNyBAQCBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIo
UGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdQogLy8gRklYTUU6
IFRoaXMgaXMgbW9zdGx5IHNhbWUgYXMgZHJhd1NoYWRvd0xheWVyQnVmZmVyLCBzbyB3ZSBzaG91
bGQgbWVyZ2UgdHdvLgogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0ltYWdlKFBsYXRmb3JtQ29udGV4
dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFNoYWRv
d1N0YXRlJiBzaGFkb3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFn
ZS5uYXRpdmVJbWFnZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZl
SW1hZ2UocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwg
eyBzaGFkb3dTdGF0ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9i
YWxBbHBoYSwgU2hhZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTkxLDcgKzE5MSw3IEBAIHN0
YXRpYyB2b2lkIGZpbGxTaGFkb3dCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgSW1hZ2VCdWZmZXImCiB7CiAgICAgc2F2ZShwbGF0Zm9ybUNvbnRleHQpOwogCi0g
ICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAo
YXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQogICAgICAgICBjbGlwVG9JbWFnZUJ1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIHN1cmZh
Y2UuZ2V0KCksIEZsb2F0UmVjdChsYXllck9yaWdpbiwgZXhwYW5kZWRJbnRTaXplKGxheWVyU2l6
ZSkpKTsKIAogICAgIEZpbGxTb3VyY2UgZmlsbFNvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAppbmRleCA5YjAyNWUxNDc2NzM1MmUxNGFkNDhmODY3YjA0NTg1ZWU4MDM0MTM0Li40
ZTFiZjJiNDM2N2YzNDM1OWQ4NTRlYjc4YzIyMDJkZjU3YjI3NDc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYg
ZGUKICAgICB9CiAKICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNl
ID0gYnVmZmVyLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAg
IENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcigqcGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0
KCksIGRlc3RSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAK
aW5kZXggOWM3NmUyOTEyZjgxZmM5NGFkYjVjNDg0NDUyNzEzNDYwZGNmYjI4Zi4uMjlhMGVjNDk5
NGYzNjE1ZDg3YjFiYjRlMWUzM2Q3Njg4MDdjYmE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uY3BwCkBAIC00MTEsNyArNDExLDcgQEAgSW50UmVjdCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNsaXBCb3VuZHMoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWly
bzo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdl
KCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0
Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5NjU3ZTNiMjk5ZWQ2ZWI0
YzVjYzM1ZGI5NTMyNDU3ODc3NzViOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc4MSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3Jn
PgotICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNr
ZUBzZWxmaXNoLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUg
PGtyaXRAd2Via2l0Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJl
aWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJDYWlyb1V0aWxpdGll
cy5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGF0dGVy
bi5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxjYWlyby5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiR0xDb250ZXh0LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlckdMLmgiCi0KLSNpZiBVU0UoRUdMKQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNsdWRlICJF
cG94eUVHTC5oIgotI2Vsc2UKLSNpbmNsdWRlIDxFR0wvZWdsLmg+Ci0jZW5kaWYKLSNlbmRpZgot
I2luY2x1ZGUgPGNhaXJvLWdsLmg+Ci0KLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSA8ZXBv
eHkvZ2wuaD4KLSNlbGlmIFVTRShPUEVOR0xfRVMpCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0j
ZWxzZQotI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCi0jZW5kaWYKLQotI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZl
ci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKLSNlbmRp
ZgotI2VuZGlmCi0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZUJ1ZmZlckRhdGE6Oklt
YWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUpCi0gICAgOiBtX3BsYXRmb3JtQ29udGV4dCgwKQotICAgICwgbV9zaXplKHNpemUpCi0g
ICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAsIG1fY29t
cG9zaXRvclRleHR1cmUoMCkKLSNlbmRpZgotICAgICwgbV90ZXh0dXJlKDApCi0jZW5kaWYKLXsK
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1MpCi0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCkgewotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBtX25pY29zaWFMYXllciA9IE5pY29z
aWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBw
ZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAgICAgICBtX3BsYXRmb3Jt
TGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
KTsKLSNlbmRpZgotICAgIH0KLSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5JbWFnZUJ1
ZmZlckRhdGEoKQotewotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gQWNjZWxlcmF0ZWQpCi0g
ICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYg
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKLSAgICBkb3duY2FzdDxO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmlt
cGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0KLSAgICBHTENvbnRleHQqIHByZXZp
b3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotICAgIFBsYXRmb3JtRGlz
cGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3RleHR1cmUpCi0gICAgICAgIGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVy
ZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlmCi0KLSAgICBpZiAocHJldmlvdXNB
Y3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpj
cmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1E
aXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7
Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBnbEdlblRleHR1cmVz
KDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVf
MkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBB
Q0tfQUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAsIEdM
X1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCks
IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0
X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOwot
fQotCi0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25zdAotewotICAgIHJldHVybiBtX3Bs
YXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbWFnZUJ1ZmZl
ckRhdGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAgIEdMQ29udGV4dCogcHJldmlvdXNB
Y3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0KLSAgICBpZiAoIW1fY29tcG9z
aXRvclRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAg
ICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7Ci0gICAgICAgICAgICAgICAgcHJv
eHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1
ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3Vs
ZEJsZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9OwotI2lmIFVTRShOSUNPU0lBKQotICAg
ICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7Ci0jZWxzZQotICAg
ICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAg
fQotCi0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBi
dWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNl
cwotICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVy
ZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKLSAg
ICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAgICBjYWlyb19zZXRfc291cmNlX3N1
cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7Ci0gICAg
Y2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9T
T1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKLQotICAgIGlm
IChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQotdm9pZCBjbGVhclN1cmZhY2UoY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhz
dXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
UmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKLSAg
ICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKLSAg
ICBjYWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVh
dGVDYWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAg
IGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgLy8gV2UgbXVzdCBnZW5lcmF0
ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZv
ciBleHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgotICAg
IGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhU
VVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19B
TElHTk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2
ZWwgKi8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAgLyogYm9y
ZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIGNhaXJvX2Rldmlj
ZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwotCi0gICAgLy8gVGhyZWFkLWF3
YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgot
ICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOwotCi0g
ICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1
cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX3RleHR1cmUsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVhclN1cmZhY2UobV9zdXJmYWNlLmdl
dCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJv
U3VyZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGF1dG8gY29weSA9
IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIs
Ci0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpKTsKLQotICAgIGF1dG8g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9v
cGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRf
c291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgIGNhaXJvX3BhaW50
KGNyLmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQotCi1zdGF0aWMgUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENB
SVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250
ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCi0gICAgICAgIHJldHVy
biBzdXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZUNvcHkoc3VyZmFjZSk7Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAg
YXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZShtX2RhdGEubV9zdXJmYWNl
LmdldCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOwotCi0gICAg
VmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMo
c3VyZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFnZURhdGE7Ci0KLSAgICBhdXRvIHBp
eGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7Ci0gICAg
aW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShz
dXJmYWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChz
dXJmYWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQotCi1OYXRpdmVJbWFn
ZVB0ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rh
dGEubV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3Mp
Ci0gICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVyaW5nTW9kZSkKLSAgICAsIG1fbG9n
aWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkK
LXsKLSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGVycm9y
LgotCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNp
emUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYobV9yZXNvbHV0aW9u
U2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21h
dGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0
KTsKLSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0gICAgaWYgKG1fc2l6ZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0gQWNjZWxlcmF0ZWQpIHsKLSAgICAg
ICAgbV9kYXRhLmNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0gICAgICAgIGlmICghbV9kYXRhLm1f
c3VyZmFjZSB8fCBjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAh
PSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgICAgIG1fZGF0YS5tX3JlbmRlcmluZ01v
ZGUgPSBVbmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8g
bm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdN
b2RlID09IFVuYWNjZWxlcmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVChtX2RhdGEubV9yZW5kZXJp
bmdNb2RlICE9IEFjY2VsZXJhdGVkKTsKLSNlbmRpZgotICAgIHsKLSAgICAgICAgc3RhdGljIGNh
aXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OwotCi0gICAgICAgIGludCBzdHJp
ZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBt
X3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1cmZhY2VEYXRhOwotICAgICAgICBpZiAo
IXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShz
dXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLm1fc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwotICAgICAgICBjYWly
b19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFj
ZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7IGZhc3RGcmVlKGRhdGEpOyB9
KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsgIC8vIGNy
ZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1faW5pdGlhbGl6ZWQgYW5kIGZhaWwuCi0K
LSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBt
X3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgUmVmUHRyPGNhaXJv
X3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsK
LSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwotICAgIG1fZGF0
YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0
SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dCkpOwotICAg
IHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUs
IENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQotCi1HcmFwaGljc0NvbnRleHQmIEltYWdl
QnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5tX2NvbnRleHQ7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgLy8gY29weUNhaXJvSW1hZ2VTdXJmYWNl
IGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUgZmFjdG9yLgotICAgIGlmIChjb3B5QmVo
YXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLQot
ICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24g
ZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1h
Z2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNr
aW5nU3RvcmU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsICBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoZGVzdGluYXRp
b25Db250ZXh0LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAgICAgICAgaWYgKCZkZXN0aW5hdGlv
bkNvbnRleHQgPT0gJmNvbnRleHQoKSkKLSAgICAgICAgICAgIHN1cmZhY2UgPSBjYWlyb1N1cmZh
Y2VDb3B5KHN1cmZhY2UuZ2V0KCkpOwotCi0gICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFp
bnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0aW5hdGlvbkNvbnRl
eHQsIG9wdGlvbnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8m
IGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7Ci0g
ICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdGluYXRpb25Db250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9u
Q29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRp
b25Db250ZXh0U3RhdGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0
ZXJuKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5U
cmFuc2Zvcm0sCi0gICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChjb250ZXh0
LnBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3Vy
ZmFjZSA9IG5hdGl2ZUltYWdlKCkpCi0gICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3Jj
UmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKLXsKLSAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNw
YWNlIGNvbnZlcnNpb25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgotICAgIGlmIChjYWlyb19z
dXJmYWNlX2dldF90eXBlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0Vf
VFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNy
YyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7
Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQo
KTsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1
bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiB5KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBtX3NpemUud2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwg
PSByb3cgKyB4OwotICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11
bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci0gICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9v
a1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGl4ZWxDb2xvci5hbHBoYSgpKTsKLSAgICAgICAgICAgICpwaXhl
bCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9kYXRhLm1fc3Vy
ZmFjZS5nZXQoKSwgMCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhl
aWdodCgpKTsKLX0KLQotUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdl
QW5kQWRqdXN0UmVjdChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIEludFJlY3QmIHJlY3QpCi17
Ci0gICAgY2Fpcm9fc3VyZmFjZV90eXBlX3Qgc3VyZmFjZVR5cGUgPSBjYWlyb19zdXJmYWNlX2dl
dF90eXBlKHN1cmZhY2UpOwotCi0gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlLCB3
ZSB3cml0ZSBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBkYXRhOwotICAgIC8vIG90aGVyd2lz
ZSB3ZSBjcmVhdGUgYSB0ZW1wb3Jhcnkgc3VyZmFjZSBpbWFnZQotICAgIGlmIChzdXJmYWNlVHlw
ZSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwot
ICAgIAotICAgIHJlY3Quc2V0WCgwKTsKLSAgICByZWN0LnNldFkoMCk7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSkpOwotfQotCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBwcmVtdWx0aXBsaWVkPgotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJ
bWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3Qs
IGNvbnN0IEltYWdlQnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3Qg
SW50U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICAvLyBU
aGUgYXJlYSBjYW4gb3ZlcmZsb3cgaWYgdGhlIHJlY3QgaXMgdG9vIGJpZy4KLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0Lndp
ZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkp
OwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENh
biBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwot
ICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFk
ZGluZyAyIGludHMuCi0gICAgaW50IGVuZHkgPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJl
Y3QueSgpLCByZWN0LmhlaWdodCgpLCBlbmR5KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0
aCgpIHx8IGVuZHkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7
Ci0KLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAg
aWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9y
aWdpbnggPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQotICAgICAg
ICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdp
bng7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0g
ICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAg
IG9yaWdpbnkgPSAwOwotICAgIH0KLQotICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAg
ICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3Jp
Z2lueTsKLQotICAgIC8vIE5vdGhpbmcgd2lsbCBiZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRo
ZSByZXN1bHQuCi0gICAgaWYgKG51bUNvbHVtbnMgPD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJm
YWNlIGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0
byBzZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMg
SW1hZ2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3Qob3JpZ2lueCwgb3JpZ2lueSwgbnVt
Q29sdW1ucywgbnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJm
YWNlID0gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChkYXRhLm1fc3VyZmFjZS5nZXQo
KSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZh
Y2UuZ2V0KCksIHJlc29sdXRpb25TY2FsZSwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBvcmlnaW54
ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBvcmlnaW55ID0gaW1hZ2VSZWN0LnkoKTsKLSAgICBpZiAo
aW1hZ2VTdXJmYWNlICE9IGRhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMg
Y2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bS4KLSAgICAgICAgSW50UmVjdCBsb2dpY2FsQXJlYSA9IGludGVyc2VjdGlvbihsb2dpY2FsUmVj
dCwgSW50UmVjdCgwLCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQo
KSkpOwotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGRhdGEubV9zdXJm
YWNlLmdldCgpLCBpbWFnZVN1cmZhY2UuZ2V0KCksIEludFNpemUoLWxvZ2ljYWxBcmVhLngoKSwg
LWxvZ2ljYWxBcmVhLnkoKSksIEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbEFyZWEuc2l6ZSgp
KSwgSW50U2l6ZSgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLQotICAgIHVuc2ln
bmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlU3Vy
ZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YURzdCA9IHJlc3VsdC0+ZGF0YSgp
OwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VT
dXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53
aWR0aCgpOwotCi0gICAgdW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSBkYXRhRHN0ICsgZGVzdHkg
KiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBu
dW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqICh5ICsgb3JpZ2lueSkpOwotICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4ICsg
b3JpZ2lueDsKLQotICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBDb2xvcjo6Y29sb3JGcm9t
UHJlbXVsdGlwbGllZEFSR0IoKSBiZWNhdXNlIG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24g
Y2FsbCBwZXIgcGl4ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gKCpwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAgICAgICAgdW5zaWduZWQg
cmVkID0gKCpwaXhlbCAmIDB4MDBGRjAwMDApID4+IDE2OwotICAgICAgICAgICAgdW5zaWduZWQg
Z3JlZW4gPSAoKnBpeGVsICYgMHgwMDAwRkYwMCkgPj4gODsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGJsdWUgPSAoKnBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgICAgIGlmIChwcmVtdWx0
aXBsaWVkID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAg
ICAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmVkID0gcmVkICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVu
ID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUg
KiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSAgICAgPSByZWQ7Ci0gICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gZ3JlZW47Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYmx1
ZTsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgfQot
ICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGxvZ2lj
YWxVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNjYWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIFVuaXQgcmVzdWx0KHZhbHVlKTsKLSAgICByZXN1bHQuc2NhbGUoMS4wIC8gcmVzb2x1
dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBV
bml0PgotaW5saW5lIFVuaXQgYmFja2luZ1N0b3JlVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0g
SW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfHwgcmVzb2x1dGlvblNj
YWxlID09IDEuMCkKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIFVuaXQgcmVzdWx0KHZhbHVl
KTsKLSAgICByZXN1bHQuc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRp
cGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURp
bWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAg
ICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJh
Y2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1l
bnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0
YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJl
Y3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpn
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBp
eGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNv
bnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGJhY2tpbmdTdG9y
ZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1
dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhl
bEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwotICAgIHJldHVybiBn
ZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oYmFja2lu
Z1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBt
X3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtKQotewotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IGJhY2tpbmdT
dG9yZVVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9IGJhY2tpbmdTdG9yZVVuaXQoc291cmNl
U2l6ZSwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50
IHNjYWxlZERlc3RQb2ludCA9IGJhY2tpbmdTdG9yZVVuaXQoZGVzdFBvaW50LCBjb29yZGluYXRl
U3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBsb2dpY2FsU291cmNlUmVj
dCA9IGxvZ2ljYWxVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICBJbnRQb2ludCBsb2dpY2FsRGVzdFBvaW50ID0gbG9naWNhbFVuaXQoZGVz
dFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBBU1NF
UlQoc2NhbGVkU291cmNlUmVjdC53aWR0aCgpID4gMCk7Ci0gICAgQVNTRVJUKHNjYWxlZFNvdXJj
ZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLQotICAgIGludCBvcmlnaW54ID0gc2NhbGVkU291cmNlUmVj
dC54KCk7Ci0gICAgaW50IGRlc3R4ID0gc2NhbGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJj
ZVJlY3QueCgpOwotICAgIGludCBsb2dpY2FsRGVzdHggPSBsb2dpY2FsRGVzdFBvaW50LngoKSAr
IGxvZ2ljYWxTb3VyY2VSZWN0LngoKTsKLSAgICBBU1NFUlQoZGVzdHggPj0gMCk7Ci0gICAgQVNT
RVJUKGRlc3R4IDwgbV9zaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54ID49IDApOwot
ICAgIEFTU0VSVChvcmlnaW54IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIGlu
dCBlbmR4ID0gc2NhbGVkRGVzdFBvaW50LngoKSArIHNjYWxlZFNvdXJjZVJlY3QubWF4WCgpOwot
ICAgIGludCBsb2dpY2FsRW5keCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJj
ZVJlY3QubWF4WCgpOwotICAgIEFTU0VSVChlbmR4IDw9IG1fc2l6ZS53aWR0aCgpKTsKLQotICAg
IGludCBudW1Db2x1bW5zID0gZW5keCAtIGRlc3R4OwotICAgIGludCBsb2dpY2FsTnVtQ29sdW1u
cyA9IGxvZ2ljYWxFbmR4IC0gbG9naWNhbERlc3R4OwotCi0gICAgaW50IG9yaWdpbnkgPSBzY2Fs
ZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsg
c2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eSA9IGxvZ2ljYWxEZXN0
UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpOwotICAgIEFTU0VSVChkZXN0eSA+PSAw
KTsKLSAgICBBU1NFUlQoZGVzdHkgPCBtX3NpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmln
aW55ID49IDApOwotICAgIEFTU0VSVChvcmlnaW55IDw9IHNjYWxlZFNvdXJjZVJlY3QubWF4WSgp
KTsKLQotICAgIGludCBlbmR5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJl
Y3QubWF4WSgpOwotICAgIGludCBsb2dpY2FsRW5keSA9IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsg
bG9naWNhbFNvdXJjZVJlY3QubWF4WSgpOwotICAgIEFTU0VSVChlbmR5IDw9IG1fc2l6ZS5oZWln
aHQoKSk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7Ci0gICAgaW50IGxvZ2ljYWxO
dW1Sb3dzID0gbG9naWNhbEVuZHkgLSBsb2dpY2FsRGVzdHk7Ci0KLSAgICAvLyBUaGUgc2l6ZSBv
ZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0u
Ci0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRldmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQg
c3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoZGVz
dHgsIGRlc3R5LCBudW1Db2x1bW5zLCBudW1Sb3dzKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBpbWFnZVN1cmZhY2UgPSBjb3B5U3VyZmFjZVRvSW1hZ2VBbmRBZGp1c3RSZWN0KG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNl
U2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgIGRlc3R4ID0gaW1hZ2VSZWN0LngoKTsKLSAgICBkZXN0eSA9IGltYWdlUmVj
dC55KCk7Ci0KLSAgICB1aW50OF90KiBwaXhlbERhdGEgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9kYXRhKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dyA9IDQgKiBzY2FsZWRTb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQ
ZXJSb3cgKyBvcmlnaW54ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsr
eSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWdu
ZWQqPihwaXhlbERhdGEgKyBzdHJpZGUgKiAoeSArIGRlc3R5KSk7Ci0gICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBkZXN0eDsKLQot
ICAgICAgICAgICAgLy8gQXZvaWQgY2FsbGluZyBDb2xvcjo6cHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoKSBiZWNhdXNlIG9uZQotICAgICAgICAgICAgLy8gZnVuY3Rpb24gY2FsbCBwZXIgcGl4
ZWwgaXMgdG9vIGV4cGVuc2l2ZS4KLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd3Nb
YmFzZXhdOwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAg
ICAgICAgdW5zaWduZWQgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0KLSAgICAgICAgICAg
IGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAg
ICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBncmVlbiA9IChncmVlbiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0KSB8
IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3Jj
Um93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGNhaXJvIHN1cmZh
Y2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgY2Fp
cm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShpbWFnZVN1cmZhY2UuZ2V0KCksIGxvZ2lj
YWxEZXN0eCwgbG9naWNhbERlc3R5LCBsb2dpY2FsTnVtQ29sdW1ucywgbG9naWNhbE51bVJvd3Mp
OwotCi0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBtX2RhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0g
ICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhl
cihpbWFnZVN1cmZhY2UuZ2V0KCksIG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIEludFNpemUoKSwg
SW50UmVjdCgwLCAwLCBsb2dpY2FsTnVtQ29sdW1ucywgbG9naWNhbE51bVJvd3MpLCBJbnRTaXpl
KGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgpLCBsb2dpY2FsRGVz
dFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKSksIENBSVJPX09QRVJBVE9SX1NPVVJD
RSk7Ci0gICAgfQotfQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLXN0YXRpYyBjYWlyb19zdGF0dXNf
dCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9y
PHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCi0gICAgICAgIHJl
dHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7Ci0gICAgcmV0dXJuIENBSVJPX1NUQVRVU19T
VUNDRVNTOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIGlt
YWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91dHB1dCkKLXsK
LSAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7IC8v
IE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KLQotICAgIHJldHVybiBjYWly
b19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rpb24sIG91dHB1
dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVk
SW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2Uu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4g
YmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2Rl
ZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVU
eXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4p
IGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIGlt
YWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkp
OwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKLSAgICBpZiAoIWltYWdlIHx8
ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1hZ2UpKQotICAgICAgICBy
ZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGVuY29kZWRJbWFnZTsKLX0KLQotI2VuZGlmCi0KLSNp
ZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBI
SUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NF
UlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250
ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0g
ICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQo
KTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlv
dXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0
PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwg
VGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgs
IG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0
Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
I2lmIFVTRShOSUNPU0lBKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxh
eWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAobV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0
dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJEYXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRp
ZgotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9
PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJl
c29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5
QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRh
Lm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRl
eHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVf
MkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0
ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9k
YXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBj
b250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3Bs
YXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJfdCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMo
MSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0g
ICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNI
TUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRl
eHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5
VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgo
KSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFy
Z2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAg
Z2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVy
biB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFS
QU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQp
OwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0o
ZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNzQzNTk1OWFkMTNkNDI3YTYyNTE2Nzk5ZDAwZTRjYWE4Mjk0
MjE2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8
emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1
bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxl
IChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJP
KQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0
aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK1JlZlB0cjxJ
bWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgSW50ZXJwb2xhdGlvblF1YWxpdHlN
YWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RDb250ZXh0LCBv
cHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0
aW9uQ29udGV4dFN0YXRlID0gZGVzdENvbnRleHQuc3RhdGUoKTsKKworICAgIGlmIChhdXRvIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJh
Y2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZHJhd05hdGl2ZUlt
YWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIGRlc3RSZWN0
LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJw
b2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6
OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOworfQorCit2b2lk
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZk
ZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0Q29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlmIChzcmNDb2xvclNw
YWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBvbmx5IHNS
R0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKKyAgICBpZiAoKHNy
Y0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0g
Q29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6Okxp
bmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykg
eworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAg
ICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0o
KTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Cisg
ICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBb
XSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBsaW5l
YXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0g
PSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0KK30KKworU3RyaW5n
IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YShtaW1lVHlwZSwgcXVh
bGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAi
ZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29k
ZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBiYXNlNjREYXRhKTsK
KworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0
YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAor
eworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVG
b3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWly
b19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSk7CisgICAgcmV0
dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTFiM2I0MDkyNDUwNWIxNDU4Yzc3MzcxOThlYjViN2I3ODVhOTUy
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDog
cHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOwor
CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29s
b3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJp
bmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMGQzNjdhNWVkNTM0NTFhODFlMWE1MjY0MWU0MTVlNDRlOTVhNDIxOQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VA
c2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxr
cml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNs
dWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBP
WFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgor
I2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZ
KQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUg
PEdMRVMyL2dsMi5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisK
KyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBs
YXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5LmgiCisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3Vy
ZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNy
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0
b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5n
ZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1
bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5h
bFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNv
bnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNo
YXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKwor
ICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRo
ZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUt
ZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJl
cygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJl
KTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKwor
ICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBp
bnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAq
LywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWlyb19kZXZpY2VfdCog
ZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRocmVhZC1hd2FyZW5l
c3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KKyAgICBj
YWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKKworICAgIGF1
dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJl
KGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwgaW50ZXJuYWxTaXpl
LndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpOworICAgIGlmIChjYWlyb19zdXJmYWNl
X3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBjbGVhclN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CisKKyAgICByZXR1
cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPihuZXcg
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRleHR1cmUpKTsKK30K
KworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkK
KyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCisg
ICAgLCBtX3RleHR1cmUodGV4dHVyZSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50
TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3Jl
YXRlRmFjdG9yeSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5ZXJQcm94eSA9IGFk
b3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorI2Vu
ZGlmCit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQoKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykg
JiYgVVNFKE5JQ09TSUEpCisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsK
KyNlbmRpZgorCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRl
eHQ6OmN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAg
ICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUp
OworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmIChtX2NvbXBvc2l0b3JU
ZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKKyNlbmRpZgorCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAgICAgICAgcHJl
dmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1M
YXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAoreworI2lmIFVTRShOSUNP
U0lBKQorICAgIHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsKKyNlbHNlCisgICAgaWYgKG1f
dGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30K
KworYm9vbCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1U
ZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1
cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wg
ZmxpcFkpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAx
LjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29s
dXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYgKHByZW11bHRpcGx5QWxw
aGEgfHwgZmxpcFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV90ZXh0dXJl
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBiaW5kVGV4dHVyZVRhcmdl
dDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKKyAgICAg
ICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhU
VVJFX0NVQkVfTUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0
KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4
dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgdWludDMyX3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIGds
QmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAgIGdsRnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJF
XzJELCBtX3RleHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQs
IGRlc3RpbmF0aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGlu
dGVybmFsZm9ybWF0LCAwLCAwLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6
ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7
CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2go
KTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8q
IGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygp
LnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
KworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19F
REdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQ
X1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBn
bFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChH
TF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRl
cm5hbFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOworCisg
ICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRl
X2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1Jf
QUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50
ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOworICAgIGNhaXJvX3NldF9hbnRp
YWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRl
ZCgpCit7CisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6
OmN1cnJlbnQoKTsKKworICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgeworICAgICAgICBj
cmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisKKyAgICAgICAgYXV0byBwcm94eU9wZXJhdGlvbiA9
CisgICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSYgcHJv
eHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRlciBob2xkZXIocHJv
eHkubG9jaygpKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZlcihtYWtlVW5p
cXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0b3JUZXh0dXJl
LCBtX2ludGVybmFsU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkp
OworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAgcHJveHlPcGVyYXRp
b24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmlj
b3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAgcHJveHlPcGVyYXRp
b24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKworICAgIC8vIEl0IHdv
dWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdl
IGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAgICAvLyB3aGVyZSBv
bmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91
cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8gaW50byB0aGUgY29t
cG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRv
ckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJvX3NldF9vcGVyYXRv
cihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAgICBjYWly
b19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVD
b250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OnBh
aW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwg
ZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKworICAgIC8vIENhaXJv
IG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdl
IGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNv
bnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1f
c3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBw
ZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwg
bV9pbnRlcm5hbFNpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ0NzQ0YWQ4YWQxZjk4YTEzNzA3NDkzZDFi
OWQyZTgwMmE2OTRmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQ
ZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1
YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93Kik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKTsKKworICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
ZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBz
d2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJl
ZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisj
ZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0
IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9w
YWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNF
KE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5
ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBt
X3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNy
OworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07CisjZW5kaWYKKyAgICB1
aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTJjZjU3NjA4ZDA5Nzc1ZDNmYjkxOGVjMDVjZGI3NDMxNDVmOTQ3NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
IDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNj
aHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJ
Uk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQp
OworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+
IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBz
X3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJ
bnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpbnQgc3RyaWRlID0g
Y2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgaW50ZXJu
YWxTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICghdHJ5RmFz
dFplcm9lZE1hbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1
cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2Ug
PSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRl
cm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAgICBj
YWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFL
ZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRhdGEp
OworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZN
b3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1
cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUs
IGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZh
Y2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1fc3VyZmFjZS5nZXQo
KSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7CisgICAgdW5zaWduZWQg
Y2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdl
dCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1f
c3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xvZ2ljYWxTaXplLmhl
aWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Rf
cHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAgICBmb3IgKGludCB4
ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAgICAgICAgICB1bnNp
Z25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNv
bG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAgICBwaXhlbENvbG9y
ID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tVcFRhYmxlW3BpeGVs
Q29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwgcGl4ZWxDb2xv
ci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxpZWRBUkdCRnJvbUNv
bG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJvX3N1cmZhY2VfbWFy
a19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndp
ZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGRiNzliYTlhM2U2ZDZkYjFj
OTJjMzA2YTQ3NTIwNzE0ZGMzYTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tl
bmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMg
WmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQg
OiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9J
U09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7
CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCitwcml2YXRlOgorICAg
IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIHZvaWQg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE1MjA5NDdkYjk4NTkzNTUwMGY1ZGRlMDA2ZWNl
ODg2YmI0ZTFkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCAr
MSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9ucy5oIgorI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBt
X3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9z
dGF0dXMobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CisKKyAgICBS
ZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgp
KSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOworICAgIG1fY29udGV4
dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3JhcGhpY3NDb250ZXh0
JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAg
IHJldHVybiAqbV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRy
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9y
KSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1dG8gY29weSA9IGFk
b3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisg
ICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKSk7
CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7
CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZh
Y2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisKKyAgICAg
ICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToK
KyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNv
bnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVf
SU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX3N1cmZhY2UuZ2V0KCkpID09IENB
SVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5
QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAgICAgICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tp
bmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisK
K1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURh
dGEoKSBjb25zdAoreworICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3Vy
ZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVs
cyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1h
Z2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJm
YWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJm
YWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCitSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgcmV0
dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVj
dCwgY29vcmRpbmF0ZVN5c3RlbSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZh
Y2UuZ2V0KCkpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0
YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRp
bmF0ZVN5c3RlbSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkp
KTsKKworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNj
YWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2Rp
cnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIGRlc3RQb2ludC54KCksIGRlc3RQb2ludC55
KCksIHNyY1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5oZWlnaHQoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQ0ZWM4OWEz
ODg2ZWU3ZjA1YjBkMzljOTI1OTAxZTM2ZjIwNGU1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
IHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29y
ZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworICAgIE5h
dGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25zdDsKKyAgICB1bnNp
Z25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgbXV0YWJsZSBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gbV9w
bGF0Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNz
Q29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0YTJlMzlmNzY5YzQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaAorKysg
L2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotI2RlZmlu
ZSBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIK
LSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5UHJv
dmlkZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYg
VVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJ
bXBsLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJbnRTaXplOwot
Y2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xhc3MgSW1hZ2VCdWZm
ZXJEYXRhCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJ
QSkKLSAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6
Q2xpZW50Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNlbmRpZgotI2VuZGlm
Ci17Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmLCBSZW5kZXJp
bmdNb2RlKTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQotICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3Bs
YXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2Nv
bnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9kZSBtX3JlbmRlcmlu
Z01vZGU7Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHZvaWQgY3Jl
YXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsK
LSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJp
ZGU7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0gICAgdWludDMyX3Qg
bV9jb21wb3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7
Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBt
X25pY29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxzZQotICAgIHZpcnR1
YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRS
ZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7
Ci0jZW5kaWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2VuZGlmIC8vIEltYWdl
QnVmZmVyRGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOWEyYmNlOWE5NzU5NzUwYjA2MTc0NjExMTgxZjYyYjM3M2Q0ZmQ3MgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBz
ZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
SWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5o
IgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8
Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCitzdGF0aWMgY2Fpcm9f
c3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8VmVj
dG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCisgICAgICAg
IHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7CisgICAgcmV0dXJuIENBSVJPX1NUQVRV
U19TVUNDRVNTOworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3Qq
IGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91dHB1dCkK
K3sKKyAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7
IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKworICAgIHJldHVybiBj
YWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rpb24sIG91
dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRh
KGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4pCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKKyAgICBpZiAo
IWltYWdlIHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1hZ2UpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7Cit9CisKKyNlbHNl
CisKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0
UHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAgICAvLyBMaXN0IG9m
IHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYg
ZG9jdW1lbnRhdGlvbi4KKyAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4
YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRv
LWJ1ZmZlcnYKKworICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAi
aW1hZ2UiKTsKKyAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBl
ICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7CisgICAgaWYgKHR5
cGUgPT0gImpwZWciKSB7CisgICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNo
YW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5j
b2RlIGEgUG9ydGVyLUR1ZmYKKyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNr
IGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgorICAgICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKKyAgICAg
ICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9m
b3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAorICAgICAgICAg
ICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBJbnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOworICAgICAgICAg
ICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJP
X0ZPUk1BVF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5n
ZXQoKSkpOworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBz
dXJmYWNlLCAwLCAwKTsKKyAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKyAgICAg
ICAgfQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYo
bmV3U3VyZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhidWYgPSBhZG9wdEdS
ZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlmICghcGl4YnVmKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7
CisgICAgaWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYm
ICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmlu
Zzo6bnVtYmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOworICAg
ICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQ
dHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAi
cXVhbGl0eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisgICAgfSBlbHNl
CisgICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVy
Lm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRy
KCksIE5VTEwpOworCisgICAgcmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRh
dGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIEdVbmlxdWVPdXRQdHI8Z2NoYXI+IGJ1ZmZlcjsK
KyAgICBnc2l6ZSBidWZmZXJTaXplOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVU
eXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKGJ1
ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKworI2Vu
ZGlmIC8vICFQTEFURk9STShHVEspCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZGUzM2M3Y2EwOTZjYWQ4OTIyNjM3MzljNzVmOTViMjBmZWRjMDM3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJVdGlsaXRpZXNDYWlyby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3Jn
PgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCos
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAppbmRleCA0OTZlY2EzMjRkM2U0ZGEyMmZjYTU5OTk4ZWI1ZWY1ZWU3M2QyMDlhLi43MjJl
ZWZmZTZjOWU1ZmQyODY2YmUyNzI4N2E0NzAyMTAwY2JmYzU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVm
ZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9hdFNpemUgYnVmZmVy
RGVzdGluYXRpb25TaXplID0gYnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNpemUoZGVzdFJlY3Qu
c2l6ZSgpKTsKKyAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gZGVzdFJlY3Qu
c2l6ZSgpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGJ1ZmZlci5jb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogCiAgICAgQ0dDb250ZXh0UmVmIGNvbnRl
eHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDM1NmYxOTY0ZDA5NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3NWIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2
NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4g
PHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2Jp
bGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29y
ZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVkZSA8cGFs
L3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgot
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9EZWJ1Z0hl
YXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0aWxpdGll
cy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
I2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNl
U1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdC
MzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMy
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVDTEFSRV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5FX0FMTE9D
QVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0YXRpYyBGbG9hdFNp
emUgc2NhbGVTaXplVG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXpl
KQotewotICAgIGZsb2F0IHhNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGJhY2tp
bmdTdG9yZVNpemUud2lkdGgoKSkgLyBpbnRlcm5hbFNpemUud2lkdGgoKTsKLSAgICBmbG9hdCB5
TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpKSAvIGludGVybmFsU2l6ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxvYXRTaXplKGxvZ2lj
YWxTaXplLndpZHRoKCkgKiB4TWFnbmlmaWNhdGlvbiwgbG9naWNhbFNpemUuaGVpZ2h0KCkgKiB5
TWFnbmlmaWNhdGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VC
dWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29u
dGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRH
ZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAg
ICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQp
OwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRl
eHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0
R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VD
b2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29sb3JTcGFjZSkKLSAg
ICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9y
U3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2Fs
ZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQp
OwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdl
dCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nl
c3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9u
ZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5j
b250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19
Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3Vj
Y2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxl
KHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkg
cmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29s
dXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2Vp
bGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hv
dWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZs
b2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXpl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgs
IHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0K
LSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2RlID09IEFjY2VsZXJh
dGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAw
KQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lk
dGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5o
ZWlnaHQoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAg
IG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxv
dz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3Qs
IFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJS
b3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1h
eFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdl
dCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAg
QVNTRVJUKHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1f
ZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91
bmRzID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCks
IGhlaWdodC51bnNhZmVHZXQoKSkpOwotICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFj
ZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBj
b2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBj
Z0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5k
b3cpOwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRl
eHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2Vy
Qm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZh
Y2UgPSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9z
dFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBh
Y2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwg
YmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJh
dGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6
dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRh
LmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2Rh
dGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgs
IG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0
YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtd
ICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1
ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAg
ICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5z
YWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQ
cm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQo
KSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAg
ICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFw
aGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNj
YWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VT
Y2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0K
LQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNj
ZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0Nv
bG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3Vj
Y2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQot
RmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSBk
ZXN0aW5hdGlvblNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjYWxlU2l6ZVRvVXNlclNwYWNl
KGRlc3RpbmF0aW9uU2l6ZSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6ZSgp
KTsKLX0KLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3Qg
SW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1lbW9yeUNvc3QoKSBt
YXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQg
dG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAg
ICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24n
dCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9k
YXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJp
bmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRv
IGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygp
IGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAg
ICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gNCAqIGlu
dGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKLX0KLQotc2l6
ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIGV4
dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0Mg
dGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nl
c3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZh
Y2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3Ry
dWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBt
X2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3Qg
Y2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4g
bV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsKLX0KLSNlbmRpZgot
Ci1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmIChtX2RhdGEuc3VyZmFj
ZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQo
KTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0Rmx1c2goY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVm
PiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJ
bnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpCi0g
ICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2Us
IENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAg
ICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+JiYgaW1hZ2UsIElu
dFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRTaXplIGJhY2tpbmdT
dG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2Vy
dmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9
IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUp
OwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29u
dGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwg
OCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUo
Y29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBU
b1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNh
bFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gc2NhbGVT
aXplVG9Vc2VyU3BhY2UobG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUsIGludGVybmFsU2l6
ZSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsK
LSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRl
eHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsK
LX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNv
bHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0
aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7
Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCksIG1fZGF0
YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9u
KTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZm
ZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZl
ci0+bG9naWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1
ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxl
ID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJp
dG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZShXVEZNb3Zl
KGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNp
emUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotQmFja2luZ1N0
b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewotICAgIHJldHVybiBE
b250Q29weUJhY2tpbmdTdG9yZTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVm
ZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIGltYWdl
QnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0
dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1
ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1cm4gaW1hZ2VCdWZm
ZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0jZW5kaWYKLX0KLQot
UmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IGltYWdlOwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsK
LSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250Q29weUJh
Y2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhl
aWdodCgpLCA4LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29s
b3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlkZXIuZ2V0KCksIDAs
IHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgp
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAg
ICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAg
IHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9k
YXRhLnN1cmZhY2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAK
LSAgICBBU1NFUlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0g
ICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxl
OwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IElPU3Vy
ZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihXVEZN
b3ZlKGltYWdlQnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwot
ICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgYmFja2luZ1N0b3Jl
U2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0jZWxzZQotICAgIGlt
YWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Ci0jZW5kaWYKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0
KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdpbmcgaW50byBvdXIg
b3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5n
ZXQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVk
U3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlv
blNjYWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsK
LSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0Lmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNv
cHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcgaW50byBvdXIgb3du
IGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAgY29weS0+ZHJhd1Bh
dHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFu
c2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0gY29weUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZvclJlbmRlcmluZy0+
ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJh
Y2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwg
ZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNp
bmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFn
ZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7
Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0g
ICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVs
QXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0
LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVj
dCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0g
cmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAo
cGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNy
Y1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgpLCBjb250ZXh0
KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnB1dEJ5
dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRl
ZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNjYWxl
ZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVkU291cmNlU2l6ZSA9
IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNlRm9ybWF0LCBzY2Fs
ZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGludGVybmFsU2l6ZSgp
LCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0gICAgLy8gRm9yY2Ug
cmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBpcyByZXF1ZXN0ZWQg
dGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAgIC8vIFNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZvciBleHBsYWluaW5n
IHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwg
MCkpOwotfQotCi1zdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEkoKQotewotI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0aWMgY29uc3QgQ0ZT
dHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsKLSNlbmRpZgotICAg
IHJldHVybiBrVVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17
Ci0gICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVTZXJ2aWNlcyB2ZXJz
aW9uPwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVU
eXBlKS5jcmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0KLSAgICAvLyBGSVhN
RTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEg
d2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCi0g
ICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0KLSAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKLSAgICAg
ICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQotICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwot
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dp
ZiIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBrVVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBib29sIGVu
Y29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAgaWYgKCFpbWFnZSB8
fCAhdXRpIHx8ICFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3Rp
bmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1
dGksIDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7Ci0gICAg
aWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4w
ICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24g
cXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAgICAgYXV0byBjb21w
cmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1
bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAgICBjb25zdCB2b2lk
KiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7Ci0gICAg
ICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOwotICAgICAg
ICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAm
dmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9u
YXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVz
dGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdl
UHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1
bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAgQ0dJbWFnZURlc3Rp
bmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMu
Z2V0KCkpOwotICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlv
bi5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAg
ICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRh
dGEpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jh
c2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50OF90PiBkYXRhVmVj
dG9yKENGRGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAg
ZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFHZXRMZW5ndGgoY2ZE
YXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAoYXV0
byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikp
Ci0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1
cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAot
ewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkp
OwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVy
Ojp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAg
QVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29k
aW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBw
cmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgp
KSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdl
IGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAgcHJl
bXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9p
bnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXplID0g
NCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0gICAg
ICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRhdGEo
KSwgZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgp
LCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdl
Q3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwg
MzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0Jp
dG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJv
dmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAg
fSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9
PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJ
bWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1h
Z2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsK
LSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwg
bG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogbG9n
aWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNv
bnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dp
Y2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJT
cGFjZSA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUobG9naWNhbFNpemUoKSk7Ci0gICAgICAgIENH
Q29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6
ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1h
Z2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRD
RihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAo
IWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRh
KTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShjb25zdCBJbWFnZURh
dGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9tSW1h
Z2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBDR0lt
YWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFzdDsKLSAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAgIFZlY3Rvcjx1aW50
OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBl
Z1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWws
IHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAg
ICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCk7Ci0g
ICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEu
Z3JvdyhzaXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0gcHJlbXVsdGlwbGll
ZERhdGEuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkgKz0g
NCkgewotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAzXTsKLSAgICAgICAg
ICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0g
ZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFd
ID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwotICAgICAgICAgICAg
ICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAgICAgICBidWZmZXJb
aSArIDJdID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAg
ICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsgLy8gSWdub3JlIHRo
ZSBhbHBoYSBjaGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGllZERhdGEuZGF0YSgp
OwotICAgIH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgNCAqIHNv
dXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRhdGFQcm92aWRlciA9
IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCA0ICogc291cmNl
LndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRhdGFQcm92aWRlcikK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0gYWRvcHRDRihDR0lt
YWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgsIDMyLCA0ICogc291
cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1
bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5k
ZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRh
Q3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJ
bWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0K
LVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYgKGF1dG8gZGF0YSA9
IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAgcmV0dXJuIGRhdGFV
UkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1W
ZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRh
dGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBk
YXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVZlY3Rvcjx1aW50
OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICBy
ZXR1cm4gbV9kYXRhLnRvQkdSQURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCks
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYzZDll
ZGQwZWY1MWYzODQxYWM1OGM4YjYxZTE1Y2UyZDRhNWNmN2QKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dC
YWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJh
dGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6
ZSgxLCAtMSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1faW50ZXJuYWxTaXplLmhl
aWdodCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRp
b25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJu
YWxTaXplKQoreworICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBz
dGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkp
KQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGlt
YWdlLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUu
aGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdl
PiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdl
UmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxT
aXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0
KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRN
b2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxv
Z2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxv
Z2ljYWxTaXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5n
ZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFn
ZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGlt
YWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNl
cnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZTsKKyAgICBp
ZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlC
ZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwg
bV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwor
fQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVz
dENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRS
ZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9y
ZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
JmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlC
YWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Uu
Z2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxlZCwgb3B0aW9ucyk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBj
b25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRlc3RDb250ZXh0ID09
ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQor
ICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3Rl
ZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKK30K
KworQWZmaW5lVHJhbnNmb3JtIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNlVHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2xv
Z2ljYWxTaXplLmhlaWdodCgpKTsKK30KKworUmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21J
bWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJ
KCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28g
d2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBw
cmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkpLCBDb29yZGlu
YXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQg
KiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOworICAgICAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCks
IGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwg
ZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNy
ZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMy
LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRt
YXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3Zp
ZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0g
ZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0g
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cisg
ICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxv
Z2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2lj
YWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0Lmdl
dCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNh
bFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXpl
KCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0Jp
dG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgYXV0
byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVs
dCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVh
bGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1
cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0dXJuIGRhdGFWZWN0
b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5nIEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJl
c2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWlt
ZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEUp
CitzdGF0aWMgaW5saW5lIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZlcih1bnNpZ25lZCBi
eXRlc1BlclJvdywgdWludDhfdCogcm93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICB2
SW1hZ2VfQnVmZmVyIHZJbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0
ID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdklt
YWdlQnVmZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0
aCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1h
Z2VCdWZmZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJl
bXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0
LCB2SW1hZ2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxw
aGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVz
dCkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAg
ICAgIEFTU0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBB
U1NFUlQoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpOworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4K
KyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAg
dkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdEFscGhh
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAg
ICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAg
ICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0
YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAg
ICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFf
QkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAo
c3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4
ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0g
PSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4
KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorfQorCit2b2lkIElt
YWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2ln
bmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVu
c2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUm
IHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1h
dCAmJiBzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgSW1hZ2VC
dWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9y
bWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JG
b3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5
dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtl
VkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworCisgICAgY29w
eUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBz
cmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsKK30KKyNlbmRpZgor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45YWI3YTc0NjkzM2RkMWQyNzc2OGNhNDQ4ZWE4ZmM2MWZhNDFl
NzQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJs
aWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25z
dCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJp
ZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNp
bmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAgICB2b2lkIHNl
dHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBjb3B5
SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywg
dWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxw
aGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0IG92ZXJyaWRl
OworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
Q0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODIzMzM5
NDdlZjU1ZGI5MDc5ZWUyZWM5ZTViOGJhNTc5ZWI1YWViMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0
bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkhvc3Q7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0
Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOwor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7
CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVkIGJ5dGVz
UGVyUm93ID0gNCAqIGludGVybmFsU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0Q2Fs
bG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZhbHVlKGRhdGEpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGRhdGEpICYgMykpOworCisgICAgc2l6ZV90IG51bUJ5dGVzID0gaW50ZXJuYWxT
aXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vu
b3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNp
emUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFj
ZSksIERlZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURh
dGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgeworICAgICAgICBmYXN0
RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgfTsKKworICAgIGF1dG8gZGF0YVBy
b3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIG51
bUJ5dGVzLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEs
IFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9n
aWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAg
ICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRl
cikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9k
YXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQp
OworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4
dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBs
YXRmb3JtQ29udGV4dCgpKSk7CisgICAgCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToK
KyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAgICAgICAgIG1faW50
ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQ
ZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBE
ZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0
cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorICAgIAorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitWZWN0b3I8dWludDhf
dD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAg
IHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9kYXRhKTsKK30KKworUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwg
c3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYg
c3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEltYWdlQnVmZmVy
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX2RhdGEpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43MGFhOTY2MzEzYzljM2E4MGEwMWViYzhmMDFiMGUzZDRmMTE1
ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKK3B1Ymxp
YzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBOYXRpdmVJbWFnZVB0
ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBv
dmVycmlkZTsKKyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5
JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4m
Jiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAgICB1bnNpZ25lZCBi
eXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS53
aWR0aCgpOyB9CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdS
QTsgfQorI2VuZGlmCisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgUmV0YWluUHRyPENHRGF0YVBy
b3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
NDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgi
Ci0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotI2lmIFVTRShB
Q0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgotI2VuZGlmCi0K
LSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3Vy
ZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5jbHVkZSA8cGFsL3Nw
aS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3Ig
dGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0j
ZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQgdW5wcmVtdWx0aXBseUJ1ZmZl
ckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0
KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAg
ICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgo
JnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
U3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2Vz
IGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4
KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBy
ZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMsIGNvbnN0IHZJbWFn
ZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAgICBBU1NFUlQoZGVz
dC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JB
LiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0
IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0jZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJhbnNmZXJEYXRhKHZv
aWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgc2l6ZV90IGlu
cHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgQVNTRVJUKGlucHV0
KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgIHNy
Yy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgc3JjLnJvd0J5
dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9IGlucHV0OwotCi0gICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAgICBkZXN0LmhlaWdo
dCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0OwotICAgIGRlc3QuZGF0
YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMs
ICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShvdXRwdXQp
OwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKHdpZHRoKTsKLSAg
ICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIG5v
dCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi19Ci0KLVZl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVp
bnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0gICAgaWYgKCFhY2NlbGVyYXRl
UmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBkYXRhLCB3
aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICAgICAgcmV0
dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICB0cmFuc2ZlckRh
dGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwgd2lkdGgsIGhlaWdo
dCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBv
dXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAg
YXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIHVpbnQ4
X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7Ci0gICAg
aWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENoZWNrZWQ8
aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSByZWN0Lm1h
eFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4LnVuc2Fm
ZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgp
KQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0gICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IHJl
Y3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAgZGVzdHcgKz0gb3Jp
Z2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3JpZ2lueCA9IDA7Ci0g
ICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNhZmVHZXQoKSwgc2l6ZS53
aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRo
KCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRo
ID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAg
ICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IHJlY3QuaGVpZ2h0KCk7
Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3RoICs9IG9yaWdpbnk7Ci0gICAg
ICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwotICAgIH0KLSAgICBk
ZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIHNpemUuaGVpZ2h0KCkgLSBv
cmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAg
ICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBlbmR5
IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPD0gMCB8fCBoZWln
aHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAKLSAgICB1
bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwotICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHgg
KiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIHNy
Y1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlm
ICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAgICAgc3JjQnl0ZXNQ
ZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjUm93cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsg
b3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKG91dHB1dEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLQotICAg
ICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGggPSB3aWR0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0
KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAg
ICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0
OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93
Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93
czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFf
UkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRpZgotCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgaWYgKG91dHB1
dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAg
ICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICAg
ICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
LnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAq
IDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAvLyBCeXRlIG9yZGVyIGlz
IGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1ti
YXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9
IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNy
Y1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSNlbHNl
Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGggKiA0KS51bnNhZmVH
ZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNS
b3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3Vy
ZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsK
LSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNl
QWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0j
aWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBz
cmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdo
dC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7
Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5o
ZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYg
KG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQp
Ci0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBCR1JBIHRv
IFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0
LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgaWYgKCh3
aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNIKCk7Ci0KLSAgICAg
ICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdl
dCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVu
c2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7
Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAg
ICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAy
XTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dz
W2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJd
ID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVH
ZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpCi17
Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3VyY2VS
ZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3Vy
Y2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQ
b2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQo
KSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4LnVuc2FmZUdldCgpIDwgc2l6
ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBB
U1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgCi0g
ICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291
cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgpIDw9IHNpemUud2lk
dGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgp
OwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8
aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBBU1NF
UlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgp
IDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPj0gMCk7
Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhZKCkpOwot
ICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgp
KSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBz
aXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0Lmhl
aWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLSAgICAKLSAg
ICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIAot
ICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUud2lkdGgoKTsKLSAg
ICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIChvcmlnaW55ICogc3Jj
Qnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAotICAgIGlmICghYWNj
ZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7
Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyAo
ZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3Jj
LnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IGNvbnN0
X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIGRl
c3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAg
ICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5y
b3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3QuZGF0YSA9IGRlc3RS
b3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRh
KHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4
ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXgg
KyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBk
aWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3Nb
YmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNy
Y1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBp
ZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChz
cmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dz
ICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3Mg
KyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dz
ICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJS
b3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UsIElP
U3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAgICAgICBkZXN0Qnl0
ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBkZXN0Um93cyA9IHN0
YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIChkZXN0eSAq
IGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9
IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdl
dCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3Jj
LmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dC
eXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0K
LSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZy
b20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIs
IDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
c3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0g
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKQotI2Vs
c2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8gVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Vp
bnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0j
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAqQ0dDb2xv
clNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVByb3ZpZGVy
UmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsKLSAgICBJ
bnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlOwotCi0g
ICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRhdGEgeyBu
dWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXI7
Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgotICAgIHN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjQ4OGM4MTI3YmI2OGMxZjU2
ZmNhZmZlNDczMGEzMjIxMjQ1YmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW50
UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KKyNpbmNsdWRl
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNpemUgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNp
emUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJl
c29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1T
aXplKCk7CisgICAgaWYgKGludGVybmFsU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8
IGludGVybmFsU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29s
dXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50
ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFp
blB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29u
dGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJl
Y3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYm
IHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2UoV1RG
TW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAgICBzZXR1cENvbnRl
eHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVuc3VyZUdyYXBoaWNz
Q29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hD
b250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0
KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjptZW1vcnlDb3N0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Cit9CisKK3Np
emVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAoreworICAgIHJldHVybiBD
b2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAg
IHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1cmZhY2UpKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
K3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3Rl
ZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1Jl
Y3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEo
bG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tl
ciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldElt
YWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIGxvY2suc3Vy
ZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1f
c3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBzcmNT
aXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIGxvY2suc3VyZmFjZUJh
c2VBZGRyZXNzKCkpOworCisgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNh
Y2hlZCBpbWFnZS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCisgICAg
Y29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2VhNDYxYmE2NTc2YzNh
ODY0MTY0MGY2MjY3MTBjOTQyZjg3MDFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKQEAg
LTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJT1N1cmZhY2U7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6Cisg
ICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgCisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RX
aW5kb3cqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRl
OworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBzaXplX3QgbWVtb3J5
Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBj
b25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgTmF0
aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIAorICAgIHZv
aWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
Jikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92
ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYsIENvb3Jk
aW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5Jiwg
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3Byb3RlY3Rl
ZDoKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworCisgICAgdW5z
aWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
T1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNw
cAppbmRleCA4OWQwNDM5YzIxMGRiNTAxYWM5MzllYjExNDE0ODgxZWVlYzY1YjI0Li5kMDkxMzlm
MDFiZDMzNmYyODQ4YWVhNTI2YTRmOWY4MDBlZTc4NWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcApAQCAtMjYsNyArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIk1J
TUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRl
IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4K
KworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlVUSVV0aWxpdGllcy5oIgorI2VuZGlm
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNCArNTIsMTQwIEBAIHVpbnQ4X3QgdmVy
aWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZm
ZXJTaXplKQogICAgIHJldHVybiAqKHVpbnQ4X3QqKWxhc3RCeXRlOwogfQogCitDRlN0cmluZ1Jl
ZiBqcGVnVVRJKCkKK3sKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAgc3RhdGljIGNvbnN0IENG
U3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7CisjZW5kaWYKKyAg
ICByZXR1cm4ga1VUVHlwZUpQRUc7CiB9CisKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJv
bUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVD
RlN0cmluZygpOworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1
bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCisKKyAgICAvLyBGSVhNRTogQWRkIFdpbmRv
d3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZl
cnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCisgICAgLy8gRm9yIG5v
dywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFyOi8vcHJvYmxlbS82
MDk1Mjg2Pi4KKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZVBORyA9IENGU1RS
KCJwdWJsaWMucG5nIik7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYg
PSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7CisKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdu
b3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKKyAgICAgICAgcmV0dXJuIGtV
VFR5cGVQTkc7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBl
LCAiaW1hZ2UvanBlZyIpKQorICAgICAgICByZXR1cm4ganBlZ1VUSSgpOworICAgIGlmIChlcXVh
bExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dpZiIpKQorICAgICAg
ICByZXR1cm4ga1VUVHlwZUdJRjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBrVVRUeXBlUE5HOworI2VuZGlmCit9CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJl
ZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0
YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1dGkgfHwgIWRhdGEpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRpb24gPSBhZG9wdENGKENH
SW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwgMCkpOworICAgIGlm
ICghZGVzdGluYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJldGFpblB0cjxD
RkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAoQ0ZFcXVhbCh1dGksIGpw
ZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4w
KSB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5IHRvIHRoZSBKUEVH
IGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICBhdXRvIGNvbXByZXNzaW9uUXVhbGl0eSA9IGFk
b3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NGTnVtYmVyRG91Ymxl
VHlwZSwgJipxdWFsaXR5KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9IGtDR0ltYWdlRGVz
dGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgY29uc3Qgdm9pZCogdmFs
dWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGltYWdlUHJvcGVydGllcyA9
IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwgMSwgJmtDRlR5cGVE
aWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1ZUNhbGxCYWNrcykp
OworICAgIH0KKworICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlvbkJhY2tncm91bmRD
b2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0aWVzIHdvdWxkIHNh
dmUgc29tZSBtYXRoCisgICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25zLCBidXQgaXQgZG9l
c24ndCBzZWVtIHRvIHdvcmsuCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGlu
YXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOworICAgIHJldHVybiBD
R0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7Cit9CisKK3N0YXRp
YyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBB
U1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rp
bmcobWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5
cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJbWFnZUFscGhhSW5mbyBk
YXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5zaWduZWQgY2hhciogZGF0
YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlw
bGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAg
ICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRv
IG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIHNpemVfdCBzaXpl
ID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAgICAgICBpZiAoIXBy
ZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Cisg
ICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAgICBpZiAoYWxwaGEg
IT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICog
YWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFd
ICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSAr
IDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSAr
IDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFb
aSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZGF0YUFscGhhSW5m
byA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5l
bC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKKyAgICB9CisKKyAg
ICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291
cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3Vy
Y2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBz
UkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhh
SW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVm
YXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUo
a0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0
KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitTdHJpbmcgZGF0YVVS
TChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICBWZWN0b3I8
Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRh
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICByZXR1cm4gImRhdGE6
IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1N0cmluZyBkYXRh
VVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9IGNmRGF0YShzb3Vy
Y2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQo
KSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhf
dD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAgIFZlY3Rvcjx1aW50OF90PiBk
YXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0
TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCitWZWN0b3I8dWludDhfdD4g
ZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291
cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEu
Z2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAppbmRleCAxNjEyOGExOWFi
ZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFkNDE5NTUyLi44NGM1N2QyZmVlOTMzOGVkNWUwZWZjNGE4
ZTMzNjVhMTlhODAyMDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCkBAIC0yNSw4ICsyNSwz
MSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShDRykKKworI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURhdGE7CisKIFdFQkNP
UkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lk
KiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIAotfQorQ0ZTdHJpbmdSZWYganBlZ1VUSSgp
OworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25z
dCBTdHJpbmcmKTsKKworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBDRlN0cmluZ1JlZiB1
dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZik7CisKK1N0cmlu
ZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CitTdHJpbmcgZGF0
YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYp
OworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRleCA4MGY2YjE4NzI1
MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMyNTg4MjNjLi4yODIxZWY4MWQ3NWRmYjBmZjA1YTg1YmU1
YzlmYmMyNThiNTYyZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQu
aD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZEb2N1bWVudC5oPgorI2luY2x1ZGUgPHBh
bC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFj
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgK
aW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIyNGJhYzUzNjRjOWEwNGZmOTY5Y2RiMy4uNGNjMGZhM2Y3
OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRhYjIxNGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTEwMCwxMCArMTAwLDYg
QEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVG
cm9tU3VyZmFjZShJT1N1cmZhY2VSZWYsIENHQ29sb3JTcGFjZVJlZik7CiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0ZUZyb21JbWFnZShD
R0ltYWdlUmVmKTsKICAgICAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2VC
dWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0jZW5kaWYKLQogICAgIFdFQkNP
UkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyB2b2lk
IG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KaW5kZXggYzIx
MjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMyM2NkMGE4Zjg2OWFj
YzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMsNiBAQAogI2ltcG9y
dCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgogI2ltcG9ydCAiSW1h
Z2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAjaW1wb3J0ICJMb2dn
aW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9D
b3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJT1N1cmZhY2U6Om1v
dmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQogICAgIElPU3Vy
ZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpOwogfQog
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJuIFdURk1vdmUoaW1h
Z2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgTlNEaWN0aW9u
YXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwgdW5zaWduZWQgcGl4
ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6ZV90IHNlY29uZFBs
YW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2Yy
YWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5k
ZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERp
c3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qm
KTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTlmMWNlMjczNTQ1MGJkYWMzYmJkZjExYTMwODVkOWE3ZjNjOWUxNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBs
YXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7Citw
dWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkK
KyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250
ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxp
c3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJl
Y3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAg
ICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAg
IGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25z
dCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAg
eworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRlc3RDb250ZXh0LCBt
X2Rpc3BsYXlMaXN0KTsKKyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisg
ICAgICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVwbGF5KHsgfSwgbV90
cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcGxh
eWVyLnJlcGxheSgpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlzcGxheUxpc3Qg
bV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxpc3Q+IG1fcmVwbGF5
RGlzcGxheUxpc3Q7CisgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2Ug
fTsKK307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2ZjNTk3NS4uYWYzYWFk
ZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3ZGQxZDg1OGI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3Bw
CkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVy
KCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJl
Y3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2Ut
PmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnM7Ci0gICAg
YXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShp
bWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgYXV0byBwaXhlbEFycmF5ID0g
cmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1
cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1
ZXMpOwogCisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHJlc3VsdEltYWdlLT5s
b2dpY2FsU2l6ZSgpOworICAgIHBpeGVsQXJyYXlEaW1lbnNpb25zLnNjYWxlKHJlc3VsdEltYWdl
LT5yZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2Ug
RkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAtMzExLDcgKzMx
Myw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJheSgqcGl4ZWxB
cnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Qu
c2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqcGl4ZWxBcnJh
eSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGljIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4VHlwZSYgdHlwZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVE
cm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRk
ZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3OGE3ZmI5NDdkNDA1ODAwNGVhNzE3MmQ4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRv
dy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURy
b3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIEZFRHJvcFNoYWRvdzo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIC8vIFRPRE86IERpcmVjdCBwaXhlbCBhY2Nlc3Mg
dG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VEYXRhLgogICAgIElu
dFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50ZXJuYWxTaXplKCkp
OwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRv
d0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAgICAgaWYgKCFzcmNQaXhl
bEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0U2hhZG93LmJsdXJMYXllcklt
YWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCksIDQgKiBzaGFkb3dB
cmVhLnNpemUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnNy
Y1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNoYWRv
d0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1ZmZlcjo6QmFja2lu
Z1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqc3JjUGl4ZWxBcnJheSwgc2hh
ZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW06
OkJhY2tpbmdTdG9yZSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENvbnRleHQuZmlsbFJl
Y3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCkpLCBt
X3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThjNWEyNmU3NzFjNDI0OTY3ODE5NTI3YTU2MjczNTNk
ZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAxNTMyZGFiZDI0OTAwNGJmMmE5ZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaApAQCAt
NzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
bV9zb3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0aW9uOwogICAgIEFm
ZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRlcmluZ01vZGUgbV9y
ZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9OwogICAgIGZsb2F0IG1f
ZmlsdGVyU2NhbGUgeyAxIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVj
MmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uNWM4YjNiNGRlMGFmYTcxNDU4Y2RjZjZj
NmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjc5LDkgKzI3OSw5IEBA
IEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIElu
dFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5z
aXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCks
IGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGlu
YXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9u
UmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKQEAgLTQ0
Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlwbGllZFJlc3VsdChV
aW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYgKCFtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJv
bSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewot
ICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ2OSw3
ICs0NjksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQoVWlu
dDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29udmVyc2lvbiBmcm9t
IHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0KSB7Ci0g
ICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1
bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3Rr
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1YTBkNTBmOGNlMWFhZjY1MzVk
ZWVjOTQwYjg1ZGM1NTE3ZTRiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZm
ZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJp
Z2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0g
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2luY2x1
ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgotI2luY2x1ZGUg
Ikdka0NhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2lu
Y2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBidWZmZXJTaXplKQot
ewotICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5cGVzIGNvbWVzIGZy
b20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6Ly9kZXZlbG9wZXIu
Z25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1zYXZpbmcuaHRtbCNn
ZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUgPSBtaW1lVHlwZS5z
dWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJqcGVnIiAmJiB0eXBl
ICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIgJiYgdHlwZSAhPSAi
Ym1wIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IHBp
eGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8gSlBFRyBkb2Vzbid0
IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3RhdGVzIHRoYXQgdG9E
YXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAvLyBjb21wb3NpdGUg
c291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgYWxw
aGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZhY2U7Ci0gICAgICAg
IGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQ
RV9JTUFHRSkgewotICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3Vy
ZmFjZSksCi0gICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAotICAgICAgICAgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAotICAgICAgICAgICAg
ICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwKLSAgICAgICAgICAg
ICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkpKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3Vy
ZmFjZSk7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpKTsKLSAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2Ny
ZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1
cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgICAgICAgICAgY2Fpcm9fcGFpbnQo
Y3IuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1
cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihzdXJmYWNlKSk7Ci0g
ICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYgcXVhbGl0eSAmJiAq
cXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAgIFN0cmluZyBxdWFs
aXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEw
MC4wICsgMC41KSk7Ci0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdl
dCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAm
ZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4KCkuZGF0YSgpLCBO
VUxMKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhi
dWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRh
KCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gIWVycm9yOwotfQotCi1T
dHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBW
ZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAg
ICBpZiAoaW1hZ2VEYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0g
ICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGltYWdlRGF0YS5k
YXRhKCksIGltYWdlRGF0YS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRh
OiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBH
VW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBp
ZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1pbWVUeXBlLCBxdWFsaXR5
LCBidWZmZXIsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgVmVjdG9y
PHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwg
YnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdD
M0RMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAppbmRleCA0YzRjNDI2OTYxMjcxYzdiN2ExOWQyOTZh
OTQwMGVmZGMwZmFjOWFlLi43NTcwMDNiMWYxMWRmNGIyNzY2YjQwOWU4MjJjZDhiNDIwZmI0YTVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3Rl
eG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcApAQCAtOTQsNyArOTQs
NyBAQCB2b2lkIEdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAgICAgSW50U2l6ZSB0
ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4dC5tX2N1cnJlbnRI
ZWlnaHQpOwogICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBtX2NvbnRleHQuY29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQgOiAw
OwogI2lmIFVTRShBTkdMRSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgVW5hY2NlbGVyYXRlZCk7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwog
ICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3Bw
CmluZGV4IDdkMmNlZmQ2MjYxZGVlMmEzOWE4OWQxMDE3MDJlYjUwMjUyZjRmNWUuLmYwMzkxMzgw
NjBkMzQ0MzRlNmNkZGJmOTZlYTY0YzMwMWE2MzU1M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKQEAg
LTM4LDcgKzM4LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250ZW50cyhUZXh0dXJl
TWFwcGVyJiwgR3JhcGhpY3NMYXllciogc291cmNlTGF5ZXIsIGMKIHsKICAgICAvLyBNYWtpbmcg
YW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyIGhlcmUgaXMgT0sgYmVjYXVz
ZSB0aGlzIGNvZGUKICAgICAvLyBpc24ndCB1c2VkIGJ5IGFueSBwbGF0Zm9ybXMgdGhhdCByZXNw
ZWN0IHRoZSBhY2NlbGVyYXRlZCBiaXQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVjdC5zaXplKCksIFVu
YWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVy
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggY2ExMWJiOGJhMGIxOTEwYzYyNzk2N2Q0ZDI2MGIwNGM2
ODQ4NjczMS4uNWFjOWQ2NjA2YzQyMjEyNDhiYzQxZGU5Mzg5Y2U1Yzg3ZTRhNDE3YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZS5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBJbWFnZUJ1ZmZlciogTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAobV9pbWFnZUJ1ZmZlcikK
ICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBtX2ltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAg
ICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1faW1hZ2VCdWZmZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAppbmRleCBkNWI5MWIyNjg2YWUyNjFlYjUzYzA2ODliZWVjNjJmNTVlM2ZiNDU4Li44ZjUw
ZTU3NTcxZDdiMzg1MDBlZWQ3YmNkYTZiM2E2NDJhYmY3OTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTY5MDUsNyArNjkwNSw3IEBAIHZvaWQgUmVuZGVy
TGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0KICAgICAKICAgICBl
bnN1cmVMYXllckZpbHRlcnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVy
KCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNj
ZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkKTsK
KyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxl
ZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNSZXBhaW50KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXggOTE0MjAyOWEyZDQ0
NjRkZjVjYjdiM2E0NDE5M2JlMjg2M2MxZWQyYS4uOTM1YTZlZTllNzZmZjQ0MDJmOTg0YjVkMmI1
MjFhNjk5MWM2MTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBl
cy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5j
cHAKQEAgLTE4MSwxNCArMTgxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNy
ZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgSW50
UmVjdCBtYXJnaW5SZWN0ID0gc25hcHBlZEludFJlY3QobWFyZ2luUik7CiAgICAgYXV0byBpbnRl
cnZhbHMgPSBtYWtlVW5pcXVlPFJhc3RlclNoYXBlSW50ZXJ2YWxzPihtYXJnaW5SZWN0LmhlaWdo
dCgpLCAtbWFyZ2luUmVjdC55KCkpOwogICAgIC8vIEZJWE1FICgxNDk0MjApOiBUaGlzIGJ1ZmZl
ciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5z
aXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAgaWYgKGltYWdlQnVm
ZmVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250ZXh0ID0gaW1hZ2VC
dWZmZXItPmNvbnRleHQoKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0
LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJh
eSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5z
aXplKCkpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJheSk7CiAgICAgICAgIHVu
c2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAg
dW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRl
czogUkdCQS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAwOGU0OTI4MmFkOTNiY2FjZDI5Nzc1Yjg0
NmYwNTlkNWEyY2E3MTNlLi4xZDc3YjYzYzZmZTI4MzEyYWUxMWVkODI1YjUyM2FhY2U3MTdlYzVh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9vbCBSZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIGMKIAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0ltYWdlICYmICFyZXBh
aW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2OSk6IFRoaXMgaW1h
Z2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuIE1h
a2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBwaW5nLCB0aG91Z2gu
Ci0gICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJ
bWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNS
R0IsIFVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKKyAgICAgICAgY2xpcHBlck1hc2tJbWFnZSA9
IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNv
bHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCwgJmNvbnRleHQpOwogICAgICAgICBpZiAoIWNsaXBwZXJNYXNrSW1hZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNzViNTliNjNjM2U0OTYw
YmQ0ZTNiZGJkODc0OTJhOTMyZjQzMTYxYi4uMTJlN2YxNWQ2MzJkNzZkOTlmNmJhYmE5MzhkMGQ5
ZTI2MzRkOGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTE5MSw3ICsxOTEsNyBAQCBib29sIFJl
bmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBjb25zdCBSZW5kZQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2FsZShzY2FsZS53aWR0
aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3JtLm11bHRpcGx5KGZp
bHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJz
RW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1JlbmRlcmluZ0NvbnRl
eHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdpb24sIGVmZmVjdGl2
ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdNb2RlLCBjb250ZXh0
KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJUKCFtX3JlbmRlcmVy
RmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2
b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJjZShSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICAgICAgY29udGV4dC0+Y29uY2F0Q1RNKGZp
bHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgICAgICB9CiAgICAgfQot
ICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5yZXNldCgpOworICAgIGZpbHRlckRh
dGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7CiAKICAgICBMT0dfV0lUSF9TVFJFQU0o
RmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAiIDw8IHRoaXMgPDwg
IiBwb3N0QXBwbHlSZXNvdXJjZSBkb25lXG4iKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKaW5kZXggMTc4
N2UxOGMyZGNlZjViZGY5OTI0NzRjZmMwMjJiNTE2NmFkNTg0OC4uMTIwYzU3YjU2OTc4NzIyMDQ2
NWJjNmFlYzBiNTgwNGM0NTVjZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKQEAgLTcxLDcgKzcxLDcg
QEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUm
IHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xvclNwYWNlIGNvbG9y
U3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xvckludGVycG9sYXRp
b246OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9yU3BhY2U6OlNSR0I7
CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90
IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNv
bnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAgbWFza2VyRGF0YS0+
bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWlu
dFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2VsZXJhdGVkLCBjb250
ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4
dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0KTsKICAgICAgICAg
aWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4IGI4MjE0MTFhZGU3
NzUwODU2MTY4ODU2ZWQyMmI2MmVhNmI1Y2QzZDkuLjk3ODY3YWFkM2MyN2I1YjUzOGQzYTc5ZmI0
OTVkZGQ0ZjBmNDNkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9T
VkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNw
cApAQCAtMjE4LDcgKzIxOCw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdlOjpuYXRpdmVJbWFn
ZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNjZWxlcmF0ZWQgZHJh
d2luZyBmbGFnLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxl
cmF0ZWQgYnVmZmVyLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCks
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKSAvLyBmYWls
ZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlz
dHMudHh0CmluZGV4IDUzMjY3OGYzNzYwMzNjM2MwMGY5ZjZiZDVhMzBjMzg2OTBlMzM0YmYuLjBh
YjkyMDE2MjRlODYwYTBkOWNjMGYwNzE5ZmE2MzE1ZjJmMTU2MmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4
dApAQCAtMTcsNiArMTcsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAi
JHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5jbHVkZSIKICAgICAiJHtXRUJLSVRfRElS
fSIKICAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzIgorICAgICIke1dFQktJVF9ESVJ9L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJv
Y2VzcyIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9DbGFzc2lmaWVyIgogICAg
ICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZWRmYjZlMWUwNWU1NjQwMDhi
N2Q1N2E4NzQ1Mzc4YzQzZDY2Y2Y5Ni4uN2E1MjE0MjVmZjkzMTcyYjVhYjdlMWRjMjQyMGFmZTY1
Yzk3NmY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54
Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxl
bGlzdApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19E
SVIpL21vZGVscy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS94eGQu
cGwKICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9jZXNzLm1lc3NhZ2Vz
LmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgogJChQ
Uk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5HUFVQcm9jZXNzLnNi
LmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1Jl
bW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDIsNiArMTA0LDcgQEAg
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVk
REIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9t
ZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVz
c2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0CmluZGV4IGRmYmMwZWZlNmI4NDcyNmY5NmM4OTgyOGNkODNkMGVkNzU5MDVhMDYuLjkwZDkx
MTFmZDEwZTg2MzQ1YjdlZjRmZjUzYjE1OWEwYzMxMmNhYzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNz
UHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVz
c2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5o
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFn
ZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNz
YWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTE0Miw2ICsx
NDgsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVP
YmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VS
ZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNz
YWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5t
YWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IGUyOTA5MzA5N2Nk
OWJkZWIzNDVhMTlhNWQzN2ZlNTdhNTQwZGViNzAuLjhjNzUzZDE2ZjQwZGZkZGNmZTE3NDViYWE1
ZmU1OWJmMjk2ODc3ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1
LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAor
ICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwK
ICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBA
QCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAg
ICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9H
UFUvbWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9N
ZWRpYUNhY2hlIFwKQEAgLTE0MCw2ICsxNDIsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAg
ICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIgXAogICAgIFBsdWdpblByb2Nlc3NQcm94
eSBcCiAgICAgUGx1Z2luUHJveHkgXAorICAgIFJlbW90ZUltYWdlQnVmZmVyIFwKKyAgICBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5IFwKQEAgLTE0Nyw2ICsxNTEsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJj
ZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yIFwKICAgICBS
ZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAgUmVtb3RlV2ViSW5zcGVjdG9yVUkgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuY3BwCmluZGV4IDYyMGI0MWYyOGQ2Njc2YTNkZTE3ZjQ3NmIyZGYzODhmZmY2NDc3MGQuLmEz
NzFjZjIzZGE3N2ZhNzZlM2U0MDNkZGMyZDNhZGI2NjE5MDFjNDEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAg
LTE2MCw1MiArMTYwLDY4IEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlh
UmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3Rl
TWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIu
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5h
Z2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJl
Y29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1h
bmFnZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2UoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
I2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3NQ
cm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVjc1By
b3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
KyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJl
Y2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2Rl
ciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikK
K2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25u
ZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQcm9j
ZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJU
KCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhpcywg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxwdHI7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZjQ4NTk2NGQ0NmM1MmUz
MzhkMmFiZTRmNzY1ZGRjYjVhOTRhMDc5MC4uMDI3MDM3ZmU5OTQ2NDA5ZjA2YzIzYmY2Y2VjZDM3
ODUzYTU2ZTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUvRGlz
cGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2luY2x1
ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ3LDE4ICs0OSwyMCBA
QCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogCiBjbGFzcyBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2VzcyYs
IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIs
IFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
KCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5l
Y3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2Vp
dmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9jZXNz
JiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVy
biBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNwZW5z
aW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAKLSAg
ICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNvbnN0
IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJlc291
cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dlciYg
bG9nZ2VyKCk7CkBAIC03NywxNCArODEsMjEgQEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6Q29u
bmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5h
bDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVy
ZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVT
eW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9w
dHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZl
ck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIGJv
b2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAg
IGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
LCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVSZW5k
ZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVh
c2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAogICAgIFJl
ZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25u
ZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAgSVBDOjpNZXNz
YWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3QgV2ViQ29yZTo6
UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNvdXJjZU1h
bmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5
PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTYsNiArMTA3LDcgQEAgcHJp
dmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAj
ZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0Zjky
ZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRk
NzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNw
YXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAg
IHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZTcwZjQyMmMzZTQ2OTNhMDEyODk4MThhMWMzMjk0NGVkY2YzM2QxNQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmll
ciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX2ltYWdl
QnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8q
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Z2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZl
ck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2
NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVy
KE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCks
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rp
b24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3Vp
bnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQo
KTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVJbWFnZUJ1
ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShoYW5k
bGUpKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6OmZsdXNoQ29udGV4dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7
CisgICAgbG9jYWxGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgIHNlbmQoTWVzc2FnZXM6
OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXIoZmx1c2hJZGVudGlmaWVyKSwg
bV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMzY4YjYyNjRmZDEwYWQ0MzE3ZWU0ZjNmNmQ2ODM0ZWQ1NzFm
MDY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2Vu
ZFJpZ2h0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2
YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OworICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJ
UEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZl
cgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29s
b3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIHZvaWQgZmx1c2hDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29u
c3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworCisgICAgV2Vha1B0
cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7
CisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmIwYWU3OGUyY2U0YWI5NTE5YjY1YWI4NGI0ZDcyZGRlYjVlYzk1OGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMjkgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBOb3RSZWZDb3VudGVkIHsK
KyAgICB2b2lkIEZsdXNoQ29udGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qg
ZGlzcGxheUxpc3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVu
dGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZmU0ZTFl
M2FkNTIxODU0NWM5NTFmNmNjMTRjZmU2ZDBkZjFkZWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjxC
YWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHsKKyAgICB1c2luZyBC
YXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikK
KyAgICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUg
Y3JlYXRlPFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eT4oc2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBudWxscHRyLCBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXJQcm94eShzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCwgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlUGh5c2ljYWxJ
bWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQor
ICAgIHsKKyAgICAgICAgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKG1fYmFja2VuZC0+
bG9naWNhbFNpemUoKSwgbV9iYWNrZW5kLT5pbnRlcm5hbFNpemUoKSwgbV9iYWNrZW5kLT5yZXNv
bHV0aW9uU2NhbGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+Y3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lk
IGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0
Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpSZXBsYXllciByZXBsYXllcihCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y29u
dGV4dCgpLCBkaXNwbGF5TGlzdCk7CisgICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAg
ICBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmRhNTBkN2VmNzBhZDNkOTgwNmRjZjY2OTQ1YmViZDlmZDM3MjkyZDEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCIK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQ
cm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxQbGF0Zm9ybVVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OwordXNpbmcgUmVtb3RlUGxhdGZvcm1BY2Nl
bGVyYXRlZEltYWdlQnVmZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8
UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE3
MGIzMzA3MDNlMGNkZjUyNDgzZWQ2MTI2YzJjMDAyYTRjNDYyYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNz
YWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOwor
fQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
KyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAg
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCksICp0
aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKwor
SVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0
dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVm
ZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0g
bV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOworICAgIGlmICghZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUp
IHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBp
bWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5Ojpj
cmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGltYWdlQnVmZmVy
ID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUobG9naWNhbFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGlt
YWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZlck1hcC5hZGQoaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlm
aWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICAvLyBDcmVhdGVTdXJmYWNlIG1lc3Nh
Z2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgaWYgKCFt
X2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9p
bWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OTM4YmVl
NTExZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVy
LmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitj
bGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNz
YWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4g
Y3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CisKKyAg
ICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7IH0KKworcHJpdmF0
ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2Fn
ZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQo
KSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9p
ZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVy
cmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVySWRlbnRpZmll
cik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
KworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4+OworICAgIEltYWdlQnVm
ZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4N2Y4MDJjMzZmZDk1N2JjNDkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAor
IyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgTm90UmVm
Q291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUg
bG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6
SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB2b2lkIFJl
bGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dl
YktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBjZWZmM2MyNjA1YTFmODVkNWQ5
OTBhNjRjM2YyODIwM2QxMTUyMzIwLi4zMTQwNDc4ZjQxN2QwY2ZlMGQzMDRhODgzNDdhZTVhNDc0
ZWNiZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3
LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5U
U19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRD
SF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNF
SVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZF
Ul9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdT
eW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVf
Zm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnTWFj
aFNlbmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAg
ICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRj
aElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIx
MSw2ICsyMTQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgp
OgogICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6
UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJywKKyAgICAg
ICAgJ1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdv
cmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlckpvYklkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBA
IC0yMTgsMTAgKzIyMiwxNCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNs
YXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbklkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9uSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisgICAgICAgICdXZWJL
aXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZScsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAg
J1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UmVtb3Rl
TWVkaWFSZXNvdXJjZUlkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0
OjpTdG9yYWdlQXJlYUlkZW50aWZpZXInLApAQCAtNzYyLDEzICs3NzAsMTYgQEAgZGVmIGdlbmVy
YXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICBhc3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKIAotICAgIGlmIGFzeW5jX21lc3NhZ2Vz
OgorICAgIGlmIGFzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNf
RElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCd2b2lk
ICVzOjpkaWRSZWNlaXZlJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlm
IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAn
JykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZl
ci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigq
dGhpcyk7XG4nKQogCiAgICAgICAgIHJlc3VsdCArPSBbYXN5bmNfbWVzc2FnZV9zdGF0ZW1lbnQo
cmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIGFzeW5jX21lc3NhZ2VzXQorICAgICAg
ICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklC
VVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAg
ICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgaWYgKHJlY2VpdmVyLnN1cGVyY2xhc3MpOgogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICVzOjpkaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTtcbicgJSAocmVjZWl2ZXIuc3VwZXJjbGFzcykpCiAgICAgICAgIGVsc2U6
CkBAIC03NzcsMTMgKzc4OCwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2Vp
dmVyKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCiAKLSAgICBpZiBzeW5jX21lc3Nh
Z2VzOgorICAgIGlmIHN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5U
U19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ1xu
JykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZVN5bmMlc01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpXG4nICUgKHJlY2VpdmVy
Lm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdBQ1lfUkVD
RUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgne1xuJykK
ICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5URURfUkVD
RUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBhdXRvIHBy
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAgICAgICAgIHJlc3VsdCArPSBbc3lu
Y19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3NhZ2UgaW4gc3lu
Y19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQ
QVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
aWYgKGRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7XG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGRlY29kZXIpO1xuJykKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShyZXBseUVuY29kZXIpO1xuJykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
IGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKaW5kZXggODRk
NDM5YzUwNTQwNGI3ZTU5MDViMzZlN2RlYzc2ODlkZGZhOTQ1NC4uMDlhMTQyZWZjMDUxMmJkNWRh
YTQ0MDQ1OGFiMzc3MzIzN2FlMWZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0FscGhhUHJlbXVsdGlw
bGljYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9wbGF5RXZlbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0RpYWdub3N0aWNMb2dn
aW5nQ2xpZW50Lmg+CkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9OZXR3b3Jr
TG9hZE1ldHJpY3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdGlmaWNhdGlvbkRpcmVjdGlvbi5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNvdXJjZS5oPgorI2luY2x1ZGUgPFdl
YkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Nyb2xsU25hcE9mZnNl
dHNJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJ2aWNlV29ya2VyVHlwZXMuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1N0b3JlZENyZWRlbnRpYWxzUG9saWN5Lmg+CkBAIC04MDMsNiArODA1LDI2
IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6U2VyaWFsaXplZEF0
dGFjaG1lbnREYXRhPiB7CiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24+IHsKKyAgICB1c2luZyB2
YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24s
CisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwKKyAg
ICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQKKyAgICA+
OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkLAorICAg
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlOjpEaXNwbGF5TGlzdCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1vdGVB
Y2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1vdGUKKyAgICA+Owor
fTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xvclNwYWNlPiB7
CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKICAgICBXZWJDb3JlOjpDb2xvclNwYWNl
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJLaXQv
U291cmNlcy50eHQKaW5kZXggMzA2Y2QxZTY5MzU2NjFhZDQxYzA2MDkyODQ4YmY5YWYzNmIxYjcy
Ni4uYmIxZmVjMmFhNjE3NzA5NmIzNDJjMDM1OTAwYmIyYWVmMWE4NjU0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
CkBAIC0zMSw2ICszMSw4IEBAIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94
eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZS5jcHAKIEdQVVByb2Nl
c3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZUxvYWRlci5jcHAKIEdQVVByb2Nlc3MvbWVkaWEv
UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiAKIE5ldHdvcmtQcm9jZXNzL0FkQ2xp
Y2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWN0aXZpdHlU
cmFja2VyLmNwcApAQCAtNTE0LDYgKzUxNiw5IEBAIFdlYlByb2Nlc3MvR1BVL21lZGlhL01lZGlh
UGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlh
UGxheWVyTWFuYWdlci5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
TUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVN
ZWRpYVJlc291cmNlUHJveHkuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJy
dGMvTGliV2ViUlRDQ29kZWNzLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3Jk
ZXJQcml2YXRlLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcm92aWRl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCAwODc2YWRkMTM1NDNlZThmY2VlYmE2MzVi
YTk5OTM2ZWQ3Yzg2YzU2Li42MzBkMGM0OTY0Zjk3NDMzNzBiYTI5NjZkMzk4ZTMxMDc5ZjM2ZjI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNl
L1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC01NTEsNiArNTUxLDggQEAgV2ViUHJvY2Vzcy9j
b2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KIAogV2ViUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQ
Q1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCiAKK1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcAorCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUJhbm5l
ci5jcHAKIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVNYWMu
bW0KQEAgLTYzNSwxMCArNjM3LDE0IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KIC8vIERlcml2ZWQgU291cmNlcwogRWRp
dGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAorR1BVUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdl
UmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9j
ZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1
ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVj
ZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNv
cmRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2VyRmV0Y2hUYXNrTWVz
c2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYWZiZGMyNTc1ZTQ0ODE4NWU0YmNiYzg0MmU0ZjdhNTQ0MzEzYjQz
OS4uMDE1OGEzMWEzM2FhNDgzNDY4YWQxYmQ0NzA4NTM5ZmE4NTgwMjdhZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0zOTc1LDggKzM5
NzUsMzIgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0
dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXS1RvdWNo
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFBNjc2QTUyMkM2
MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVj
b2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0EwMDMyMzY3NyAv
KiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRj
aFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0MTIzQzhGRTAy
MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQyMjNDOEZF
MDMwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQzMjNDOEZFMDQwMDQx
ODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0NDIzQzkwMERBMDA0MTg4
MUYgLyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0
NjIzQzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ3MjNDOTQ1RDgw
MDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90
ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFF
OTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5p
bjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3
IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50
aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE2MjNBRDRGMzMw
MEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyog
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTY0MjND
MUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tl
ck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1h
Yy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3
OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVm
ZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjND
IC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTgyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQjIzQjRDN0E5MDBGNjdE
NDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMgLyogUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQxODdDQ0Y5RjAw
QzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5t
bTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMwMTAwQzM5QzlF
IC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC02NDA5LDYgKzY0MzMsNyBAQAogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEyRjIzOUIzQjBDMDA5NTk4RTIgLyogbWVkaWEgKi8sCisJ
CQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJ
NDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQkyRDdFNDNDMDIzNzUy
Q0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAogCQkJCTJEN0U0M0Mz
MjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5oICovLApAQCAtNjQyNSw2
ICs2NDUwLDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5MzYgLyogaW9zICovLAogCQkJ
CTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdDNzVDMTcyMzk5QTNE
QjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMUYxRTk3MjNBRDJGNUMwMEJEQUZGNyAvKiBS
ZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOThFMjNCNjMzQ0EwMEFFNTY4NiAvKiB3ZWJy
dGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCkBAIC03ODAxLDYgKzc4MjcsNTIgQEAKIAkJCW5hbWUg
PSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3MjAxNzU0NTIzQzk0
NUIxMDA0MTg4MUYgLyogY2cgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVu
ID0gKAorCQkJCTcyMDE3NTQ2MjNDOTQ1RDgwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyMDE3NTQ3MjNDOTQ1RDgwMDQxODgxRiAv
KiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCAqLywKKwkJCSk7CisJCQlw
YXRoID0gY2c7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MjFGMUU5NzIz
QUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdy
b3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFOUEyM0FEMkZENjAwQkRBRkY3IC8qIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAorCQkJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZG
NyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFFOTkyM0FEMkZENjAw
QkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzIz
NUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5o
ICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdE
NDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJNzJENUMyRUIyM0I0
QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAq
LywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdC
YWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3
MjAxNzU0NTIzQzk0NUIxMDA0MTg4MUYgLyogY2cgKi8sCisJCQkJNzIwMTc1NDQyM0M5MDBEQTAw
NDE4ODFGIC8qIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oICovLAorCQkJCTcyMUYxRUE5MjNB
RDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovLAorCQkJCTcy
MUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJ
CQk3MjAxNzU0MTIzQzhGRTAyMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MjAxNzU0MjIzQzhGRTAzMDA0MTg4MUYgLyogSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzIwMTc1NDMyM0M4RkUwNDAwNDE4
ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggKi8sCisJCQkJNzJC
QkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3
MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3
MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4g
Ki8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyRDVDMkVFMjNCNTZDODQwMEY2
N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
N0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCAxOGU5MzZkZTMyMzA3NzBm
MjQzNjFiNmFiYWE4ZTE3ZTRkMmU1YWMwLi4xODhmYWMyMGExZTkyM2RmNjJiYjFhMzgwNTUwYWFh
NGY5NGQ4ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVBy
b2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjAsMjkgKzYwLDM1IEBAIHZvaWQgR1BVUHJvY2Vz
c0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9CiAKLXZvaWQgR1BV
UHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCi17Ci19Ci0K
LXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNz
Q29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwg
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVu
dDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBjYXB0dXJl
TWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNpZiBVU0UoTElCV0VCUlRD
KSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7
CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJUQ0NvZGVjcygpLmRpZFJl
Y2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2
ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Cit9CisKK2Jvb2wg
R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6
OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1h
cCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSkKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggYThhZDRm
ZWU4NmIyNjU5YjRhZmZiN2M0ODRkYTE4MWMzYmVmMjdkMC4uZThlZTg1ZGMzMmZlNTc4ZjE3NTM4
YmEzZDg5ZmQ3NDYwNzQ2YmEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB+
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2
ZXJNYXA7IH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgdm9pZCBzZXRBdWRpdFRva2Vu
KE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9rZW4pIHsgbV9hdWRpdFRva2VuID0gYXVk
aXRUb2tlbjsgfQpAQCAtNTgsMTEgKzYwLDE1IEBAIHByaXZhdGU6CiAgICAgLy8gSVBDOjpDb25u
ZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmlu
Z1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBib29sIGRpc3BhdGNoTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNo
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVf
cHRyPElQQzo6RW5jb2Rlcj4mKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdl
YiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBt
X2Nvbm5lY3Rpb247Ci0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNl
aXZlck1hcDsKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIE9wdGlvbmFsPGF1ZGl0X3Rva2Vu
X3Q+IG1fYXVkaXRUb2tlbjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KaW5kZXgg
ZDM2ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4NGNlOWQ2NGIzMC4uNTdmZWNkZTlkZjI3Yzcz
OWE2Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCkBA
IC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+
IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9u
IFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU5NjMwNjlmNjYxODE4M2QwNzhhNjRj
MmRlYWNjMmQ4M2E0Y2RlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaApAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlIDx3dGYv
TWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCit1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgPSBWYXJpYW50PAorI2lm
IFBMQVRGT1JNKENPQ09BKQorICAgIE1hY2hTZW5kUmlnaHQsCisjZW5kaWYKKyAgICBTaGFyZWFi
bGVCaXRtYXA6OkhhbmRsZQorPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZs
dXNoSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MmNmMjQ1ZTM0NWUxZGZlYzYyZGMxZDdhM2Vj
YWVmY2Q5YWI1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApAQCAtMCww
ICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGUgeyB9OwordXNp
bmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRl
bnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMWJjOWFlODdkYzhkNzI0MjhhMGI4MDljYWQwZDgwYTRj
ZDFjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVySWRlbnRpZmllclR5cGU+Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVlN2ZiNTRiNzE0ZTkyMmJmNmZhZjMwMzUzY2E4NjBh
OGY4ZjJhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8V2Vi
Q29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0
ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNp
emUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBTaGFyZWFi
bGVCaXRtYXA6OkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBjb25maWd1cmF0aW9uLmNvbG9yU3BhY2UgPSB7IGNhY2hlZENHQ29sb3JTcGFjZShj
b2xvclNwYWNlKSB9OworI2VuZGlmCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZVNoYXJlYWJsZShpbnRlcm5hbFNpemUsIGNvbmZpZ3VyYXRpb24pOworICAgIGlmICgh
Yml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IGJp
dG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKGJpdG1hcCksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAo
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTaGFyZWFibGVCaXRtYXA6OkhhbmRsZT4oaGFuZGxlKSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZShXVEZN
b3ZlKFdURjo6Z2V0PFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKSk7CisgICAgaWYg
KCFiaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0g
Yml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBXVEZNb3ZlKGJpdG1hcCksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVm
UHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBiaXRtYXAsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHQ+JiYgY29udGV4dCkKKyAgICA6IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2lj
YWxTaXplLCBwaHlzaWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAs
IG1fYml0bWFwKFdURk1vdmUoYml0bWFwKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRl
eHQpKQoreworfQorCitJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdAor
eworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBtX2JpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShX
VEZNb3ZlKGhhbmRsZSkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAor
eworI2lmIFVTRShDRykKKyAgICByZXR1cm4gbV9iaXRtYXAtPm1ha2VDR0ltYWdlQ29weSgpOwor
I2VsaWYgVVNFKERJUkVDVDJEKQorICAgIHJldHVybiBudWxscHRyOworI2VsaWYgVVNFKENBSVJP
KQorICAgIHJldHVybiBtX2JpdG1hcC0+Y3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CisjZW5kaWYKK30K
KworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlJ
bWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkp
OworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VE
YXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9iaXRtYXAtPmRh
dGEoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGFycmF5LCBzcmNTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5h
dGVTeXN0ZW0sIG1fYml0bWFwLT5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNDcw
ZWM2OTliYjNlZDY5YWUwMGM2NzRmMzZkNTI3MjI2ODI3MDAyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg+CisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVh
YmxlQml0bWFwOworCitjbGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQgOiBw
dWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgeworICAgIFdURl9NQUtF
X0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOwor
cHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25z
dCBXZWJDb3JlOjpIb3N0V2luZG93Kik7CisgICAgCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5h
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdDsKKyAgICAKKyAgICBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAqbV9jb250
ZXh0OyB9CisKKyAgICBXZWJDb3JlOjpOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoV2Vi
Q29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gY29weUltYWdlKFdlYkNvcmU6
OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlLCBXZWJDb3JlOjpQ
cmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25z
dCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoV2ViQ29y
ZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6Oklu
dFJlY3QmLCBXZWJDb3JlOjpDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNy
Y1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkNvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9y
bWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9y
bWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0
bWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IG1fY29u
dGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzE5MzExNWRlMTFmMTUyM2RjMDkw
ZjAxMWMxNDY1MTQ5NDk3NWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOworCisjaWYgVVNFKENHKSAmJiAoVVNFKElP
U1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOworI2Vsc2UKK3VzaW5n
IFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBQbGF0Zm9y
bVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ7CisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YTUxYjRjZTgwZjdi
MWE2ZWNiYzgyYmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNw
cApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZm
ZXIuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25uZWN0aW9u
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJl
bW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIC8v
IFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1h
cCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCku
bWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMpOworCisgICAgLy8g
Q3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVy
aW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX2ltYWdlQnVmZmVySWRlbnRp
ZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitSZW1vdGVJbWFnZUJ1
ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKCkKK3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNlbGYg
YXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3Nh
Z2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFw
LnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwg
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVt
b3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2Fn
ZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0
Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBj
b25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmRE
aXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRG
b3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jv
b2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQoreworICAgIFJl
ZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29u
bmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUlt
YWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAx
X3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJp
dmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQo
KQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50ID0gMzsKKyAg
ICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNCYWNrZW5kQ3Jl
YXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJC
YWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50
OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0U2V0Rmx1
c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRl
bnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7Cisg
ICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZsdXNoSWRlbnRpZmllcjsKK30KKwordm9p
ZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgbV9zZW50Rmx1c2hJ
ZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAg
c2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Rmx1c2hDb250ZXh0KGRpc3Bs
YXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7
CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkZDkxOTk1ZmFlNWVhNmUzZjQ4NzRmNzZhNGNjMzg0NjRj
YWJiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIu
aCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNp
bmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgUmVtb3RlSW1hZ2VCdWZmZXIKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisg
ICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICB+UmVtb3Rl
SW1hZ2VCdWZmZXIoKTsKKworcHJvdGVjdGVkOgorICAgIFJlbW90ZUltYWdlQnVmZmVyKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiog
bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gQmxv
Y2tlcnMKKyAgICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKyAgICBib29s
IHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKKworICAgIHZvaWQgZW5zdXJlVXBkYXRlZEJhY2tl
bmQoKTsKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1
c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0KKworICAgIC8vIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgdm9pZCBjcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSkgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAwOworCisgICAg
dm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOyAgICAg
ICAgCisgICAgdm9pZCByZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAg
ICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CisgICAg
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKKyAg
ICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMzQxZmQyNGYyOTY5YWE3N2QyYmJlZTcyNzE1YmYyNmYzYzliYWQyOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNvdW50ZWQgewor
ICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRGbHVzaElkZW50aWZpZXIoV2ViS2l0
OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Y2UwMjRjN2JiNGMwNzU4Njc1ZjZiMTA3ZmVk
OGZkM2Q3ZTNlZWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVt
b3RlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRU
eXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyIHsKKyAg
ICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjpt
X2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7
CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJl
c29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPihuZXcg
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VEaXNwbGF5TGlzdEltYWdl
QnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5n
TW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9iYWNrZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1v
dmUoaGFuZGxlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2VuZFR5
cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFj
a2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZs
dXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmViZDIwMTYzODA0YjAy
NGQ0ZjE0MDFkNDQ2NjM2MjNhZDUzYTk3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIgorI2luY2x1
ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47Cit1
c2luZyBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlzaWNh
bEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tl
bmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wYzU4YWFjNzNlMjViY2E3ZDBhOTMwOTdjNzM2MTk2M2ZlNDBlYmRmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
IgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8v
IENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2Fn
ZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAg
ICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90
ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmlu
Z01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaW1hZ2VC
dWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJp
bmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgIH0K
KyAgICAKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBmMzk1ODc3ZjQ4ZTUx
NzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiTWVz
c2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdC
YWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZAorICAgICwgcHJp
dmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOworCisgICAgLy8g
SVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNv
bm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVz
dGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVyaW5nQmFja2VuZAor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZm
ZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpI
b3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQyMzU0NzBjY2ZlN2I3OWJiOTI0NTc4YWZiNDE3MDM1YzkxM2RkMDIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
IDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
VHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjI0NmMyZDk1ZGRm
YjVlZTBlM2E1ZDE3NjNiZjJhMjIxZjc2MDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpZiBVU0UoQ0cpICYmIChV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOworCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0g
Y2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGlu
dGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUs
IGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29u
dGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBp
ZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRD
bGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBp
bnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmlnaHQoV1RGTW92ZShX
VEY6OmdldDxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9y
U3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKGxvZ2lj
YWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92
ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgSW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUo
KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUobV9zdXJmYWNl
LT5jcmVhdGVTZW5kUmlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZTcwMTA4OTYyYzcyNDI5Mjlk
ZWVhOWUzNmRlZWJiMjBhNjk2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgU2hhcmVhYmxlQml0bWFwOworCitjbGFzcyBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyop
OworICAgIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSk7
CisKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlKCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVzaW5nIFdlYkNvcmU6OkltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIChVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSkKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1OGEuLjc3MjZmZTk0
OGEyMjc5YmJmOTM5ZjA2NDRmNjQ1NjgyZWQ2Yjc5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CkBAIC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Nb2NrV2ViQXV0aGVudGlj
YXRpb25Db25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisjZW5kaWYKKwogbmFtZXNwYWNl
IFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CkBAIC04ODEsMTUgKzg4NSwyMiBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hy
b21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJl
ZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRv
cihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRy
YXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5n
QXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CisjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+
IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOwog
I2VuZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXll
cihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4
IGZkYTMzOGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFmNjc5NGVkMWMyY2QuLjRkZWRmZWU3ODQxMTY1
ZTU3N2Q5NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMSw2
ICsyMzEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1v
bml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3Bs
YXlJRCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7
CisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2Vy
cygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9z
aXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQppbmRleCBlZjAz
NTAzNDJiYjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEwNjliNTdmYmY2NTk0
ODg3NTQxMjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQpAQCAt
MjAyLDcgKzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6
aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgICAgIHJldHVybiBu
aWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFuZCB3aWxsIGJl
IHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0aCBGcmFtZVNu
YXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0
LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIp
CiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjMzAwN2IzZmMyM2Q4OWY4MzIyZTJmMDgx
OTUxYmNhZDdiYmI4YjAyLi4xYTMwYWEyMjkzYjBiZTBhZjFlMjRjOWZkY2MwYzA1N2NiMDA2YWI4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjAtMDEtMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90
ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAy
MDIwLTAxLTExICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBb
TEZDXVtJbnRlZ3JhdGlvbl0gZmFzdC90ZXh0L3NpbXBsZS1saW5lcy1mbG9hdC5odG1sIHNob3Vs
ZCBiZSBhYm91dCBzaW1wbGUgbGluZSBsYXlvdXQgb25seQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4
IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1
NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3Bs
YXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyAr
MSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChj
aGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFn
cyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgw
MDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4
dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1
MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387503</attachid>
            <date>2020-01-12 23:49:23 -0800</date>
            <delta_ts>2020-01-14 11:23:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200112234922.patch</filename>
            <type>text/plain</type>
            <size>499186</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0Mzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM1MWQ3NGM4ZGRhNmM2
ODdjMjY2MzdmMDM0ZTAyMzhhYjQyZDMwMS4uNjJiMDU5NDJlZDY4OWY0NGUwMjc1YjIyMTE2ZDE2
ZGE0NmFjMmJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyOSBAQAorMjAyMC0wMS0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgY29kZSByZS0KKyAgICAgICAgZmFjdG9yaW5nIGlz
IG5lZWRlZCB0byBkZWNvdXBsZSB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20gdGhl
CisgICAgICAgIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiOgorCisgICAgICAgICAgICAtLSBCYWNr
IGVuZCAodGhlIHBpeGVscyBzdG9yYWdlKQorICAgICAgICAgICAgLS0gRHJhd2luZyBjb250ZXh0
ICh0aGUgcmVjZWl2ZXIgb2YgdGhlIGRyYXdpbmcgY29tbWFuZHMpCisgICAgICAgICAgICAtLSBS
ZW1vdGUgSVBDIGNvbW11bmljYXRpb25zCisgICAgICAgICAgICAtLSBTaGFyaW5nIHRoZSBiYWNr
IGVuZCBkYXRhCisKKyAgICAgICAgVGhlIGNsYXNzIGhpZXJhcmNoeSBvZiBJbWFnZUJ1ZmZlciBp
czoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAgICAgICAgICAgfCAg
dGVtcGxhdGU8QmFja2VuZFR5cGU+CisgICAgICAgICAgICArLSBQaHlzaWNhbEltYWdlQnVmZmVy
ICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0ICAgICBJUEM6Ok1lc3NhZ2VTZW5kZXIK
KyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICB0ZW1w
bGF0ZTxCYWNrZW5kVHlwZT4gICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICArLSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIC0tLS0tKyAgIFJl
bW90ZUltYWdlQnVmZmVyIC0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICB8ICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CisgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgICAgICAgICB8ICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICstIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgLSsgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IC0rCisgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNrZW5kVHlwZT4gICAg
ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICArLSBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHkgLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgMSkgUGh5c2ljYWxJbWFn
ZUJ1ZmZlciBpcyBhICJicmlkZ2UiIHRvIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisgICAgICAg
IDIpIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgaXMgYSBQaHlzaWNhbEltYWdlQnVmZmVyIHdoaWNo
IGFsc28gaW1wbGVtZW50cworICAgICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQu
IFRoZSBHcmFwaGljc0NvbnRleHQgb2YgdGhpcyBjbGFzcyByZWNvcmRzCisgICAgICAgICAgIHRo
ZSBkcmF3aW5nIGNvbW1hbmRzIGluIGEgRGlzcGxheUxpc3QuIEZsdXNoaW5nIHRoaXMgRHJhd2lu
Z0NvbnRleHQKKyAgICAgICAgICAgcmVwbGF5cyBiYWNrIHRoZSBEaXNwbGF5TGlzdCB0byB0aGUg
UGh5c2ljYWxJbWFnZUJ1ZmZlci4KKyAgICAgICAgMykgUmVtb3RlSW1hZ2VCdWZmZXIgYW5kIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkgaGFuZGxlIHRoZSBJUEMgY29tbXVuaWNhdGlvbnMKKyAgICAg
ICAgICAgZnJvbSBhbmQgdG8gdGhlIFdlYlByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgorICAg
ICAgICA0KSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIGlzIGEgUmVtb3RlSW1hZ2VCdWZmZXIg
d2hpY2ggYWxzbyBpbXBsZW1lbnRzCisgICAgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
IFdoZW4gaXQgaXMgY3JlYXRlZCwgaXQgc2VuZHMgYSBtZXNzYWdlIHRvIAorICAgICAgICAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgdG8gY3JlYXRlIGFuIGFzc29jaWF0ZWQgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eQorICAgICAgICAgICBpbiB0aGUgR1BVIHByb2Nlc3MuIFdoZW4gaXRz
IERyYXdpbmdDb250ZXh0IGlzIGZsdXNoZWQsIFJlbW90ZUltYWdlQnVmZmVyCisgICAgICAgICAg
IHNlbmRzIGl0cyBEaXNwbGF5TGlzdCB0byBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHRvIGJlIHJl
cGxheWVkIGJhY2sgaW4KKyAgICAgICAgICAgdGhlIHNoYXJlZCBiYWNrLWVuZCBidXQgaW4gR1BV
IHByb2Nlc3MuCisgICAgICAgIDUpIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSBpcyBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHdoaWNoIGFsc28gCisgICAgICAgICAgIGltcGxlbWVudHMg
UGh5c2ljYWxJbWFnZUJ1ZmZlci4gSXQgaXMgY3JlYXRlZCBpbiB0aGUgR1BVIHByb2Nlc3MgdXBv
bgorICAgICAgICAgICBhIGNyZWF0aW9uIG9mIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgaW4g
dGhlIFdlYlByb2Nlc3MuIEl0IGNyZWF0ZXMKKyAgICAgICAgICAgYSBzaGFyZWFibGUgYml0bWFw
L3N1cmZhY2UgYW5kIHNoYXJlIGl0IHdpdGggdGhlIGFzc29jaWF0ZWQgCisgICAgICAgICAgIFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgVGhlIGNsYXNzIGhpZXJhcmNoeSBv
ZiBJbWFnZUJ1ZmZlckJhY2tlbmQgZm9yIENHIHBsYXRmb3JtcyBpczoKKworICAgICAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmQKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHxfXyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICst
LSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAg
ICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQKKyAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tIElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8
CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQKKworCisgICAgICAgIFRoZSBjbGFzcyBoaWVyYXJjaHkgb2YgSW1hZ2VCdWZmZXJCYWNrZW5k
IGZvciBDYWlybyBwbGF0Zm9ybXM6CisKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kICAgICAg
ICAKKyAgICAgICAgICAgIHwgICAgCisgICAgICAgICAgICArLS0gSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQKKyAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICArLS0gSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
fAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAg
ICAgICstLSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQKKworCisgICAgICAgIDEp
IEltYWdlQnVmZmVyQmFja2VuZCBrbm93cyB0aGUgZGltZW5zaW9ucyBhbmQgdGhlIGNvbG9yIHNw
YWNlIGFuZCBwcm92aWRlcworICAgICAgICAgICBiYXNpYyBmdW5jdGlvbmFsaXRpZXMgZm9yIHRo
ZSBkYXRhIGNvcHlpbmcgYW5kIGNvbG9yIHBlcm11dGF0aW9uLgorICAgICAgICAyKSBJbWFnZUJ1
ZmZlckNHQmFja2VuZC9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCBwcm92aWRlcyBiYXNpYyBmdW5j
dGlvbmFsaXRpZXMKKyAgICAgICAgICAgZm9yIGRyYXdpbmcgdGhlIEltYWdlQnVmZmVyIHRvIGEg
ZGVzdGluYXRpb24gR3JhcGhpY3NDb250ZXh0LgorICAgICAgICAzKSBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCBpcyBhbgorICAg
ICAgICAgICB1bmFjY2VsZXJhdGVkIGJhY2sgZW5kLgorICAgICAgICA0KSBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQvSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQgaXMgYW4KKyAg
ICAgICAgICAgYWNjZWxlcmF0ZWQgYmFjayBlbmQuCisgICAgICAgIDUpIEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZCBpcyBhbiB1bmFjY2VsZXJhdGVkIHNoYXJlYWJsZSBiYWNrIGVu
ZC4KKyAgICAgICAgNikgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kIGlzIGFu
IGFjY2VsZXJhdGVkIHNoYXJlYWJsZSBiYWNrIGVuZC4KKworICAgICAgICBGb3IgQ0cgcGxhdGZv
cm1zLCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkgd2lsbCBjcmVhdGUgdGhlIGZvbGxvd2luZyB0eXBl
cworICAgICAgICBvZiBJbWFnZUJ1ZmZlcjoKKworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5k
ZXJpbmc6CisgICAgICAgICAgICAgICAgVW5hY2NlbGVyYXRlZDogIFBoeXNpY2FsSW1hZ2VCdWZm
ZXI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+CisgICAgICAgICAgICAgICAgQWNjZWxlcmF0
ZWQ6ICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAgICAg
VW5hY2NlbGVyYXRlZDogIAorICAgICAgICAgICAgICAgICAgICAgICAgV2ViUHJvY2VzczogUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPgorCisgICAgICAg
ICAgICAgICAgQWNjZWxlcmF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdQVVByb2Nlc3M6IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eTxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+
CisKKyAgICAgICAgU2ltaWxhcmx5IEltYWdlQnVmZmVyOjpjcmVhdGUoKSBvbiBDYWlybyBwbGF0
Zm9ybXMgd2lsbCBjcmVhdGUgdGhlCisgICAgICAgIGZvbGxvd2luZyB0eXBlcyBvZiBJbWFnZUJ1
ZmZlcjoKKworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAg
ICAgVW5hY2NlbGVyYXRlZDogIFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ+CisgICAgICAgICAgICAgICAgQWNjZWxlcmF0ZWQ6ICAgIFBoeXNp
Y2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAg
ICAgICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBXZWJQcm9j
ZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZD4KKyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPgorCisgICAgICAg
IFRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdG8gbWFrZSB0aGUgbWluaW1hbCBjaGFuZ2VzIGlu
IFdlYkNvcmUgYW5kIGhpZGUKKyAgICAgICAgYWxsIHRoZSBkZXRhaWxzIG9mIHJlbW90ZSBkcmF3
aW5nIHVuZGVyIHRoZSBJbWFnZUJ1ZmZlciBhbmQgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAg
ICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9D
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpz
YW5pdGl6ZURhdGFJZk5lZWRlZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpkdW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OnJlYWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVDb250ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdl
QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9JbWFnZUJpdG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1h
Z2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJ
bWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpp
c0FjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29u
c3QpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFj
a2VuZCBjb25zdCk6CisgICAgICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xp
ZW50OjpzY3JlZW5zaG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Ib3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0
aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29weVJlY3RUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjppbnRlcm5hbFNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZv
cm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
cHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNp
Y2FsSW1hZ2VCdWZmZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRj
aEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmRyYXdTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hh
ZG93TGF5ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVN
YXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdl
UGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmJhY2tlbmRDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9C
R1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6
OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRl
eHQ6OmRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6ZGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDM0RMYXllci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpHQzNETGF5ZXI6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRl
bnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKToKKwogMjAyMC0wMS0xMCAgWmFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdIFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91
dFRhYmxlQ2VsbEJveCBzaG91bGQgdGFrZSBIb3Jpem9udGFsQ29uc3RyYWludHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggMmMzMGYxN2EyMjRiZmJlYzc3NjhmZWY0NzM1NGQ4NzA5YjBmNjJkNC4uNzYzOWZkYzA5ZGI5
MTA5ZjcxMmMwODc5YjllZDIzODNhOTI5YzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjYgQEAK
KzIwMjAtMDEtMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4K
KworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0tIFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIKKyAgICAgICAgICAgaW4gdGhlIFdlYlByb2Nlc3Mgc2lkZS4KKworICAgICAgICAtLSBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBy
ZWxlYXNpbmcgCisgICAgICAgICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgaW4gdGhlIEdQ
VVByb2Nlc3Mgc2lkZS4KKworICAgICAgICAtLSBSZW1vdGVJbWFnZUJ1ZmZlciBhbmQgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eSBhcmUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nCisgICAgICAgICAg
IHRoZSBJUEMgY29tbXVuaWNhdGlvbnMgYmV0d2VlbiB0aGUgUGh5c2ljYWxJbWFnZUJ1ZmZlcnMg
dW5kZXJseWluZyB0aGVzZQorICAgICAgICAgICBvYmplY3RzLgorCisgICAgICAgIC0tIEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCBpcyBhbiB1bmFjY2VsZXJhdGVkIEltYWdlQnVm
ZmVyCisgICAgICAgICAgIGJhY2tlZCBieSBTaGFyZWFibGVCaXRtYXAuCisKKyAgICAgICAgLS0g
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kIGlzIGEgQ0cgb25seSBhY2NlbGVy
YXRlZCBJbWFnZUJ1ZmZlcgorICAgICAgICAgICBiYWNrZWQgYnkgSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91dHB1
dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6
CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRl
cmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2FnZVJl
Y2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpt
ZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1
c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1
ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgICog
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3Jl
YXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXND
b2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UpOgor
ICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2Vp
dmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6bWVz
c2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29u
bmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg6
IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRm
b3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcik6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjp3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0ZsdXNo
IGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
IGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKwog
MjAyMC0wMS0xMSAgS2F0ZSBDaGVuZXkgIDxrYXRoZXJpbmVfY2hlbmV5QGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgY29ycmVjdCBncmFuZGZhdGhlcmluZyBmdW5jdGlvbmFsaXR5IHRvIHRoZSBJ
VFAgZGF0YWJhc2UgYmFja2VuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IDMxZDgy
MjQwYjE5ODA5MWE1ZWMyZmRhOWZlZTYwMGE2YzljNzdjYjcuLjJmMWFjMDIyNjEwMWUwMjkyNDBj
MmQ3MGM0YmZjYTYzODQzYmZkMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAyMC0wMS0xMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbToKKyAgICAgICAgKFdlYkNvbnRleHRNZW51
Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0pOgorCiAyMDIw
LTAxLTA5ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IEFkb3B0IFRBUkdFVF9PU19NQUNDQVRBTFlTVCBpbiBtb3JlIHBsYWNlcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKaW5kZXggMjk2ZGVhNzgzMWJlZTQ5Y2YwMDRhNjgyZGQyNWU4OTNiOTk2NGU3Ny4uODVhN2Jj
MDJmZDA3NWFmM2U4MDU3YTNkNzhkMjgwZjc2YTgxNGZiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBA
IC0xMDE1LDYgKzEwMTUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJT
CiAgICAgcGxhdGZvcm0vZ2FtZXBhZC9HYW1lcGFkUHJvdmlkZXJDbGllbnQuaAogICAgIHBsYXRm
b3JtL2dhbWVwYWQvUGxhdGZvcm1HYW1lcGFkLmgKIAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Fs
cGhhUHJlbXVsdGlwbGljYXRpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0
QnJpZGdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9BdWRpb1RyYWNrUHJpdmF0ZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMTAyNCw2ICsxMDI1LDcgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFycmF5
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJl
ZnJlc2hNb25pdG9yQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVz
aE1vbml0b3JNYW5hZ2VyLmgKQEAgLTEwNzMsNyArMTA3NSw3IEBAIHNldChXZWJDb3JlX1BSSVZB
VEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPYnNl
cnZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oCkBAIC0xMTA1
LDEzICsxMTA3LDE4IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRp
bGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybURpc3BsYXkuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtVGV4dFRyYWNrLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5n
ZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVtb3RlVmlkZW9TYW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdU
cnVuY2F0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRp
bmdzRGF0YVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2Fy
ZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAppbmRleCA0NjQxZDU4MDhhNTI3
ZWM2ZTMwZDFjZmI2ZTgwYjIzMWRkNTZkNmIwLi43NDY1ZDBlNmE4NjY4NzM4ZjRlYmRjNTc0Zjky
NmM3NDg4ZTdhYTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNs
aXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9DbGlwYm9hcmRJdGVtQmluZGluZ3NEYXRh
U291cmNlLmNwcApAQCAtMjg0LDcgKzI4NCw3IEBAIHZvaWQgQ2xpcGJvYXJkSXRlbUJpbmRpbmdz
RGF0YVNvdXJjZTo6Q2xpcGJvYXJkSXRlbVR5cGVMb2FkZXI6OnNhbml0aXplRGF0YUlmTmVlCiAK
ICAgICAgICAgYXV0byBiaXRtYXBJbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoKTsKICAgICAg
ICAgYml0bWFwSW1hZ2UtPnNldERhdGEoV1RGTW92ZShidWZmZXJUb1Nhbml0aXplKSwgdHJ1ZSk7
Ci0gICAgICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJpdG1hcElt
YWdlLT5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikgewogICAgICAgICAgICAg
bV9kYXRhID0geyBudWxsU3RyaW5nKCkgfTsKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IGY3MTI5MjdjYzkxOGYzYWIwZmU3MDhhOGFj
MDE3YmQwZjNjZjk0MGQuLjVlNTQyNmMxMTRkM2FjZjUwYjQ3MThiY2NmNDZhMzdjMmNjYWY5ODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQpAQCAtMTMyLDggKzEzMiw5IEBA
IGVsc2UgKCkKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlU291cmNlQ0dXaW4uY3BwCkBAIC0xNzYsNyArMTc3LDkgQEAgZWxzZSAoKQog
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVVRJ
UmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCBjMDNjZTZiNTEzMTgyMWEw
MWNjN2Q2NjUzZDE2OTE5MWRiYjc5YTgxLi4wYjJiY2NjNWI1NjY2MDM1NDUyMzdiZDVhYzAzNWFj
MTFiNGQyYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMjg5LDggKzI4OSwxMCBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3Bw
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZURlY29kZXJDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFj
Lm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTUyNSw3ICs1
MjcsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNDExMjE1NTdh
ZTZmMzVkYjlhZDVmNGMxZThhY2NjYTA4NjYzZTZmYi4uN2EyMDlhODY3ZDNlMWExNDBkYjIwMzQ0
NWVkM2FkZWUyNzY4OGU2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4NjksNiArMTg2OSw3IEBAIHBs
YXRmb3JtL2dyYXBoaWNzL0hFVkNVdGlsaXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JY29u
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRGVjb2Rlci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RnJhbWUuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTE4ODgsNiAr
MTg4OSw3IEBAIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9QbGF0Zm9ybVRpbWVSYW5nZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBw
bGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAK
IHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJp
bmdUcnVuY2F0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBlNDUzZDg5MDk3ZTY4
NmIyYzMzNTJiYWQ2NmVlNzEyMzQ3YzE2NmI1Li40ZjAzZWMyM2Q4YzQwZmI5NmEyZTU3NzAxZTM2
NmFiMDE0Y2VjZmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKQEAgLTI4OCw4ICsyODgsOSBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFkaWVudENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLXBs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzR1RLLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CmluZGV4IDcyMDVlMjBk
M2FiNGUzOWZiZWU0YmI5NDMxYWVjYjRiY2NjMjhiZDIuLjk3ZjMzNmU3YzVjOWU4ZDBkYTI1ZTJi
ZDRlNjFhZDcxYWU1MmRmMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNHVEsudHh0CkBAIC04NCw3ICs4NCw2IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Db2xvckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9EaXNwbGF5UmVmcmVzaE1vbml0b3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2Rr
Q2Fpcm9VdGlsaXRpZXMuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSWNvbkd0ay5jcHAKLXBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2d0ay9JbWFnZUd0ay5jcHAKIAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggOWJiODQzMTQ1MzlhZDA5NTE0NjMxYjIxMzA2MTZhZjYwYmE5
YTFjMy4uNTM2MGY0N2M4Njc5YjEyZjg4NWM3OTIwMDJkOTczY2MyZTI0ZjFiMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjQ1
LDggKzY0NSw2IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24u
aCAqLzsgfTsKIAkJMjI1QTE2QjUwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjVBMTZCMzBE
NUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyog
U2NyaXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGN0Yx
MzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTIyQkQ5RjgxMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjJCRDlGODAx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjREOTEyOTIxM0NBOTUxRTAwRDIxOTE1
IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRH
bHlwaERlZkVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpT
U1ZHQWx0R2x5cGhJdGVtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjREOTEyOTQxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJ
dGVtRWxlbWVudC5oICovOyB9OwogCQkyNEQ5MTI5QTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdH
bHlwaFJlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDI0RDkxMjk5MTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5o
ICovOyB9OwpAQCAtMjEzMCwxNCArMjEyOCwyNiBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4
QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJDNDI0MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25F
ZmZlY3RQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1
QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VE
NzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIwMTc1NEEyM0M5NjlERjAwNDE4ODFG
IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjAxNzU0ODIzQzk2OTNFMDA0MTg4MUYgLyogUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMTIyM0VDODU0MDBGMTJGRjcgLyogKG51bGwpIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNW
R1Byb3BlcnR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NUVFNTM2MzIyM0IyQTI0MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBG
MTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5
T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjFGMUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQw
NjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBC
MjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyog
SW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMgLyogUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM1Qzk2MzIzQzE5
NUNFMDAyNjI2MzMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDBDMjNBQUVCMUUwMEE2MTIz
QyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzgyNkE4MjNDMUY1OEIwMDQ5RjdGOSAvKiBS
ZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMzgyNkMyMjNDNTZG
NzkwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyog
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTcyNEVEMzMyMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5k
TWluTWF4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MjRFRDMzMDFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oICovOyB9OwogCQk3
MjRFRTU1MDFEQzgwRDdGMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZC
IC8qIEFjdGl2aXR5U3RhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MjRFRTU1MTFEQzgwRDg0MDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNo
YW5nZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2Vy
dmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzJCMDk5MDEyM0MwOTIzQzAwNzNCOUNCIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQTA3QzQ1MjNCRUVE
OUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjND
IC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdl
QnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzJCQkU0MjAyM0FDMkI3NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwOTIzQUFD
RTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkJCRTQyMTIzQUMyQ0Q3MDBBNjEyM0Mg
LyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNr
ZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzJCQkU0MjcyM0FDQjNFMDAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDI2MjNB
Q0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJENUMyRUEyM0I0QzBGODAw
RjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAvKiBSZW5kZXJpbmdC
YWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzU1M0NGRTgxMDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhG
NDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4
NDBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVz
c2FnZUV2ZW50LmggKi87IH07CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3Nh
Z2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzU3OTNFQzcwRDBDRTcyRDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC02
NTQyLDkgKzY1NTIsNiBAQAogCQkyMjVBMTZCMzBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRS
ZWdpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViRXZlbnRSZWdpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI1QTE2QjQwRDVDMTFFOTAwMDkwMjk1
IC8qIFdlYkV2ZW50UmVnaW9uLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBw
YXRoID0gV2ViRXZlbnRSZWdpb24ubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIy
OEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckRh
dGFDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIyQkQ5RjdEMTM1MzYyNUMw
MDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VCdWZmZXJEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTIy
QkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGFDRy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkyNDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEQ5MTI4RjEzQ0E5NTFFMDBEMjE5MTUg
LyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyNEQ5MTI5MDEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERl
ZkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTVkdBbHRHbHlw
aERlZkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDIsOCArOTYw
OSwxMiBAQAogCQk3MUVGQ0VERTIwMkIzOUM3MDBEN0M0MTEgLyogSlNBbmltYXRpb25FZmZlY3RD
dXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBbmltYXRp
b25FZmZlY3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZG
NzFERDRGOTlCMDA5MjJDQzcgLyogdHJhY2tzLXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSAidHJhY2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MUZGODUxODIyQTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4
VG91Y2hQb2ludHMuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNo
UG9pbnRzLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDgyM0M5Njkz
RTAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyMDI4MEQxMjNCQTkzN0IwMDZGNDc2NyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFs
dWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8q
IFNWR1ZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyog
UmVuZGVyaW5nTW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdNb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaDsgcGF0aCA9IC4uL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8q
IEVYVEJsZW5kTWluTWF4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEVYVEJsZW5kTWluTWF4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQz
MkExQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyNEVEMzJCMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtOTYyNCw3ICs5NjM1LDIwIEBACiAJCTcyN0FGRUQxMUEyRUE2QTAwMDA0
NDJFOCAvKiBFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEVYVHNSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMjFBMkVB
NkEwMDAwNDQyRTggLyogRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyN0FGRUQzMUEyRUE2
QTAwMDA0NDJFOCAvKiBFWFRzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBFWFRzUkdC
LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBMDdDNDUyM0JFRUQ5RjAwQUZB
NkE4IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTNGRTIz
QUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
aHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJF
NDAwMjNBQUM0QzEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MDgy
M0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0Mg
LyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdl
UGFpbnRpbmdPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlUGFpbnRpbmdPcHRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU2MjNCMzgyNzEwMEY2N0Q0MyAv
KiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTkyM0I0NEEzODAwRjY3RDQzIC8q
IFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyaW5nQmFja2Vu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYxMUEyRThEMkYwMDRD
NTYyQSAvKiBKU0VYVHNSR0IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjIx
QTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU0VYVHNSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJGMUFE
OUYxQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFWFRGcmFnRGVwdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI2ODgsNyArMTI3MTIsNiBAQAogCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNF
MEUgLyogR3JhcGhpY3NUeXBlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gR3JhcGhpY3NUeXBlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIy
QTAxNTk1MEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc1R5cGVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc1R5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVy
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVy
Q0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExRjJBMTBDRUYwQUJGMDA0
NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBMUYyQTIwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdGb250RWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkExRjJBMzBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1l
bnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBTVkdGb250RWxlbWVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY4OCw2ICsxNjcxMSw3IEBACiAJCQljaGlsZHJl
biA9ICgKIAkJCQkwRkU1RkJDQTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuY3BwICov
LAogCQkJCTBGRTVGQkNCMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oICovLAorCQkJ
CTcyQkJFNDI2MjNBQ0IwOUIwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmgg
Ki8sCiAJCQkJMEZFNUZCQ0MxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuY3Bw
ICovLAogCQkJCTBGRTVGQkNEMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmgg
Ki8sCiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIu
Y3BwICovLApAQCAtMjQ4ODcsNiArMjQ5MTEsNyBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2
NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CTcyMzgyNkMxMjNDNTY1ODUwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8s
CiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovLAogCQkJCUIy
NzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUz
NTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCkBAIC0yNDg5Niw5ICsy
NDkyMSwxMiBAQAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAvKiBHcmFwaGljc0NvbnRl
eHRDRy5oICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAvKiBHcmFwaGljc0NvbnRl
eHRHTENHLmNwcCAqLywKIAkJCQlBODBENjcwNzBFOUU5REVCMDBFNDIwRjAgLyogR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywKLQkJCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlB
QTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCi0JCQkJMjI5MkIyN0IxMzU2NjY5NDAwQ0YxMUVG
IC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKLQkJCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQx
MDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKKwkJCQk3MkJCRTQwODIzQUFDRTgyMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA5MjNBQUNFODIw
MEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDBEMjNBQUVD
QTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzJC
QkU0MEMyM0FBRUIxRTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8s
CisJCQkJNzJCQkU0MDcyM0FBQ0Q1MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZC5jcHAgKi8sCisJCQkJNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5oICovLAogCQkJCUNENTg5NDkzMjE4NzQwNjQwMDRGNDI0QSAvKiBJ
bWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlDRDNFMjFEQjIxODMzRjUxMDBFNjZG
NTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oICovLAogCQkJCTU1NUI4N0VBMUNBQUYwQUIw
MDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCkBAIC0yNDk5NCw2ICsyNTAyMiw3IEBA
CiAJCQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuaCAqLywK
IAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJCQkJNTU1
MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAorCQkJCTcyQTA3
QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8sCiAJCQkJ
NDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8s
CiAJCQkJNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5o
ICovLAogCQkJCTJEMjlFQ0MxMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0
b3JDbGllbnQuY3BwICovLApAQCAtMjUwODUsNyArMjUxMTQsOCBAQAogCQkJCTU1QTMzNkY4MUQ4
MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQzRDI1OTc2MTND
ODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThC
RDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcyMDI4MEQxMjNCQTkzN0IwMDZGNDc2
NyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDAwMjNBQUM0QzEwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFGNTczOTcyMDAw
QzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTczOTcyMDAwQzQy
RkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0NDMDRDIC8q
IEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUxNDIsNiArMjUxNzIsOSBAQAogCQkJCTJENTAwMkZB
MUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZFNUMwRTRD
RkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZERUQwMEQ1
Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBo
eXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQyMzIzQUM0OTNFMDBBNjEyM0MgLyog
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyMDE3NTQ4MjNDOTY5M0UwMDQxODgxRiAv
KiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4OEYw
MDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAwMzg3
NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0UyMTZF
QkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9ybVRleHRUcmFjay5oICovLApAQCAtMjUxNTEsNiArMjUx
ODQsOSBAQAogCQkJCUJDQUI0MTgwMTNFMzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJ
CQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICovLAog
CQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICovLAor
CQkJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywK
KwkJCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAor
CQkJCTcyMzgyNkE2MjNDMUYxNDMwMDQ5RjdGOSAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJ
QTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNG
OTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCkBAIC0yODk5Myw2ICsyOTAyOSw3
IEBACiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg0RDBDNDA2MTExNUYxRUEwMDE4QUEzNCAvKiBBZmZpbmVU
cmFuc2Zvcm0uaCBpbiBIZWFkZXJzICovLAogCQkJCTgzQkI1Qzg4MUQ1RDZGNDUwMDVBNzFGNCAv
KiBBbGxEZXNjZW5kYW50c0NvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMzgyNkMy
MjNDNTZGNzkwMDQ5RjdGOSAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDRURBMTJENzE1MkNBMUNCMDBEOUUwOEQgLyogQWx0ZXJuYXRpdmVUZXh0Q2xpZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDRTA4QzNEMjE1MkI1OTlBMDAyMUI4QzIgLyogQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0U3QjJEQjMxNTg2QUJB
RDAwOThCM0ZBIC8qIEFsdGVybmF0aXZlVGV4dFVJQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTY4OCw2ICsyOTcyNSw4IEBACiAJCQkJMTEyRkIzNTIyMzlDMjNDNDAwODcwNTRBIC8q
IERpc3BsYXlJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0N0U2MzIyNzc0MjVB
MDBDN0JDQjAgLyogRGlzcGxheUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQz
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJC
QkU0MjcyM0FDQjNFMDAwQTYxMjNDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQjA5OTAxMjNDMDkyM0MwMDczQjlDQiAvKiBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVy
cyAqLywKQEAgLTMwMjk2LDggKzMwMzM1LDEwIEBACiAJCQkJN0M3OTAzQjMxRjg2Rjk1QzAwNDYz
QTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNl
dHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQgLyog
SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjgxMTM1MzY0
RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzJC
QkU0MjEyM0FDMkNENzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJCQkU0MjAyM0FDMkI3NzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MzIzQzE5NUNFMDAyNjI2MzMgLyogSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMUYxRUE3MjNBRDUw
QTEwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNEM0UyMUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NH
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VD
b250cm9sc0J1dHRvbkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThC
NkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtMzE3NjcsNiArMzE4MDgsNyBAQAogCQkJCUE1NTRCNUYzMUUzODM5M0EwMDFENEUwMyAv
KiBQZXJmb3JtYW5jZVVzZXJUaW1pbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZENTgxRkI1MTUy
MEY5M0IwMDNBN0E3NSAvKiBQZXJpb2RpY1dhdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RDVE
QzJFMEY0MjNBNzMwMDhGMjBGRCAvKiBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNzJCQkU0MUMyM0FDMjFDQzAwQTYxMjNDIC8qIFBoeXNpY2FsSW1h
Z2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEQkMxQjU2MjM0N0IzRDIwMEI5MDFBRiAv
KiBQaWN0dXJlSW5QaWN0dXJlT2JzZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkM4MkI3
MjM2QTNGNkEwMDU1RDZDNSAvKiBQaWN0dXJlSW5QaWN0dXJlU3VwcG9ydC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMUQyRjhFMDYyMzQ0NzUyMzAwOTkzQjY4IC8qIFBpY3R1cmVJblBpY3R1cmVXaW5k
b3cuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3ODYsNiArMzE4MjgsOCBAQAogCQkJCUJDQUE0ODcw
MTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9z
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZv
cm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM1Qzk2MTIzQzE5NUE4MDAyNjI2MzMg
LyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIwMTc1NEEyM0M5
NjlERjAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzVDNDc2ODA5QUM0RDQzMDBBNkFBQjQgLyogUGxhdGZvcm1LZXlib2FyZEV2ZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwNTYyRjk2MTE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZv
cm1MYXllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU0NEY3ODkxNUNGQjJBODAwQUYzM0E4IC8q
IFBsYXRmb3JtTG9jYWxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMxOTYzLDYgKzMyMDA3LDggQEAK
IAkJCQlCQ0VBNDg3NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVySW1hZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTA4RjJGMDBBMTIxM0U2MTcwMERDRUM0OCAvKiBSZW5kZXJJbWFnZVJlc291cmNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwODY0MUQ0ODEyMTQyRjdEMDA4REU5RjYgLyogUmVuZGVy
SW1hZ2VSZXNvdXJjZVN0eWxlSW1hZ2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyRDVDMkVBMjNC
NEMwRjgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjM4MjZBODIzQzFGNThCMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTU2QzdDNEIyMjEyMzk5NzAwOUIwNkNBIC8qIFJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4NzgwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRl
cklubGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjU5NUZGNDcxODI0Q0VFMzAwRkY1MUNEIC8q
IFJlbmRlckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDY0ZGZmMmQ5ODRl
ZjcyZGQ5ZWJhNTEwMjQwNjEwZmMxOGUyMWQ5NDcuLmZhNGU0OTBhYjRkODFiZDZmZjEyOGUyNWE3
NzY3NDFkOWVmNzc5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTIxLDggKzkyMSw4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJbnRTaXplJiBs
b2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICAgICAgYXV0byBpbWFnZURh
dGEgPSBidWZmZXItPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdCgwLCAwLCBsb2dp
Y2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOworICAgICAgICBJbnRTaXpl
IGxvZ2ljYWxTaXplID0gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpOworICAgICAgICBhdXRvIGltYWdl
RGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUu
aGVpZ2h0KCkpKTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUg
PSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjc4NSwxMyArMjc4NSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgVW5h
Y2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICAgICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKEZsb2F0U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCByZXNvbHV0aW9uU2NhbGUpOwogICAgICAgICBp
ZiAoIWJ1ZmZlcikgewogICAgICAgICAgICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCppbWFn
ZURhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFNpemUobG9n
aWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxv
Z2ljYWxIZWlnaHQpLCBJbnRQb2ludCgpKTsKKyAgICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgSW50U2l6
ZShsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0
aCwgbG9naWNhbEhlaWdodCksIEludFBvaW50KCkpOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0g
SW1hZ2VCaXRtYXA6OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4o
b3JpZ2luQ2xlYW4pIH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCmluZGV4IGU1YjhhYjQ2OWNl
YzRiYzA1OGM0MzdkMTk5NTA0MGI1MDIxYzc0MzEuLjJmYTUzYWEzOGMxZmNjMTE3MzU2YWY5ZjE1
NWQwMTVkNDQzN2YwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJ
bWFnZVZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5jcHAKQEAgLTExNiw3ICsxMTYsNyBAQCBSZWZQdHI8SW1hZ2U+IENTU0ZpbHRlckltYWdlVmFs
dWU6OmltYWdlKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBGbG9hdFNpegogCiAgICAg
Ly8gVHJhbnNmb3JtIEltYWdlIGludG8gSW1hZ2VCdWZmZXIuCiAgICAgLy8gRklYTUUgKDE0OTQy
NCk6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0
ZWQuCi0gICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBhdXRvIHRleHR1cmUgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghdGV4dHVyZSkKICAgICAgICAg
cmV0dXJuICZJbWFnZTo6bnVsbEltYWdlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21Q
YWludENhbnZhcy5jcHAKaW5kZXggZjRiNzcwN2U5N2E4ZmU1MWY4ZTI1Nzc1OGFkZTRiNmRkZmY1
MDJlNS4uNjVkNDY0ZmRkN2Q1ODhlYzczMTYxNmI3NDAzN2E4NDI4ZWVmMzFmMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9DdXN0b21QYWludENhbnZhcy5jcHAKQEAgLTkzLDcgKzkzLDcgQEAgSW1h
Z2UqIEN1c3RvbVBhaW50Q2FudmFzOjpjb3BpZWRJbWFnZSgpIGNvbnN0CiAgICAgaWYgKCF3aWR0
aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBtX2NvcGll
ZEJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCAxLCBD
b2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKKyAgICBtX2NvcGllZEJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBp
ZiAoIW1fY29waWVkQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTAyLDcg
KzEwMiw3IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAog
ICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CiAgICAg
bV9kZXN0aW5hdGlvbkdyYXBoaWNzQ29udGV4dCA9IG51bGxwdHI7CiAKLSAgICBtX2NvcGllZElt
YWdlID0gbV9jb3BpZWRCdWZmZXItPmNvcHlJbWFnZShtX2NvcGllZEJ1ZmZlci0+ZmFzdENvcHlJ
bWFnZU1vZGUoKSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIG1fY29waWVkSW1hZ2Ug
PSBtX2NvcGllZEJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2
ZVJlc29sdXRpb246Olllcyk7CiAgICAgcmV0dXJuIG1fY29waWVkSW1hZ2UuZ2V0KCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggMjNkOWIzNGU4
NDhmNmQwMWQzNGE5ZGFmZmJhMzA1MGZjN2E3MTMxNi4uOTA5MzNlMjNhYzA4MTgwMzNjNzZmYzNl
MjgyMTE5MTgwMTQ4NmM3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVu
dC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50LmgiCkBAIC02MCw2ICs2MSwxMCBAQAogI2luY2x1ZGUgPHd0Zi9SQU1TaXplLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCisjaWYgVVNFKENHKQorI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKE1FRElBX1NU
UkVBTSkKICNpbmNsdWRlICJDYW52YXNDYXB0dXJlTWVkaWFTdHJlYW1UcmFjay5oIgogI2luY2x1
ZGUgIk1lZGlhU3RyZWFtLmgiCkBAIC0zNDUsOSArMzUwLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEKiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKGNvbnN0IFN0cmluZyYg
dHlwZSkKIAogICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRl
KCp0aGlzLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKIAotICAgIGRvd25jYXN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2lu
ZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwotICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFj
a3NEaXNwbGF5TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIC8vIE5lZWQgdG8g
bWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5nIGxheWVyIGdldCBjcmVhdGVk
IGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFuZExheWVyQ29tcG9zaXRpb24o
KTsKQEAgLTgxOCwzOSArODIwLDI3IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OnNob3VsZEFj
Y2VsZXJhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIAogdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIHVzZXNEaXNwbGF5TGlzdERyYXdp
bmcpCiB7Ci0gICAgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPT0gbV91c2VzRGlzcGxheUxp
c3REcmF3aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAgbV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nID0gdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKLQotICAgIGlmIChpczxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIGRvd25jYXN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2lu
ZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwogfQogCiB2b2lkIEhUTUxDYW52YXNFbGVtZW50
OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KQogewotICAgIGlmICh0cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9PSBtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIo
KS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkt
PnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwog
fQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlM
aXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5kaXNwbGF5TGlzdEFzVGV4dChm
bGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkp
CisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+ZGlzcGxheUxpc3Qo
KS5hc1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxD
YW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0
RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVwbGF5RGlzcGxheUxpc3RBc1RleHQoZmxhZ3Mp
OwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpICYmIGJ1
ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpKQorICAgICAgICBy
ZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxheURpc3BsYXlMaXN0KCktPmFz
VGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCkBAIC04ODUsMTEgKzg3NSwy
NyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAg
ICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gQWNj
ZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3Vt
ZW50KCkudmlldygpICYmIGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52
aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKyAgICAKKyAgICAvLyBGSVhN
RTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcgb24gY2FudmFzLgor
ICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2lu
Zy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERyYXdpbmdFbmFibGVk
KCkpOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRy
YXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKwor
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZTsKKyAgICBpZiAodXNlc1JlbW90ZURyYXdp
bmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlJlbW90ZTsK
KyAgICBlbHNlIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdN
b2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxp
c3RBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OworICAgIGVsc2UKKyAg
ICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKKwogICAg
IHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCByZW5kZXJpbmdNb2Rl
LCAxLCBDb2xvclNwYWNlOjpTUkdCLCBob3N0V2luZG93KSk7CiAKKyAgICBpZiAoYnVmZmVyKCkg
JiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5n
Q29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KTsKKwogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgaWYgKG1fY29udGV4dCAmJiBtX2NvbnRl
eHQtPmlzMmQoKSkgewogICAgICAgICAvLyBSZWNhbGN1bGF0ZSBjb21wb3NpdGluZyByZXF1aXJl
bWVudHMgaWYgYWNjZWxlcmF0aW9uIHN0YXRlIGNoYW5nZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKaW5kZXggYjUyODY0NWM2NTg3NGNkMGNhMDkzNDQ0NjFiNDU0ZDU2
MDUwNjMyNi4uNDIxMzRhMTIyOTQxNDk2YmYzMWJjZGQ3OWM2YmM1YzM5MWE3OGE0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaApAQCAtMTYxLDcgKzE2MSw3IEBAIHBy
aXZhdGU6CiAKICAgICBib29sIG1faWdub3JlUmVzZXQgeyBmYWxzZSB9OwogCi0gICAgYm9vbCBt
X3VzZXNEaXNwbGF5TGlzdERyYXdpbmcgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPGJvb2w+IG1f
dXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKICAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkgeyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQ+IG1fY29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRt
YXAuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKaW5kZXggNWY0OWY3
MzlhMWY1YzNiZTBlZTE3MWYzNGY5NjNlMDI2NmJjNDQ5Mi4uMmI4MTk4OWU4ZmQ2MmVmZTM0NTM4
N2E5MDJmZTY5MmIzMDk5NTRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFn
ZUJpdG1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcC5jcHAKQEAg
LTYxLDkgKzYxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQml0bWFwKTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAj
ZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxl
cmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNlbmRpZgogCiBSZWY8SW1hZ2VCaXRtYXA+IEltYWdl
Qml0bWFwOjpjcmVhdGUoSW50U2l6ZSBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwCmluZGV4IGY3NDQ4NTEyMDAxNTc1YjRhZjRiYmEyNGVhYTU3YWJlNmEwNjQzYzku
Ljc1NWYxMWVmODllMTE4MWJlMDZkNWVhMmYwMDc4Njk2ZTM5YmU0ZDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBFeGNlcHRpb25P
cjxSZWZQdHI8SW1hZ2VCaXRtYXA+PiBPZmZzY3JlZW5DYW52YXM6OnRyYW5zZmVyVG9JbWFnZUJp
dG1hcCgpCiAgICAgICAgICAgICByZXR1cm4geyBSZWZQdHI8SW1hZ2VCaXRtYXA+IHsgbnVsbHB0
ciB9IH07CiAKICAgICAgICAgaWYgKCFtX2hhc0NyZWF0ZWRJbWFnZUJ1ZmZlcikKLSAgICAgICAg
ICAgIHJldHVybiB7IEltYWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUoKSwgVW5hY2NlbGVyYXRlZCksIHRydWUgfSkgfTsKKyAgICAgICAgICAgIHJldHVybiB7IElt
YWdlQml0bWFwOjpjcmVhdGUoeyBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCksIHRydWUgfSkgfTsKIAogICAgICAgICBhdXRvIGJ1ZmZlciA9
IHRha2VJbWFnZUJ1ZmZlcigpOwogICAgICAgICBpZiAoIWJ1ZmZlcikKQEAgLTI0Myw3ICsyNDMs
NyBAQCB2b2lkIE9mZnNjcmVlbkNhbnZhczo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAg
IGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNldElt
YWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7Cisg
ICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQpKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBP
ZmZzY3JlZW5DYW52YXM6OnRha2VJbWFnZUJ1ZmZlcigpIGNvbnN0CkBAIC0yNTcsNyArMjU3LDcg
QEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBPZmZzY3JlZW5DYW52YXM6OnRha2VJbWFn
ZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKHNpemUoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKSk7CisgICAgcmV0dXJuIHNldEltYWdlQnVmZmVyKElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7
CiB9CiAKIHZvaWQgT2Zmc2NyZWVuQ2FudmFzOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
CmluZGV4IDg5ZDhmNDI0M2IyYjkyZGZiY2IzMmFhMjIxYjc1M2M5M2YxZjU5NDEuLjViMWIwN2Vm
NzczODQzMzYwOGU4ODJmYjllM2JhOWEyYjFhNGM5YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
CkBAIC0xODA2LDcgKzE4MDYsNyBAQCB0ZW1wbGF0ZTxjbGFzcyBUPiBJbnRSZWN0IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OmNhbGN1bGF0ZUNvbXBvc2l0aW5nQnVmZgogCiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0
ZUNvbXBvc2l0aW5nQnVmZmVyKGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QpCiB7Ci0gICAgcmV0
dXJuIEltYWdlQnVmZmVyOjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQo
KSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVy
OjpjcmVhdGUoYnVmZmVyUmVjdC5zaXplKCksIGlzQWNjZWxlcmF0ZWQoKSA/IFJlbmRlcmluZ01v
ZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y29tcG9zaXRlQnVmZmVyKEltYWdlQnVm
ZmVyJiBidWZmZXIsIGNvbnN0IEludFJlY3QmIGJ1ZmZlclJlY3QsIENvbXBvc2l0ZU9wZXJhdG9y
IG9wKQpAQCAtMTk5MCw3ICsxOTkwLDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPENhbnZhc1BhdHRl
cm4+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKEgKICAgICAg
ICAgcmV0dXJuIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiB7IENhbnZhc1BhdHRlcm46OmNyZWF0ZShC
aXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUobmF0aXZlSW1hZ2UpKSwgcmVwZWF0WCwgcmVwZWF0
WSwgb3JpZ2luQ2xlYW4pIH07CiAjZW5kaWYKIAotICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUodmlkZW9FbGVtZW50KSwgZHJhd2luZ0NvbnRleHQoKSA/IGRy
YXdpbmdDb250ZXh0KCktPnJlbmRlcmluZ01vZGUoKSA6IEFjY2VsZXJhdGVkKTsKKyAgICBhdXRv
IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRy
YXdpbmdDb250ZXh0KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKQEAgLTIwNzUsMjEgKzIwNzUsNiBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tz
RGlzcGxheQogICAgICAgICBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5yZW1vdmUodGhpcyk7CiB9
CiAKLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpkaXNwbGF5TGlzdEFzVGV4
dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3Jl
Y29yZGluZ0NvbnRleHQpCi0gICAgICAgIHJldHVybiB7IH07Ci0gICAgcmV0dXJuIG1fcmVjb3Jk
aW5nQ29udGV4dC0+ZGlzcGxheUxpc3QuYXNUZXh0KGZsYWdzKTsKLX0KLQotU3RyaW5nIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KERpc3BsYXlM
aXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKLXsKLSAgICBhdXRvKiBkaXNwbGF5TGlzdCA9
IGNvbnRleHREaXNwbGF5TGlzdE1hcCgpLmdldCh0aGlzKTsKLSAgICBpZiAoIWRpc3BsYXlMaXN0
KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBkaXNwbGF5TGlzdC0+YXNUZXh0KGZs
YWdzKTsKLX0KLQogY29uc3QgVmVjdG9yPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OlN0
YXRlLCAxPiYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6c3RhdGVTdGFjaygpCiB7CiAg
ICAgcmVhbGl6ZVNhdmVzKCk7CkBAIC0yMTU5LDEwICsyMTQ0LDEwIEBAIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFn
ZURhdGEoZmxvCiAKIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBz
dywgZmxvYXQgc2gpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZl
cjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKKyAgICByZXR1cm4g
Z2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIHN4LCBzeSwgc3csIHNoKTsK
IH0KIAotRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29y
ZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29u
c3QKK0V4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpnZXRJbWFnZURhdGEoQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBm
bG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAo
IWNhbnZhc0Jhc2UoKS5vcmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IGNvbnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFi
bGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBi
ZWVuIHRhaW50ZWQgYnkgY3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw3ICsyMTgxLDcg
QEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OmdldEltYWdlRGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1
dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRh
UmVjdCwgbnVsbHB0ciwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBieXRlQXJyYXkgPSBi
dWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIGltYWdlRGF0YVJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOwogICAgIGlmICghYnl0ZUFycmF5
KSB7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgY29uc29sZU1lc3NhZ2U7CiAgICAgICAgIGNvbnNv
bGVNZXNzYWdlLmFwcGVuZExpdGVyYWwoIlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNh
bnZhcy4gUmVxdWVzdGVkIHNpemUgd2FzICIpOwpAQCAtMjIxOCwxMCArMjIwMywxMCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRh
dGEsIGZsb2F0IGR4LCBmbG9hdAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQg
ZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0
KQogewotICAgIHB1dEltYWdlRGF0YShkYXRhLCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0sIGR4LCBkeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0
KTsKKyAgICBwdXRJbWFnZURhdGEoZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCwgZHgs
IGR5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpOwogfQogCi12b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRh
dGEsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0
IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lk
dGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVks
IGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQogewogICAgIEltYWdlQnVmZmVy
KiBidWZmZXIgPSBjYW52YXNCYXNlKCkuYnVmZmVyKCk7CiAgICAgaWYgKCFidWZmZXIpCkBAIC0y
MjQ1LDcgKzIyMzAsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIEludFNpemUgZGVz
dE9mZnNldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3RhdGljX2Nhc3Q8aW50PihkeSkpOwogICAg
IEludFJlY3QgZGVzdFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGNsaXBSZWN0KTsKICAgICBkZXN0
UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KElu
dFBvaW50KCksIGNvb3JkaW5hdGVTeXN0ZW0gPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtID8gYnVmZmVyLT5sb2dpY2FsU2l6ZSgpIDogYnVmZmVyLT5pbnRlcm5hbFNpemUo
KSkpOworICAgIAorICAgIGRlc3RSZWN0LmludGVyc2VjdChJbnRSZWN0KEludFBvaW50KCksIGNv
b3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCA/IGJ1ZmZlci0+bG9n
aWNhbFNpemUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKICAgICBpZiAoZGVzdFJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0KGRlc3RS
ZWN0KTsKQEAgLTIyNTMsNyArMjIzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
QmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAg
c291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRhdGEuaGVp
Z2h0KCkpKTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIGJ1ZmZl
ci0+cHV0Qnl0ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJj
ZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAg
YnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCAqZGF0YS5kYXRhKCksIEludFNpemUoZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSwg
c291cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCksIGNvb3JkaW5hdGVTeXN0ZW0pOwogCiAg
ICAgZGlkRHJhdyhkZXN0UmVjdCwgQ2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0
cmFuc2Zvcm0sIHNoYWRvdyBhbmQgY2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5
YzlmY2U1MmJlODg5MmJmNDk4YWU2NzIyMTg3ZjFiZWU5MWQuLjk2NDAwZDFhZjUwMGQ1OGUxZGQ5
YmQxMTE3NDgyMTQxYTcyYmI1YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTIyMiw5ICsyMjIs
NiBAQCBwdWJsaWM6CiAgICAgYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7IH0KICAgICB2b2lkIHNldFRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5KGJvb2wpOwogCi0gICAgU3RyaW5nIGRpc3BsYXlMaXN0QXNUZXh0KERp
c3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0gICAgU3RyaW5nIHJlcGxheURpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncykgY29uc3Q7Ci0KICAgICB1c2luZyBE
aXJlY3Rpb24gPSBDYW52YXNEaXJlY3Rpb247CiAKICAgICBjbGFzcyBGb250UHJveHkgOiBwdWJs
aWMgRm9udFNlbGVjdG9yQ2xpZW50IHsKQEAgLTM3MSw4ICszNjgsOCBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdl
KFQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRv
cik7CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKElt
YWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3
LCBmbG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1h
Z2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGly
dHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsK
KyAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKENvb3JkaW5h
dGVTeXN0ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsK
KyAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEmLCBDb29yZGluYXRlU3lzdGVtLCBmbG9h
dCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdp
ZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7CiAKICAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25z
dCBvdmVycmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggMTRlYTM3ZDhkN2VhZmIwMWI1
YzRjZTE5ZWJlNzZjNTE4Y2ZjZDRhOC4uYjUxYjRkYmYxM2VlNTA2ZWI5NDk4YzQzZWY0NWM5NDRk
ZDczZTBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9J
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQpOwogCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkg
fHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBBY2NlbGVyYXRlZDsKK3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1
ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKICNlbHNlCi1z
dGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsK
K3N0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwogI2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJpdG1hcFJl
bmRlcmluZ0NvbnRleHQ+IEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKENhbnZh
c0Jhc2UmIGNhbnZhcywgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MmJiBzZXR0
aW5ncykKQEAgLTY5LDcgKzY5LDcgQEAgSFRNTENhbnZhc0VsZW1lbnQqIEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dDo6Y2FudmFzKCkgY29uc3QKIAogYm9vbCBJbWFnZUJpdG1hcFJlbmRlcmlu
Z0NvbnRleHQ6OmlzQWNjZWxlcmF0ZWQoKSBjb25zdAogewotICAgIHJldHVybiBidWZmZXJSZW5k
ZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkOworICAgIHJldHVybiBidWZmZXJSZW5kZXJpbmdNb2Rl
ID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogfQogCiB2b2lkIEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dDo6c2V0T3V0cHV0Qml0bWFwKFJlZlB0cjxJbWFnZUJpdG1hcD4gaW1hZ2VC
aXRtYXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwCmluZGV4IDE3ZWFhNWQxNWI3MGNlMThhMGFmNTZkMWNiZjJi
MjI5NmI5MmI2NTIuLjE1ZmMzYTU1NWZmNjJmNWY0MmJkNjJlNWRkY2ZhNjZiZGE3YWJlZGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuY3BwCkBAIC0zOTM5LDcgKzM5MzksNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwg
R0NHTAogICAgICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1ZmZlci0+Y29weUltYWdlKEltYWdlQnVmZmVy
OjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1
ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKGltYWdl
KQogICAgICAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRP
TVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7
CiAgICAgICAgIHJldHVybiB7IH07CkBAIC00MDYxLDcgKzQwNjEsNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDR0xlbnVtIHRh
cmdldCwgR0NHTAogICAgICAgICBpZiAoIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIs
IFRleFN1YkltYWdlLCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbEZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRl
by5nZXQoKSwgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7
IH07CiAgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01T
b3VyY2U6OlZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwpA
QCAtNDUwMCw3ICs0NTAwLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAgICAg
ICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0R0w6OlVOU0lHTkVEX0JZVEUpIHsKICAgICAgICAg
ICAgIGF1dG8gdGV4dHVyZUludGVybmFsRm9ybWF0ID0gdGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3Jt
YXQodGFyZ2V0LCBsZXZlbCk7CiAgICAgICAgICAgICBpZiAoaXNSR0JGb3JtYXQodGV4dHVyZUlu
dGVybmFsRm9ybWF0KSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkgewotICAg
ICAgICAgICAgICAgIGlmIChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0
LmdldCgpLCB0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlm
IChidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgp
LCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZ
KSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGJpdG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSwg
dHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAg
fQpAQCAtNDUwOCw3ICs0NTA4LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0xpbnQKICAgICAgICAg
fQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1v
ZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRl
eEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpJbWFnZSwgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKICAgICAgICAgcmV0dXJuIHsgfTsK
QEAgLTQ1NzcsNyArNDU3Nyw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50CiAgICAgICAgICAg
ICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0
KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRl
cm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKICAgICAg
ICAgICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCpt
X2NvbnRleHQuZ2V0KCksIHRhcmdldCwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSh0YXJnZXQs
IHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBtX3VucGFja0ZsaXBZKSkgewogICAgICAgICAgICAgICAgICAgICB0ZXh0dXJlLT5zZXRM
ZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwg
Y2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07
CiAgICAgICAgICAgICAgICAgfQpAQCAtNDYyMiw3ICs0NjIyLDcgQEAgRXhjZXB0aW9uT3I8dm9p
ZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQs
IEdDR0xpbnQKICAgICAgICAgfQogCiAgICAgICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0g
ICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlby5nZXQo
KSwgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRl
bywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ2NDcsNyAr
NDY0Nyw3IEBAIFJlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0lt
YWdlSW50b0J1ZmZlcihJbWFnZSYgaW1hZ2UsIGludCB3CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Qo
RmxvYXRQb2ludCgpLCBpbWFnZS5zaXplKCkpOwogICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIHNpemUpOwogICAgIGJ1Zi0+Y29udGV4dCgpLmRyYXdJbWFnZShpbWFnZSwgZGVz
dFJlY3QsIHNyY1JlY3QpOwotICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6
ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKERvbnRDb3B5
QmFja2luZ1N0b3JlKTsKIH0KIAogI2lmIEVOQUJMRShWSURFTykKQEAgLTYzNDMsNyArNjM0Myw3
IEBAIEltYWdlQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZl
ckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJCiAgICAgfQogCiAgICAgLy8gRklYTUUgKDE0OTQy
Myk6IFNob3VsZCB0aGlzIEltYWdlQnVmZmVyIGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJh
dGVkPwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIXRlbXApCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIEFTU0VSVChtX2J1ZmZlcnMuc2l6ZSgpID4gMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKaW5kZXggMGNiZDBhM2NjZTAz
OTI5NWI0OTI1Y2UzMWEwNTRlMWY2OTEwZDkzMC4uNmVhNzkyMTRmOGE2ZTAwNWIwYmUyNDQ5YTJk
ZDY3Mjg4ZmMzYWMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01l
ZGlhQ29udHJvbEVsZW1lbnRzLmNwcApAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgUmVmUHRyPEltYWdl
PiBNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVhdGVUZXh0VHJhY2tS
ZXByZXNlbnRhdGkKICAgICBJbnRSZWN0IHBhaW50aW5nUmVjdCA9IEludFJlY3QoSW50UG9pbnQo
KSwgbGF5ZXItPnNpemUoKSk7CiAKICAgICAvLyBGSVhNRSAoMTQ5NDIyKTogVGhpcyBidWZmZXIg
c2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHBhaW50aW5n
UmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIGRldmljZVNjYWxlRmFjdG9yKSk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWlu
dGluZ1JlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2Fs
ZUZhY3RvcikpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuY3BwCmluZGV4IGY1ODZjY2IxNzhjNzZlNTc4YzIxMzA4NDZhMWZiZmE3
ZWZmZDdhZjUuLjYzN2U3N2M1ZmVkYWIzM2M1YmRiODBjNmZkMGUxMWFiN2Y0YTgyMTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0Nocm9tZS5jcHAKQEAgLTQ5NCw2ICs0OTQsMTMgQEAgdm9pZCBDaHJvbWU6OnNldEN1
cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sIGhpZGRlblVudGlsTW91c2VNb3ZlcykKICAg
ICBtX2NsaWVudC5zZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoaGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKTsKIH0KIAorUmVuZGVyaW5nQmFja2VuZCogQ2hyb21lOjpzaGFyZWRSZW5kZXJpbmdC
YWNrZW5kKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAg
bV9yZW5kZXJpbmdCYWNrZW5kID0gbV9jbGllbnQuY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpOwor
ICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKIFBsYXRmb3JtRGlzcGxh
eUlEIENocm9tZTo6ZGlzcGxheUlEKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kaXNwbGF5SUQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaAppbmRleCA2NjJiZTAwZmEwYWJhZThiN2JhN2Q2NjhkNDQ3MGVjNTEz
NjFhZjQ5Li40NjhjMTcwMDhhYWZhNDdmYWEyMzdjNzRmZjQ4ZjQwMjMwZGRiYWU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lLmgKQEAgLTgzLDYgKzgzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Q3Vyc29y
KGNvbnN0IEN1cnNvciYpIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxN
b3VzZU1vdmVzKGJvb2wpIG92ZXJyaWRlOwogCisgICAgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVk
UmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIAogICAgIHZvaWQgc2NoZWR1
bGVBbmltYXRpb24oKSBvdmVycmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3Bs
YXlJRCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURp
ZENoYW5nZVN1cHByZXNzZWQgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggNjI2
MTdmNzhmM2UyZjA0NzQ4YWE1OGFkYWViOGZhMzBiZDcxMmFkNC4uYzk5ZDM2YWZmYWE4NjVhOWU2
YTk1ZGM1MzViNDg3NDhjN2VlM2UxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9D
aHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBA
IC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAi
UmVnaXN0cmFibGVEb21haW4uaCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgog
I2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBN
ZW51LmgiCkBAIC0zMDMsNiArMzA0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3Jt
RGlzcGxheUlEKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1
YWwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMg
dGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFw
c2hvdHRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAK
aW5kZXggMGE0NGMyZmExYTA5NDk3Y2ZkZjU1ODg4MzJmZmRmZjEwMjMzMzBlMS4uZTI0ZDkyZTZm
M2U2MWQzOGE5YjI0NDg1ZjRkMTNkZTUwZTUzM2EyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVNuYXBzaG90dGluZy5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IHNuYXBzaG90RnJhbWVSZWN0V2l0aENsaXAoRnJhbWUmIGZyYW1lLCBjb25z
dCBJbnRSZQogICAgIGlmIChvcHRpb25zICYgU25hcHNob3RPcHRpb25zUGFpbnRXaXRoSW50ZWdy
YWxTY2FsZUZhY3RvcikKICAgICAgICAgc2NhbGVGYWN0b3IgPSBjZWlsZihzY2FsZUZhY3Rvcik7
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgVW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBzY2Fs
ZUZhY3Rvcik7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IGJ1ZmZlci0+Y29udGV4dCgpLnRyYW5zbGF0ZSgtaW1hZ2VSZWN0LngoKSwgLWltYWdlUmVjdC55
KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0YzM1
MzMwOTE2MTlkYzY0M2Y4NzI5MDljYjcxZjc4MjhlZjg1YmJjLi4yMTA3YTllMWU5OWNmMzUxZDll
NjE2NjgwNWM0YTU2MzNhZTQ3ZGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VDb25zb2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VDb25zb2xl
Q2xpZW50LmNwcApAQCAtMzc2LDcgKzM3Niw3IEBAIHZvaWQgUGFnZUNvbnNvbGVDbGllbnQ6OnNj
cmVlbnNob3QoSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjdCwgUmVmCiAg
ICAgICAgICAgICAgICAgYXV0byBzb3VyY2VTaXplID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNv
dXJjZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIEludFJlY3Qgc291cmNlUmVjdChJbnRQb2ludCgpLCBzb3VyY2VTaXplKTsKLSAgICAg
ICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLT5kYXRh
KCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc291cmNlU2l6ZSwg
c291cmNlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVy
LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAq
aW1hZ2VEYXRhLT5kYXRhKCksIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QpOwogICAgICAgICAgICAg
ICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWly
by5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmluZGV4IDlhM2E4
YmY5NDNhZDY1ODZkYTQzY2VkMGRhN2U2M2YwNTVhYjlhNWQuLjEyYTJkNzRmZmJlOGZjYzczZjA2
OGJiZmNiYTAwNTQwNzc1NzE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0NhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCkBA
IC0xMyw3ICsxMywxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5oCiApCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Ib3N0V2luZG93LmgKaW5kZXggMmNmZWNhZGMyNGQ5ODJhODYxNjM3NGI3NmEwZTRmYjBmZmY3
YTlkNC4uZjVmMjE3Y2NkODQwNjA4MDAyNTVjMjAzZDIyMTdjYWVjZTBjZTI1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE0ICsyMywxNCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBIb3N0V2luZG93X2gKLSNkZWZpbmUgSG9zdFdpbmRvd19oCisj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEN1cnNvcjsKK2NsYXNzIFJlbmRlcmluZ0JhY2tlbmQ7CiAKIGNsYXNzIEhvc3RX
aW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhvc3RXaW5kb3cpOyBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSA9IDA7CiAKKyAgICB2aXJ0
dWFsIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCA9IDA7
CisgICAgCiAgICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgPSAwOwogCiAgICAg
dmlydHVhbCBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCA9IDA7CkBAIC03NSw1
ICs3NywzIEBAIHB1YmxpYzoKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlm
IC8vIEhvc3RXaW5kb3dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291
cmNlc0NhaXJvLnR4dCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQK
aW5kZXggNDIxZGZiZDk1NzU0YzQ2Mjc1N2I3OGRiZmE0MTAyNTQzMmFmMGI3ZC4uNmZhNGZmZTE0
NjBlYTcxMzgyMWJjYTM2MjI2ZDI2YTk3ZTVkOTk4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0CkBAIC0zMCw3ICszMCwxMSBAQCBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFkaWVudENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0R0xDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENh
aXJvLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2Vu
ZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbnRSZWN0Q2Fpcm8uY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9OYXRpdmVJbWFnZUNhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGF0aENhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkMWNhZWY4
NTQxZGVlMDYyYmZlMDU0MTZjZGEyZjJhN2Y3OTI2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitlbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24gOiB1aW50OF90
IHsKKyAgICBQcmVtdWx0aXBsaWVkLAorICAgIFVucHJlbXVsdGlwbGllZAorfTsKKworV0VCQ09S
RV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGFhYjQ2ODY3NjhmMWEyODJkNTg4MWM5Mzk3OTQ2ZDViYTIw
MDY5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VC
dWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNr
ZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgOiBwdWJsaWMgUGh5c2ljYWxJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0IHsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFBoeXNpY2FsSW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+OworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRl
bXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOworICAgIH0KKworICAgIERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGRhdGFCYWNrZW5k
LCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIoV1RGTW92ZShkYXRhQmFja2VuZCkpCisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdD
b250ZXh0KHNpemUpCisgICAgeworICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29u
dGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRl
eHQqIGRyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUgeyByZXR1cm4gdGhpczsgfQorCisgICAgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJl
dHVybiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgRGlz
cGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdChCYXNlUGh5c2ljYWxJ
bWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCmluZGV4IGY1ODZkZDRiMmFmOTFmNDU2NTUzNWE3MDI5MzkyM2FmMmJhYWRiYTIuLjM1
YmQ1OGMzZDEyZmY4NGMwZTY2NDJmODE4MjcwOTljZTgzN2UyODEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0zNTAsNyAr
MzUwLDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SXNBY2NlbGVyYXRl
ZENvbnRleHQoYm9vbCk7CiAjZW5kaWYKICAgICBib29sIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkg
Y29uc3Q7Ci0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKCkgY29uc3QgeyByZXR1cm4g
aXNBY2NlbGVyYXRlZENvbnRleHQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsgfQor
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01v
ZGU6OlVuYWNjZWxlcmF0ZWQ7IH0KIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2F2ZSgpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdG9yZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmNwcAppbmRleCA0NThhZTcyZjJhZTAy
NTYyNDc2OGU4NzlkYmQ0OTY5NjRiNDkxYjE4Li4wMGJlMGZlYTA2MDU1Y2EzMWIyYzg4NzRkZDM3
NGVlYTFkNDI4NDY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmNwcApAQCAtMjgsNiArMjgsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKIAorI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlw
bGljYXRpb24uaCIKKwogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCmluZGV4
IGNlZWExZGE0MGViMzJmZjc4YTFlNzVlMTdiZmUwMDkyMDFiNzZmMTIuLjI2YTEyZGUzYmU0YWM2
Yjg4NDM2NGM1NTQzOTdmN2Y3MWM3OGFhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTI1LDYgKzI1LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKKyNpbmNsdWRlICJSZW5kZXJpbmdNb2RlLmgiCiAjaW5jbHVkZSAiV2luZFJ1bGUu
aCIKICNpbmNsdWRlIDx3dGYvRW51bVRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CkBAIC0xMjIsMTcgKzEyMyw2IEBAIGVudW0gVGV4dEFsaWduIHsKICAgICBSaWdodFRleHRBbGln
bgogfTsKIAotZW51bSBSZW5kZXJpbmdNb2RlIHsKLSAgICBVbmFjY2VsZXJhdGVkLAotICAgIFVu
YWNjZWxlcmF0ZWROb25QbGF0Zm9ybUJ1ZmZlciwgLy8gVXNlIHBsYWluIG1lbW9yeSBhbGxvY2F0
aW9uIHJhdGhlciB0aGFuIHBsYXRmb3JtIEFQSSB0byBhbGxvY2F0ZSBiYWNraW5nIHN0b3JlLgot
ICAgIEFjY2VsZXJhdGVkCi19OwotCi1lbnVtIGNsYXNzIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ewotICAgIFByZW11bHRpcGxpZWQsCi0gICAgVW5wcmVtdWx0aXBsaWVkCi19OwotCiBTdHJpbmcg
Y29tcG9zaXRlT3BlcmF0b3JOYW1lKFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9yLCBXZWJDb3Jl
OjpCbGVuZE1vZGUpOwogU3RyaW5nIGJsZW5kTW9kZU5hbWUoV2ViQ29yZTo6QmxlbmRNb2RlKTsK
IGJvb2wgcGFyc2VCbGVuZE1vZGUoY29uc3QgU3RyaW5nJiwgV2ViQ29yZTo6QmxlbmRNb2RlJik7
CkBAIC0xNDMsNyArMTMzLDYgQEAgV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIFdlYkNvcmU6OkNvbXBvc2l0ZU8KIFdFQkNPUkVfRVhQ
T1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXaW5kUnVs
ZSk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgTGluZUNhcCk7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgTGluZUpvaW4pOwotV0VCQ09SRV9FWFBPUlQgV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24pOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAppbmRleCBjMDEyNjM3MGNiODY1OTI3
YTMyYmYxMWY2MTQ4NmQ3MWFmN2I0NzU4Li40ZTJiZTcxYzc0MWM1NWY1NmMwYWQwNDZhNzk3ZTUw
YTA5NzE4OGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuY3BwCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBE
aXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2gg
SW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsMzggKzI4LDQ0IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKIAotI2luY2x1ZGUgIkNvbG9yVXRp
bGl0aWVzLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVj
dC5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owot
c3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1h
eENsYW1wZWRMZW5ndGg7CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01v
ZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpz
aGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7
Cit9CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7CitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQor
eworICAgIHJldHVybiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNS
R0IsIGNvbnRleHQpOworfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQog
ewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgaWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gYnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZm
ZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFn
ZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUs
IDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBm
YWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOwogfQog
Ci0jaWYgVVNFKERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQorc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3Vj
Y2VzcykpOwotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGJ1ZmZlcjsKKyAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5n
TW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCisKK3N0YXRp
YyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKK3N0YXRpYyBjb25zdCBmbG9h
dCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwog
CiBib29sIEltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNp
emUpCiB7CkBAIC0xMDUsOTcgKzExMSwxMiBAQCBGbG9hdFJlY3QgSW1hZ2VCdWZmZXI6OmNsYW1w
ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4gRmxvYXRSZWN0KHJlY3Qu
bG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0KIAotI2lmICFVU0UoQ0cp
ICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEo
KSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBmb3Igb3RoZXIgYmFja2Vu
ZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShVU0UoQ0cpIHx8IFVTRShE
SVJFQ1QyRCkpCi0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6
ZShGbG9hdFNpemUgc2l6ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gc2l6ZTsKLX0KLQotdm9pZCBJ
bWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2Us
IENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBk
c3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5IHNSR0IgPC0+IGxp
bmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAoKHNyY0NvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFj
ZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OkxpbmVhclJHQikgewot
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGxpbmVhclJnYkxV
VCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAg
ICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9
IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJh
eVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAg
cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0gICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsKLSAgICAgICAg
ICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9y
ID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRvU1JHQkNvbG9y
Q29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1D
b2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQot
Ci1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2so
KQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBpbnRlcm5hbFNpemUo
KSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGx1
bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhlbEFycmF5LT5sZW5n
dGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4ZWxPZmZzZXQgPCBw
aXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAgIHVpbnQ4X3QgYSA9
IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAgICAgaWYgKCFhKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQaXhlbEFycmF5LT5p
dGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNyY1BpeGVsQXJyYXkt
Pml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRvdWJsZSBsdW1hID0g
KHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1
LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsK
LSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1pbmFuY2VS
ZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRo
IHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgotICAgIGdlbmVyaWND
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJPKQotUGxhdGZvcm1M
YXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiAw
OwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJv
b2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNv
bnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCisgICAg
Ly8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICByZXR1cm4gZXhwYW5k
ZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQotI2VuZGlmCiAKIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNCw2MyArMTI1LDI3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxv
YXRSZWN0JiByZWN0CiAKICAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29t
cGF0aWJsZUJ1ZmZlclNpemUocmVjdC5zaXplKCksIGNvbnRleHQpOwogCi0gICAgYXV0byBidWZm
ZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBj
b2xvclNwYWNlLCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBidWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1y
ZWN0LmxvY2F0aW9uKCkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBh
dGlibGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNl
LCBjb250ZXh0KTsKLSAgICBpZiAoIWJ1ZmZlcikKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFj
ZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUg
Z3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXpl
IC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAg
IHJldHVybiBjcmVhdGUoc2l6ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNp
emUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Up
OwotI2VuZGlmCi19Ci0KLUludFNpemUgSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXpl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQot
ewotICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNm
b3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24g
dGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXpl
ICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKKyAgICBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLmRy
YXdJbWFnZUJ1ZmZlcigqdGhpcywgLXJlY3QubG9jYXRpb24oKSk7CisgICAgcmV0dXJuIGltYWdl
QnVmZmVyOwogfQogCi1ib29sIEltYWdlQnVmZmVyOjppc0NvbXBhdGlibGVXaXRoQ29udGV4dChj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyKQogewotICAgIHJldHVybiBhcmVFc3NlbnRpYWxseUVxdWFsKGNvbnRleHQu
c2NhbGVGYWN0b3IoKSwgdGhpcy0+Y29udGV4dCgpLnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVy
biBpbWFnZUJ1ZmZlci0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwogfQogCi0jaWYgIVVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNv
c3QoKSBjb25zdAorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tl
ZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1
bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNh
ZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9p
bnRlciBjaGFzaW5nLgotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGlu
dGVybmFsU2l6ZSgpLmhlaWdodCgpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0ludG9J
bWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVy
bmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit2b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4g
MDsKKyAgICBpbWFnZUJ1ZmZlci0+ZHJhd0NvbnN1bWluZyhjb250ZXh0LCBkZXN0UmVjdCwgc3Jj
UmVjdCwgb3B0aW9ucyk7CiB9Ci0jZW5kaWYKIAotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXgg
M2JkZWU0ZWUwMGVkMTdhZTM0M2IyZjZhOGRkZDAwOTM4OWMyZTZiZi4uYzYwYjc1ZDRmYmZiYTVk
MmJkNDUwYjEzYTc1MzEzMGZjNmJjY2FmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENv
cHlyaWdodCAoQykgMjAwNy0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0yNywxNzAgKzI3LDgxIEBA
CiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVk
ZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc1R5cGVzR0wuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKKyNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRl
ICJJbWFnZVBhaW50aW5nT3B0aW9ucy5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJl
Y3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFz
cyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsK
LSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24n
dCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVu
dCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJl
c29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3BhY2UgRGlzcGxheUxpc3Qg
eworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQp
OwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xh
c3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVy
IG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6
OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6
U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3Jl
YXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkg
cmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotICAgIC8vIENyZWF0ZSBhbiBpbWFn
ZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29s
dXRpb24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250
ZXh0LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21w
YXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKLSAgICBib29sIGlzQ29tcGF0aWJsZVdpdGhDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgfkltYWdlQnVmZmVyKCk7Ci0KLSAgICAv
LyBUaGUgYWN0dWFsIHJlc29sdXRpb24gb2YgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBjb25z
dCBJbnRTaXplJiBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0K
LQotICAgIEZsb2F0U2l6ZSBzaXplRm9yRGVzdGluYXRpb25TaXplKEZsb2F0U2l6ZSkgY29uc3Q7
Ci0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRp
b25TY2FsZTsgfQorICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5n
IHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBj
bGlwcGVyLgorICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6
ZSYpOworICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYs
IEZsb2F0U2l6ZSYgc2NhbGUpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29u
c3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBG
bG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1w
ZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0KCkgY29uc3Q7CisgICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1
ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5
ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0
aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4g
c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKTsKLSAgICAvLyBHaXZlIGhpbnRzIG9uIHRo
ZSBmYXN0ZXIgY29weUltYWdlIE1vZGUsIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZSBpZiBp
dCBzdXBwb3J0cyB0aGUgRG9udENvcHlCYWNraW5nU3RvcmUgYmVoYXZpb3IKLSAgICAvLyBvciBy
ZXR1cm4gQ29weUJhY2tpbmdTdG9yZSBpZiBpdCBkb2Vzbid0LiAgCi0gICAgc3RhdGljIEJhY2tp
bmdTdG9yZUNvcHkgZmFzdENvcHlJbWFnZU1vZGUoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIGVudW0gQ29vcmRpbmF0ZVN5c3Rl
bSB7IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVt
IH07CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRT
aXplKiBwaXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBM
b2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBw
aXhlbEFycmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSkgY29uc3Q7CisgICAgdmlydHVhbCBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1
YWwgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJh
eShjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVy
Rm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0pOworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFu
c2Zvcm0oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBpbnRlcm5hbFNpemUoKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CiAgICAgCi0gICAg
dm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5
Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1l
bW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0OwotICAgIFZlY3Rvcjx1
aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Q7CisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBjb25zdCA9IDA7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZlSW1hZ2VQ
dHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xvclNwYWNlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5lVHJhbnNm
b3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQot
ICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENv
bG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9y
U3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7IH0KLSNl
bmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIHNpemVfdCBt
ZW1vcnlDb3N0KCkgY29uc3Q7Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0
OworICAgIHN0YXRpYyBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQg
ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qg
PSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0g
eyB9KTsKIAotICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1l
dGhvZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCi0gICAgLy8gd2l0
aCB0ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRF
IHR5cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wp
OworICAgIHZpcnR1YWwgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwg
Q29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgPSAwOwogCi0gICAgLy8gVGhlc2UgZnVuY3Rpb25z
IGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0ZWQg
Zm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCi0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRz
Q2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRzQ2xh
bXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZs
b2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKLSAgICBzdGF0aWMgRmxvYXRT
aXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAg
IHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdmly
dHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+
IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkg
PSBXVEY6Om51bGxvcHQpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3QgPSAwOwogCi1wcml2YXRlOgotI2lmIFVTRShDRykKLSAgICAvLyBU
aGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2VyIHRoYW4gdGhlIGludGVybmFsU2l6ZSgp
LiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8vIGltYWdlLCBjcm9wIHRoZSByZXN1bHQu
Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0gICAgc3RhdGljIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4p
OwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0g
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+
IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0gICAg
dm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRpZgotICAgIAotICAgIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
aGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgPSB7IH0pOworICAgIHZpcnR1YWwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
LCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBkYXRh
U2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9
IEludFBvaW50KCksIENvb3JkaW5hdGVTeXN0ZW0gPSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2Fs
KSA9IDA7CiAKLSAgICBzdGF0aWMgdm9pZCBkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4sIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpLCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxh
dGZvcm1UZXh0dXJlKEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwg
Ym9vbCkgY29uc3QgPSAwOworICAgIAorcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyKCkgPSBk
ZWZhdWx0OwogCi0gICAgaW5saW5lIHZvaWQgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2so
KTsKLQotICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAgZnJpZW5kIGNsYXNz
IEdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFn
ZTsKLSAgICBmcmllbmQgY2xhc3MgTmFtZWRJbWFnZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVu
ZCBjbGFzcyBHcmFkaWVudEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBDdXN0b21QYWludEltYWdl
OwotCi1wcml2YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBt
X3NpemU7Ci0gICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlv
blNjYWxlOwotCi0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNz
IGludG8gdGhlIGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25v
d3Mgd2hlbiBpdCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0j
aWYgVVNFKENHKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2lu
ZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVu
ZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJv
b2wmIHN1Y2Nlc3MpOwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50
b05hdGl2ZUltYWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgPSAwOwogfTsKIAotI2lmIFVTRShDRykKLVN0cmluZyBkYXRhVVJMKGNv
bnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSk7Ci1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotI2VuZGlmCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGMwNWNhZmQy
ODg3N2ZkNWQwNzZjNzc4ZWI0MGY2Y2ZjNzk4ZmRkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgor
CisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3Qg
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fbG9naWNh
bFNpemUobG9naWNhbFNpemUpCisgICAgLCBtX2ludGVybmFsU2l6ZShpbnRlcm5hbFNpemUpCisg
ICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCisgICAgLCBtX2NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkKK3sKK30KKworSW50U2l6ZSBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNhbGN1
bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSkKK3sKKyAgICBGbG9hdFNpemUgc2NhbGVkU2l6ZSA9IHsgY2VpbGYocmVzb2x1dGlvblNj
YWxlICogc2l6ZS53aWR0aCgpKSwgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQo
KSkgfTsKKyAgICBpZiAoc2NhbGVkU2l6ZS5pc0VtcHR5KCkgfHwgIXNjYWxlZFNpemUuaXNFeHBy
ZXNzaWJsZUFzSW50U2l6ZSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBp
bnRlcm5hbFNpemUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisgICAgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PihpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAgaWYgKGJ5dGVzUGVyUm93
Lmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4oaW50ZXJuYWxTaXplLmhlaWdodCgpKSAqIGJ5dGVzUGVyUm93OworICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgCisgICAg
cmV0dXJuIGludGVybmFsU2l6ZTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJCYWNr
ZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKK3sKKyAgICByZXR1cm4gY29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2
ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWlu
ZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQoreworICAgIGRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRp
b25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1h
c2soKQoreworICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludDo6emVybygpLCBtX2lu
dGVybmFsU2l6ZSk7CisgICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgbHVtaW5hbmNlUmVjdCwgQ29vcmRp
bmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAgaWYgKCFzcmNQaXhlbEFycmF5KQorICAgICAgICBy
ZXR1cm47CisKKyAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+
bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0
IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgeworICAgICAgICB1aW50OF90
IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7CisgICAgICAgIGlmICgh
YSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKKyAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDEpOworICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFy
cmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7CisgICAgICAgIAorICAgICAgICBkb3VibGUgbHVt
YSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAv
IDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVt
YSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXksIGx1bWluYW5jZVJlY3Quc2l6ZSgpLCBsdW1p
bmFuY2VSZWN0LCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKK30KKwor
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRh
KSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUu
YXJlYSgpLnVuc2FmZUdldCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dp
Y2FsU2l6ZS53aWR0aCgpICogNDsKKyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1Bl
clJvdygpOworCisgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhf
dCo+KGRhdGEpOworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgQ29sb3JGb3JtYXQ6OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEo
KSwgbV9sb2dpY2FsU2l6ZSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJy
YXkoY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJl
Y3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PiBhcmVhID0gNDsKKyAgICBhcmVhICo9IHNyY1JlY3Qud2lkdGgoKTsKKyAgICBhcmVhICo9
IHNyY1JlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYXJyYXkgPSBVaW50OENsYW1wZWRBcnJheTo6
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKKyAgICBpZiAoIWFycmF5
IHx8ICFhcnJheS0+ZGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEludFJl
Y3QgYnVmZmVyUmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUgfTsKKyAg
ICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihidWZmZXJSZWN0LCBzcmNSZWN0KTsKKyAg
ICBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6ZSgpIH07
CisKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKC1zcmNS
ZWN0LngoKSk7CisKKyAgICBpZiAoc3JjUmVjdC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5z
ZXRZKC1zcmNSZWN0LnkoKSk7CisKKyAgICBpZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3Qu
c2l6ZSgpKQorICAgICAgICBhcnJheS0+emVyb0ZpbGwoKTsKKyAgICAKKyAgICByZXR1cm4gYXJy
YXk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFS
ZWN0cyhjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYg
ZGVzdFJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVjdCBkYXRhUmVjdCA9IHsgSW50UG9pbnQ6Onpl
cm8oKSwgc3JjU2l6ZSB9OworICAgIHNyY1JlY3RDbGlwcGVkID0gaW50ZXJzZWN0aW9uKGRhdGFS
ZWN0LCBzcmNSZWN0KTsKKyAgICAKKyAgICBkZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAg
IGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnQpOworICAgIAorICAgIGlmIChzcmNSZWN0LngoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgpIC0gc3JjUmVjdC54KCkpOwor
CisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVj
dC55KCkgLSBzcmNSZWN0LnkoKSk7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBv
aW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KGJ1
ZmZlclJlY3QpOworCisgICAgc3JjUmVjdENsaXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxp
ZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBD
b2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICBp
ZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50MzJfdCo+KHNyY1BpeGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0g
PSBzcmNQaXhlbFsyXTsKKyAgICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0
UGl4ZWxbMl0gPSBzcmNQaXhlbFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxp
ZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBD
b2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1
aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAy
NTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JG
b3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0
KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsK
KyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAg
ICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAg
IGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0g
PSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzFdID0gKHNyY1Bp
eGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFswXSAq
IDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQg
c3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0g
c3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAg
Y29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVs
LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAg
ICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAg
ICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAg
ICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1Owor
ICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBp
eGVsWzBdID0gKHNyY1BpeGVsWzJdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhl
bFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxb
Ml0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNd
ID0gYWxwaGE7Cit9CisKK3RlbXBsYXRlPHZvaWQgKCpjb3B5RnVuY3RvcikoQ29sb3JGb3JtYXQs
IGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwgdWludDhfdCopPgorc3RhdGljIGlubGluZSB2
b2lkIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQoCisgICAgQ29sb3JGb3JtYXQgc3JjQ29s
b3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAg
IENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1
aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnl0
ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6
ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQ
ZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNvcHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0LCAm
c3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAmZGVzdFJvd3NbeF0pOworICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJS
b3c7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxz
KAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93
cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3Jt
YXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRl
c3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNBbHBoYUZv
cm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAgICAgICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0
ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgICAgICBj
b3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBs
aWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2Nl
bGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1h
dCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVy
Um93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
Y29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0
aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xv
ckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7Cit9CisKK1JlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENv
b3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3QKK3sKKyAg
ICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIGlmIChjb29yZGluYXRlU3lz
dGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgJiYgbV9yZXNvbHV0aW9uU2NhbGUgIT0g
MSkKKyAgICAgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAg
ICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgYXV0
byBhcnJheSA9IGNyZWF0ZUdldEltYWdlRGF0YUFycmF5KHNyY1JlY3RTY2FsZWQsIHNyY1JlY3RD
bGlwcGVkLCBkZXN0UmVjdCk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0
ICogc3JjUmVjdFNjYWxlZC53aWR0aCgpOworICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gYXJyYXkt
PmRhdGEoKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAq
IDQ7CisgICAgCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOwor
ICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSAr
IHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgp
ICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLAorICAgICAgICBvdXRwdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0
Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBkZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGFy
cmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJh
eSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCB2
b2lkKiBkYXRhKQoreworICAgIEludFNpemUgc3JjU2l6ZVNjYWxlZCA9IHNyY1NpemU7CisgICAg
SW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3Rl
bSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEp
IHsKKyAgICAgICAgc3JjU2l6ZVNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAg
ICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgIH0KKworICAg
IEludFJlY3Qgc3JjUmVjdENsaXBwZWQ7CisgICAgSW50UmVjdCBkZXN0UmVjdDsKKyAgICBjYWxj
dWxhdGVQdXRJbWFnZURhdGFSZWN0cyhzcmNTaXplU2NhbGVkLCBzcmNSZWN0U2NhbGVkLCBkZXN0
UG9pbnQsIHNyY1JlY3RDbGlwcGVkLCBkZXN0UmVjdCk7CisgICAgCisgICAgdW5zaWduZWQgZGVz
dEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93
ID0gNCAqIHNyY1NpemVTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gYXJy
YXkuZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cgKyBzcmNSZWN0
Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAgICBpbnB1dEZv
cm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5kQ29sb3JGb3Jt
YXQoKSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzIxZjI4ODA2Mzli
ZWYxODQ0MGU2NDRkOTE1MmRlY2U1ZGY4NGI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwx
MjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisjaW5jbHVk
ZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNv
cHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdz
IGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJz
ZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNl
cnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0g
Y2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisK
K2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisg
ICAgQmFja2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGlj
OgorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVm
YXVsdDsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJ
bnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJu
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNv
bHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAg
ICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9
CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRy
PEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFBy
ZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0p
ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9S
VCBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Up
OworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJh
eShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVj
dCYgZGVzdFJlY3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMo
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RS
ZWN0KSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7
IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgQ29sb3JG
b3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OlJH
QkE7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKHZv
aWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJ
bWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1
aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBo
YUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Q29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0sIHZvaWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIEludFNp
emUgbV9pbnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29s
b3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZiZDEyYWJlNTQzYzNmMjAz
NGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0
YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWly
by5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2OTRkMzgxYWNiYzkyNjBk
YmI0N2U5ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDIxNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVmZmVy
IDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEltYWdl
QnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2VuZCA9
IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBo
b3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihu
ZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNhbElt
YWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAg
ICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQaHlz
aWNhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSog
ZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7
CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5k
KCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBs
b2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVu
c3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUg
aW50ZXJuYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8g
ZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZsb2F0
IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQo
KSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBzaXpl
X3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/
IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5h
bE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBl
bnN1cmVCYWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0aXZl
SW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0g
Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBo
eXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAg
ICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFn
ZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNh
bEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAg
IHJldHVybiBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAg
IGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQ
dHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1h
Z2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRv
SW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAg
ICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3
Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQt
PmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2Ug
ZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNl
LCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFs
aXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1p
bWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3Rf
Y2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAg
ICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNv
b3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0
YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBi
YWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVz
dGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJh
Y2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWRhMmI4MzFmMzNjZDU3MjJiZDcyOTc3MzRjNzlmMWEwMTM0MGNl
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIK
KworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgor
I2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3Vz
aW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQ7CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgUGxh
dGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJC
YWNrZW5kOworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbElt
YWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPFBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjgwMDZkOTc5NTE0NTYxNzAwOWIz
NDk2ZTEyYjA2NTNkYWViYTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgi
CisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5n
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7CisjZWxp
ZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRhMGFmYTc5ZDc0
NjFjZDlmMmYxMDkxMzUwYzgxNWRiYmJkN2JjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1
ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5k
PihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVy
aW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsK
KworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoK
KyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAg
ICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxp
c3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVk
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVu
ZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MWI5MmQ1ODRmZWU4ZjRhZjdhODU5
NjRlYWFiYzFjZWQ1MDE3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUg
IlJlbmRlcmluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2lu
ZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JF
X0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmlu
Z0JhY2tlbmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxs
cHRyKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0Owor
ICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhm
ZDY0M2RhNzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01v
ZGUgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxp
c3RBY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwK
KyAgICBSZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEw
NzY3OGM1NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0
NDk0ZWMzMzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFy
U2NyYXRjaEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0
aCBhY2NlbGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1f
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7
CiAgICAgfQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRT
aGFkb3coY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAog
dm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBM
YXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZm
ZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNp
emUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJh
d1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVy
SW1hZ2VQcm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7
Ci0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNp
emUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7Cisg
ICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUo
bGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3
ICs2ODUsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2Ug
PSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6
ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAg
YXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUs
IFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgog
CkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRo
VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cp
CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNj
cmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEp
OworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxh
dGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllcklt
YWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwx
MiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVy
SW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRS
ZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRh
dGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAg
YXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCks
IGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2Uu
cHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdl
LnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICps
YXllckRhdGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0Js
dXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29u
c3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBh
dXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXll
ckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcAppbmRleCA2MmM3OWYxM2ExYzcyNGRkZjM3YTk0NjRmODMyY2Q2Zjc3OWUwN2Q4Li44MGEw
MjVlOGU2Y2E4OGE2YjQ3ZmM3ZmRjNWU1YzVlMjUwZjlmZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5j
cHAKQEAgLTE3NCw3ICsxNzQsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMg
dm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVy
T3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNo
YWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUlt
YWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0
Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5
ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUp
LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmds
b2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODIsNyArMTgyLDcgQEAg
c3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFz
IGRyYXdTaGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2
b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7
Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAg
IGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwg
c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29t
cG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkp
OwogICAgIH0KIH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVm
ZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgog
ewogICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBs
YXllckltYWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1h
Z2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRv
SW1hZ2VCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5
ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNl
IGZpbGxTb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3
NjczNTJlMTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3
OGMyMjAyZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4
LDcgKzI2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5h
dGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDljNzZlMjkxMmY4MWZjOTRh
ZGI1YzQ4NDQ1MjcxMzQ2MGRjZmIyOGYuLjI5YTBlYzQ5OTRmMzYxNWQ4N2IxYmI0ZTFlMzNkNzY4
ODA3Y2JhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDEx
LDcgKzQxMSw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRz
KCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAg
ICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdl
dCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDA3OTY1N2UzYjI5OWVkNmViNGM1Y2MzNWRiOTUzMjQ1Nzg3Nzc1Yjku
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw3ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVT
RShDQUlSTykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVk
QXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUg
IkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVH
TCkKLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5j
bHVkZSA8RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgot
Ci0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BF
TkdMX0VTKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xT
aGltcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9y
bUNvbnRleHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJl
bmRlcmluZ01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5k
aWYKLSAgICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRl
cmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJ
QSkKLSAgICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0
ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgq
dGhpcykpOwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5k
aWYKLX0KLQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAo
bV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQo
KTsKLSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENv
bnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JD
b21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0
b3JUZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAg
cHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigp
Ci17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAg
Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAg
IG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9m
b3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FM
UEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSk7Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3Np
dG9yU3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9y
Q3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkK
LVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6
OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJl
ZigpOwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVl
ZGVkKCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAg
IGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9u
ID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBw
cm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihw
cm94eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VV
bmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1
cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAg
ICAgICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93
bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxh
eWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1f
cGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJl
IGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdp
dGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJh
bWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFt
ZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRv
ciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdl
dCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2Nv
bXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWlu
dChtX2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0
KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
fQotI2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkK
LXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewot
ICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVz
LCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8v
IGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3Rl
eHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotCi0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+
Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZv
cm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0
X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVO
VF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgp
LCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gY29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZh
Y2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UK
LSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19D
T05URU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVy
biBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURh
dGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxz
LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAg
cmV0dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2
ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0K
LQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUo
c2l6ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBt
X3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNl
OyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdp
ZHRoID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0
IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVz
b2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5p
c0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9
IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9
IG1fc2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5k
ZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dM
U3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
Ci0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8g
SWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgot
ICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQot
I2Vsc2UKLSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7
Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19z
dXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlk
ZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAg
ICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1f
c2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
c3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRh
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwg
W10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNh
aXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRV
U19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlk
bid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2
aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJv
X2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1D
b250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9y
eShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQot
SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250
ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2
aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3Rv
cmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3Vy
ZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxs
IHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJu
IEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3Vy
ZmFjZSkpOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJ
bWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkp
Ci0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsK
LQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1
YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRp
b25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2Uo
KmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2Vi
Q29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQot
ICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1
cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUp
Ci17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2Nl
bGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNp
Z25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3Ry
aWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgr
KykgewotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAg
IENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwot
ICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVk
KCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29s
b3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVs
Q29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZy
b21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNl
X21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9n
aWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlw
ZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAg
IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhl
IHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5
IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7
Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGll
ZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEm
IGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlm
IHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVj
dC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBh
ZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChy
ZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBl
bmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwg
ZW5keSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8
fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAg
ICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAg
ICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsK
LSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkg
PSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewot
ICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0K
LSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdo
dCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5n
IHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1D
b2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUg
Zm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJl
Y3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFn
ZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fp
cm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2Nh
bGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAg
b3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1f
c3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9u
IGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9n
aWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNh
bFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNl
LmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRS
ZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSwgQ0FJUk9fT1BF
UkFUT1JfU09VUkNFKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2ln
bmVkIGNoYXIqIGRhdGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVk
IGNoYXIqIGRlc3RSb3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVz
dHggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAg
IHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMg
KyBzdHJpZGUgKiAoeSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBu
dW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAg
ICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAg
IC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVj
YXVzZSBvbmUKLSAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBl
eHBlbnNpdmUuCi0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAw
MDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYw
MDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAw
MEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAw
MDAwRkYpOwotCi0gICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEg
JiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
ICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1
ZSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFs
dWUgPT0gSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25T
Y2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1
ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tp
bmdTdG9yZVVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0g
ICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3Rv
cmVDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJl
dHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJl
c29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lz
dGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9
IGxvZ2ljYWxVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICBJbnRSZWN0IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNv
b3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURp
bWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJl
Y3Quc2l6ZSgpOwotICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRh
LCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9n
aWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5p
dChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBp
eGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNr
aW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0
LCBtX2RhdGEsIG1fc2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQot
Ci12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkm
IHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNp
emUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJ
bnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNv
b3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNv
dXJjZVNpemUgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNr
aW5nU3RvcmVVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2Nh
bGUpOwotICAgIEludFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VS
ZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQg
bG9naWNhbERlc3RQb2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lk
dGgoKSA+IDApOwotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0K
LSAgICBpbnQgb3JpZ2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9
IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9n
aWNhbERlc3R4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7
Ci0gICAgQVNTRVJUKGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0
aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBz
Y2FsZWRTb3VyY2VSZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2lu
dC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBs
b2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NF
UlQoZW5keCA8PSBtX3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHgg
LSBkZXN0eDsKLSAgICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2lj
YWxEZXN0eDsKLQotICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAg
aW50IGRlc3R5ID0gc2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwot
ICAgIGludCBsb2dpY2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3Vy
Y2VSZWN0LnkoKTsKLSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwg
bV9zaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQo
b3JpZ2lueSA8PSBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNj
YWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9n
aWNhbEVuZHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFko
KTsKLSAgICBBU1NFUlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dz
ID0gZW5keSAtIGRlc3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0g
bG9naWNhbERlc3R5OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBp
cyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0
IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdl
QnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywg
bnVtUm93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29w
eVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFn
ZVJlY3QpOwotICAgIGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQo
KSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGlt
YWdlUmVjdC54KCk7Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCog
cGl4ZWxEYXRhID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0
KCkpOwotCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6
ZS53aWR0aCgpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJp
ZGUoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBz
b3VyY2UuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0g
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQq
IHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRl
ICogKHkgKyBkZXN0eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7
IHgrKykgewotICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNp
Z25lZCogcGl4ZWwgPSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNh
bGxpbmcgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAg
ICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0g
ICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGdyZWVuID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQg
Ymx1ZSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0g
c3JjUm93c1tiYXNleCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAg
IGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8
IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGlu
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9y
ZWN0YW5nbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwg
bG9naWNhbE51bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZh
Y2UgIT0gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1
cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAg
ICAgIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBt
X2RhdGEubV9zdXJmYWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51
bUNvbHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSAr
IGxvZ2ljYWxTb3VyY2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291
cmNlUmVjdC55KCkpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIH0KLX0KLQotI2lmICFQ
TEFURk9STShHVEspCi1zdGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBv
dXRwdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17
Ci0gICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRy
eUFwcGVuZChkYXRhLCBsZW5ndGgpKQotICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRF
X0VSUk9SOwotICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKLX0KLQotc3RhdGljIGJv
b2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCi17Ci0gICAgQVNTRVJUX1VOVVNFRChtaW1l
VHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3Vw
cG9ydGVkIGZvciBub3cuCi0KLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdf
c3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUND
RVNTOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBl
LCBxdWFsaXR5KTsKLSAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuICJkYXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0
RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERh
dGEpOwotCi0gICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNl
NjREYXRhOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KSBjb25zdAotewotICAgIEFTU0VSVChN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1l
VHlwZSkpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90
PiBlbmNvZGVkSW1hZ2U7Ci0gICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1p
bWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIHJldHVy
biBlbmNvZGVkSW1hZ2U7Ci19Ci0KLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykgJiYgIVVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJE
YXRhOjpwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBt
YXRyaXgsIGZsb2F0IG9wYWNpdHkpCi17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAv
LyBDYWlybyBtYXkgY2hhbmdlIHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRv
IGNoYW5nZSBpdCBiYWNrIGFmdGVyIGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNB
Y3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9m
bHVzaChtX3N1cmZhY2UuZ2V0KCkpOwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0
dXJlTWFwcGVyKS5kcmF3VGV4dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxk
QmxlbmQsIG1fc2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgot
Ci1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBp
ZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkK
LSAgICAgICAgcmV0dXJuIG1fZGF0YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAg
aWYgKG1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVm
ZmVyRGF0YSo+KCZtX2RhdGEpOwotI2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQot
Ym9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdM
T3BlbkdMJiwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4
dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VS
VF9XSVRIX01FU1NBR0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJ
IENhbnZhcyBmZWF0dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlz
IGFsd2F5cyAxLiIpOwotICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEdDR0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRj
aCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVy
ZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdB
VElWRV9aOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwot
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3Jl
YXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29t
cG9zaXRpbmcoKSk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWlu
dDMyX3QgZmJvOwotICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZy
YW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBt
X2RhdGEubV90ZXh0dXJlLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0
LCBkZXN0aW5hdGlvblRleHR1cmUpOwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBp
bnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7
Ci0gICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJh
bWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0
ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7
Ci0gICAgVU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJl
bXVsdGlwbHlBbHBoYSk7Ci0gICAgVU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFs
c2U7Ci0jZW5kaWYKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNF
KENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2
MzNlMDQ3OTA5NjEzNmM5YWM2YzhkNWVhY2U1ZTVjNjg3YzMyYWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRp
b25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisj
aWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdp
bGwgcmVsZWFzZSB0aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1
cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9
CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2Uo
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY29w
eUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2
b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgSW50ZXJwb2xh
dGlvblF1YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRl
c3RDb250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOworICAgIGNvbnN0IGF1
dG8mIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlID0gZGVzdENvbnRleHQuc3RhdGUoKTsKKworICAg
IGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4
dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAg
ZHJhd05hdGl2ZUltYWdlKCpkZXN0Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0
KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMsIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRl
LmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuYWxw
aGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkp
OworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6
IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJuKCpkZXN0
Q29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgaW1hZ2UuZ2V0KCksIG1fbG9naWNhbFNpemUsIGRl
c3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JT
cGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRlc3RDb2xvclNwYWNlKQoreworICAgIGlm
IChzcmNDb2xvclNwYWNlID09IGRlc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBvbmx5IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQK
KyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0Nv
bG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikKKyAgICAgICAgfHwgKGRlc3RDb2xvclNwYWNl
ICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNl
OjpTUkdCKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRlc3RDb2xvclNwYWNlID09IENv
bG9yU3BhY2U6OkxpbmVhclJHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGxpbmVhclJnYkxVVCA9IFtdIHsKKyAgICAgICAgICAgIHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9y
KTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5k
KGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gYXJyYXk7
CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVh
clJnYkxVVCk7CisgICAgfSBlbHNlIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpT
UkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2
aWNlUmdiTFVUPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAg
Y29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7Cisg
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOworICAgIH0K
K30KKworU3RyaW5nIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0Cit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZSA9IHRvRGF0YSht
aW1lVHlwZSwgcXVhbGl0eSk7CisgICAgaWYgKGVuY29kZWRJbWFnZS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiAiZGF0YTosIjsKKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAg
IGJhc2U2NEVuY29kZShlbmNvZGVkSW1hZ2UuZGF0YSgpLCBlbmNvZGVkSW1hZ2Uuc2l6ZSgpLCBi
YXNlNjREYXRhKTsKKworICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwi
ICsgYmFzZTY0RGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UgPSBjYWlyb19nZXRfdGFyZ2V0KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3Io
KSk7CisgICAgcmV0dXJuIGRhdGEoaW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFiM2I0MDkyNDUwNWIxNDU4Yzc3MzcxOThl
YjViN2I3ODVhOTUyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fp
cm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVm
UHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUs
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJy
aWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24p
IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9y
U3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7
CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2lu
ZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90
LCAyNTY+JikgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMGQzNjdhNWVkNTM0NTFhODFlMWE1MjY0MWU0MTVlNDRlOTVhNDIx
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENB
SVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wu
aCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNp
ZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8
RUdML2VnbC5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYg
VVNFKExJQkVQT1hZKQorI2luY2x1ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VT
KQorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgorI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9J
TVBMKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2
b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRy
PGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWly
b19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWly
b19wYWludChjci5nZXQoKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFs
U2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAg
IGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKKworICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVz
LCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8v
IGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KKyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAg
Z2xHZW5UZXh0dXJlcygxLCAmdGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJF
XzJELCB0ZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVY
VFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdf
RklMVEVSLCBHTF9MSU5FQVIpOworCisgICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICov
LCBHTF9SR0JBLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCAw
IC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBjYWly
b19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8vIFRo
cmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJp
dmVycy4KKyAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNF
KTsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRl
X2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVyZSwg
aW50ZXJuYWxTaXplLndpZHRoKCksIGludGVybmFsU2l6ZS5oZWlnaHQoKSkpOworICAgIGlmIChj
YWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjbGVhclN1cmZhY2Uoc3VyZmFjZS5nZXQoKSk7
CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRl
eHR1cmUpKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMy
X3QgdGV4dHVyZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpCisgICAgLCBtX3RleHR1cmUodGV4dHVyZSkKK3sKKyNpZiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNv
c2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOworI2Vsc2UKKyAgICBtX3BsYXRmb3JtTGF5
ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5KTsK
KyNlbmRpZgorI2VuZGlmCit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjp+
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoKQoreworI2lmIFVTRShDT09SRElOQVRF
RF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCisgICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRh
dGVDbGllbnQoKTsKKyNlbmRpZgorCisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRl
eHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJy
ZW50KCk7CisKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOworCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQorICAgIGlmICht
X2NvbXBvc2l0b3JUZXh0dXJlKQorICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBv
c2l0b3JUZXh0dXJlKTsKKyNlbmRpZgorCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkK
KyAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30K
KworUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
I2lmIFVTRShOSUNPU0lBKQorICAgIHJldHVybiBtX25pY29zaWFMYXllci5nZXQoKTsKKyNlbHNl
CisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIHRoaXM7CisjZW5kaWYKKyAgICBy
ZXR1cm4gMDsKK30KKworYm9vbCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0
aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5
QWxwaGEsIGJvb2wgZmxpcFkpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRp
b25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3Zl
ZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7CisgICAgaWYgKHBy
ZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlm
ICghbV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEZW51bSBiaW5k
VGV4dHVyZVRhcmdldDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR0xfVEVYVFVS
RV8yRDoKKyAgICAgICAgYmluZFRleHR1cmVUYXJnZXQgPSBHTF9URVhUVVJFXzJEOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWToKKyAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgYmluZFRleHR1cmVUYXJn
ZXQgPSBHTF9URVhUVVJFX0NVQkVfTUFQOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaCht
X3N1cmZhY2UuZ2V0KCkpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdMQ29udGV4dD4gY29udGV4
dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgmUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7CisgICAgY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgdWludDMyX3QgZmJvOworICAgIGdsR2VuRnJhbWVidWZmZXJzKDEsICZm
Ym8pOworICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCBmYm8pOworICAgIGds
RnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdMX0NPTE9SX0FUVEFDSE1FTlQw
LCBHTF9URVhUVVJFXzJELCBtX3RleHR1cmUsIDApOworICAgIGdsQmluZFRleHR1cmUoYmluZFRl
eHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7CisgICAgZ2xDb3B5VGV4SW1hZ2UyRCh0
YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBt
X2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVy
ZVRhcmdldCwgMCk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOwor
ICAgIGdsRmx1c2goKTsKKyAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQor
eworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JD
b21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKworICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUp
OworICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7
CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBH
TF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElO
RUFSKTsKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9pbnRlcm5hbFNpemUud2lk
dGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZ
VEUsIDApOworCisgICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1
cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NP
TlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXplLndp
ZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgbV9jb21wb3NpdG9yQ3IgPSBh
ZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOworICAgIGNh
aXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19O
T05FKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1
ZmZlcnNJZk5lZWRlZCgpCit7CisgICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKworICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkg
eworICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisKKyAgICAgICAgYXV0byBwcm94
eU9wZXJhdGlvbiA9CisgICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJQcm94eSYgcHJveHkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgTG9ja0hvbGRl
ciBob2xkZXIocHJveHkubG9jaygpKTsKKyAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1
ZmZlcihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBv
c2l0b3JUZXh0dXJlLCBtX2ludGVybmFsU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVu
ZCwgR0xfUkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAgICAgICAg
cHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBl
ckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAgICAgICAg
cHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAgIH0KKwor
ICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVy
cyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKKyAg
ICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGlu
IHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50CisgICAgLy8g
aW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgIGNhaXJv
X3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNF
KTsKKyAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBpZiAocHJl
dmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBw
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJlKTsKKwor
ICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1
cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0KiBwcmV2
aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWlyb19zdXJm
YWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+
KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpT
aG91bGRCbGVuZCwgbV9pbnRlcm5hbFNpemUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7
Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENB
SVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTQ0NzQ0YWQ4YWQxZjk4
YTEzNzA3NDkzZDFiOWQyZTgwMmE2OTRmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBI
b2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmlj
b3NpYUNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBs
YXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBw
dWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vs
c2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQo
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93Kik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQoKTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRm
b3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwg
Ym9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7
CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNP
U0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsg
fQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlmCisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJ
Q1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4g
bV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKKyNlbmRpZgorICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1f
Y29tcG9zaXRvckNyOworICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmUgeyAwIH07Cisj
ZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUgeyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTJjZjU3NjA4ZDA5Nzc1ZDNmYjkxOGVjMDVjZGI3NDMx
NDVmOTQ3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisK
KyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJf
ZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5OworCisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUg
PSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAo
aW50ZXJuYWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBp
bnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FS
R0IzMiwgaW50ZXJuYWxTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAg
IGlmICghdHJ5RmFzdFplcm9lZE1hbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCkgKiBzdHJpZGUp
LmdldFZhbHVlKHN1cmZhY2VEYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvIHN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0
YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRf
QVJHQjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCBzdHJp
ZGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNf
c3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZh
c3RGcmVlKGRhdGEpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQo
bG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1f
c3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xv
clNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCit7Cisg
ICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
bV9zdXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xv
Z2ljYWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29sb3IgcGl4
ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAgICAgICAg
ICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0sIGxvb2tV
cFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgp
XSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJv
X3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAwLCBtX2xv
Z2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGRiNzli
YTlhM2U2ZDZkYjFjOTJjMzA2YTQ3NTIwNzE0ZGMzYTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdl
U3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIHsKKyAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCitw
cml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsK
KworICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8
dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDE1MjA5NDdkYjk4NTkzNTUw
MGY1ZGRlMDA2ZWNlODg2YmI0ZTFkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5j
cHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBa
aW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3BlcmF0aW9u
cy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisjaW5jbHVk
ZSA8Y2Fpcm8uaD4KKworI2lmIFVTRShDQUlSTykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5h
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VT
Uyk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9z
dXJmYWNlLmdldCgpKSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwor
ICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3Jh
cGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBj
b25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05h
dGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAo
Y29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1
dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1B
VF9BUkdCMzIsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFj
ZS5nZXQoKSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZh
Y2UuZ2V0KCkpKSk7CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShj
b3B5LmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9f
T1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdl
dCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQo
KSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJh
Y2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK05hdGl2ZUlt
YWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNl
VG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3I7Cisg
ICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX3N1cmZhY2Uu
Z2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEpCisgICAgICAgIGNvcHlCZWhhdmlv
ciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVsc2UKKyAgICAgICAgY29weUJlaGF2aW9y
ID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4gY29weU5hdGl2ZUltYWdlKGNvcHlCZWhh
dmlvcik7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFj
ZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkp
OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAgIHJldHVybiBpbWFnZURhdGE7CisKKyAg
ICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQo
KSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCitS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0
Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZv
cm1hdCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShtX3N1cmZhY2UuZ2V0KCkpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0
LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQ
b2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1
cmZhY2UuZ2V0KCkpKTsKKworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7Cisg
ICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgY2Fpcm9fc3Vy
ZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIGRlc3RQb2ludC54KCks
IGRlc3RQb2ludC55KCksIHNyY1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5oZWln
aHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlS
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZWQ0ZWM4OWEzODg2ZWU3ZjA1YjBkMzljOTI1OTAxZTM2ZjIwNGU1NgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gu
b3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28u
IEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBj
b25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5KSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JH
UkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRl
OworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYm
KTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgbXV0
YWJsZSBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250
ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0
YTJlMzlmNzY5YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm9faAotI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0K
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJv
LmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRm
b3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5UHJvdmlkZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykgJiYgVVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRl
eHR1cmVNYXBwZXJJbXBsLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJbnRTaXplOwotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xh
c3MgSW1hZ2VCdWZmZXJEYXRhCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbDo6Q2xpZW50Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNl
bmRpZgotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNp
emUmLCBSZW5kZXJpbmdNb2RlKTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQot
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRl
eHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGU7Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
ICAgIHZvaWQgY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBvdmVycmlkZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVl
ZGVkKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIo
KTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0g
ICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9j
b21wb3NpdG9yQ3I7Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29u
dGVudExheWVyPiBtX25pY29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxz
ZQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSk7Ci0jZW5kaWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2Vu
ZGlmIC8vIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWEyYmNlOWE5NzU5NzUwYjA2MTc0NjExMTgxZjYyYjM3
M2Q0ZmQ3MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFu
bkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJr
IFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBN
b2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGls
aXRpZXNDYWlyby5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNpZiBQTEFURk9STShHVEsp
CisjaW5jbHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgi
CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4K
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiAhUExBVEZPUk0oR1RLKQorCitz
dGF0aWMgY2Fpcm9fc3RhdHVzX3Qgd3JpdGVGdW5jdGlvbih2b2lkKiBvdXRwdXQsIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpZiAoIXJlaW50ZXJw
cmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0
aCkpCisgICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7CisgICAgcmV0dXJu
IENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWly
b19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhf
dD4qIG91dHB1dCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAi
aW1hZ2UvcG5nIik7IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KKwor
ICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRl
RnVuY3Rpb24sIG91dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cit9CisKK1ZlY3Rvcjx1
aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4pCit7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFn
ZTsKKyAgICBpZiAoIWltYWdlIHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNv
ZGVkSW1hZ2UpKQorICAgICAgICByZXR1cm4geyB9OworICAgIHJldHVybiBlbmNvZGVkSW1hZ2U7
Cit9CisKKyNlbHNlCisKK3N0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBHVW5pcXVlT3V0UHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKK3sKKyAg
ICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRo
ZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlvbi4KKyAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21l
Lm9yZy9nZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBp
eGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKKworICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3Ry
aW5nKHNpemVvZiAiaW1hZ2UiKTsKKyAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAi
cG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7
CisgICAgaWYgKHR5cGUgPT0gImpwZWciKSB7CisgICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBw
b3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVS
TCgpIG11c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYKKyAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJj
ZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgor
ICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOworICAgICAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1B
R0UpIHsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2Up
LAorICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKKyAgICAgICAgICAgICAgICBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCisgICAgICAgICAgICAgICAg
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBJbnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2Up
OworICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Y3JlYXRlKENBSVJPX0ZPUk1BVF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7
CisgICAgICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUo
bmV3U3VyZmFjZS5nZXQoKSkpOworICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNl
KGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKKyAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdl
dCgpKTsKKyAgICAgICAgfQorICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNl
VG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOworICAgIH0gZWxzZQorICAgICAgICBwaXhi
dWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOworICAgIGlm
ICghcGl4YnVmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CisgICAgaWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxp
dHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICBTdHJpbmcgcXVhbGl0eVN0
cmluZyA9IFN0cmluZzo6bnVtYmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCAr
IDAuNSkpOworICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwg
JmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9y
Lm91dFB0cigpLCAicXVhbGl0eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7
CisgICAgfSBlbHNlCisgICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdl
dCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAm
ZXJyb3Iub3V0UHRyKCksIE5VTEwpOworCisgICAgcmV0dXJuICFlcnJvcjsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IGRhdGEoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIEdVbmlxdWVPdXRQdHI8Z2No
YXI+IGJ1ZmZlcjsKKyAgICBnc2l6ZSBidWZmZXJTaXplOworICAgIGlmICghZW5jb2RlSW1hZ2Uo
aW1hZ2UsIG1pbWVUeXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKKyAgICBpbWFnZURh
dGEuYXBwZW5kKGJ1ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7CisgICAgcmV0dXJuIGltYWdlRGF0
YTsKK30KKworI2VuZGlmIC8vICFQTEFURk9STShHVEspCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zZGUzM2M3Y2EwOTZjYWQ4OTIyNjM3MzljNzVmOTViMjBmZWRjMDM3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tl
QHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJv
X3N1cmZhY2VfdCosIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNz
Q29udGV4dENHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAppbmRleCA0OTZlY2EzMjRkM2U0ZGEyMmZjYTU5OTk4ZWI1ZWY1ZWU3
M2QyMDlhLi43MjJlZWZmZTZjOWU1ZmQyODY2YmUyNzI4N2E0NzAyMTAwY2JmYzU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCkBAIC01MDAsNyArNTAwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBGbG9h
dFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXplID0gYnVmZmVyLnNpemVGb3JEZXN0aW5hdGlvblNp
emUoZGVzdFJlY3Quc2l6ZSgpKTsKKyAgICBGbG9hdFNpemUgYnVmZmVyRGVzdGluYXRpb25TaXpl
ID0gZGVzdFJlY3Quc2l6ZSgpOwogICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZSA9IGJ1
ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogCiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDM1NmYxOTY0ZDA5NTUyYmQxYTI3ZmMwZDIyODA5ZDhhM2RhNmI3
NWIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw2NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFz
IFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0j
aW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUg
PHd0Zi9EZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUg
PHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUg
IlVUSVV0aWxpdGllcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29j
b2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1
cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmlu
ZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotREVDTEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwot
REVGSU5FX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0
YXRpYyBGbG9hdFNpemUgc2NhbGVTaXplVG9Vc2VyU3BhY2UoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2luZ1N0b3JlU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplKQotewotICAgIGZsb2F0IHhNYWduaWZpY2F0aW9uID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSkgLyBpbnRlcm5hbFNpemUud2lkdGgoKTsK
LSAgICBmbG9hdCB5TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3Rv
cmVTaXplLmhlaWdodCgpKSAvIGludGVybmFsU2l6ZS5oZWlnaHQoKTsKLSAgICByZXR1cm4gRmxv
YXRTaXplKGxvZ2ljYWxTaXplLndpZHRoKCkgKiB4TWFnbmlmaWNhdGlvbiwgbG9naWNhbFNpemUu
aGVpZ2h0KCkgKiB5TWFnbmlmaWNhdGlvbik7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJldGFpblB0cjxDR0Nv
bG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0gICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgc3dpdGNo
IChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBl
Qml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250ZXh0R2V0Q29sb3JTcGFj
ZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElPU1VSRkFDRSkKLSAgICBj
YXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dJT1N1
cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNl
bmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBhZG9wdENGKENHQ29udGV4
dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0KLQotICAgIGlmICghY29s
b3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZWxz
ZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2VuZGlmCi0gICAgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJpbmdNb2RlKCk7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHNp
emUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBj
b2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBzdWNjZXNzKSk7Ci0KLSAg
ICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVw
IGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0g
ICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVy
biBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVz
b2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7IC8v
IE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9hdCBzY2FsZWRXaWR0aCA9
IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVk
SGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8K
LSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3Np
YmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUo
c2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUg
PSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSByZW5kZXJpbmdNb2Rl
ID09IEFjY2VsZXJhdGVkOwotICAgIGlmIChtX3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5o
ZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGgg
PSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdo
dCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRpZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92
ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hl
Y2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2Rh
dGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZhY2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdp
ZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+
IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsK
LSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmluZ01vZGUgPT0gVW5hY2NlbGVyYXRlZCk7Ci0jZW5k
aWYKLQotICAgIG1fZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykg
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0
U2l6ZSB1c2VyQm91bmRzID0gc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUod2lkdGgu
dW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSkpOwotICAgICAgICBtX2RhdGEuc3VyZmFj
ZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBJbnRTaXplKHVz
ZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYgKG1fZGF0YS5zdXJmYWNlKSB7Ci0g
ICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250
ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNnQ29udGV4dCkKLSAgICAgICAgICAg
ICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
bV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBVTlVT
RURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0g
ICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7IC8vIElmIGFsbG9jYXRpb24g
ZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0KLSAgICBp
ZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgbV9kYXRhLmRhdGEgPSBJbWFnZUJ1
ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpKTsKLSAgICAgICAgaWYgKCFtX2Rh
dGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJUKCEocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykpOwotCi0jaWYgVVNFX0FSR0IzMgot
ICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmly
c3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxzZQotICAgICAgICBtX2RhdGEuYml0
bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKLSNlbmRpZgotICAgICAg
ICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShtX2RhdGEuZGF0YSwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUu
aGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9y
U3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8gcmVsZWFzZUlt
YWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwgc2l6ZV90KSB7Ci0gICAgICAg
ICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7Ci0g
ICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUgaW1hZ2UgdGhhdCB3cmFwcyB0aGUg
ZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChtX2RhdGEuZGF0YSwg
bnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2RhdGEuZGF0YVByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fZGF0YS5kYXRhLCBudW1CeXRl
cy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwotCi0gICAgICAgIGlmICghY2dDb250
ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5jb250ZXh0ID0gbWFr
ZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7Ci0gICAgfQotCi0gICAg
Y29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwotICAgIGNvbnRleHQoKS50cmFuc2xh
dGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLSAgICBjb250ZXh0KCku
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBzdWNjZXNz
ID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNlKSwgcmVuZGVyaW5nTW9kZSwgaG9z
dFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0g
ZGVmYXVsdDsKLQotRmxvYXRTaXplIEltYWdlQnVmZmVyOjpzaXplRm9yRGVzdGluYXRpb25TaXpl
KEZsb2F0U2l6ZSBkZXN0aW5hdGlvblNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNjYWxlU2l6
ZVRvVXNlclNwYWNlKGRlc3RpbmF0aW9uU2l6ZSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGlu
dGVybmFsU2l6ZSgpKTsKLX0KLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAotewotICAgIC8vIG1l
bW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwg
YW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUg
YW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFsU2l6ZSgpIGJlY2F1
c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8vIEl0J3Mgc2FmZSB0
byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBh
c3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8g
SXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2Ug
dG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJm
YWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICBy
ZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQo
KTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAot
ewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRs
eSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQg
ZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3Mg
bV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBiZSBhc3NpZ25lZCBk
dXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAgLy8gSXQncyBzYWZl
IHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1c2UgdG90YWxCeXRl
cygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAg
ICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAgICByZXR1cm4gMDsK
LX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29u
c3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICht
X2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVHcmFw
aGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgQ0dDb250ZXh0
Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3RhdGljIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGlt
YWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdlICYmIChDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8
IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLmhl
aWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJ
blJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNy
ZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRyPENHSW1hZ2VSZWY+
JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBJbnRTaXplIGxvZ2ljYWxTaXplLCBJbnRT
aXplIGJhY2tpbmdTdG9yZVNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAg
ICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBp
bnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6
ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVm
KCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRT
ZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENH
Q29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onpl
cm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNw
YWNlID0gc2NhbGVTaXplVG9Vc2VyU3BhY2UobG9naWNhbFNpemUsIGJhY2tpbmdTdG9yZVNpemUs
IGludGVybmFsU2l6ZSk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgp
LCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGlt
YWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1v
dmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAg
ICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNv
cHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRl
clNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxT
aXplKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2Vy
dmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXpl
ID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUg
PSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVz
b2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJ
bWFnZShXVEZNb3ZlKGltYWdlQnVmZmVyKSksIGludGVybmFsU2l6ZSwgbG9naWNhbFNpemUsIGJh
Y2tpbmdTdG9yZVNpemUsIHJlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0K
LQotQmFja2luZ1N0b3JlQ29weSBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKQotewot
ICAgIHJldHVybiBEb250Q29weUJhY2tpbmdTdG9yZTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VS
ZWY+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkKLSAgICAgICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OwotCi0gICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0
ZUZyb21JbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotI2Vsc2UKLSAgICByZXR1
cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0j
ZW5kaWYKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2Fz
ZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0lt
YWdlQ3JlYXRlKG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLmhlaWdodCgpLCA4LCAzMiwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgp
LCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8sIG1fZGF0YS5kYXRhUHJvdmlk
ZXIuZ2V0KCksIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRm
b3JtQ29udGV4dCgpKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0j
ZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0Nv
bnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFn
ZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAKLSAgICBBU1NFUlQoZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQo
KSk7Ci0gICAgCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVz
b2x1dGlvblNjYWxlOwotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVy
LT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZSA9IElPU3VyZmFjZTo6c2lua0ludG9JbWFnZShJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFn
ZUJ1ZmZlcihXVEZNb3ZlKGltYWdlQnVmZmVyKSkpOwotICAgIAotICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShyZXNvbHV0
aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci0j
ZWxzZQotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Ci0jZW5kaWYKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoJmRlc3RDb250ZXh0
ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7IC8vIERyYXdp
bmcgaW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgZWxzZQotICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1Jl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShpbWFnZS5nZXQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpIHsKLSAgICAgICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRl
c3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChSZWZQ
dHI8SW1hZ2U+IGNvcHkgPSBjb3B5SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpIC8vIERyYXdpbmcg
aW50byBvdXIgb3duIGJ1ZmZlciwgbmVlZCB0byBkZWVwIGNvcHkuCi0gICAgICAgICAgICAgICAg
Y29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVyaW5nID0g
Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgICAgICBpbWFnZUZv
clJlbmRlcmluZy0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IGNvcHkgPSBjb3B5
SW1hZ2UoQ29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3Jj
UmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6ZSgp
LCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3Qg
SW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVj
dCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29v
cmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7
Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHNyY1JlY3QsIGludGVybmFsU2l6
ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OnB1dEJ5dGVBcnJheShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6
ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQotewotICAgIGlmIChjb250ZXh0KCku
aXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJ
bnRSZWN0IHNjYWxlZFNvdXJjZVJlY3QgPSBzb3VyY2VSZWN0OwotICAgIEludFNpemUgc2NhbGVk
U291cmNlU2l6ZSA9IHNvdXJjZVNpemU7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0pIHsKLSAgICAgICAgc2NhbGVkU291cmNlUmVjdC5zY2FsZSht
X3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVNpemUuc2NhbGUobV9yZXNv
bHV0aW9uU2NhbGUpOwotICAgIH0KLQotICAgIG1fZGF0YS5wdXREYXRhKHNvdXJjZSwgc291cmNl
Rm9ybWF0LCBzY2FsZWRTb3VyY2VTaXplLCBzY2FsZWRTb3VyY2VSZWN0LCBkZXN0UG9pbnQsIGlu
dGVybmFsU2l6ZSgpLCBjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSk7Ci0gICAgCi0g
ICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUgSU9TdXJmYWNlIGNhY2hlZCBpbWFnZSBpZiBpdCBp
cyByZXF1ZXN0ZWQgdGhyb3VnaCBDR0lPU3VyZmFjZUNvbnRleHRDcmVhdGVJbWFnZSgpLgotICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZv
ciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KLSAgICBpZiAoY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJl
Y3QoMSwgMSwgMCwgMCkpOwotfQotCi1zdGF0aWMgaW5saW5lIENGU3RyaW5nUmVmIGpwZWdVVEko
KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpIHx8IFBMQVRGT1JNKFdJTikKLSAgICBzdGF0
aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlwZUpQRUcgPSBDRlNUUigicHVibGljLmpwZWciKTsK
LSNlbmRpZgotICAgIHJldHVybiBrVVRUeXBlSlBFRzsKLX0KLSAgICAKLXN0YXRpYyBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCi17Ci0gICAgLy8gRklYTUU6IFdoeSBkb2Vzbid0IGlPUyB1c2UgdGhlIENvcmVT
ZXJ2aWNlcyB2ZXJzaW9uPwotI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4gVVRJRnJvbU1J
TUVUeXBlKG1pbWVUeXBlKS5jcmVhdGVDRlN0cmluZygpOwotI2Vsc2UKLSAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCi0K
LSAgICAvLyBGSVhNRTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQg
VVRJcyB3aGVuIGEgd2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkg
aXMgZm91bmQuCi0gICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJ
Ri4gU2VlIDxyZGFyOi8vcHJvYmxlbS82MDk1Mjg2Pi4KLSAgICBzdGF0aWMgY29uc3QgQ0ZTdHJp
bmdSZWYga1VUVHlwZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7Ci0gICAgc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7Ci0K
LSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9w
bmciKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVQTkc7Ci0gICAgaWYgKGVxdWFsTGV0dGVyc0ln
bm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQotICAgICAgICByZXR1cm4g
anBlZ1VUSSgpOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlw
ZSwgImltYWdlL2dpZiIpKQotICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKLQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBrVVRUeXBlUE5HOwotI2VuZGlmCi19Ci0KLXN0
YXRpYyBib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCi17Ci0gICAg
aWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRo
RGF0YShkYXRhLCB1dGksIDEsIDApKTsKLSAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3Bl
cnRpZXM7Ci0gICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1
YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICAvLyBBcHBseSB0aGUg
Y29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KLSAgICAg
ICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFs
bG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwotICAgICAg
ICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1
YWxpdHk7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5Lmdl
dCgpOwotICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0
ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtD
RlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKLSAgICB9Ci0KLSAgICAvLyBTZXR0aW5n
IGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1h
Z2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAotICAgIC8vIGluIHRo
ZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgotCi0gICAg
Q0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFn
ZVByb3BlcnRpZXMuZ2V0KCkpOwotICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6
ZShkZXN0aW5hdGlvbi5nZXQoKSk7Ci19Ci0KLXN0YXRpYyBTdHJpbmcgZGF0YVVSTChDRkRhdGFS
ZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gYmFz
ZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRh
R2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWlt
ZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotc3RhdGljIFZlY3Rvcjx1aW50
OF90PiBkYXRhVmVjdG9yKENGRGF0YVJlZiBjZkRhdGEpCi17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7Ci0gICAgZGF0YS5hcHBlbmQoQ0ZEYXRhR2V0Qnl0ZVB0cihjZkRhdGEpLCBDRkRhdGFH
ZXRMZW5ndGgoY2ZEYXRhKSk7Ci0gICAgcmV0dXJuIGRhdGE7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1
ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsK
LSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZl
UmVzb2x1dGlvbikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBl
KTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5KSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVh
bGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9y
KGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+
IEltYWdlQnVmZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkg
PSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7
Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQo
KSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNo
YW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4K
LSAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKElu
dFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRp
cGxpZWREYXRhKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90
IGRhdGFTaXplID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCk7Ci0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGll
ZERhdGEtPmRhdGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFk
b3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVk
RGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92
aWRlcikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRv
cHRDRihDR0ltYWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNl
UmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBM
YXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZh
dWx0KSk7Ci0gICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZl
UmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVh
dGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgp
LCA4LCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRN
b2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53
aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFn
ZVNpemVJblVzZXJTcGFjZSA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUobG9naWNhbFNpemUoKSk7
Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCksIGltYWdlU2l6ZUluVXNlclNwYWNlLmhl
aWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwotICAgIH0KLQotICAgIGF1dG8gY2ZE
YXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDAp
KTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHks
IGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIFdU
Rk1vdmUoY2ZEYXRhKTsKLX0KLQotc3RhdGljIFJldGFpblB0cjxDRkRhdGFSZWY+IGNmRGF0YShj
b25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5KQotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgYXV0byB1dGkg
PSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7
Ci0KLSAgICBDR0ltYWdlQWxwaGFJbmZvIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTGFz
dDsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gc291cmNlLmRhdGEoKS0+ZGF0YSgpOwotICAg
IFZlY3Rvcjx1aW50OF90PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0
aS5nZXQoKSwganBlZ1VUSSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBi
bGFjay4KLSAgICAgICAgc2l6ZV90IHNpemUgPSA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2Uu
aGVpZ2h0KCk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEudHJ5UmVzZXJ2ZUNhcGFj
aXR5KHNpemUpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcHJlbXVs
dGlwbGllZERhdGEuZ3JvdyhzaXplKTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmZmVyID0g
cHJlbXVsdGlwbGllZERhdGEuZGF0YSgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBkYXRhW2kgKyAz
XTsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBidWZm
ZXJbaSArIDBdID0gZGF0YVtpICsgMF0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAgICBi
dWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAgICAg
ICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl0gKiBhbHBoYSAvIDI1NTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdOwot
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXTsKLSAgICAgICAgICAg
ICAgICBidWZmZXJbaSArIDJdID0gZGF0YVtpICsgMl07Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdDsg
Ly8gSWdub3JlIHRoZSBhbHBoYSBjaGFubmVsLgotICAgICAgICBkYXRhID0gcHJlbXVsdGlwbGll
ZERhdGEuZGF0YSgpOwotICAgIH0KLQotICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2go
ZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpKTsKLSAgICBhdXRvIGRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRh
LCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCksIDApKTsKLSAgICBpZiAoIWRh
dGFQcm92aWRlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIGltYWdlID0g
YWRvcHRDRihDR0ltYWdlQ3JlYXRlKHNvdXJjZS53aWR0aCgpLCBzb3VyY2UuaGVpZ2h0KCksIDgs
IDMyLCA0ICogc291cmNlLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5
dGVPcmRlckRlZmF1bHQgfCBkYXRhQWxwaGFJbmZvLCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZh
bHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAg
aWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNm
RGF0YSk7Ci19Ci0KLVN0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCi17Ci0gICAgaWYg
KGF1dG8gZGF0YSA9IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKLSAgICAgICAg
cmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTos
Il9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAg
IGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAg
ICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSgpIGNvbnN0Ci17Ci0gICAg
aWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLSAgICByZXR1cm4gbV9kYXRhLnRvQkdSQURhdGEoY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCksIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYzZDllZGQwZWY1MWYzODQxYWM1OGM4YjYxZTE1Y2UyZDRhNWNmN2QKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHAKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURSkKKyNpbmNsdWRlIDxBY2NlbGVy
YXRlL0FjY2VsZXJhdGUuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNj
YWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1faW50
ZXJuYWxTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3Rv
cihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplKQoreworICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRo
KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6ZS53aWR0aCgpKSB8fCBD
R0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGludGVybmFsU2l6
ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aElt
YWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGludGVybmFsU2l6ZS53aWR0aCgpLCBp
bnRlcm5hbFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMg
UmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFp
blB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYgKHJlc29sdXRpb25TY2Fs
ZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykK
KyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQo
KSwgaW50ZXJuYWxTaXplKTsKKyAgICBlbHNlIHsKKyAgICAgICAgYXV0byBjb250ZXh0ID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNh
bFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFj
ZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAgICAgQ0dDb250
ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgICAg
ICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50
Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7CisgICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVz
ZXJTcGFjZSA9IGxvZ2ljYWxTaXplOworICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4
dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3Bh
Y2UpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0
ZShXVEZNb3ZlKGltYWdlKSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBOYXRpdmVJbWFnZVB0ciBp
bWFnZTsKKyAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRp
b24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgZWxzZQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIG1fbG9naWNhbFNpemUsIG1f
aW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30K
KworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVC
aXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9s
b2dpY2FsU2l6ZSwgbV9pbnRlcm5hbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJl
c29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7
CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAgIHNyY1JlY3RTY2Fs
ZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3Jl
IDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdFNjYWxl
ZCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXdQYXR0ZXJu
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFj
aW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJl
Y3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5SW1hZ2UoJmRl
c3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNr
aW5nU3RvcmUpKQorICAgICAgICBpbWFnZS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKK30KKworQWZmaW5lVHJhbnNmb3JtIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpiYXNl
VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKDEsIDAsIDAs
IC0xLCAwLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKK30KKworUmV0YWluUHRyPENGRGF0YVJl
Zj4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICAKKyAgICBhdXRvIHV0
aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRp
KTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdl
dCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEg
Y2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNr
LgorICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXpl
KCkpLCBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBs
aWVkRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHNpemVfdCBk
YXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdo
dCgpOworICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWRE
YXRhLT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9w
dENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERh
dGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJvdmlk
ZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVp
Z2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJl
ZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFz
dCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJl
c29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBj
b3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7CisgICAgICAgIGltYWdlID0gY3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0
Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwg
OCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOworICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCks
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7CisgICAgICAgIGltYWdlID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7CisgICAg
fQorCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0
aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRh
KG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKKyAgICAgICAgcmV0
dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHsgfTsKK30KKworU3RyaW5n
IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwg
cXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKKyAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0
YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCisjaWYgVVNF
KEFDQ0VMRVJBVEUpCitzdGF0aWMgaW5saW5lIHZJbWFnZV9CdWZmZXIgbWFrZVZJbWFnZUJ1ZmZl
cih1bnNpZ25lZCBieXRlc1BlclJvdywgdWludDhfdCogcm93cywgY29uc3QgSW50U2l6ZSYgc2l6
ZSkKK3sKKyAgICB2SW1hZ2VfQnVmZmVyIHZJbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICB2SW1hZ2VC
dWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQo
KSk7CisgICAgdkltYWdlQnVmZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3Vu
dD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJv
dzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZl
cjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAor
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdl
X0J1ZmZlciYgZGVzdCkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9y
bWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQp
OworICAgICAgICBBU1NFUlQoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQpOworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdS
QSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMg
fTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBt
YXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEp
CisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVz
dCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VVbnBy
ZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdC
QSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVz
dCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2SW1hZ2VQcmVt
dWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9
CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgfQor
fQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoCisgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JG
b3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29s
b3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNv
bnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRl
c3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAg
ICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMoc3JjQWxwaGFGb3JtYXQs
IHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdEFscGhhRm9ybWF0
LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZlciBzcmMgPSBtYWtlVkltYWdl
QnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKKyAgICB2SW1hZ2VfQnVmZmVy
IGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUp
OworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxwaGFGb3JtYXQsIHNyY0Nv
bG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0KTsK
K30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWI3YTc0NjkzM2RkMWQyNzc2OGNhNDQ4
ZWE4ZmM2MWZhNDFlNzQyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApAQCAtMCwwICsxLDYyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBSZWZQdHI8
SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7
CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisK
KyAgICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJl
Zj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisg
ICAgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWdu
ZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNv
bnN0IG92ZXJyaWRlOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODIzMzM5NDdlZjU1ZGI5MDc5ZWUyZWM5ZTViOGJhNTc5ZWI1YWViMAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5m
byBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBr
Q0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFw
SW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsK
KyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxjdWxhdGVJbnRlcm5h
bFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJuYWxTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVu
c2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAqIGludGVybmFsU2l6ZS53aWR0aCgpOworCisgICAgaWYg
KCF0cnlGYXN0Q2FsbG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSwgYnl0ZXNQZXJSb3cpLmdldFZh
bHVlKGRhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVCghKHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGRhdGEpICYgMykpOworCisgICAgc2l6ZV90IG51bUJ5dGVz
ID0gaW50ZXJuYWxTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VC
dWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGludGVybmFsU2l6ZS53aWR0aCgp
LCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDgsIGJ5dGVzUGVyUm93LCBjYWNoZWRDR0NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvKSk7CisgICAgaWYgKCFjZ0NvbnRleHQp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5nZXQoKSk7CisKKyAgICBjb25zdCBhdXRvIHJl
bGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewor
ICAgICAgICBmYXN0RnJlZShjb25zdF9jYXN0PHZvaWQqPihkYXRhKSk7CisgICAgfTsKKworICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIGRhdGEsIG51bUJ5dGVzLCByZWxlYXNlSW1hZ2VEYXRhKSk7CisKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOwor
fQorCitJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCog
ZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1
bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJD
R0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKQorICAgICwgbV9kYXRhKGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3Zl
KGRhdGFQcm92aWRlcikpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAg
ICBBU1NFUlQobV9kYXRhKTsKKyAgICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VS
VChtX2NvbnRleHQpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQm
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gKm1fY29udGV4dDsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdT
dG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgCisgICAgY2FzZSBEb250Q29weUJh
Y2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZSgKKyAgICAg
ICAgICAgIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCA4
LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAgICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2Nv
bG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAg
ICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorICAg
IAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitW
ZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBj
b25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9kYXRh
KTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91
dHB1dEZvcm1hdCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9kYXRhKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29u
c3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAg
IEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3Jj
U2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBtX2RhdGEpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGFhOTY2MzEzYzljM2E4MGEwMWViYzhm
MDFiMGUzZDRmMTE1ZWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQu
aCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kKTsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAg
ICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBO
YXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3Qg
SW50UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4
Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4mJiwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyAg
ICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIDQgKiBtX2lu
dGVybmFsU2l6ZS53aWR0aCgpOyB9CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xv
ckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xv
ckZvcm1hdDo6QkdSQTsgfQorI2VuZGlmCisKKyAgICB2b2lkKiBtX2RhdGE7CisgICAgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiBtX2RhdGFQcm92aWRlcjsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDYxZmMwMzFjYzA2NjRkZTdhNTc3ZDFiY2I1YjQ5NjJmZGQyZWFiYWMu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNDkzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VC
dWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFw
aGljcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotI2luY2x1ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5o
PgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotI2lu
Y2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPGRpc3BhdGNoL2Rpc3BhdGNoLmg+Ci0jaW5j
bHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2Vz
IEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBv
cHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotc3RhdGljIHZvaWQgdW5wcmVt
dWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2Vf
QnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3Qu
ZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlVW5wcmVtdWx0aXBseURh
dGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0IEJHUkE8LT5SR0JB
LiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JBLgotICAgIGNvbnN0
IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci19Ci0KLXN0
YXRpYyB2b2lkIHByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMs
IGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAg
ICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VQ
cmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gU3dhcCBjaGFubmVscyAxIGFuZCAzLCB0byBjb252ZXJ0
IEJHUkE8LT5SR0JBLiBJT1N1cmZhY2VzIGFyZSBCR1JBLCBJbWFnZURhdGEgZXhwZWN0cyBSR0JB
LgotICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgdkltYWdl
UGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFn
cyk7Ci19Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpICYmIChVU0VfQVJHQjMyIHx8IFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHJh
bnNmZXJEYXRhKHZvaWQqIG91dHB1dCwgdm9pZCogaW5wdXQsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgc2l6ZV90IGlucHV0Qnl0ZXNQZXJSb3cpCi17Ci0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAg
QVNTRVJUKGlucHV0KTsKLSAgICBBU1NFUlQob3V0cHV0KTsKLQotICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgIHNyYy53aWR0aCA9IHdpZHRoOwotICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQ7Ci0g
ICAgc3JjLnJvd0J5dGVzID0gaW5wdXRCeXRlc1BlclJvdzsKLSAgICBzcmMuZGF0YSA9IGlucHV0
OwotCi0gICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgIGRlc3Qud2lkdGggPSB3aWR0aDsKLSAg
ICBkZXN0LmhlaWdodCA9IGhlaWdodDsKLSAgICBkZXN0LnJvd0J5dGVzID0gd2lkdGggKiA0Owot
ICAgIGRlc3QuZGF0YSA9IG91dHB1dDsKLQotICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JH
UkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShvdXRwdXQpOwotICAgIFVOVVNFRF9QQVJBTShpbnB1dCk7Ci0gICAgVU5VU0VEX1BBUkFN
KHdpZHRoKTsKLSAgICBVTlVTRURfUEFSQU0oaGVpZ2h0KTsKLSAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIG5vdCBBQ0NFTEVSQVRFLgotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2Vu
ZGlmCi19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckRhdGE6OnRvQkdSQURhdGEoYm9v
bCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdCg0ICogd2lkdGggKiBoZWlnaHQpOwotCi0gICAgaWYg
KCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0
YSgpLCBkYXRhLCB3aWR0aCwgaGVpZ2h0LCA0ICogYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsK
LSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAg
ICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSwg
d2lkdGgsIGhlaWdodCwgc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKSk7Ci0jZWxzZQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIHNpemUsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3QKLXsKLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0Lndp
ZHRoKCk7Ci0gICAgYXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJm
bG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVp
bnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkp
OwotICAgIHVpbnQ4X3QqIHJlc3VsdERhdGEgPSByZXN1bHQgPyByZXN1bHQtPmRhdGEoKSA6IG51
bGxwdHI7Ci0gICAgaWYgKCFyZXN1bHREYXRhKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gcmVjdC5tYXhYKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGVu
ZHkgPSByZWN0Lm1heFkoKTsKLSAgICBpZiAocmVjdC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8
fCBlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkudW5zYWZlR2V0KCkgPiBz
aXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgCi0gICAgaW50
IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIENoZWNrZWQ8aW50
PiBkZXN0dyA9IHJlY3Qud2lkdGgoKTsKLSAgICBpZiAob3JpZ2lueCA8IDApIHsKLSAgICAgICAg
ZGVzdHcgKz0gb3JpZ2lueDsKLSAgICAgICAgZGVzdHggPSAtb3JpZ2lueDsKLSAgICAgICAgb3Jp
Z2lueCA9IDA7Ci0gICAgfQotICAgIGRlc3R3ID0gc3RkOjptaW48aW50PihkZXN0dy51bnNhZmVH
ZXQoKSwgc2l6ZS53aWR0aCgpIC0gb3JpZ2lueCk7Ci0gICAgaWYgKGVuZHgudW5zYWZlR2V0KCkg
PiBzaXplLndpZHRoKCkpCi0gICAgICAgIGVuZHggPSBzaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IHdpZHRoID0gZW5keCAtIG9yaWdpbng7Ci0gICAgCi0gICAgaW50IG9yaWdpbnkgPSBy
ZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IHJl
Y3QuaGVpZ2h0KCk7Ci0gICAgaWYgKG9yaWdpbnkgPCAwKSB7Ci0gICAgICAgIGRlc3RoICs9IG9y
aWdpbnk7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAwOwot
ICAgIH0KLSAgICBkZXN0aCA9IHN0ZDo6bWluPGludD4oZGVzdGgudW5zYWZlR2V0KCksIHNpemUu
aGVpZ2h0KCkgLSBvcmlnaW55KTsKLSAgICBpZiAoZW5keS51bnNhZmVHZXQoKSA+IHNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBo
ZWlnaHQgPSBlbmR5IC0gb3JpZ2lueTsKLSAgICAKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkg
PD0gMCB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogcmVjdC53aWR0aCgpOwot
ICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gcmVzdWx0RGF0YSArIGRlc3R5ICogZGVzdEJ5dGVzUGVy
Um93ICsgZGVzdHggKiA0OwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93OwotICAg
IHVpbnQ4X3QqIHNyY1Jvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7
Ci0gICAgICAgIGlmICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICAg
ICAgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgc3Jj
Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgb3JpZ2lueSAqIHNyY0J5
dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAg
aWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpIHsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMu
d2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWln
aHQudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICAgICAgdkltYWdl
X0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgp
OwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAg
ICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRh
dGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHVucHJlbXVsdGlw
bHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlVW5wcmVt
dWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbmRp
ZgotCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAg
ICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQpIHsKLSAgICAgICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0g
ICAgICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50
IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNS
b3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgICAgICAvLyBC
eXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVycyBvZiBBUkdCMzIK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jh
c2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAg
fQotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAg
fQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWln
aHQudW5zYWZlR2V0KCk7ICsreSkgewotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAg
ICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCAod2lkdGgg
KiA0KS51bnNhZmVHZXQoKTsgeCArPSA0KQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyB4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihzcmNSb3dzICsgeClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBzcmNSb3dz
ICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0jaWYgVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNlOjpMb2Nr
ZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0
ZXNQZXJSb3coKTsKLSAgICAgICAgc3JjUm93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3Jj
OwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhl
aWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gc3JjUm93czsKLQotICAgICAgICB2SW1hZ2Vf
QnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAg
ICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdC5yb3dC
eXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0K
LSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnBy
ZW11bHRpcGxpZWQpCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRl
c3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMg
ZnJvbSBCR1JBIHRvIFJHQkEuCi0gICAgICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsg
MiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4
KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKLSAgICAgICAgfQotI2Vsc2UKLSAg
ICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgIENSQVNI
KCk7Ci0KLSAgICAgICAgaWYgKG91dHB1dEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGJh
c2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFz
ZXhdOwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCAr
IDNdOwotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jv
d3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMl0gPSAoYiAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jv
d3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsK
LSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhl
aWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBi
YXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNl
eCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93
c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0g
YjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBz
cmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkK
LSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotICAgIAotICAgIHJldHVybiByZXN1
bHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25z
dCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVS
ZW5kZXJpbmcpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFT
U0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IG9y
aWdpbnggPSBzb3VyY2VSZWN0LngoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tl
ZDxpbnQ+KGRlc3RQb2ludC54KCkpICsgc291cmNlUmVjdC54KCkpOwotICAgIEFTU0VSVChkZXN0
eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlRfVU5VU0VEKHNpemUsIGRlc3R4LnVuc2Fm
ZUdldCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+
PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgo
KSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2lu
dC54KCkpICsgc291cmNlUmVjdC5tYXhYKCkpOwotICAgIEFTU0VSVChlbmR4LnVuc2FmZUdldCgp
IDw9IHNpemUud2lkdGgoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNl
UmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQot
ICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxp
bnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgp
KTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5
LnVuc2FmZUdldCgpIDwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZl
R2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkudW5zYWZlR2V0KCkgPD0gc291cmNlUmVj
dC5tYXhZKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50Pihk
ZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBBU1NFUlQoZW5keS51bnNh
ZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBz
b3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0
eTsKLSAgICAKLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMCkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJjZVNpemUu
d2lkdGgoKTsKLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIChv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNCkudW5zYWZlR2V0KCk7Ci0gICAg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93OwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzOwotICAgIAot
ICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90
Kj4oZGF0YSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdl
dCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAg
IHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAg
ICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMu
ZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNyY1Jvd3MpOwotCi0gICAgICAgICAgICB2SW1h
Z2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0
KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAgICAg
ICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIGRlc3Qu
ZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgcHJlbXVsdGlw
bHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0jZWxzZQotICAgICAgICAgICAgdkltYWdlUHJlbXVs
dGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotI2VuZGlmCi0KLSAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgLy8gQnl0
ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0g
ICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1ti
YXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAwXSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAg
ICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJf
dCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0g
c3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
KnN1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwotICAg
ICAgICBkZXN0Qnl0ZXNQZXJSb3cgPSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBk
ZXN0Um93cyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygp
KSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNCkudW5zYWZlR2V0KCk7Ci0K
LSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAg
IHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICBzcmMuaGVpZ2h0ID0gaGVp
Z2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsK
LSAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAg
ICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNh
ZmVHZXQoKTsKLSAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAg
ICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgZGVzdC5kYXRhID0g
ZGVzdFJvd3M7Ci0KLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBwcmVtdWx0aXBseUJ1ZmZlckRh
dGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVs
IGNoYW5uZWxzIGZyb20gUkdCQSB0byBCR1JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBt
YXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVs
c19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0K
LSNlbHNlCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyAr
K3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7
IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgYiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEg
IT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dz
W2Jhc2V4ICsgMl0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRl
c3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8g
MjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiBhbHBo
YSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAg
c3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYgLy8g
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYzU1YTU0YWQ5MTE3OTUzY2E1ZTY5NmRhMDdlNmUwZGY2ODE0M2Q1OC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0
aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JT
cGFjZSAqQ0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNH
RGF0YVByb3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJE
YXRhIHsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xv
clNwYWNlOwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZv
aWQqIGRhdGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBk
YXRhUHJvdmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZm
ZXJzLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQot
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0
RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYs
IGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjQ4OGM4
MTI3YmI2OGMxZjU2ZmNhZmZlNDczMGEzMjIxMjQ1YmUxCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisj
aW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3Mu
aD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0Vf
SVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CisKK0ludFNp
emUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgSW50U2l6
ZSBpbnRlcm5hbFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxT
aXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZh
Y2U6Om1heGltdW1TaXplKCk7CisgICAgaWYgKGludGVybmFsU2l6ZS53aWR0aCgpID4gbWF4U2l6
ZS53aWR0aCgpIHx8IGludGVybmFsU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gaW50ZXJuYWxTaXplOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXpl
KHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNl
OjpjcmVhdGUoaW50ZXJuYWxTaXplLCBpbnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShj
b2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3Vy
ZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0Lmdl
dCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAK
KyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4o
bmV3IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZChjb25zdCBG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8
SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBt
X3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNlKTsKKyAg
ICBzZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmVu
c3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3RhbEJ5dGVz
KCk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVybmFsTWVt
b3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwordW5zaWdu
ZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3JtYXQgSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdAorewor
ICAgIHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQorCitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1h
Z2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShtX3N1
cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25z
dW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsK
KyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYg
KGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RDb250ZXh0
LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9pbnRlcm5hbFNpemUsIGRlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6
OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OnRvQkdSQURhdGEobG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7Cit9CisKK1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1Jl
Y3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICBJT1N1
cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0
ZW0sIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3Jj
U2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIElPU3VyZmFjZTo6TG9j
a2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRX
cml0ZSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQs
IGFycmF5LCBzcmNTaXplLCBzcmNSZWN0LCBkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIGxv
Y2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworCisgICAgLy8gRm9yY2UgcmVjcmVhdGluZyB0aGUg
SU9TdXJmYWNlIGNhY2hlZCBpbWFnZS4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNl
c3NhcnkuCisgICAgY29udGV4dCgpLmZpbGxSZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2Vh
NDYxYmE2NTc2YzNhODY0MTY0MGY2MjY3MTBjOTQyZjg3MDFmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYv
SXNvTWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBJT1N1cmZhY2U7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7
CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQp
OworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7
CitwdWJsaWM6CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisgICAgCisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGU7CisKKyAgICBz
aXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHNpemVfdCBleHRlcm5hbE1l
bW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRp
dmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlOwor
ICAgIAorICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0IG92ZXJyaWRlOyAgICAKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYsIENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7
CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYp
OworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKKyAgICBDb2xv
ckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJT1N1cmZhY2U+IG1fc3VyZmFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0
aWxpdGllc0NHLmNwcAppbmRleCA4OWQwNDM5YzIxMGRiNTAxYWM5MzllYjExNDE0ODgxZWVlYzY1
YjI0Li5kMDkxMzlmMDFiZDMzNmYyODQ4YWVhNTI2YTRmOWY4MDBlZTc4NWVlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcApAQCAtMjYsNyArMjYsMTggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCiAKKyNpZiBVU0UoQ0cpCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8u
aD4KICNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgIlVUSVV0aWxpdGll
cy5oIgorI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEsNCArNTIsMTQwIEBA
IHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChjb25zdCB2b2lkKiBidWZmZXIs
IHNpemVfdCBidWZmZXJTaXplKQogICAgIHJldHVybiAqKHVpbnQ4X3QqKWxhc3RCeXRlOwogfQog
CitDRlN0cmluZ1JlZiBqcGVnVVRJKCkKK3sKKyNpZiAhUExBVEZPUk0oQ09DT0EpCisgICAgc3Rh
dGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7
CisjZW5kaWYKKyAgICByZXR1cm4ga1VUVHlwZUpQRUc7CiB9CisKK1JldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkK
K3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICByZXR1cm4gVVRJRnJvbU1JTUVUeXBlKG1pbWVU
eXBlKS5jcmVhdGVDRlN0cmluZygpOworI2Vsc2UKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OyAvLyBJdCBpcyB1bmNsZWFyIGlmIENGU1RSIGlzIHRocmVhZHNhZmUuCisKKyAgICAvLyBGSVhN
RTogQWRkIFdpbmRvd3Mgc3VwcG9ydCBmb3IgYWxsIHRoZSBzdXBwb3J0ZWQgVVRJcyB3aGVuIGEg
d2F5IHRvIGNvbnZlcnQgZnJvbSBNSU1FVHlwZSB0byBVVEkgcmVsaWFibHkgaXMgZm91bmQuCisg
ICAgLy8gRm9yIG5vdywgb25seSBzdXBwb3J0IFBORywgSlBFRywgYW5kIEdJRi4gU2VlIDxyZGFy
Oi8vcHJvYmxlbS82MDk1Mjg2Pi4KKyAgICBzdGF0aWMgY29uc3QgQ0ZTdHJpbmdSZWYga1VUVHlw
ZVBORyA9IENGU1RSKCJwdWJsaWMucG5nIik7CisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVm
IGtVVFR5cGVHSUYgPSBDRlNUUigiY29tLmNvbXB1c2VydmUuZ2lmIik7CisKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9wbmciKSkKKyAgICAg
ICAgcmV0dXJuIGtVVFR5cGVQTkc7CisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlD
YXNlKG1pbWVUeXBlLCAiaW1hZ2UvanBlZyIpKQorICAgICAgICByZXR1cm4ganBlZ1VUSSgpOwor
ICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2dp
ZiIpKQorICAgICAgICByZXR1cm4ga1VUVHlwZUdJRjsKKworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBrVVRUeXBlUE5HOworI2VuZGlmCit9CisKK2Jvb2wgZW5jb2RlSW1h
Z2UoQ0dJbWFnZVJlZiBpbWFnZSwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIENGTXV0YWJsZURhdGFSZWYgZGF0YSkKK3sKKyAgICBpZiAoIWltYWdlIHx8ICF1dGkg
fHwgIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEsIHV0aSwgMSwg
MCkpOworICAgIGlmICghZGVzdGluYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGltYWdlUHJvcGVydGllczsKKyAgICBpZiAoQ0ZF
cXVhbCh1dGksIGpwZWdVVEkoKSkgJiYgcXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1
YWxpdHkgPD0gMS4wKSB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBjb21wcmVzc2lvbiBxdWFsaXR5
IHRvIHRoZSBKUEVHIGltYWdlIGRlc3RpbmF0aW9uLgorICAgICAgICBhdXRvIGNvbXByZXNzaW9u
UXVhbGl0eSA9IGFkb3B0Q0YoQ0ZOdW1iZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga0NG
TnVtYmVyRG91YmxlVHlwZSwgJipxdWFsaXR5KSk7CisgICAgICAgIGNvbnN0IHZvaWQqIGtleSA9
IGtDR0ltYWdlRGVzdGluYXRpb25Mb3NzeUNvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgY29u
c3Qgdm9pZCogdmFsdWUgPSBjb21wcmVzc2lvblF1YWxpdHkuZ2V0KCk7CisgICAgICAgIGltYWdl
UHJvcGVydGllcyA9IGFkb3B0Q0YoQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsICZrZXksICZ2YWx1ZSwg
MSwgJmtDRlR5cGVEaWN0aW9uYXJ5S2V5Q2FsbEJhY2tzLCAma0NGVHlwZURpY3Rpb25hcnlWYWx1
ZUNhbGxCYWNrcykpOworICAgIH0KKworICAgIC8vIFNldHRpbmcga0NHSW1hZ2VEZXN0aW5hdGlv
bkJhY2tncm91bmRDb2xvciB0byBibGFjayBmb3IgSlBFRyBpbWFnZXMgaW4gaW1hZ2VQcm9wZXJ0
aWVzIHdvdWxkIHNhdmUgc29tZSBtYXRoCisgICAgLy8gaW4gdGhlIGNhbGxpbmcgZnVuY3Rpb25z
LCBidXQgaXQgZG9lc24ndCBzZWVtIHRvIHdvcmsuCisgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRk
SW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlLCBpbWFnZVByb3BlcnRpZXMuZ2V0KCkpOwor
ICAgIHJldHVybiBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQoKSk7
Cit9CisKK3N0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRh
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdl
QnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOworICAgIEFTU0VSVCh1dGkpOworCisgICAgQ0dJbWFn
ZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgdW5zaWdu
ZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKKyAgICBWZWN0b3I8dWludDhf
dD4gcHJlbXVsdGlwbGllZERhdGE7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdV
VEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBz
byB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAg
IHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOworICAg
ICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdy
b3coc2l6ZSk7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHByZW11bHRpcGxpZWRE
YXRhLmRhdGEoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQp
IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107CisgICAgICAgICAg
ICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRh
dGFbaSArIDBdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9
IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAy
XSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKKyAgICAgICAgICAgICAg
ICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAyXSA9IGRhdGFbaSArIDJdOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
ZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUg
YWxwaGEgY2hhbm5lbC4KKyAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsK
KyAgICB9CisKKyAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3Vy
Y2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7CisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBh
ZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53
aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7CisgICAgaWYgKCFkYXRhUHJvdmlkZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJj
ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0
IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVy
aW5nSW50ZW50RGVmYXVsdCkpOworCisgICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNy
ZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOworICAgIGlmICghZW5jb2RlSW1h
Z2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOworfQorCitT
dHJpbmcgZGF0YVVSTChDRkRhdGFSZWYgZGF0YSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sK
KyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0
Qnl0ZVB0cihkYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGRhdGEpLCBiYXNlNjREYXRhKTsKKyAgICBy
ZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisK
K1N0cmluZyBkYXRhVVJMKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgaWYgKGF1dG8gZGF0YSA9
IGNmRGF0YShzb3VyY2UsIG1pbWVUeXBlLCBxdWFsaXR5KSkKKyAgICAgICAgcmV0dXJuIGRhdGFV
UkwoZGF0YS5nZXQoKSwgbWltZVR5cGUpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitW
ZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQoreworICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOworICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRh
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOworICAgIHJldHVybiBkYXRhOworfQorCitWZWN0
b3I8dWludDhfdD4gZGF0YShjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEg
PSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRh
VmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAppbmRl
eCAxNjEyOGExOWFiZDFmYjgzYWIzMWExMTVjNjg5NTA0OTFkNDE5NTUyLi44NGM1N2QyZmVlOTMz
OGVkNWUwZWZjNGE4ZTMzNjVhMTlhODAyMDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCkBA
IC0yNSw4ICsyNSwzMSBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2lmIFVTRShDRykKKworI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbWFnZURh
dGE7CisKIFdFQkNPUkVfRVhQT1JUIHVpbnQ4X3QgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3Vn
aChjb25zdCB2b2lkKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIAotfQorQ0ZTdHJpbmdS
ZWYganBlZ1VUSSgpOworUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJN
SU1FVHlwZShjb25zdCBTdHJpbmcmKTsKKworYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmLCBD
RlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJl
Zik7CisKK1N0cmluZyBkYXRhVVJMKENGRGF0YVJlZiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7
CitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCitWZWN0b3I8dWludDhfdD4gZGF0YVZlY3Rv
cihDRkRhdGFSZWYpOworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAppbmRl
eCA4MGY2YjE4NzI1MjI5NjhlYTdkOTU3NmI3ZTAwNTYzMzMyNTg4MjNjLi4yODIxZWY4MWQ3NWRm
YjBmZjA1YTg1YmU1YzlmYmMyNThiNTYyZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcApAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGlj
cy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZEb2N1bWVudC5oPgor
I2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
SU9TdXJmYWNlLmgKaW5kZXggMjQzYzQ4Yjk1MWIxNzRiNmIyNGJhYzUzNjRjOWEwNGZmOTY5Y2Ri
My4uNGNjMGZhM2Y3OTcyN2ViOWRlZWRjNGFkMGUxMTczNGRhYjIxNGE2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLmgKQEAgLTEw
MCwxMCArMTAwLDYgQEAgcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBjcmVhdGVGcm9tU3VyZmFjZShJT1N1cmZhY2VSZWYsIENHQ29sb3JTcGFjZVJlZik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IGNyZWF0
ZUZyb21JbWFnZShDR0ltYWdlUmVmKTsKICAgICAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVh
dGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPik7Ci0jZW5kaWYK
LQogICAgIFdFQkNPUkVfRVhQT1JUIH5JT1N1cmZhY2UoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIG1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZh
Y2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2Uu
bW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4uMzkxZmMy
M2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMsNyArMzMs
NiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9vbC5oIgog
I2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNHLmgiCiAj
aW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2ltcG9ydCA8
cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAgdm9pZCBJ
T1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNl
KQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1vdmUoc3Vy
ZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXN0
ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVy
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgcmV0dXJu
IFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgotCiBzdGF0
aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUgc2l6ZSwg
dW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhlbCwgc2l6
ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBzaXplLndp
ZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFl
NTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQz
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNs
ZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3Zl
SXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlz
cGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdp
bmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTlmMWNlMjczNTQ1MGJkYWMzYmJkZjExYTMwODVkOWE3
ZjNjOWUxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxh
eUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5n
Q29udGV4dCB7CitwdWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlz
cGxheUxpc3RDb250ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRl
cj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0
ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAg
ICAgICAgfSkKKyAgICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkg
Y29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRl
eHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5
TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxh
eUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAg
ICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkpCisgICAgeworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCByZXBsYXlEaXNwbGF5TGlzdChHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0KQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Rpc3BsYXlMaXN0Lml0ZW1Db3Vu
dCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFJlcGxheWVyIHJlcGxheWVyKGRl
c3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0KTsKKyAgICAgICAgaWYgKG1fdHJhY2tzRGlzcGxheUxp
c3RSZXBsYXkpCisgICAgICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0ID0gcmVwbGF5ZXIucmVw
bGF5KHsgfSwgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgICAgICBtX2Rpc3BsYXlMaXN0LmNsZWFyKCk7
CisgICAgfQorCitwcml2YXRlOgorICAgIEdyYXBoaWNzQ29udGV4dCBtX2NvbnRleHQ7CisgICAg
RGlzcGxheUxpc3QgbV9kaXNwbGF5TGlzdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RGlzcGxheUxp
c3Q+IG1fcmVwbGF5RGlzcGxheUxpc3Q7CisgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5IHsgZmFsc2UgfTsKK307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHAKaW5kZXggZTYxNDFiZGUzMjA0YzE3N2FiNjlmNTFjNWQwMzQyNWE0N2Zj
NTk3NS4uYWYzYWFkZTJhMzMyY2MxMGE5NjEzZjIxMjYxNzE3ZGQxZDg1OGI1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCkBAIC0yODYsMTMgKzI4NiwxNSBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJh
d0ltYWdlQnVmZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSkpOwogCiAgICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwg
cmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOwotICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVu
c2lvbnM7Ci0gICAgYXV0byBwaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFVubXVsdGlwbGll
ZEltYWdlRGF0YShpbWFnZVJlY3QsICZwaXhlbEFycmF5RGltZW5zaW9ucyk7CisgICAgYXV0byBw
aXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdCk7CiAgICAgaWYgKCFwaXhlbEFycmF5KQog
ICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRG
bG9hdHMobV92YWx1ZXMpOwogCisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IHJl
c3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpOworICAgIHBpeGVsQXJyYXlEaW1lbnNpb25zLnNjYWxl
KHJlc3VsdEltYWdlLT5yZXNvbHV0aW9uU2NhbGUoKSk7CisKICAgICBzd2l0Y2ggKG1fdHlwZSkg
ewogICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpA
QCAtMzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3
YXJlKCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVB
cnJheSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBpbWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdElt
YWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCAqcGl4ZWxBcnJheSwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0KTsKIH0KIAogc3RhdGlj
IFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENvbG9yTWF0cml4
VHlwZSYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzll
YTJkNTYxOGU4ZmRkZDg0ZWNiLi4yNWQ1N2FmMDZjMDFhN2M3OGE3ZmI5NDdkNDA1ODAwNGVhNzE3
MmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsMTMgKzEwMCwxMyBAQCB2b2lkIEZFRHJv
cFNoYWRvdzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIC8vIFRPRE86IERpcmVjdCBw
aXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1hZ2VE
YXRhLgogICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+aW50
ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVyOjpC
YWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSBy
ZXN1bHRJbWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNoYWRvd0FyZWEsIENvb3JkaW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAgICAg
aWYgKCFzcmNQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0U2hhZG93
LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgc2hhZG93QXJlYS5zaXplKCks
IDQgKiBzaGFkb3dBcmVhLnNpemUoKS53aWR0aCgpKTsKIAotICAgIHJlc3VsdEltYWdlLT5wdXRC
eXRlQXJyYXkoKnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBJbWFnZUJ1
ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqc3JjUGl4
ZWxBcnJheSwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIENvb3Jk
aW5hdGVTeXN0ZW06OkJhY2tpbmdTdG9yZSk7CiAKICAgICByZXN1bHRDb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlSW4pOwogICAgIHJlc3VsdENv
bnRleHQuZmlsbFJlY3QoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgYWJzb2x1dGVQYWludFJlY3Qo
KS5zaXplKCkpLCBtX3NoYWRvd0NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCmluZGV4IDQ5ZThjNWEyNmU3NzFjNDI0OTY3ODE5
NTI3YTU2MjczNTNkZjQ0OTYuLmRkMzVjYzY1YjEzN2Q4MjJjNzAxNTMyZGFiZDI0OTAwNGJmMmE5
ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RmlsdGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXIuaApAQCAtNzEsNyArNzEsNyBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gbV9zb3VyY2VJbWFnZTsKICAgICBGbG9hdFNpemUgbV9maWx0ZXJSZXNvbHV0
aW9uOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2Fic29sdXRlVHJhbnNmb3JtOwotICAgIFJlbmRl
cmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgVW5hY2NlbGVyYXRlZCB9OworICAgIFJlbmRlcmlu
Z01vZGUgbV9yZW5kZXJpbmdNb2RlIHsgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCB9Owog
ICAgIGZsb2F0IG1fZmlsdGVyU2NhbGUgeyAxIH07CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5k
ZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0ZmM1NTA3NGEyZjk3MmI1OTBmYS4uNWM4YjNiNGRlMGFm
YTcxNDU4Y2RjZjZjNmJjMGZmZDJjY2JkMTQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjc5
LDkgKzI3OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0
KCkKIAogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0g
ICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9u
UmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNp
emUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCks
IGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7
CiB9CiAKQEAgLTQ0Myw3ICs0NDMsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVVubXVsdGlw
bGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24sIGNvbnN0CiAgICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNv
bnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZl
clJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1h
Z2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNl
IHsKQEAgLTQ2OSw3ICs0NjksNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxp
ZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICgh
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpIHsKICAgICAgICAgLy8gV2UgcHJlZmVyIGEgY29u
dmVyc2lvbiBmcm9tIHRoZSBpbWFnZSBidWZmZXIuCiAgICAgICAgIGlmIChtX2ltYWdlQnVmZmVy
UmVzdWx0KSB7Ci0gICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1h
Z2VCdWZmZXJSZXN1bHQtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2lu
dCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBt
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOwogICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxz
ZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1h
Z2VCdWZmZXJHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0lt
YWdlQnVmZmVyR3RrLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1YTBkNTBm
OGNlMWFhZjY1MzVkZWVjOTQwYjg1ZGM1NTE3ZTRiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW1hZ2VCdWZmZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8q
Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
Ci0gKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR1JlZlB0ckd0ay5o
IgotI2luY2x1ZGUgIkdka0NhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1
ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2Uo
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIEdVbmlxdWVPdXRQdHI8Z2NoYXI+JiBidWZmZXIsIGdzaXplJiBi
dWZmZXJTaXplKQotewotICAgIC8vIExpc3Qgb2Ygc3VwcG9ydGVkIGltYWdlIGVuY29kaW5nIHR5
cGVzIGNvbWVzIGZyb20gdGhlIEdka1BpeGJ1ZiBkb2N1bWVudGF0aW9uLgotICAgIC8vIGh0dHA6
Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dkay1waXhidWYvc3RhYmxlL2dkay1waXhidWYtRmlsZS1z
YXZpbmcuaHRtbCNnZGstcGl4YnVmLXNhdmUtdG8tYnVmZmVydgotCi0gICAgU3RyaW5nIHR5cGUg
PSBtaW1lVHlwZS5zdWJzdHJpbmcoc2l6ZW9mICJpbWFnZSIpOwotICAgIGlmICh0eXBlICE9ICJq
cGVnIiAmJiB0eXBlICE9ICJwbmciICYmIHR5cGUgIT0gInRpZmYiICYmIHR5cGUgIT0gImljbyIg
JiYgdHlwZSAhPSAiYm1wIikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR1JlZlB0cjxH
ZGtQaXhidWY+IHBpeGJ1ZjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIpIHsKLSAgICAgICAgLy8g
SlBFRyBkb2Vzbid0IHN1cHBvcnQgYWxwaGEgY2hhbm5lbC4gVGhlIDxjYW52YXM+IHNwZWMgc3Rh
dGVzIHRoYXQgdG9EYXRhVVJMKCkgbXVzdCBlbmNvZGUgYSBQb3J0ZXItRHVmZgotICAgICAgICAv
LyBjb21wb3NpdGUgc291cmNlLW92ZXIgYmxhY2sgZm9yIGltYWdlIHR5cGVzIHRoYXQgZG8gbm90
IHN1cHBvcnQgYWxwaGEuCi0gICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG5ld1N1cmZh
Y2U7Ci0gICAgICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZhY2UpID09IENBSVJP
X1NVUkZBQ0VfVFlQRV9JTUFHRSkgewotICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgQ0FJUk9fRk9STUFUX1JHQjI0LAot
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAot
ICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSwK
LSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZSkp
KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFNpemUgc2l6ZSA9IGNhaXJvU3Vy
ZmFjZVNpemUoc3VyZmFjZSk7Ci0gICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0
UmVmKGNhaXJvX2NyZWF0ZShuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgICAgICAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAsIDApOwotICAgICAgICAgICAg
Y2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotICAgICAgICB9Ci0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0
R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1ZihuZXdTdXJmYWNlLmdldCgpKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHBpeGJ1ZiA9IGFkb3B0R1JlZihjYWlyb1N1cmZhY2VUb0dka1BpeGJ1Zihz
dXJmYWNlKSk7Ci0gICAgaWYgKCFwaXhidWYpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAgICBpZiAodHlwZSA9PSAianBlZyIgJiYg
cXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKSB7Ci0gICAgICAg
IFN0cmluZyBxdWFsaXR5U3RyaW5nID0gU3RyaW5nOjpudW1iZXIoc3RhdGljX2Nhc3Q8aW50Pigq
cXVhbGl0eSAqIDEwMC4wICsgMC41KSk7Ci0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZm
ZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4
KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksICJxdWFsaXR5IiwgcXVhbGl0eVN0cmluZy51dGY4
KCkuZGF0YSgpLCBOVUxMKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3Rv
X2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBl
LnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgTlVMTCk7Ci0KLSAgICByZXR1cm4gIWVy
cm9yOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhID0gdG9EYXRhKG1pbWVUeXBlLCBx
dWFsaXR5KTsKLSAgICBpZiAoaW1hZ2VEYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJk
YXRhOiwiOwotCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2Rl
KGltYWdlRGF0YS5kYXRhKCksIGltYWdlRGF0YS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAg
cmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQot
Ci1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBl
KSk7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVy
U2l6ZTsKLSAgICBpZiAoIWVuY29kZUltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1pbWVU
eXBlLCBxdWFsaXR5LCBidWZmZXIsIGJ1ZmZlclNpemUpKQotICAgICAgICByZXR1cm4geyB9Owot
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpbWFnZURhdGEuYXBwZW5kKGJ1
ZmZlci5nZXQoKSwgYnVmZmVyU2l6ZSk7Ci0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQotfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDM0RMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAppbmRleCA0YzRjNDI2OTYxMjcx
YzdiN2ExOWQyOTZhOTQwMGVmZGMwZmFjOWFlLi43NTcwMDNiMWYxMWRmNGIyNzY2YjQwOWU4MjJj
ZDhiNDIwZmI0YTViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9uaWNvc2lhL3RleG1hcC9OaWNvc2lhR0MzRExheWVyLmNwcApA
QCAtOTQsNyArOTQsNyBAQCB2b2lkIEdDM0RMYXllcjo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCgpCiAg
ICAgSW50U2l6ZSB0ZXh0dXJlU2l6ZShtX2NvbnRleHQubV9jdXJyZW50V2lkdGgsIG1fY29udGV4
dC5tX2N1cnJlbnRIZWlnaHQpOwogICAgIFRleHR1cmVNYXBwZXJHTDo6RmxhZ3MgZmxhZ3MgPSBt
X2NvbnRleHQuY29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSA/IFRleHR1cmVNYXBwZXJHTDo6U2hv
dWxkQmxlbmQgOiAwOwogI2lmIFVTRShBTkdMRSkKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZXh0dXJlU2l6ZSwgVW5h
Y2NlbGVyYXRlZCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRl
eHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1h
cFRleHR1cmUuY3BwCmluZGV4IDdkMmNlZmQ2MjYxZGVlMmEzOWE4OWQxMDE3MDJlYjUwMjUyZjRm
NWUuLmYwMzkxMzgwNjBkMzQ0MzRlNmNkZGJmOTZlYTY0YzMwMWE2MzU1M2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4
dHVyZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAgdm9pZCBCaXRtYXBUZXh0dXJlOjp1cGRhdGVDb250
ZW50cyhUZXh0dXJlTWFwcGVyJiwgR3JhcGhpY3NMYXllciogc291cmNlTGF5ZXIsIGMKIHsKICAg
ICAvLyBNYWtpbmcgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyIGhlcmUg
aXMgT0sgYmVjYXVzZSB0aGlzIGNvZGUKICAgICAvLyBpc24ndCB1c2VkIGJ5IGFueSBwbGF0Zm9y
bXMgdGhhdCByZXNwZWN0IHRoZSBhY2NlbGVyYXRlZCBiaXQuCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGFyZ2V0UmVj
dC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBS
ZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKaW5kZXggY2ExMWJiOGJhMGIxOTEwYzYyNzk2
N2Q0ZDI2MGIwNGM2ODQ4NjczMS4uNWFjOWQ2NjA2YzQyMjEyNDhiYzQxZGU5Mzg5Y2U1Yzg3ZTRh
NDE3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZS5jcHAKQEAgLTQ1OCw3ICs0NTgsNyBAQCBJbWFnZUJ1ZmZlciog
TW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2U6OmltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAobV9p
bWFnZUJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAKLSAgICBt
X2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJlU2l6ZSgpLCBVbmFjY2Vs
ZXJhdGVkKTsKKyAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjYXB0dXJl
U2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIW1faW1hZ2VC
dWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcAppbmRleCBkNWI5MWIyNjg2YWUyNjFlYjUzYzA2ODliZWVjNjJmNTVl
M2ZiNDU4Li44ZjUwZTU3NTcxZDdiMzg1MDBlZWQ3YmNkYTZiM2E2NDJhYmY3OTUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTY5MDUsNyArNjkwNSw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUZpbHRlclBhaW50aW5nU3RyYXRlZ3koKQogICAgIH0K
ICAgICAKICAgICBlbnN1cmVMYXllckZpbHRlcnMoKTsKLSAgICBtX2ZpbHRlcnMtPmJ1aWxkRmls
dGVyKHJlbmRlcmVyKCksIHBhZ2UoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNl
dHRpbmdzKCkuYWNjZWxlcmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFj
Y2VsZXJhdGVkKTsKKyAgICBtX2ZpbHRlcnMtPmJ1aWxkRmlsdGVyKHJlbmRlcmVyKCksIHBhZ2Uo
KS5kZXZpY2VTY2FsZUZhY3RvcigpLCByZW5kZXJlcigpLnNldHRpbmdzKCkuYWNjZWxlcmF0ZWRG
aWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllcjo6ZmlsdGVyTmVlZHNS
ZXBhaW50KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKaW5kZXgg
OTE0MjAyOWEyZDQ0NjRkZjVjYjdiM2E0NDE5M2JlMjg2M2MxZWQyYS4uOTM1YTZlZTllNzZmZjQ0
MDJmOTg0YjVkMmI1MjFhNjk5MWM2MTUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3No
YXBlcy9TaGFwZS5jcHAKQEAgLTE4MSwxNCArMTgxLDE0IEBAIHN0ZDo6dW5pcXVlX3B0cjxTaGFw
ZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBpbWFnZSwgZmxvYXQgdGhyZXNob2xk
LCBjCiAgICAgSW50UmVjdCBtYXJnaW5SZWN0ID0gc25hcHBlZEludFJlY3QobWFyZ2luUik7CiAg
ICAgYXV0byBpbnRlcnZhbHMgPSBtYWtlVW5pcXVlPFJhc3RlclNoYXBlSW50ZXJ2YWxzPihtYXJn
aW5SZWN0LmhlaWdodCgpLCAtbWFyZ2luUmVjdC55KCkpOwogICAgIC8vIEZJWE1FICgxNDk0MjAp
OiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KGltYWdlUmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogCiAgICAg
aWYgKGltYWdlQnVmZmVyKSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCYgZ3JhcGhpY3NDb250
ZXh0ID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKTsKICAgICAgICAgaWYgKGltYWdlKQogICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9pbnQo
KSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CisgICAgICAgIFJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRSZWN0KEludFBvaW50KCks
IGltYWdlUmVjdC5zaXplKCkpKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQocGl4ZWxBcnJheSk7
CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhlbEFycmF5LT5sZW5ndGgo
KTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7IC8vIEVhY2ggcGl4ZWwg
aXMgZm91ciBieXRlczogUkdCQS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcAppbmRleCAwOGU0OTI4MmFkOTNi
Y2FjZDI5Nzc1Yjg0NmYwNTlkNWEyY2E3MTNlLi4xZDc3YjYzYzZmZTI4MzEyYWUxMWVkODI1YjUy
M2FhY2U3MTdlYzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGMKIAogICAgIGlmIChzaG91bGRDcmVhdGVDbGlwcGVyTWFza0lt
YWdlICYmICFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gRklYTUUgKDE0OTQ2
OSk6IFRoaXMgaW1hZ2UgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNj
ZWxlcmF0ZWQuIE1ha2luZyBpdCBtYXRjaCB0aGUgY29udGV4dCBicmVha3MgbmVzdGVkIGNsaXBw
aW5nLCB0aG91Z2guCi0gICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250
ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENv
bG9yU3BhY2U6OlNSR0IsIFVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKKyAgICAgICAgY2xpcHBl
ck1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFp
bnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6U1JHQiwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgJmNvbnRleHQpOwogICAgICAgICBpZiAoIWNsaXBwZXJNYXNrSW1h
Z2UpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKaW5kZXggNzVi
NTliNjNjM2U0OTYwYmQ0ZTNiZGJkODc0OTJhOTMyZjQzMTYxYi4uMTJlN2YxNWQ2MzJkNzZkOTlm
NmJhYmE5MzhkMGQ5ZTI2MzRkOGU4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTE5MSw3ICsxOTEs
NyBAQCBib29sIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjphcHBseVJlc291cmNlKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBSZW5kZQogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5zY2Fs
ZShzY2FsZS53aWR0aCgpLCBzY2FsZS5oZWlnaHQoKSk7CiAgICAgZWZmZWN0aXZlVHJhbnNmb3Jt
Lm11bHRpcGx5KGZpbHRlckRhdGEtPnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKIAotICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gQWNjZWxlcmF0ZWQgOiBVbmFjY2VsZXJhdGVkOworICAg
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHJlbmRlcmVyLnNldHRpbmdzKCkuYWNjZWxl
cmF0ZWRGaWx0ZXJzRW5hYmxlZCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOwogICAgIGF1dG8gc291cmNlR3JhcGhpYyA9IFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKGZpbHRlckRhdGEtPmRyYXdpbmdSZWdp
b24sIGVmZmVjdGl2ZVRyYW5zZm9ybSwgQ29sb3JTcGFjZTo6TGluZWFyUkdCLCByZW5kZXJpbmdN
b2RlLCBjb250ZXh0KTsKICAgICBpZiAoIXNvdXJjZUdyYXBoaWMpIHsKICAgICAgICAgQVNTRVJU
KCFtX3JlbmRlcmVyRmlsdGVyRGF0YU1hcC5jb250YWlucygmcmVuZGVyZXIpKTsKQEAgLTI4Niw3
ICsyODYsNyBAQCB2b2lkIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpwb3N0QXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgR3JhcGhpYwogICAgICAgICAgICAgY29udGV4dC0+
Y29uY2F0Q1RNKGZpbHRlckRhdGEuc2hlYXJGcmVlQWJzb2x1dGVUcmFuc2Zvcm0pOwogICAgICAg
ICB9CiAgICAgfQotICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlci5yZXNldCgpOwor
ICAgIGZpbHRlckRhdGEuc291cmNlR3JhcGhpY0J1ZmZlciA9IG51bGxwdHI7CiAKICAgICBMT0df
V0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRlciAi
IDw8IHRoaXMgPDwgIiBwb3N0QXBwbHlSZXNvdXJjZSBkb25lXG4iKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5j
cHAKaW5kZXggMTc4N2UxOGMyZGNlZjViZGY5OTI0NzRjZmMwMjJiNTE2NmFkNTg0OC4uMTIwYzU3
YjU2OTc4NzIyMDQ2NWJjNmFlYzBiNTgwNGM0NTVjZDgyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZU1hc2tlci5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZU1hc2tlcjo6YXBwbHlSZXNvdXJj
ZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICAgICAgY29uc3QgU1ZH
UmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGUoKS5zdmdTdHlsZSgpOwogICAgICAgICBDb2xv
clNwYWNlIGNvbG9yU3BhY2UgPSBzdmdTdHlsZS5jb2xvckludGVycG9sYXRpb24oKSA9PSBDb2xv
ckludGVycG9sYXRpb246OkxpbmVhclJHQiA/IENvbG9yU3BhY2U6OkxpbmVhclJHQiA6IENvbG9y
U3BhY2U6OlNSR0I7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NzApOiBUaGlzIGltYWdlIGJ1ZmZl
ciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQg
bWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIGFscGhhIG1hc2tpbmcsIHRob3VnaC4KLSAgICAgICAg
bWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VC
dWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBjb2xvclNwYWNlLCBVbmFjY2Vs
ZXJhdGVkLCBjb250ZXh0KTsKKyAgICAgICAgbWFza2VyRGF0YS0+bWFza0ltYWdlID0gU1ZHUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJh
bnNmb3JtLCBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLCBjb250ZXh0
KTsKICAgICAgICAgaWYgKCFtYXNrZXJEYXRhLT5tYXNrSW1hZ2UpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCmluZGV4
IGI4MjE0MTFhZGU3NzUwODU2MTY4ODU2ZWQyMmI2MmVhNmI1Y2QzZDkuLjk3ODY3YWFkM2MyN2I1
YjUzOGQzYTc5ZmI0OTVkZGQ0ZjBmNDNkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L1NWR0ltYWdlLmNwcApAQCAtMjE4LDcgKzIxOCw3IEBAIE5hdGl2ZUltYWdlUHRyIFNWR0ltYWdl
OjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZShjb25zdCBHcmFwaGljc0NvbnRleHQqKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIC8vIENhaXJvIGRvZXMgbm90IHVzZSB0aGUgYWNj
ZWxlcmF0ZWQgZHJhd2luZyBmbGFnLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVm
ZmVyKSAvLyBmYWlsZWQgdG8gYWxsb2NhdGUgaW1hZ2UKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2Vi
S2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDUzMjY3OGYzNzYwMzNjM2MwMGY5ZjZiZDVhMzBjMzg2
OTBlMzM0YmYuLjBhYjkyMDE2MjRlODYwYTBkOWNjMGYwNzE5ZmE2MzE1ZjJmMTU2MmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYktpdC9D
TWFrZUxpc3RzLnR4dApAQCAtMTcsNiArMTcsNyBAQCBzZXQoV2ViS2l0X0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAiJHtXZWJLaXRfREVSSVZFRF9TT1VSQ0VTX0RJUn0vaW5jbHVkZSIKICAgICAi
JHtXRUJLSVRfRElSfSIKICAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzIgorICAgICIke1dF
QktJVF9ESVJ9L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCIKICAgICAiJHtXRUJLSVRfRElS
fS9OZXR3b3JrUHJvY2VzcyIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9DbGFz
c2lmaWVyIgogICAgICIke1dFQktJVF9ESVJ9L05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMiCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKaW5kZXggZWRmYjZl
MWUwNWU1NjQwMDhiN2Q1N2E4NzQ1Mzc4YzQzZDY2Y2Y5Ni4uN2E1MjE0MjVmZjkzMTcyYjVhYjdl
MWRjMjQyMGFmZTY1Yzk3NmY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdApAQCAtMTUsNiArMTUsOCBAQCAkKEpBVkFTQ1JJUFRDT1JFX1BSSVZB
VEVfSEVBREVSU19ESVIpL21vZGVscy5weQogJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURF
UlNfRElSKS94eGQucGwKICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9HUFVQcm9j
ZXNzLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tYWMvY29tLmFwcGxlLldlYktpdC5H
UFVQcm9jZXNzLnNiLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlclByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9j
ZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLm1lc3NhZ2VzLmluCkBAIC0xMDIs
NiArMTA0LDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3Jh
Z2VDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFi
YXNlcy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0
aW9uLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQ
cm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1v
dGVDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0CmluZGV4IGRmYmMwZWZlNmI4NDcyNmY5NmM4OTgyOGNkODNkMGVkNzU5
MDVhMDYuLjkwZDkxMTFmZDEwZTg2MzQ1YjdlZjRmZjUzYjE1OWEwYzMxMmNhYzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYg
KzEyMCwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9Q
bHVnaW5Qcm9jZXNzUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1l
c3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Bs
dWdpblByb3h5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZm
ZXJNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJl
Y2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxp
ZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgK
QEAgLTE0Miw2ICsxNDgsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNz
YWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBs
aWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVD
VFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGlu
YXRvck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3JNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4
IGUyOTA5MzA5N2NkOWJkZWIzNDVhMTlhNWQzN2ZlNTdhNTQwZGViNzAuLjhjNzUzZDE2ZjQwZGZk
ZGNmZTE3NDViYWE1ZmU1OWJmMjk2ODc3ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVy
aXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UK
QEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwK
ICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nl
c3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwK
ICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdv
cmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAt
NTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9j
YXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9NZWRpYUNhY2hlIFwKQEAgLTE0MCw2ICsxNDIsOCBAQCBNRVNTQUdFX1JFQ0VJ
VkVSUyA9IFwKICAgICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIgXAogICAgIFBsdWdp
blByb2Nlc3NQcm94eSBcCiAgICAgUGx1Z2luUHJveHkgXAorICAgIFJlbW90ZUltYWdlQnVmZmVy
IFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90
ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwKQEAgLTE0Nyw2ICsxNTEsNyBAQCBNRVNTQUdFX1JF
Q0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3Rl
TWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNjcm9sbGluZ0Nvb3JkaW5h
dG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAgUmVtb3RlV2ViSW5zcGVj
dG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDYyMGI0MWYyOGQ2Njc2YTNkZTE3ZjQ3NmIyZGYzODhm
ZmY2NDc3MGQuLmEzNzFjZjIzZGE3N2ZhNzZlM2U0MDNkZGMyZDNhZGI2NjE5MDFjNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKQEAgLTE2MCw1MiArMTYwLDY4IEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94eSgpCiB9CiAjZW5kaWYK
IAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVz
c2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6
OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAg
aWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRp
YVJlY29yZGVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlh
UmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVk
aWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMp
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJX
ZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldl
YlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJl
cGx5RW5jb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2Vi
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlz
cGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQor
Cit2b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQo
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7
CisgICAgQVNTRVJUKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNy
ZWF0ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VS
VChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eSA9IG51bGxwdHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZjQ4
NTk2NGQ0NmM1MmUzMzhkMmFiZTRmNzY1ZGRjYjVhOTRhMDc5MC4uMDI3MDM3ZmU5OTQ2NDA5ZjA2
YzIzYmY2Y2VjZDM3ODUzYTU2ZTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVk
ZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmll
ci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ3
LDE4ICs0OSwyMCBAQCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogCiBjbGFz
cyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUo
R1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246
OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAg
ICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9
CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFu
dXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5z
aW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAog
ICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC03NywxNCArODEsMjEgQEAgcHJpdmF0ZToKIAogICAg
IC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5l
Y3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lk
IGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5h
bDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9p
ZCBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAg
ICB2b2lkIHJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVj
dGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7Cisg
ICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29u
c3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtOTYsNiAr
MTA3LDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29k
ZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJl
MDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2
ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyAr
MjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2Vu
ZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2Vu
ZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTcwZjQyMmMzZTQ2OTNhMDEyODk4MThhMWMzMjk0NGVkY2Yz
M2QxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlN
ZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisg
ICAgLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7Cisg
ICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1l
c3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRp
Zmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAg
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJ
UEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJE
ZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIudG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29u
c3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
V1RGTW92ZShoYW5kbGUpKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFJl
bW90ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dChjb25zdCBEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElk
ZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXIoZmx1c2hJ
ZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMzY4YjYyNjRmZDEwYWQ0MzE3ZWU0ZjNm
NmQ2ODM0ZWQ1NzFmMDY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlm
aWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNl
bmRlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUg
PHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNz
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVy
CisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZl
cklkZW50aWZpZXIpOworICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3Rl
ZDoKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3Nh
Z2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1l
c3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIHJlbW90ZUNyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIHZv
aWQgZmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYs
IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVz
aENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOwor
CisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M7CisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwYWU3OGUyY2U0YWI5NTE5YjY1YWI4NGI0ZDcyZGRlYjVl
Yzk1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEs
MjkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBOb3RS
ZWZDb3VudGVkIHsKKyAgICB2b2lkIEZsdXNoQ29udGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi43ZmU0ZTFlM2FkNTIxODU0NWM5NTFmNmNjMTRjZmU2ZDBkZjFkZWY4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBs
YXllci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6UGh5c2ljYWxJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHsK
KyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OlBoeXNpY2FsSW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVy
OjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVy
SWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZl
cjo6dGVtcGxhdGUgY3JlYXRlPFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eT4oc2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBudWxscHRyLCBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eShzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2Vu
ZCwgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICAgICAgOiBC
YXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKQorICAgICAgICAsIFJlbW90
ZUltYWdlQnVmZmVyUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmVtb3RlQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
KG1fYmFja2VuZC0+bG9naWNhbFNpemUoKSwgbV9iYWNrZW5kLT5pbnRlcm5hbFNpemUoKSwgbV9i
YWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFj
a2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
IWRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllciByZXBsYXllcihCYXNlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjo6Y29udGV4dCgpLCBkaXNwbGF5TGlzdCk7CisgICAgICAgIHJlcGxheWVyLnJlcGxh
eSgpOworICAgICAgICBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCk7Cisg
ICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRhNTBkN2VmNzBhZDNkOTgwNmRjZjY2OTQ1YmViZDlmZDM3MjkyZDEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVm
ZmVyUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eTxQbGF0Zm9y
bVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OwordXNpbmcgUmVtb3Rl
UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uODE3MGIzMzA3MDNlMGNkZjUyNDgzZWQ2MTI2YzJjMDAyYTRjNDYyYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0
cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0
KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1h
cCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRv
VUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAg
ICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3Zl
TWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2
NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkK
KyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIg
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRh
aW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOworICAgIGlmICgh
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKyAgICAKKyAgICBzd2l0Y2ggKHJl
bmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVk
OgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlclByb3h5OjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgKmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAg
IGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUobG9n
aWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgaWYg
KCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pbWFnZUJ1ZmZlck1hcC5h
ZGQoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdlQnVmZmVyKSk7Cit9CisKK3Zv
aWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VC
dWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICAvLyBDcmVhdGVT
dXJmYWNlIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUu
CisgICAgaWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmll
cikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM5OTM4YmVlNTExZTY5ZGZlZmZkZTU0OWQwODIyMjc4OWU0ODA4MTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVz
c2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNl
Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFr
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHByaXZh
dGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5KCk7CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7
IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8v
IElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJD
b25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRl
c3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVm
ZmVySWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKKworICAgIHVzaW5nIEltYWdlQnVmZmVyTWFwID0gSGFzaE1hcDxJbWFnZUJ1
ZmZlcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4+Owor
ICAgIEltYWdlQnVmZmVyTWFwIG1faW1hZ2VCdWZmZXJNYXA7CisgICAgV2Vha1B0cjxHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1l
c3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4N2Y4MDJjMzZmZDk1
N2JjNDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KQEAgLTAs
MCArMSwzMCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3Jl
OjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikK
KyAgICB2b2lkIFJlbGVhc2VJbWFnZUJ1ZmZlcihXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmll
ciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBjZWZmM2My
NjA1YTFmODVkNWQ5OTBhNjRjM2YyODIwM2QxMTUyMzIwLi4zMTQwNDc4ZjQxN2QwY2ZlMGQzMDRh
ODgzNDdhZTVhNDc0ZWNiZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Vi
a2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBh
cnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitX
QU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScK
IExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09V
TlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FU
VFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhh
dF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwog
ICAgICAgICAnTWFjaFNlbmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAnV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xvclNw
YWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlm
aWVyJywKQEAgLTIxMSw2ICsyMTQsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2Fy
ZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6UGFnZUlkZW50aWZpZXInLAogICAgICAg
ICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlm
aWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2ViQ29y
ZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdv
cmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xp
ZW50RGF0YScsCkBAIC0yMTgsMTAgKzIyMiwxNCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVf
Zm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlclJlZ2lz
dHJhdGlvbklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U1dTZXJ2ZXJDb25uZWN0aW9u
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCisg
ICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZScsCisgICAgICAgICdXZWJL
aXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VC
dWZmZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElE
JywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcics
CiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YktpdDo6UmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJ
ZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXInLApAQCAtNzYyLDEzICs3NzAsMTYg
QEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgIGVsc2U6
CiAgICAgICAgICAgICBhc3luY19tZXNzYWdlcy5hcHBlbmQobWVzc2FnZSkKIAotICAgIGlmIGFz
eW5jX21lc3NhZ2VzOgorICAgIGlmIGFzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRy
aWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQu
YXBwZW5kKCd2b2lkICVzOjpkaWRSZWNlaXZlJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNl
aXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJ
QlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlm
IG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJ
QlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyk7XG4nKQogCiAgICAgICAgIHJlc3VsdCArPSBbYXN5bmNfbWVzc2Fn
ZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIGFzeW5jX21lc3Nh
Z2VzXQorICAgICAgICBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01F
U1NBR0VfQVRUUklCVVRFKToKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlz
cGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgaWYgKHJlY2VpdmVyLnN1cGVy
Y2xhc3MpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICVzOjpkaWRSZWNlaXZlTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTtcbicgJSAocmVjZWl2ZXIuc3VwZXJjbGFzcykpCiAg
ICAgICAgIGVsc2U6CkBAIC03NzcsMTMgKzc4OCwxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9o
YW5kbGVyKHJlY2VpdmVyKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ31cbicpCiAKLSAgICBp
ZiBzeW5jX21lc3NhZ2VzOgorICAgIGlmIHN5bmNfbWVzc2FnZXMgb3IgcmVjZWl2ZXIuaGFzX2F0
dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CiAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoJ1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2
ZVN5bmMlc01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpXG4n
ICUgKHJlY2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0
ZShMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgne1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JF
RkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAgICAgICAgIHJl
c3VsdCArPSBbc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1l
c3NhZ2UgaW4gc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0
ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlciwg
cmVwbHlFbmNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJl
dHVybjtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0oY29ubmVj
dGlvbik7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGRlY29k
ZXIpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShyZXBseUVu
Y29kZXIpO1xuJykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgKaW5kZXggODRkNDM5YzUwNTQwNGI3ZTU5MDViMzZlN2RlYzc2ODlkZGZhOTQ1NC4uMDlhMTQy
ZWZjMDUxMmJkNWRhYTQ0MDQ1OGFiMzc3MzIzN2FlMWZmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Fs
cGhhUHJlbXVsdGlwbGljYXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0F1dG9wbGF5RXZlbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0Rp
YWdub3N0aWNMb2dnaW5nQ2xpZW50Lmg+CkBAIC0zNiw2ICszNyw3IEBACiAjaW5jbHVkZSA8V2Vi
Q29yZS9OZXR3b3JrTG9hZE1ldHJpY3MuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdGlmaWNhdGlv
bkRpcmVjdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVhbHRpbWVNZWRpYVNvdXJjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Ny
b2xsU25hcE9mZnNldHNJbmZvLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXJ2aWNlV29ya2VyVHlw
ZXMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1N0b3JlZENyZWRlbnRpYWxzUG9saWN5Lmg+CkBAIC04
MDMsNiArODA1LDI2IEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6
U2VyaWFsaXplZEF0dGFjaG1lbnREYXRhPiB7CiAKIG5hbWVzcGFjZSBXVEYgewogCit0ZW1wbGF0
ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24+IHsK
KyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVs
dGlwbGljYXRpb24sCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQKKyAgICA+OworfTsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsCisgICAg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBXZWJD
b3JlOjpSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdN
b2RlOjpSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpSZW1v
dGUKKyAgICA+OworfTsKKwogdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpD
b2xvclNwYWNlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKICAgICBXZWJDb3Jl
OjpDb2xvclNwYWNlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggMzA2Y2QxZTY5MzU2NjFhZDQxYzA2MDkyODQ4
YmY5YWYzNmIxYjcyNi4uYmIxZmVjMmFhNjE3NzA5NmIzNDJjMDM1OTAwYmIyYWVmMWE4NjU0OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NvdXJjZXMudHh0CkBAIC0zMSw2ICszMSw4IEBAIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVk
aWFQbGF5ZXJQcm94eS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZS5j
cHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZUxvYWRlci5jcHAKIEdQVVBy
b2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIuY3BwCitHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiAKIE5ldHdvcmtQ
cm9jZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTE0LDYgKzUxNiw5IEBAIFdlYlByb2Nlc3MvR1BV
L21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90
ZU1lZGlhUGxheWVyTUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL0dQVS9t
ZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKK1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCitXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9j
ZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRj
L01lZGlhUmVjb3JkZXJQcml2YXRlLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVj
b3JkZXJQcm92aWRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCAwODc2YWRkMTM1NDNl
ZThmY2VlYmE2MzViYTk5OTM2ZWQ3Yzg2YzU2Li42MzBkMGM0OTY0Zjk3NDMzNzBiYTI5NjZkMzk4
ZTMxMDc5ZjM2ZjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQK
KysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC01NTEsNiArNTUxLDggQEAg
V2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KIAogV2ViUHJvY2Vzcy9FbnRyeVBv
aW50L0NvY29hL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCiAKK1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmNwcAorCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVu
ZGxlUGFnZUJhbm5lci5jcHAKIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMv
V0tCdW5kbGVNYWMubW0KQEAgLTYzNSwxMCArNjM3LDE0IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KIC8vIERlcml2ZWQg
U291cmNlcwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAorR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzUHJveHlN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitS
ZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVt
b3RlTWVkaWFSZWNvcmRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTZXJ2aWNlV29ya2Vy
RmV0Y2hUYXNrTWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYWZiZGMyNTc1ZTQ0ODE4NWU0YmNiYzg0MmU0
ZjdhNTQ0MzEzYjQzOS4uMDE1OGEzMWEzM2FhNDgzNDY4YWQxYmQ0NzA4NTM5ZmE4NTgwMjdhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC0zOTc1LDggKzM5NzUsMzIgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91
Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNo
QWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzFBNjc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXpl
ci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rp
b25HZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJl
Y29nbml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYy
N0EwMDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VF
dmVudHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAx
NzU0MTIzQzhGRTAyMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MDE3NTQyMjNDOEZFMDMwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQz
MjNDOEZFMDQwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyU2hh
cmVhYmxlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0NDIz
QzkwMERBMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjAxNzU0NjIzQzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3
NTQ3MjNDOTQ1RDgwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTk4MjNBRDJGRDYwMEJEQUZG
NyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIxRjFFOTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHku
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOUEyM0FE
MkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYx
RUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2MDIzQzE4Mjg3
MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBX
ZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJD
b2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3
OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdl
QnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJl
bW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MTQyM0FC
MEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRTgyM0IzODQyMTAwRjY3
RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQjIz
QjRDN0E5MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmlu
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUMyM0I0QzgyMzAw
RjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkQ1QzJFRDIzQjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFRTIzQjU2Qzg0MDBGNjdENDMg
LyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQy
QzQxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFT
dG9yZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0
ZURhdGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdE
MUMwMTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02NDA5LDYgKzY0MzMsNyBAQAogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkwNzkyMzEyRjIzOUIzQjBDMDA5NTk4RTIgLyog
bWVkaWEgKi8sCisJCQkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tl
bmQgKi8sCiAJCQkJNDE3MjE5ODgyM0I2MTI2MTAwQUU1Njg2IC8qIHdlYnJ0YyAqLywKIAkJCQky
RDdFNDNDMDIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwICovLAog
CQkJCTJEN0U0M0MzMjM3NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5oICov
LApAQCAtNjQyNSw2ICs2NDUwLDcgQEAKIAkJCQkyRDlGQjIwNDIzNzUyMDlEMDA0OUY5MzYgLyog
aW9zICovLAogCQkJCTJEOUZCMjA2MjM3NTIwOUQwMDQ5RjkzNiAvKiBtYWMgKi8sCiAJCQkJMDdD
NzVDMTcyMzk5QTNEQjAwODhFNjVCIC8qIG1lZGlhICovLAorCQkJCTcyMUYxRTk3MjNBRDJGNUMw
MEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOThFMjNCNjMzQ0EwMEFF
NTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ5RkIyMEMyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwICovLAogCQkJCTJEOUZCMjAwMjM3NTIwOUQwMDQ5Rjkz
NiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggKi8sCkBAIC03ODAxLDYgKzc4MjcsNTIg
QEAKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk3
MjAxNzU0NTIzQzk0NUIxMDA0MTg4MUYgLyogY2cgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3NTQ2MjNDOTQ1RDgwMDQxODgxRiAvKiBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyMDE3NTQ3MjNDOTQ1
RDgwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCAqLywK
KwkJCSk7CisJCQlwYXRoID0gY2c7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9Owor
CQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcgLyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNzIxRjFFOUEyM0FEMkZENjAw
QkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAorCQkJCTcyMUYxRTk4MjNB
RDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzIxRjFF
OTkyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4g
Ki8sCisJCQkJNzIzNUM5NjQyM0MxQTA0MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRUE2MjNBRDRGMzMwMEJEQUZGNyAvKiBSZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdE
NDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKKwkJCQk3MkQ1QzJFRDIz
QjRDODIzMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCisJCQkJ
NzJENUMyRUIyM0I0QzdBOTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5t
ZXNzYWdlcy5pbiAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAv
KiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQk3MjAxNzU0NTIzQzk0NUIxMDA0MTg4MUYgLyogY2cgKi8sCisJCQkJNzIwMTc1
NDQyM0M5MDBEQTAwNDE4ODFGIC8qIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oICovLAorCQkJ
CTcyMUYxRUE5MjNBRDdCREYwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5o
ICovLAorCQkJCTcyMUYxRTlCMjNBRDM2RDAwMEJEQUZGNyAvKiBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIuaCAqLywKKwkJCQk3MjAxNzU0MTIzQzhGRTAyMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjAxNzU0MjIzQzhGRTAzMDA0MTg4MUYg
LyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmggKi8sCisJCQkJNzIwMTc1NDMy
M0M4RkUwNDAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgg
Ki8sCisJCQkJNzJCQkU0MEYyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNw
cCAqLywKKwkJCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
aCAqLywKKwkJCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4gKi8sCisJCQkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMzIC8qIFJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyog
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyRDVDMkU3MjNCMzg0MjEwMEY2
N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkQ1QzJFODIzQjM4
NDIxMDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAorCQkJCTcyRDVDMkVF
MjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJ
KTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCAxOGU5
MzZkZTMyMzA3NzBmMjQzNjFiNmFiYWE4ZTE3ZTRkMmU1YWMwLi4xODhmYWMyMGExZTkyM2RmNjJi
YjFhMzgwNTUwYWFhNGY5NGQ4ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjAsMjkgKzYwLDM1IEBAIHZv
aWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzo6Q29ubmVjdGlvbiYpCiB7CiB9
CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UpCi17Ci19Ci0KLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9v
bCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2Vy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAg
ICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVk
aWFDYXB0dXJlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChh
dXRvKiBjYXB0dXJlTWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8
VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFuYWdlci0+
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNpZiBV
U0UoTElCV0VCUlRDKSAmJiBQTEFURk9STShDT0NPQSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjczo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmxpYldlYlJUQ0Nv
ZGVjcygpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBt
ZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7
Cit9CisKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgcmV0dXJuIG1lc3Nh
Z2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlciwg
cmVwbHlFbmNvZGVyKTsKK30KKwordm9pZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJ
UEM6OlN0cmluZ1JlZmVyZW5jZSkKK3sKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgK
aW5kZXggYThhZDRmZWU4NmIyNjU5YjRhZmZiN2M0ODRkYTE4MWMzYmVmMjdkMC4uZThlZTg1ZGMz
MmZlNTc4ZjE3NTM4YmEzZDg5ZmQ3NDYwNzQ2YmEwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBA
QAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNp
bmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Niw2ICs0Nyw3IEBAIHB1
YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAgICBJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJ
UEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9t
ZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgdm9pZCBz
ZXRBdWRpdFRva2VuKE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9rZW4pIHsgbV9hdWRp
dFRva2VuID0gYXVkaXRUb2tlbjsgfQpAQCAtNTgsMTEgKzYwLDE1IEBAIHByaXZhdGU6CiAgICAg
Ly8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29ubmVj
dGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6
RW5jb2Rlcj4mKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1l
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7CiAKKyAgICBib29s
IGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBi
b29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwg
c3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKwogICAgIC8vIFRoZSBjb25uZWN0aW9u
IGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAgICBSZWY8SVBDOjpD
b25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247Ci0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBt
X21lc3NhZ2VSZWNlaXZlck1hcDsKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIE9wdGlvbmFs
PGF1ZGl0X3Rva2VuX3Q+IG1fYXVkaXRUb2tlbjsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbiBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2Fn
ZXMuaW4KaW5kZXggZDM2ZjhhMDk1ZjZhNzdiYmI2Y2FjODgzYTY1MWU4NGNlOWQ2NGIzMC4uNTdm
ZWNkZTlkZjI3YzczOWE2Y2JmMDI2OTgwNjU5MmI1ZTIxNzlhNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1l
c3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
LW1lc3NhZ2VzIC0+IEdQVVByb2Nlc3NDb25uZWN0aW9uIHsKK21lc3NhZ2VzIC0+IEdQVVByb2Nl
c3NDb25uZWN0aW9uIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKIAogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTU5NjMwNjlmNjYx
ODE4M2QwNzhhNjRjMmRlYWNjMmQ4M2E0Y2RlMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNp
bmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgPSBW
YXJpYW50PAorI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIE1hY2hTZW5kUmlnaHQsCisjZW5kaWYK
KyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZQorPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9J
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0MmNmMjQ1ZTM0NWUxZGZl
YzYyZGMxZDdhM2VjYWVmY2Q5YWI1ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5
cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlm
aWVyPEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRp
Zmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVySWRlbnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMWJjOWFlODdkYzhkNzI0MjhhMGI4
MDljYWQwZDgwYTRjZDFjYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKQEAgLTAs
MCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPEltYWdlQnVmZmVySWRlbnRp
ZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTVlN2ZiNTRiNzE0ZTkyMmJmNmZh
ZjMwMzUzY2E4NjBhOGY4ZjJhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHRDRy5oPgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAK
KyAgICBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKyNpZiBQ
TEFURk9STShDT0NPQSkKKyAgICBjb25maWd1cmF0aW9uLmNvbG9yU3BhY2UgPSB7IGNhY2hlZENH
Q29sb3JTcGFjZShjb2xvclNwYWNlKSB9OworI2VuZGlmCisgICAgYXV0byBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbnRlcm5hbFNpemUsIGNvbmZpZ3VyYXRpb24p
OworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
Y29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFjb250
ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBXVEZNb3ZlKGJpdG1hcCksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2Fs
U2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkK
K3sKKyAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZT4oaGFuZGxlKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6
OmNyZWF0ZShXVEZNb3ZlKFdURjo6Z2V0PFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUp
KSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWNv
bnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGJpdG1hcCksIFdURk1vdmUoY29udGV4dCkpKTsK
K30KKworSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBiaXRtYXAsIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IFBsYXRmb3JtSW1hZ2VCdWZmZXJC
YWNrZW5kKGxvZ2ljYWxTaXplLCBwaHlzaWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSkKKyAgICAsIG1fYml0bWFwKFdURk1vdmUoYml0bWFwKSkKKyAgICAsIG1fY29udGV4dChX
VEZNb3ZlKGNvbnRleHQpKQoreworfQorCitJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUoKSBjb25zdAoreworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBt
X2JpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZShXVEZNb3ZlKGhhbmRsZSkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICByZXR1cm4gbV9iaXRtYXAtPm1ha2VDR0lt
YWdlQ29weSgpOworI2VsaWYgVVNFKERJUkVDVDJEKQorICAgIHJldHVybiBudWxscHRyOworI2Vs
aWYgVVNFKENBSVJPKQorICAgIHJldHVybiBtX2JpdG1hcC0+Y3JlYXRlQ2Fpcm9TdXJmYWNlKCk7
CisjZW5kaWYKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOworfQorCitWZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fYml0
bWFwLT5kYXRhKCkpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2Vu
ZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwg
bV9iaXRtYXAtPmRhdGEoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgVWludDhDbGFtcGVkQXJyYXkmIGFycmF5LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBzcmNTaXplLCBzcmNSZWN0LCBkZXN0UG9p
bnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fYml0bWFwLT5kYXRhKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNDcwZWM2OTliYjNlZDY5YWUwMGM2NzRmMzZkNTI3MjI2ODI3MDAyCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmRIYW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
Lmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
Y2xhc3MgU2hhcmVhYmxlQml0bWFwOworCitjbGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgewor
ICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7CisgICAgCisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IGNyZWF0ZShj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdDsKKyAgICAKKyAg
ICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiAqbV9jb250ZXh0OyB9CisKKyAgICBXZWJDb3JlOjpOYXRpdmVJbWFnZVB0ciBjb3B5TmF0
aXZlSW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5n
U3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZT4gY29weUlt
YWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3Jl
LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gPSBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRh
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFn
ZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmLCBXZWJDb3JlOjpDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0
aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHNyY1NpemUsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQsIFdlYkNvcmU6OkNvb3JkaW5hdGVTeXN0ZW0p
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6
Q29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IG1fYml0bWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxh
dGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNzE5MzExNWRl
MTFmMTUyM2RjMDkwZjAxMWMxNDY1MTQ5NDk3NWZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCYWNrZW5kLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKwordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOworCisjaWYgVVNFKENH
KSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VM
RVJBVEVEXzJEX0NBTlZBUykpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJT
aGFyZWFibGVCYWNrZW5kID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOwor
I2Vsc2UKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tl
bmQgPSBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ7Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
YTUxYjRjZTgwZjdiMWE2ZWNiYzgyYmU0NjVkOWE4MWZkMWQzOWQxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVt
b3RlSW1hZ2VCdWZmZXIuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIkdQVVByb2Nl
c3NDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oIgor
I2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90
ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAg
OiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUg
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24uCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3Nh
Z2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2FnZVJlY2VpdmVyTWFw
LmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKSwgKnRoaXMp
OworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQo
TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3JlYXRlSW1hZ2VCdWZmZXIo
c2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX2ltYWdl
QnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitS
ZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUltYWdlQnVmZmVyKCkKK3sKKyAgICAvLyBVbi1yZWdp
c3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2
ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkubWVzc2FnZVJlY2VpdmVyTWFwKCk7CisgICAgbWVzc2Fn
ZVJlY2VpdmVyTWFwLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcigqdGhpcyk7CisKKyAgICAvLyBSZWxl
YXNlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK0lQQzo6Q29u
bmVjdGlvbiogUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nl
c3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1
ZmZlcjo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitib29sIFJlbW90ZUltYWdl
QnVmZmVyOjp3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpD
b25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24t
PndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZl
cjo6Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9z
LCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZl
cyk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIo
KQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAg
ICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2Fn
ZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3lu
Y01lc3NhZ2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBk
YXRlZEJhY2tlbmQoKQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0Nv
dW50ID0gMzsKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAh
aXNCYWNrZW5kQ3JlYXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBN
YXhXYWl0c0NvdW50OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAg
ICB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6
OnNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50
aWZpZXIpCit7CisgICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9IGZsdXNoSWRlbnRpZmll
cjsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAg
bV9zZW50Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXI6OmdlbmVy
YXRlKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Rmx1c2hD
b250ZXh0KGRpc3BsYXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllcik7CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkZDkxOTk1ZmFlNWVhNmUzZjQ4NzRm
NzZhNGNjMzg0NjRjYWJiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNz
YWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0
SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFjaFNlbmRSaWdodC5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXIKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNz
YWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoK
KyAgICB+UmVtb3RlSW1hZ2VCdWZmZXIoKTsKKworcHJvdGVjdGVkOgorICAgIFJlbW90ZUltYWdl
QnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpOworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6
Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB1aW50NjRfdCBtZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgLy8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQo
KTsKKyAgICBib29sIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKKworICAgIHZvaWQgZW5zdXJl
VXBkYXRlZEJhY2tlbmQoKTsKKyAgICBib29sIGlzUGVuZGluZ0ZsdXNoKCkgY29uc3QgeyByZXR1
cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7IH0K
KworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgdm9pZCBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qg
PSAwOworCisgICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIpOyAgICAgICAgCisgICAgdm9pZCByZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVy
YXRlKCkgfTsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50
aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRl
bnRpZmllcjsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXIubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzQxZmQyNGYyOTY5YWE3N2QyYmJlZTcyNzE1YmYy
NmYzYzliYWQyOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCww
ICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJl
ZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKFdlYkNvcmU6OkZs
b2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6
OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRGbHVzaElkZW50
aWZpZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIp
Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Y2UwMjRjN2JiNGMwNzU4
Njc1ZjZiMTA3ZmVkOGZkM2Q3ZTNlZWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZm
ZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciA6IHB1Ymxp
YyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdl
QnVmZmVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlM
aXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdElt
YWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcikKKyAgICB7CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlSW50ZXJuYWxT
aXplKHNpemUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPihuZXcgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6IEJhc2VEaXNw
bGF5TGlzdEltYWdlQnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZmZXIoc2l6
ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVJbWFnZUJ1
ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9iYWNrZW5kKTsKKyAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6
OmNyZWF0ZShsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIFdURk1vdmUoaGFuZGxlKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNCYWNrZW5k
Q3JlYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisg
ICAgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICAgICAg
cmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0
OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZm
ZXI6OnJlbW90ZUZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgIGRpc3BsYXlMaXN0
LmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVi
ZDIwMTYzODA0YjAyNGQ0ZjE0MDFkNDQ2NjM2MjNhZDUzYTk3YWYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxl
QmFja2VuZD47Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBS
ZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wYzU4YWFjNzNlMjViY2E3ZDBhOTMwOTdjNzM2MTk2M2ZlNDBl
YmRmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQo
KSk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQo
KQoreworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAg
IHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVs
ZWFzZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmlu
Z01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6Cisg
ICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNp
emUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihz
aXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5k
b3cpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBm
Mzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
OworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVy
aW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3Jl
YXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25z
dCBXZWJDb3JlOjpIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzU0NzBjY2ZlN2I3OWJiOTI0NTc4YWZiNDE3MDM1Yzkx
M2RkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
Y2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
NjI0NmMyZDk1ZGRmYjVlZTBlM2E1ZDE3NjNiZjJhMjIxZjc2MDQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpZiBV
U0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVz
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgaW50
ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7
CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoaW50ZXJuYWxTaXplLCBp
bnRlcm5hbFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFz
dXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRl
eHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2lu
ZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2lu
dDo6emVybygpLCBpbnRlcm5hbFNpemUpKTsKKyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQorewor
ICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmln
aHQoV1RGTW92ZShXVEY6OmdldDxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSwgY2FjaGVkQ0dDb2xv
clNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUg
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUoKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUobV9zdXJmYWNlLT5jcmVhdGVTZW5kUmlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmZTcwMTA4
OTYyYzcyNDI5MjlkZWVhOWUzNmRlZWJiMjBhNjk2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVhYmxlQml0bWFwOworCitjbGFzcyBJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6
SG9zdFdpbmRvdyopOworICAgIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRT
aXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSk7CisKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlKCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHVzaW5nIFdl
YkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBVU0UoQ0cp
ICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSkKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1
OGEuLjc3MjZmZTk0OGEyMjc5YmJmOTM5ZjA2NDRmNjQ1NjgyZWQ2Yjc5ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCkBAIC0xMDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Nb2Nr
V2ViQXV0aGVudGljYXRpb25Db25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CkBAIC04ODEsMTUgKzg4NSwyMiBAQCBHcmFwaGljc0xheWVyRmFj
dG9yeSogV2ViQ2hyb21lQ2xpZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAK
ICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQ
dHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlS
ZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAg
aWYgKGF1dG8qIGRyYXdpbmdBcmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJl
dHVybiBkcmF3aW5nQXJlYS0+Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7
CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CisjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRl
cmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNv
bnN0Cit7CisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSgpOwogI2VuZGlmCit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290
R3JhcGhpY3NMYXllcihGcmFtZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCmluZGV4IGZkYTMzOGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFmNjc5NGVkMWMyY2QuLjRk
ZWRmZWU3ODQxMTY1ZTU3N2Q5NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKQEAgLTIzMSw2ICsyMzEsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQ
bGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkg
Y29uc3QgZmluYWw7CisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9z
aXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5t
bQppbmRleCBlZjAzNTAzNDJiYjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEw
NjliNTdmYmY2NTk0ODg3NTQxMjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5tbQpAQCAtMjAyLDcgKzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0
TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3Qs
IGFuZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUg
d2l0aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjMzAwN2IzZmMyM2Q4
OWY4MzIyZTJmMDgxOTUxYmNhZDdiYmI4YjAyLi4zN2Y0YTdlMWQyNGExYzRkMjE3OTljYjBjNDJm
MmQwMDM3NGMyZDUxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDEtMTIgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQg
Y2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0
ZWQudHh0OgorICAgICAgICBUaGUgZXh0cmEgcmVjb3JkaW5nIGhhcHBlbnMgYmVjYXVzZSBDYW52
YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcigpIHVzZWQgdG8KKyAgICAgICAgaXNzdWUgaXRzIEdyYXBo
aWNzQ29udGV4dCBjb21tYW5kcyBkaXJlY3RseSB0byB0aGUgYmFja2VuZC4gV2l0aCBwYXRjaCwK
KyAgICAgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciBkb2VzIG5vdCBhbGxvdyBhY2Nlc3MgdG8g
dGhlIGJhY2tlbmQgY29udGV4dC4gU28KKyAgICAgICAgYWxsIHRoZSBHcmFwaGljc0NvbnRleHQg
Y29tbWFuZHMgaGFzIHRvIGJlIHJlY29yZGVkLgorCiAyMDIwLTAxLTExICBBbnR0aSBLb2l2aXN0
byAgPGFudHRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJbnRlZ3JhdGlvbl0gZmFzdC90
ZXh0L3NpbXBsZS1saW5lcy1mbG9hdC5odG1sIHNob3VsZCBiZSBhYm91dCBzaW1wbGUgbGluZSBs
YXlvdXQgb25seQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1k
aXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZh
cy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3
OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBi
OGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1s
aXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRp
c3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJl
c3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmls
bC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRo
aWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUt
dHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4
NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387678</attachid>
            <date>2020-01-14 11:23:20 -0800</date>
            <delta_ts>2020-01-14 12:20:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200114112319.patch</filename>
            <type>text/plain</type>
            <size>501724</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NTE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODM5ZTJkNTBmOTM2OTQ3
MjZiYmIwMGU5OTNlOTljYzgxZGMxZmUxMC4uMTVhOWUyNGRkZjJkNjA2ODRlYjRkMDQyZmYxY2Nl
OGNhMmZmZTc5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyOSBAQAorMjAyMC0wMS0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgY29kZSByZS0KKyAgICAgICAgZmFjdG9yaW5nIGlz
IG5lZWRlZCB0byBkZWNvdXBsZSB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20gdGhl
CisgICAgICAgIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiOgorCisgICAgICAgICAgICAtLSBCYWNr
IGVuZCAodGhlIHBpeGVscyBzdG9yYWdlKQorICAgICAgICAgICAgLS0gRHJhd2luZyBjb250ZXh0
ICh0aGUgcmVjZWl2ZXIgb2YgdGhlIGRyYXdpbmcgY29tbWFuZHMpCisgICAgICAgICAgICAtLSBS
ZW1vdGUgSVBDIGNvbW11bmljYXRpb25zCisgICAgICAgICAgICAtLSBTaGFyaW5nIHRoZSBiYWNr
IGVuZCBkYXRhCisKKyAgICAgICAgVGhlIGNsYXNzIGhpZXJhcmNoeSBvZiBJbWFnZUJ1ZmZlciBp
czoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAgICAgICAgICAgfCAg
dGVtcGxhdGU8QmFja2VuZFR5cGU+CisgICAgICAgICAgICArLSBQaHlzaWNhbEltYWdlQnVmZmVy
ICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0ICAgICBJUEM6Ok1lc3NhZ2VTZW5kZXIK
KyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICB0ZW1w
bGF0ZTxCYWNrZW5kVHlwZT4gICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICArLSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIC0tLS0tKyAgIFJl
bW90ZUltYWdlQnVmZmVyIC0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICB8ICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CisgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgICAgICAgICB8ICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICstIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgLSsgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IC0rCisgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNrZW5kVHlwZT4gICAg
ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICArLSBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHkgLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgMSkgUGh5c2ljYWxJbWFn
ZUJ1ZmZlciBpcyBhICJicmlkZ2UiIHRvIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisgICAgICAg
IDIpIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgaXMgYSBQaHlzaWNhbEltYWdlQnVmZmVyIHdoaWNo
IGFsc28gaW1wbGVtZW50cworICAgICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQu
IFRoZSBHcmFwaGljc0NvbnRleHQgb2YgdGhpcyBjbGFzcyByZWNvcmRzCisgICAgICAgICAgIHRo
ZSBkcmF3aW5nIGNvbW1hbmRzIGluIGEgRGlzcGxheUxpc3QuIEZsdXNoaW5nIHRoaXMgRHJhd2lu
Z0NvbnRleHQKKyAgICAgICAgICAgcmVwbGF5cyBiYWNrIHRoZSBEaXNwbGF5TGlzdCB0byB0aGUg
UGh5c2ljYWxJbWFnZUJ1ZmZlci4KKyAgICAgICAgMykgUmVtb3RlSW1hZ2VCdWZmZXIgYW5kIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkgaGFuZGxlIHRoZSBJUEMgY29tbXVuaWNhdGlvbnMKKyAgICAg
ICAgICAgZnJvbSBhbmQgdG8gdGhlIFdlYlByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgorICAg
ICAgICA0KSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIGlzIGEgUmVtb3RlSW1hZ2VCdWZmZXIg
d2hpY2ggYWxzbyBpbXBsZW1lbnRzCisgICAgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
IFdoZW4gaXQgaXMgY3JlYXRlZCwgaXQgc2VuZHMgYSBtZXNzYWdlIHRvIAorICAgICAgICAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgdG8gY3JlYXRlIGFuIGFzc29jaWF0ZWQgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eQorICAgICAgICAgICBpbiB0aGUgR1BVIHByb2Nlc3MuIFdoZW4gaXRz
IERyYXdpbmdDb250ZXh0IGlzIGZsdXNoZWQsIFJlbW90ZUltYWdlQnVmZmVyCisgICAgICAgICAg
IHNlbmRzIGl0cyBEaXNwbGF5TGlzdCB0byBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHRvIGJlIHJl
cGxheWVkIGJhY2sgaW4KKyAgICAgICAgICAgdGhlIHNoYXJlZCBiYWNrLWVuZCBidXQgaW4gR1BV
IHByb2Nlc3MuCisgICAgICAgIDUpIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSBpcyBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHdoaWNoIGFsc28gCisgICAgICAgICAgIGltcGxlbWVudHMg
UGh5c2ljYWxJbWFnZUJ1ZmZlci4gSXQgaXMgY3JlYXRlZCBpbiB0aGUgR1BVIHByb2Nlc3MgdXBv
bgorICAgICAgICAgICBhIGNyZWF0aW9uIG9mIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgaW4g
dGhlIFdlYlByb2Nlc3MuIEl0IGNyZWF0ZXMKKyAgICAgICAgICAgYSBzaGFyZWFibGUgYml0bWFw
L3N1cmZhY2UgYW5kIHNoYXJlIGl0IHdpdGggdGhlIGFzc29jaWF0ZWQgCisgICAgICAgICAgIFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgVGhlIGNsYXNzIGhpZXJhcmNoeSBv
ZiBJbWFnZUJ1ZmZlckJhY2tlbmQgZm9yIENHIHBsYXRmb3JtcyBpczoKKworICAgICAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmQKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHxfXyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICst
LSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAg
ICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQKKyAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tIElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8
CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQKKworCisgICAgICAgIFRoZSBjbGFzcyBoaWVyYXJjaHkgb2YgSW1hZ2VCdWZmZXJCYWNrZW5k
IGZvciBDYWlybyBwbGF0Zm9ybXM6CisKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kICAgICAg
ICAKKyAgICAgICAgICAgIHwgICAgCisgICAgICAgICAgICArLS0gSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQKKyAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICArLS0gSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
fAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAg
ICAgICstLSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQKKworCisgICAgICAgIDEp
IEltYWdlQnVmZmVyQmFja2VuZCBrbm93cyB0aGUgZGltZW5zaW9ucyBhbmQgdGhlIGNvbG9yIHNw
YWNlIGFuZCBwcm92aWRlcworICAgICAgICAgICBiYXNpYyBmdW5jdGlvbmFsaXRpZXMgZm9yIHRo
ZSBkYXRhIGNvcHlpbmcgYW5kIGNvbG9yIHBlcm11dGF0aW9uLgorICAgICAgICAyKSBJbWFnZUJ1
ZmZlckNHQmFja2VuZC9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCBwcm92aWRlcyBiYXNpYyBmdW5j
dGlvbmFsaXRpZXMKKyAgICAgICAgICAgZm9yIGRyYXdpbmcgdGhlIEltYWdlQnVmZmVyIHRvIGEg
ZGVzdGluYXRpb24gR3JhcGhpY3NDb250ZXh0LgorICAgICAgICAzKSBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCBpcyBhbgorICAg
ICAgICAgICB1bmFjY2VsZXJhdGVkIGJhY2sgZW5kLgorICAgICAgICA0KSBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQvSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQgaXMgYW4KKyAg
ICAgICAgICAgYWNjZWxlcmF0ZWQgYmFjayBlbmQuCisgICAgICAgIDUpIEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZCBpcyBhbiB1bmFjY2VsZXJhdGVkIHNoYXJlYWJsZSBiYWNrIGVu
ZC4KKyAgICAgICAgNikgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kIGlzIGFu
IGFjY2VsZXJhdGVkIHNoYXJlYWJsZSBiYWNrIGVuZC4KKworICAgICAgICBGb3IgQ0cgcGxhdGZv
cm1zLCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkgd2lsbCBjcmVhdGUgdGhlIGZvbGxvd2luZyB0eXBl
cworICAgICAgICBvZiBJbWFnZUJ1ZmZlcjoKKworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5k
ZXJpbmc6CisgICAgICAgICAgICAgICAgVW5hY2NlbGVyYXRlZDogIFBoeXNpY2FsSW1hZ2VCdWZm
ZXI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+CisgICAgICAgICAgICAgICAgQWNjZWxlcmF0
ZWQ6ICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAgICAg
VW5hY2NlbGVyYXRlZDogIAorICAgICAgICAgICAgICAgICAgICAgICAgV2ViUHJvY2VzczogUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPgorCisgICAgICAg
ICAgICAgICAgQWNjZWxlcmF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdQVVByb2Nlc3M6IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eTxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+
CisKKyAgICAgICAgU2ltaWxhcmx5IEltYWdlQnVmZmVyOjpjcmVhdGUoKSBvbiBDYWlybyBwbGF0
Zm9ybXMgd2lsbCBjcmVhdGUgdGhlCisgICAgICAgIGZvbGxvd2luZyB0eXBlcyBvZiBJbWFnZUJ1
ZmZlcjoKKworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAg
ICAgVW5hY2NlbGVyYXRlZDogIFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ+CisgICAgICAgICAgICAgICAgQWNjZWxlcmF0ZWQ6ICAgIFBoeXNp
Y2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAg
ICAgICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBXZWJQcm9j
ZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZD4KKyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPgorCisgICAgICAg
IFRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdG8gbWFrZSB0aGUgbWluaW1hbCBjaGFuZ2VzIGlu
IFdlYkNvcmUgYW5kIGhpZGUKKyAgICAgICAgYWxsIHRoZSBkZXRhaWxzIG9mIHJlbW90ZSBkcmF3
aW5nIHVuZGVyIHRoZSBJbWFnZUJ1ZmZlciBhbmQgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAg
ICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9D
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpz
YW5pdGl6ZURhdGFJZk5lZWRlZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpkdW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OnJlYWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVDb250ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdl
QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9JbWFnZUJpdG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1h
Z2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJ
bWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpp
c0FjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29u
c3QpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFj
a2VuZCBjb25zdCk6CisgICAgICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xp
ZW50OjpzY3JlZW5zaG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Ib3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0
aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29weVJlY3RUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjppbnRlcm5hbFNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZv
cm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
cHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNp
Y2FsSW1hZ2VCdWZmZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRj
aEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmRyYXdTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hh
ZG93TGF5ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVN
YXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdl
UGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmJhY2tlbmRDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9C
R1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6
OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRl
eHQ6OmRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6ZGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDM0RMYXllci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpHQzNETGF5ZXI6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRl
bnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKToKKwogMjAyMC0wMS0xMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CiAKICAgICAgICAgVXNlIGV2ZW4gbW9yZSAic2hvcnRlc3QgZm9ybSIgZm9ybWF0
dGluZywgYW5kIGxlc3MgImZpeGVkIHByZWNpc2lvbiIgYW5kICJmaXhlZCB3aWR0aCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggYjhjNzlhMmU5ODk2N2QwYzUxNGY2YWI4NWU5Yjk3YWVmODE4NTE2Yy4uZjE3ZDRmODk4
MDRmNTkwOGY3MjMzOWI1ZmQ1MTgwMWUwNDAxNjJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMjYg
QEAKKzIwMjAtMDEtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0tIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIFJlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXIKKyAgICAgICAgICAgaW4gdGhlIFdlYlByb2Nlc3Mgc2lkZS4KKworICAgICAgICAtLSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFu
ZCByZWxlYXNpbmcgCisgICAgICAgICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgaW4gdGhl
IEdQVVByb2Nlc3Mgc2lkZS4KKworICAgICAgICAtLSBSZW1vdGVJbWFnZUJ1ZmZlciBhbmQgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eSBhcmUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nCisgICAgICAg
ICAgIHRoZSBJUEMgY29tbXVuaWNhdGlvbnMgYmV0d2VlbiB0aGUgUGh5c2ljYWxJbWFnZUJ1ZmZl
cnMgdW5kZXJseWluZyB0aGVzZQorICAgICAgICAgICBvYmplY3RzLgorCisgICAgICAgIC0tIElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCBpcyBhbiB1bmFjY2VsZXJhdGVkIEltYWdl
QnVmZmVyCisgICAgICAgICAgIGJhY2tlZCBieSBTaGFyZWFibGVCaXRtYXAuCisKKyAgICAgICAg
LS0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kIGlzIGEgQ0cgb25seSBhY2Nl
bGVyYXRlZCBJbWFnZUJ1ZmZlcgorICAgICAgICAgICBiYWNrZWQgYnkgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJp
dmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLW91
dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAg
ICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2Fn
ZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJl
bmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuaDoKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVzc2Fn
ZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6d2ViUHJvY2Vzc0lkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUlt
YWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5
OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6
Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VC
dWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHk6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAg
ICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQ
cm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25J
RCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAgICogU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJj
ZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAg
ICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAg
ICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3luY01lc3NhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFs
aWRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6
bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
Lmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1h
Z2VCdWZmZXJJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0
OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Bs
YXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVmZmVy
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZl
cik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29u
bmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUlt
YWdlQnVmZmVyOjp3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmlzUGVuZGluZ0Zs
dXNoIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OlJlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2Nn
L0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoK
KwogMjAyMC0wMS0xNCAgVsOtY3RvciBNYW51ZWwgSsOhcXVleiBMZWFsICA8dmphcXVlekBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFN1cHByZXNzIGNvbXBpbGVyIHdhcm5pbmdzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKaW5kZXggMWNmMTk0MzEzZDk1ZjVjNWNjNzI0YzlkMmM4YWI1OTAyNjEz
YmE4Zi4uZWM3YjI1YzQ3ZjRkZDkxMjU5NTAwNjM0OGVjOWQ5MDRjOWQyNjNlNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTAxLTE0ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50
IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1t
OgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdT
ZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMTQgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVncmF0aW9uXSBTdXBwb3J0IHRoZSBmZWF0
dXJlIGZsYWcgaW4gRHVtcFJlbmRlclRyZWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDI5NmRlYTc4
MzFiZWU0OWNmMDA0YTY4MmRkMjVlODkzYjk5NjRlNzcuLjg1YTdiYzAyZmQwNzVhZjNlODA1N2Ez
ZDc4ZDI4MGY3NmE4MTRmYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTAxNSw2ICsxMDE1LDcg
QEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dh
bWVwYWQvR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9nYW1lcGFkL1BsYXRm
b3JtR2FtZXBhZC5oCiAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0
aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvQXVkaW9UcmFja1ByaXZhdGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKQEAgLTEwMjQsNiArMTAyNSw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRy
b2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rhc2hBcnJheS5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1v
bml0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yTWFuYWdlci5o
CkBAIC0xMDczLDcgKzEwNzUsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RnJhbWUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApAQCAtMTEwNSwxMyArMTEwNywxOCBAQCBz
ZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aFV0aWxpdGllcy5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJl
c291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRleHRUcmFjay5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVvU2Ft
cGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3Vu
ZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJp
bmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIy
MzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJkYzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJk
SXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
c3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4
NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBi
b2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJZk5lZQogCiAgICAgICAgIGF1dG8gYml0
bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CiAgICAgICAgIGJpdG1hcEltYWdlLT5z
ZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSksIHRydWUpOwotICAgICAgICBhdXRvIGlt
YWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShiaXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAg
ICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAgICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0
cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdp
bi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41
ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJjY2FmOTgyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsxMzIsOSBAQCBlbHNlICgpCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJj
ZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVsc2UgKCkKIAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJ
bWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlIGIvU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUxMzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFk
YmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1YWMwMzVhYzExYjRkMmM3YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsyODksMTAgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0R0xD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0
aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01MjUsNyArNTI3LDkgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9T
dXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9V
VElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQ4NWIxNzlhZGM3MTI0N2JiYmU4NjM5M2Ey
YzAzNWVhZTBhYjNiNDAuLjJhMTFhZDg5NTAyNTg1YTMzNTNkMDc1NTZiNzZmNjFhN2FjNzNjZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXMudHh0CkBAIC0xODY5LDYgKzE4NjksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9I
RVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNwcAogcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODg4LDYgKzE4ODksNyBAQCBwbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFu
Z2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
UmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5k
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTZmODE3YTc4MTZkNmE0YmNjMjAxM2E1Nzk0NDQ0
NzY3YWU3MDgwZS4uZDA4NThhODU3MTY5OGVlNDYzMTg0ZjU3MTIxMWQ3MDE2MDNiOGFkMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCArMjg4LDkgQEAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VD
R01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0dUSy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCA3MjA1ZTIwZDNhYjRlMzlmYmVlNGJiOTQz
MWFlY2I0YmNjYzI4YmQyLi45N2YzMzZlN2M1YzllOGQwZGEyNWUyYmQ0ZTYxYWQ3MWFlNTJkZjJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtODQsNyArODQsNiBAQCBwbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvQ29sb3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRGlzcGxheVJlZnJlc2hN
b25pdG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dka0NhaXJvVXRpbGl0aWVzLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvSW1hZ2VCdWZmZXJHdGsuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VHdGsuY3Bw
CiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGUwNTUzNmY3M2NiMGFlNjRmZTUyYTIxMDZiZDZmOTY1YTI3OTNlMDUuLjE0NzZiMTM5YzMx
OTZlMzQ1MmFlMmQzYTU3YWJiZDI5NmRkMGU2OTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0NSw4ICs2NDUsNiBAQAogCQky
MEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2
OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIyNUEx
NkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8q
IFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQx
MEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAv
KiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4
MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAv
KiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
RGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmgg
Ki87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0
RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCAqLzsg
fTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEz
Q0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzAs
MTQgKzIxMjgsMjYgQEAKIAkJNzFFMkM0MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVm
ZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MUUyQzQyNDIxQzkzNTFEMDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVBRENEODIy
MDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZEMDA2NUE0NUYgLyogUG9pbnRlcklE
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFF
RkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDEx
IC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyMDE3NTRBMjNDOTY5REYwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzIwMTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NzIxNDQzMzEyMjNFQzg1NDAwRjEyRkY3IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjE0NDMzMjIyM0VDODVGMDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjMyMjNCMkEy
NDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIxRjFFQTcyM0FENTBB
MTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjND
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJ
bWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRp
b25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkJFNDIzMjNBQzQ5M0Uw
MEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQk3MjM4MjZBODIzQzFGNThCMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzODI2QTYyM0Mx
RjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzODI2QzEyM0M1NjU4NTAwNDlGN0Y5IC8qIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRCbGVuZE1pbk1heC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUQzMzAxQTNBOEIyMzAw
RjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsKIAkJNzI0RUU1NTAxREM4MEQ3RjAw
QTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0
RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0RUU1NEYxREM3
RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQjA5OTAxMjNDMDkyM0Mw
MDczQjlDQiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdl
QnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2ljYWxJbWFnZUJ1ZmZlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDIwMjNBQzJC
NzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIElt
YWdlQnVmZmVyQ0dCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjEyM0FDMkNENzAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJC
QkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDI3MjNBQ0IzRTAw
MEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyog
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTcyRDVDMkVBMjNCNEMwRjgwMEY2N0Q0MyAvKiBSZW5kZXJp
bmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc1NTNDRkU4MTA4RjQ3
M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTNDRkU2MTA4RjQ3M0YwMEVBMjgxRSAvKiBU
aW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJNzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFD
IC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oICovOyB9
OwogCQk3NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRUM3MEQwQ0U3MkQw
MDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9OwpAQCAtNjU0MCw5ICs2NTUwLDYgQEAK
IAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lv
bi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkV2ZW50UmVn
aW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5
RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMjky
QjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VC
dWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5
QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhE
ZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjRE
OTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjA1LDggKzk2MTIsMTIgQEAKIAkJNzFFRkNF
REUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0Rjk5QjAwOTIyQ0M3
IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5qYXZhc2NyaXB0OyBw
YXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50cy5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ4MjNDOTY5M0UwMDQxODgxRiAvKiBQbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVm
ZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAyODBEMTIzQkE5
MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbHBoYVByZW11bHRpcGxpY2F0aW9u
Lmg7IHBhdGggPSAuLi9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEz
QyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
WFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFB
M0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2
MjcsNyArOTYzOCwyMCBAQAogCQk3MjdBRkVEMTFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFWFRzUkdCLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZFRDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRVhUc1JHQi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVEMzFBMkVBNkEwMDAwNDQyRTggLyogRVhU
c1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVEOUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlz
dEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8q
IFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEy
M0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFj
a2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBB
NjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA4MjNBQUNFODIwMEE2MTIzQyAv
KiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDA5MjNB
QUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJC
RTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkz
RTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQyNjIz
QUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2Vu
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyRDVDMkU5MjNCNDRBMzgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdC
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEyRThEMkYwMDRDNTYyQSAv
KiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdC
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUx
OCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjkx
LDcgKzEyNzE1LDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlw
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlw
ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2
QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5
MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBB
QkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTY2OTQsNiArMTY3MTcsNyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZC
Q0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFD
M0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAqLywKKwkJCQk3MkJCRTQyNjIzQUNCMDlC
MDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkND
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJD
RDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNF
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODkz
LDYgKzI0OTE3LDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1
MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovLAogCQkJCTBGQ0YzMzIzMEYy
Qjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAy
Q0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjQ5MDIsOSArMjQ5MjcsMTIgQEAKIAkJCQk5
MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhpY3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2
RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJ
CQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThENzAwMDk5QUE0IC8qIEltYWdlQnVmZmVy
Q0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQwMENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRh
dGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVy
RGF0YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIzQUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VC
dWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQwRDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyQkJFNDA3MjNB
QUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwICovLAorCQkJ
CTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
aCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQyNEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuY3BwICovLApAQCAtMjUwMDAsNiArMjUwMjgsNyBAQAogCQkJCTRCN0FFNDkyMjE3
N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIwRTg1
QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2
OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2
QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0
MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5RUND
MTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAqLywK
QEAgLTI1MDkxLDcgKzI1MTIwLDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyog
SW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkgLyog
SW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZl
ckRhdGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJC
YWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVj
b2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rl
ci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAq
LywKQEAgLTI1MTQ4LDYgKzI1MTc4LDkgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcg
LyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQ
YXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5o
ICovLAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVy
LmggKi8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZm
ZXIuaCAqLywKKwkJCQk3MjAxNzU0ODIzQzk2OTNFMDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhGMDAzMUNBMTYgLyogUGxhdGZv
cm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4NzZENyAvKiBQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyog
UGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MTU3LDYgKzI1MTkwLDkgQEAKIAkJCQlCQ0FC
NDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8sCiAJCQkJMDczQTE1NTEyMTc3QTM5
ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAqLywKIAkJCQkwNzNBMTU1MzIxNzdB
MzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0
QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTYyM0Iz
ODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjM4MjZBNjIzQzFG
MTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICovLAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUw
MDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJQTczRjk1RkQxMkM5N0JGRTAwMzFB
QUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYzREQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8q
IFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5OTksNiArMjkwMzUsNyBAQAogCQkJCUJDRjdFNDkx
MTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyogQWZmaW5lVHJhbnNmb3JtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1QTcxRjQgLyogQWxsRGVzY2VuZGFudHND
b2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjM4MjZDMjIzQzU2Rjc5MDA0OUY3Rjkg
LyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcx
NTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4dENsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8qIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIzMTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRl
cm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjk2OTQsNiArMjk3
MzEsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVj
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3NDI1QTAwQzdCQ0IwIC8qIERpc3Bs
YXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEMzFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2
MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRl
bXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJEOTFDM0RENTFFMDAw
N0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDMwMiw4
ICszMDM0MSwxMCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1h
cFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxOEVBRDREMUZBOTEzODAw
MDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1h
Z2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2
MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDIw
MjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFGMUVBNzIzQUQ1MEExMDBCREFGRjcgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIx
ODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVt
ZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyog
SW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzczLDYgKzMx
ODE0LDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAxRDRFMDMgLyogUGVyZm9ybWFuY2VVc2Vy
VGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyog
UGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUQ1REMyRTBGNDIzQTczMDA4RjIw
RkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0QyMDBCOTAxQUYgLyogUGljdHVyZUluUGljdHVy
ZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUg
LyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTFEMkY4RTA2
MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0dXJlV2luZG93LmggaW4gSGVhZGVycyAq
LywKQEAgLTMxNzkyLDYgKzMxODM0LDggQEAKIAkJCQlCQ0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQg
LyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjNGNzdC
MTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8qIFBsYXRmb3JtR2FtZXBhZC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VC
dWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDE3NTRBMjNDOTY5REYwMDQxODgxRiAvKiBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3Njgw
OUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDU2MkY5NjExNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUY1NDRGNzg5MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMTk2OSw2ICszMjAxMyw4IEBACiAJCQkJQkNFQTQ4NzYwOTdE
OTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYyRjAw
QTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHls
ZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkQ1QzJFQTIzQjRDMEY4MDBGNjdENDMgLyog
UmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzODI2QTgyM0MxRjU4QjAw
NDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIx
MjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUI1OTVGRjQ3MTgyNENFRTMwMEZGNTFDRCAvKiBSZW5kZXJJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA2NGRmZjJkOTg0ZWY3MmRkOWViYTUxMDI0MDYx
MGZjMThlMjFkOTQ3Li5mYTRlNDkwYWI0ZDgxYmQ2ZmYxMjhlMjVhNzc2NzQxZDllZjc3OTk4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKQEAgLTkyMSw4ICs5MjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZm
ZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRQ
cmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwg
bG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGJ1
ZmZlci0+bG9naWNhbFNpemUoKTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBidWZmZXItPmdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpKSk7CiAgICAg
ICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJl
dHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI3ODUs
MTMgKzI3ODUsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxv
YXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFVuYWNjZWxlcmF0ZWQsIHJlc29s
dXRpb25TY2FsZSk7CisgICAgICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShG
bG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAgICAgaWYgKCFidWZmZXIpIHsKICAg
ICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAg
IH0KIAotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgqaW1hZ2VEYXRhLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNh
bEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50
UG9pbnQoKSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIEludFNpemUobG9naWNhbFdpZHRoLCBs
b2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dpY2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQp
LCBJbnRQb2ludCgpKTsKIAogICAgICAgICBhdXRvIGJpdG1hcCA9IEltYWdlQml0bWFwOjpjcmVh
dGUoeyBXVEZNb3ZlKGJ1ZmZlciksIHN0YXRpY19jYXN0PGJvb2w+KG9yaWdpbkNsZWFuKSB9KTsK
ICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCBlNWI4YWI0NjljZWM0YmMwNThjNDM3ZDE5OTUw
NDBiNTAyMWM3NDMxLi4yZmE1M2FhMzhjMWZjYzExNzM1NmFmOWYxNTVkMDE1ZDQ0MzdmMGNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlckltYWdlVmFsdWUuY3BwCkBAIC0xMTYsNyAr
MTE2LDcgQEAgUmVmUHRyPEltYWdlPiBDU1NGaWx0ZXJJbWFnZVZhbHVlOjppbWFnZShSZW5kZXJF
bGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXoKIAogICAgIC8vIFRyYW5zZm9ybSBJbWFn
ZSBpbnRvIEltYWdlQnVmZmVyLgogICAgIC8vIEZJWE1FICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBz
aG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLgotICAgIGF1dG8gdGV4
dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgVW5hY2NlbGVyYXRlZCk7CisgICAgYXV0
byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKICAgICBpZiAoIXRleHR1cmUpCiAgICAgICAgIHJldHVybiAmSW1hZ2U6Om51
bGxJbWFnZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0N1c3RvbVBhaW50
Q2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCmlu
ZGV4IGY0Yjc3MDdlOTdhOGZlNTFmOGUyNTc3NThhZGU0YjZkZGZmNTAyZTUuLjY1ZDQ2NGZkZDdk
NTg4ZWM3MzE2MTZiNzQwMzdhODQyOGVlZjMxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3Vz
dG9tUGFpbnRDYW52YXMuY3BwCkBAIC05Myw3ICs5Myw3IEBAIEltYWdlKiBDdXN0b21QYWludENh
bnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgbV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCwgMSwgQ29sb3JTcGFjZTo6U1JHQiwg
bnVsbHB0cik7CisgICAgbV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUo
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFtX2NvcGllZEJ1ZmZl
cikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEwMiw3ICsxMDIsNyBAQCBJbWFnZSog
Q3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkgY29uc3QKICAgICAgICAgbV9jb250ZXh0
LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwogICAgIG1fZGVzdGluYXRpb25HcmFw
aGljc0NvbnRleHQgPSBudWxscHRyOwogCi0gICAgbV9jb3BpZWRJbWFnZSA9IG1fY29waWVkQnVm
ZmVyLT5jb3B5SW1hZ2UobV9jb3BpZWRCdWZmZXItPmZhc3RDb3B5SW1hZ2VNb2RlKCksIFByZXNl
cnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICBtX2NvcGllZEltYWdlID0gbV9jb3BpZWRCdWZmZXIt
PmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OwogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDIzZDliMzRlODQ4ZjZkMDFkMzRhOWRhZmZi
YTMwNTBmYzdhNzEzMTYuLjkwOTMzZTIzYWMwODE4MDMzYzc2ZmMzZTI4MjExOTE4MDE0ODZjNzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0
ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAi
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgpAQCAtNjAsNiAr
NjEsMTAgQEAKICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAorI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaW5jbHVkZSAi
Q2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaCIKICNpbmNsdWRlICJNZWRpYVN0cmVhbS5o
IgpAQCAtMzQ1LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENhbnZh
c0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBtX2Nv
bnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQo
KS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxp
c3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2Nv
bnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRl
ckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZhcy4K
ICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04MTgsMzkgKzgy
MCwyNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0IElu
dFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNw
bGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewotICAgIGlmICh1
c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAgICAg
ICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNEaXNw
bGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPiht
X2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxheUxp
c3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAodHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAgICAg
ICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9j
b250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0
KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5
TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3RyaW5nIEhUTUxD
YW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3Mg
ZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4obV9j
b250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYg
KGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4g
YnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVw
bGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25z
dAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQo
KSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChidWZm
ZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0Nv
bnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5k
cmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwogICAg
IHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg1LDExICs4NzUsMjcgQEAgdm9pZCBIVE1MQ2Fu
dmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgoKSB8
fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IEFjY2VsZXJhdGVkIDogVW5hY2Nl
bGVyYXRlZDsKLQogICAgIGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBk
b2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhv
c3RXaW5kb3coKSA6IG51bGxwdHI7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0
aW5nIGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KKyAgICBib29sIHVzZXNEaXNw
bGF5TGlzdERyYXdpbmcgPSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcudmFsdWVPcihkb2N1bWVu
dCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgpKTsKKyAgICAKKyAgICAv
LyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIHJlbW90ZSBkcmF3aW5nIG9uIGNhbnZhcy4K
KyAgICBib29sIHVzZXNSZW1vdGVEcmF3aW5nID0gZmFsc2U7CisKKyAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGU7CisgICAgaWYgKHVzZXNSZW1vdGVEcmF3aW5nKQorICAgICAgICByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6UmVt
b3RlQWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpSZW1vdGU7CisgICAgZWxzZSBpZiAodXNl
c0Rpc3BsYXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2Vs
ZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDsKKyAgICBlbHNlCisgICAgICAgIHJlbmRlcmluZ01v
ZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6
U1JHQiwgaG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisKICNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAg
ICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJh
dGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CmluZGV4IGI1Mjg2NDVjNjU4NzRjZDBjYTA5MzQ0NDYxYjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEy
Mjk0MTQ5NmJmMzFiY2RkNzljNmJjNWMzOTFhNzhhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKIAotICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERy
YXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCmluZGV4IDVmNDlmNzM5YTFmNWMzYmUwZWUxNzFm
MzRmOTYzZTAyNjZiYzQ0OTIuLjJiODE5ODllOGZkNjJlZmUzNDUzODdhOTAyZmU2OTJiMzA5OTU0
ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCkBAIC02MSw5ICs2MSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJpdG1h
cCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVy
aW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5k
ZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBVbmFjY2VsZXJhdGVkOworc3RhdGljIFJl
bmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxl
cmF0ZWQ7CiAjZW5kaWYKIAogUmVmPEltYWdlQml0bWFwPiBJbWFnZUJpdG1hcDo6Y3JlYXRlKElu
dFNpemUgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2Fu
dmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcAppbmRleCBm
NzQ0ODUxMjAwMTU3NWI0YWY0YmJhMjRlYWE1N2FiZTZhMDY0M2M5Li43NTVmMTFlZjg5ZTExODFi
ZTA2ZDVlYTJmMDA3ODY5NmUzOWJlNGQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5D
YW52YXMuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0
bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKQogICAgICAgICAg
ICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7IG51bGxwdHIgfSB9OwogCiAgICAgICAg
IGlmICghbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIpCi0gICAgICAgICAgICByZXR1cm4geyBJbWFn
ZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0
ZWQpLCB0cnVlIH0pIH07CisgICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRl
KHsgSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0
ZWQpLCB0cnVlIH0pIH07CiAKICAgICAgICAgYXV0byBidWZmZXIgPSB0YWtlSW1hZ2VCdWZmZXIo
KTsKICAgICAgICAgaWYgKCFidWZmZXIpCkBAIC0yNDMsNyArMjQzLDcgQEAgdm9pZCBPZmZzY3Jl
ZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29uc3QKICAgICBpZiAoIXdpZHRoKCkgfHwg
IWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCkpOworICAgIHNldEltYWdlQnVmZmVy
KEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0
YWtlSW1hZ2VCdWZmZXIoKSBjb25zdApAQCAtMjU3LDcgKzI1Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKSBjb25zdAog
ICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAg
IHJldHVybiBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2Nl
bGVyYXRlZCkpOworICAgIHJldHVybiBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkpOwogfQogCiB2b2lkIE9mZnNj
cmVlbkNhbnZhczo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAppbmRleCA4OWQ4ZjQyNDNi
MmI5MmRmYmNiMzJhYTIyMWI3NTNjOTNmMWY1OTQxLi41YjFiMDdlZjc3Mzg0MzM2MDhlODgyZmI5
ZTNiYTlhMmIxYTRjOWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApAQCAtMTgwNiw3ICsxODA2
LDcgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gSW50UmVjdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpjYWxjdWxhdGVDb21wb3NpdGluZ0J1ZmYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZl
cihjb25zdCBJbnRSZWN0JiBidWZmZXJSZWN0KQogewotICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBpc0FjY2VsZXJhdGVkKCkgPyBBY2NlbGVyYXRlZCA6
IFVuYWNjZWxlcmF0ZWQpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJl
Y3Quc2l6ZSgpLCBpc0FjY2VsZXJhdGVkKCkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2U6OmNvbXBvc2l0ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25z
dCBJbnRSZWN0JiBidWZmZXJSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTE5OTAsNyAr
MTk5MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihICiAgICAgICAgIHJldHVybiBSZWZQdHI8
Q2FudmFzUGF0dGVybj4geyBDYW52YXNQYXR0ZXJuOjpjcmVhdGUoQml0bWFwSW1hZ2U6OmNyZWF0
ZShXVEZNb3ZlKG5hdGl2ZUltYWdlKSksIHJlcGVhdFgsIHJlcGVhdFksIG9yaWdpbkNsZWFuKSB9
OwogI2VuZGlmCiAKLSAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5y
ZW5kZXJpbmdNb2RlKCkgOiBBY2NlbGVyYXRlZCk7CisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1lbnQpLCBkcmF3aW5nQ29udGV4dCgpID8g
ZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgpIDogUmVuZGVyaW5nTW9kZTo6QWNjZWxl
cmF0ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0yMDc1LDIxICsyMDc1LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXkKICAgICAgICAg
Y29udGV4dERpc3BsYXlMaXN0TWFwKCkucmVtb3ZlKHRoaXMpOwogfQogCi1TdHJpbmcgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFz
VGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGlmICghbV9yZWNvcmRpbmdDb250ZXh0KQot
ICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBtX3JlY29yZGluZ0NvbnRleHQtPmRpc3Bs
YXlMaXN0LmFzVGV4dChmbGFncyk7Ci19Ci0KLVN0cmluZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3Mg
ZmxhZ3MpIGNvbnN0Ci17Ci0gICAgYXV0byogZGlzcGxheUxpc3QgPSBjb250ZXh0RGlzcGxheUxp
c3RNYXAoKS5nZXQodGhpcyk7Ci0gICAgaWYgKCFkaXNwbGF5TGlzdCkKLSAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmFzVGV4dChmbGFncyk7Ci19Ci0KIGNvbnN0
IFZlY3RvcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpTdGF0ZSwgMT4mIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREJhc2U6OnN0YXRlU3RhY2soKQogewogICAgIHJlYWxpemVTYXZlcygp
OwpAQCAtMjE1OSwxMCArMjE0NCwxMCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4g
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlSW1hZ2VEYXRhKGZsbwogCiBFeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2V0SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25z
dAogewotICAgIHJldHVybiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtLCBzeCwgc3ksIHN3LCBzaCk7CisgICAgcmV0dXJuIGdldEltYWdlRGF0YShDb29y
ZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBzeCwgc3ksIHN3LCBzaCk7CiB9CiAKLUV4Y2VwdGlvbk9y
PFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFn
ZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CitFeGNlcHRpb25PcjxS
ZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VE
YXRhKENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5
LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7CiAgICAgaWYgKCFjYW52YXNCYXNlKCkub3Jp
Z2luQ2xlYW4oKSkgewogICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25z
b2xlTWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiVW5hYmxlIHRvIGdldCBpbWFnZSBk
YXRhIGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNhbnZhcyBoYXMgYmVlbiB0YWludGVkIGJ5IGNy
b3NzLW9yaWdpbiBkYXRhLiIpKTsKQEAgLTIxOTYsNyArMjE4MSw3IEBAIEV4Y2VwdGlvbk9yPFJl
ZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURh
dGEoSW1hZ2VCCiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBjcmVhdGVFbXB0eUlt
YWdlRGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7CiAKLSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1
ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGltYWdlRGF0YVJlY3QsIG51bGxwdHIsIGNv
b3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gYnl0ZUFycmF5ID0gYnVmZmVyLT5nZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0
LCBjb29yZGluYXRlU3lzdGVtKTsKICAgICBpZiAoIWJ5dGVBcnJheSkgewogICAgICAgICBTdHJp
bmdCdWlsZGVyIGNvbnNvbGVNZXNzYWdlOwogICAgICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRM
aXRlcmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBz
aXplIHdhcyAiKTsKQEAgLTIyMTgsMTAgKzIyMDMsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxv
YXQKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1h
Z2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGly
dHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKIHsKLSAgICBwdXRJbWFn
ZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHks
IGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CisgICAgcHV0SW1hZ2VE
YXRhKGRhdGEsIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwsIGR4LCBkeSwgZGlydHlYLCBkaXJ0
eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZs
b2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhl
aWdodCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSYgZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBk
eCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRo
LCBmbG9hdCBkaXJ0eUhlaWdodCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFz
QmFzZSgpLmJ1ZmZlcigpOwogICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjMwLDggQEAg
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
JiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nh
c3Q8aW50PihkeCksIHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0
ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zm
c2V0KTsKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGlu
YXRlU3lzdGVtID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZl
ci0+bG9naWNhbFNpemUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICAKKyAgICBk
ZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZm
ZXItPmludGVybmFsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0yMjUzLDcg
KzIyMzksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0
YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3QuaW50ZXJz
ZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAKICAgICBp
ZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgq
ZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50
U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2ludChk
ZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmRhdGEuZGF0YSgp
LCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSksIHNvdXJjZVJlY3QsIEludFBv
aW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKIAogICAgIGRpZERyYXcoZGVzdFJl
Y3QsIENhbnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBpZ25vcmUgdHJhbnNmb3JtLCBzaGFkb3cg
YW5kIGNsaXAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRleCAzZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5
OGFlNjcyMjE4N2YxYmVlOTFkLi45NjQwMGQxYWY1MDBkNThlMWRkOWJkMTExNzQ4MjE0MWE3MmJi
NWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0yMjIsOSArMjIyLDYgQEAgcHVibGljOgogICAg
IGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoKSBjb25zdCB7IHJldHVybiBtX3RyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5OyB9CiAgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShi
b29sKTsKIAotICAgIFN0cmluZyBkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0
RmxhZ3MpIGNvbnN0OwotICAgIFN0cmluZyByZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5
TGlzdDo6QXNUZXh0RmxhZ3MpIGNvbnN0OwotCiAgICAgdXNpbmcgRGlyZWN0aW9uID0gQ2FudmFz
RGlyZWN0aW9uOwogCiAgICAgY2xhc3MgRm9udFByb3h5IDogcHVibGljIEZvbnRTZWxlY3RvckNs
aWVudCB7CkBAIC0zNzEsOCArMzY4LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdGVtcGxhdGU8Y2xh
c3MgVD4gdm9pZCBmdWxsQ2FudmFzQ29tcG9zaXRlZERyYXdJbWFnZShUJiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRlT3BlcmF0b3IpOwogCi0gICAgRXhjZXB0
aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRp
bmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0
OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYsIEltYWdlQnVmZmVyOjpDb29yZGlu
YXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZ
LCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCk7CisgICAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBz
eCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7CisgICAgdm9pZCBwdXRJbWFn
ZURhdGEoSW1hZ2VEYXRhJiwgQ29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBm
bG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlI
ZWlnaHQpOwogCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRl
cmluZ0NvbnRleHQuY3BwCmluZGV4IDE0ZWEzN2Q4ZDdlYWZiMDFiNWM0Y2UxOWViZTc2YzUxOGNm
Y2Q0YTguLmI1MWI0ZGJmMTNlZTUwNmViOTQ5OGM0M2VmNDVjOTQ0ZGQ3M2UwYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJp
bmdDb250ZXh0LmNwcApAQCAtMzYsOSArMzYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0KTsKIAog
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2Rl
ID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAjZWxzZQotc3RhdGljIFJlbmRlcmluZ01v
ZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsK
ICNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShDYW52YXNCYXNlJiBjYW52YXMsIElt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdzJiYgc2V0dGluZ3MpCkBAIC02OSw3ICs2
OSw3IEBAIEhUTUxDYW52YXNFbGVtZW50KiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNh
bnZhcygpIGNvbnN0CiAKIGJvb2wgSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojppc0FjY2Vs
ZXJhdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBBY2Nl
bGVyYXRlZDsKKyAgICByZXR1cm4gYnVmZmVyUmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2Rl
OjpBY2NlbGVyYXRlZDsKIH0KIAogdm9pZCBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNl
dE91dHB1dEJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcAppbmRleCA2N2NhNTNjNDdlZWEwMDhiZWEzZjYxZGY5NmU3Mzg5Y2FlY2E2ZGVhLi42OTIy
MDFhYzZiNzUwYjIwZjIzZDU4OTc1YmZmNjA1YjA0NDgwZDU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApA
QCAtMzk4Miw3ICszOTgyLDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0wKICAgICAgICAgaWYg
KCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogCi0gICAgICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1v
ZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIHRl
eFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dEdMOjpET01Tb3VyY2U6OkltYWdlLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOwogICAgICAgICByZXR1cm4g
eyB9OwpAQCAtNDEwNCw3ICs0MTA0LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0YXJnZXQsIEdDR0wKICAgICAg
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZSwgU291
cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHZpZGVv
LT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhv
ZmZzZXQsIHlvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBEb250Q29weUJhY2tpbmdTdG9yZSk7CiAg
ICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0ZXhT
dWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5
cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRHTDo6RE9NU291cmNlOjpWaWRlbywgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKQEAgLTQ1NDMsNyArNDU0Myw3
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdl
MkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50CiAgICAgICAgICAgICAmJiB0eXBlID09IEdyYXBo
aWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSB7CiAgICAgICAgICAgICBhdXRvIHRleHR1cmVJ
bnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwp
OwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRleHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwg
IXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0
ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLT5jb3B5VG9Q
bGF0Zm9ybVRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQs
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBiaXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVpZ2h0KCksIHR5cGUpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ1NTEsNyArNDU1
MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50CiAgICAgICAgIH0KIAogICAgICAgICAvLyBO
b3JtYWwgcHVyZSBTVyBwYXRoLgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVy
LT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgICAgICBS
ZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3Jh
cGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC00NjIwLDcgKzQ2MjAs
NyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFn
ZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAgICAgICAgICAgYXV0byB0ZXh0dXJlSW50
ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsK
ICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0
ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7CiAgICAgICAgICAgICAgICAgSW1hZ2VC
dWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGJ1
ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0
YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgICAgIGlmIChidWZmZXIg
JiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3Qo
KSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlw
WSkpIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCks
IHR5cGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAg
IH0KQEAgLTQ2NjUsNyArNDY2NSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBOb3JtYWwgcHVyZSBTVyBwYXRoLgotICAgICAgICBSZWZQdHI8SW1h
Z2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpm
YXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVv
RnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAg
IGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB0ZXhJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFks
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00NjkwLDcgKzQ2OTAsNyBAQCBSZWZQdHI8
SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1h
Z2UmIGltYWdlLCBpbnQgdwogICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1h
Z2Uuc2l6ZSgpKTsKICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsK
ICAgICBidWYtPmNvbnRleHQoKS5kcmF3SW1hZ2UoaW1hZ2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsK
LSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2Rl
KCkpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiB9
CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC02Mzg2LDcgKzYzODYsNyBAQCBJbWFnZUJ1ZmZlciog
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZm
ZXIoY29uc3QgSQogICAgIH0KIAogICAgIC8vIEZJWE1FICgxNDk0MjMpOiBTaG91bGQgdGhpcyBJ
bWFnZUJ1ZmZlciBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZD8KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVu
YWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAg
ICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBBU1NFUlQobV9idWZm
ZXJzLnNpemUoKSA+IDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cv
TWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVk
aWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IDM0YmEzNzJkNDkxNDNjZmUyOTNhN2MyYTg5NDVl
NDBmMzUxYjEwNTEuLmY2YmJmYWRkMzc3YmI1MWIwNjBhYTBiMzNmMGI2ODBmMTEyYzk5NGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L01lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50
cy5jcHAKQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIFJlZlB0cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4
dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpCiAgICAg
SW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIGxheWVyLT5zaXplKCkp
OwogCiAgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMgYnVmZmVyIHNob3VsZCBub3QgYmUgdW5j
b25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShwYWludGluZ1JlY3Quc2l6ZSgpLCBVbmFj
Y2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUocGFpbnRpbmdSZWN0LnNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgZGV2aWNlU2NhbGVGYWN0b3IpKTsKICAgICBp
ZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNw
cAppbmRleCBmNTg2Y2NiMTc4Yzc2ZTU3OGMyMTMwODQ2YTFmYmZhN2VmZmQ3YWY1Li42MzdlNzdj
NWZlZGFiMzNjNWJkYjgwYzZmZDBlMTFhYjdmNGE4MjE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuY3Bw
CkBAIC00OTQsNiArNDk0LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1v
dXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiAgICAgbV9jbGllbnQuc2V0Q3Vy
c29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGhpZGRlblVudGlsTW91c2VNb3Zlcyk7CiB9CiAKK1Jl
bmRlcmluZ0JhY2tlbmQqIENocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tlbmQpCisgICAgICAgIG1fcmVuZGVyaW5nQmFja2Vu
ZCA9IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICByZXR1cm4gbV9yZW5k
ZXJpbmdCYWNrZW5kLmdldCgpOworfQorCiBQbGF0Zm9ybURpc3BsYXlJRCBDaHJvbWU6OmRpc3Bs
YXlJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlzcGxheUlEOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgK
aW5kZXggNjYyYmUwMGZhMGFiYWU4YjdiYTdkNjY4ZDQ0NzBlYzUxMzYxYWY0OS4uNDY4YzE3MDA4
YWFmYTQ3ZmFhMjM3Yzc0ZmY0OGY0MDIzMGRkYmFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC04
Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSBv
dmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBv
dmVycmlkZTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQo
KSBjb25zdCBvdmVycmlkZTsKKyAgICAKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgb3Zl
cnJpZGUgeyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCBvdmVy
cmlkZTsKQEAgLTE5NSw2ICsxOTcsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCiAgICAgYm9vbCBtX2lzRGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2VTdXBwcmVzc2Vk
IHsgZmFsc2UgfTsKICNlbmRpZgorICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z0JhY2tlbmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IDYyNjE3Zjc4ZjNlMmYwNDc0OGFh
NThhZGFlYjhmYTMwYmQ3MTJhZDQuLmM5OWQzNmFmZmFhODY1YTllNmE5NWRjNTM1YjQ4NzQ4Yzdl
ZTNlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNDMsNiArNDMsNyBAQAog
I2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWlu
LmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTY3JvbGxp
bmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgpAQCAtMzAzLDYg
KzMwNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0
b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qg
eyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgeyByZXR1
cm4gbnVsbHB0cjsgfQorCiAgICAgLy8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVy
IHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RH
cmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lU25hcHNob3R0aW5nLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCmluZGV4IDBhNDRjMmZhMWEw
OTQ5N2NmZGY1NTg4ODMyZmZkZmYxMDIzMzMwZTEuLmUyNGQ5MmU2ZjNlNjFkMzhhOWIyNDQ4NWY0
ZDEzZGU1MGU1MzNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFw
c2hvdHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcu
Y3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFw
c2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZyYW1lJiBmcmFtZSwgY29uc3QgSW50UmUKICAgICBpZiAo
b3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc1BhaW50V2l0aEludGVncmFsU2NhbGVGYWN0b3IpCiAg
ICAgICAgIHNjYWxlRmFjdG9yID0gY2VpbGYoc2NhbGVGYWN0b3IpOwogCi0gICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVj
dC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFjdG9yKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNp
emUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgc2NhbGVGYWN0b3IpOwogICAgIGlm
ICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBidWZmZXItPmNvbnRleHQo
KS50cmFuc2xhdGUoLWltYWdlUmVjdC54KCksIC1pbWFnZVJlY3QueSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkxNjE5ZGM2NDNmODcy
OTA5Y2I3MWY3ODI4ZWY4NWJiYy4uMjEwN2E5ZTFlOTljZjM1MWQ5ZTYxNjY4MDVjNGE1NjMzYWU0
N2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKQEAgLTM3
Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90KEpTQzo6SlNH
bG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAgICAgICAgICAgIGF1
dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAgICAgICAgIGlmIChh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VTaXplLCBSZW5kZXJp
bmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAgICBJbnRSZWN0IHNv
dXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlt
YWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIEludFBv
aW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YS0+ZGF0YSgp
LCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0KTsKICAgICAgICAgICAgICAgICAgICAgZGF0YVVSTCA9
IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVz
ZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRleCA5YTNhOGJmOTQzYWQ2NTg2ZGE0M2Nl
ZDBkYTdlNjNmMDU1YWI5YTVkLi4xMmEyZDc0ZmZiZThmY2M3M2YwNjhiYmZjYmEwMDU0MDc3NTcx
NzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQpAQCAtMTMsNyArMTMsMTAgQEAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmgKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUmVmUHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vSG9zdFdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCmlu
ZGV4IDJjZmVjYWRjMjRkOTgyYTg2MTYzNzRiNzZhMGU0ZmIwZmZmN2E5ZDQuLmY1ZjIxN2NjZDg0
MDYwODAwMjU1YzIwM2QyMjE3Y2FlY2UwY2UyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0hvc3RXaW5kb3cuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0
V2luZG93LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5k
ZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RXaW5kb3dfaAorI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDdXJzb3I7
CitjbGFzcyBSZW5kZXJpbmdCYWNrZW5kOwogCiBjbGFzcyBIb3N0V2luZG93IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBA
IC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRk
ZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOwogCisgICAgdmlydHVhbCBSZW5kZXJpbmdCYWNr
ZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgPSAwOworICAgIAogICAgIHZpcnR1
YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1E
aXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IDQyMWRmYmQ5NTc1
NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2QuLjZmYTRmZmUxNDYwZWE3MTM4MjFiY2EzNjIy
NmQyNmE5N2U1ZDk5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJj
ZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4
dApAQCAtMzAsNyArMzAsMTEgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWly
by5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
TmF0aXZlSW1hZ2VDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5j
cHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJl
bXVsdGlwbGljYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FscGhh
UHJlbXVsdGlwbGljYXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDFjYWVmODU0MWRlZTA2MmJmZTA1NDE2
Y2RhMmYyYTdmNzkyNmUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51
bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIDogdWludDhfdCB7CisgICAgUHJlbXVsdGlw
bGllZCwKKyAgICBVbnByZW11bHRpcGxpZWQKK307CisKK1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjRhYWI0Njg2NzY4ZjFhMjgyZDU4ODFjOTM5Nzk0NmQ1YmEyMDA2OTAKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyIDogcHVibGljIFBoeXNpY2FsSW1hZ2VCdWZmZXI8QmFja2Vu
ZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCB7CisgICAgdXNpbmcg
QmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBl
PjsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBo
b3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0
ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRTaXpl
JiBzaXplKQorICAgICAgICA6IEJhc2VQaHlzaWNhbEltYWdlQnVmZmVyKFdURk1vdmUoZGF0YUJh
Y2tlbmQpKQorICAgICAgICAsIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAg
IHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSkKKyAgICAgICAgOiBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7
CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4
dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gRGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaERyYXdp
bmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBmNTg2
ZGQ0YjJhZjkxZjQ1NjU1MzVhNzAyOTM5MjNhZjJiYWFkYmEyLi4zNWJkNThjM2QxMmZmODRjMGU2
NjQyZjgxODI3MDk5Y2U4MzdlMjgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMzUwLDcgKzM1MCw3IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGJvb2wpOwog
I2VuZGlmCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29udGV4dCgpIGNvbnN0OwotICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQ7IH0KKyAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBpc0FjY2VsZXJhdGVkQ29udGV4dCgpID8g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
OyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNhdmUoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggNDU4YWU3MmYyYWUwMjU2MjQ3NjhlODc5ZGJkNDk2
OTY0YjQ5MWIxOC4uMDBiZTBmZWEwNjA1NWNhMzFiMmM4ODc0ZGQzNzRlZWExZDQyODQ2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5j
cHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFw
aGljc1R5cGVzLmgiCiAKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgiCisKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaAppbmRleCBjZWVhMWRhNDBlYjMyZmY3
OGExZTc1ZTE3YmZlMDA5MjAxYjc2ZjEyLi4yNmExMmRlM2JlNGFjNmI4ODQzNjRjNTU0Mzk3Zjdm
NzFjNzhhYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVk
ZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIldpbmRSdWxlLmgiCiAjaW5jbHVkZSA8d3Rm
L0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtMTIyLDE3ICsxMjMs
NiBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRUZXh0QWxpZ24KIH07CiAKLWVudW0gUmVu
ZGVyaW5nTW9kZSB7Ci0gICAgVW5hY2NlbGVyYXRlZCwKLSAgICBVbmFjY2VsZXJhdGVkTm9uUGxh
dGZvcm1CdWZmZXIsIC8vIFVzZSBwbGFpbiBtZW1vcnkgYWxsb2NhdGlvbiByYXRoZXIgdGhhbiBw
bGF0Zm9ybSBBUEkgdG8gYWxsb2NhdGUgYmFja2luZyBzdG9yZS4KLSAgICBBY2NlbGVyYXRlZAot
fTsKLQotZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHsKLSAgICBQcmVtdWx0aXBs
aWVkLAotICAgIFVucHJlbXVsdGlwbGllZAotfTsKLQogU3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9y
TmFtZShXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwgV2ViQ29yZTo6QmxlbmRNb2RlKTsKIFN0
cmluZyBibGVuZE1vZGVOYW1lKFdlYkNvcmU6OkJsZW5kTW9kZSk7CiBib29sIHBhcnNlQmxlbmRN
b2RlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkJsZW5kTW9kZSYpOwpAQCAtMTQzLDcgKzEzMyw2
IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPCiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgV2luZFJ1bGUpOwogV0VCQ09SRV9FWFBP
UlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVDYXAp
OwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYsIExpbmVKb2luKTsKLVdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggYzAxMjYzNzBjYjg2NTkyN2EzMmJmMTFmNjE0ODZkNzFh
ZjdiNDc1OC4uNGUyYmU3MWM3NDFjNTVmNTZjMGFkMDQ2YTc5N2U1MGEwOTcxODhiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAt
MSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0
QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDM4ICsyOCw0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5j
bHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0gNDA5NjsKLXN0YXRpYyBjb25zdCBmbG9h
dCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5ndGggKiBNYXhDbGFtcGVkTGVuZ3RoOwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdykKK3sKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQogCi1XVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gY3Jl
YXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKK30K
IAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9z
dFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICBib29sIHN1Y2Nl
c3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcg
SW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdN
b2RlLCBob3N0V2luZG93LCBzdWNjZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIGlmIChz
aXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBj
b250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFw
aGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6
ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotI2lmIFVTRShESVJFQ1Qy
RCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wg
c3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVy
KG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRl
cmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAo
IXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7Cisg
ICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlv
blNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgorCitzdGF0aWMgY29uc3QgZmxvYXQgTWF4
Q2xhbXBlZExlbmd0aCA9IDQwOTY7CitzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEg
PSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExlbmd0aDsKIAogYm9vbCBJbWFnZUJ1ZmZl
cjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewpAQCAtMTA1LDk3
ICsxMTEsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0aW9uKCksIGNsYW1w
ZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAhVVNFKENBSVJPKQot
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgotICAgIHJldHVybiB7
IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpKQotCi1GbG9h
dFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplIHNpemUp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENv
bG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBv
cnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6
OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCi0gICAgICAg
IHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBkc3RDb2xvclNw
YWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZHN0
Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKLSAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAg
ICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xv
ciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xv
ckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2Fz
dDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3Jt
Q29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9
PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVp
bnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
MjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0g
ICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NSR0JDb2xvckNvbXBvbmVudChjb2xvcik7
Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChj
b2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5Owot
ICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShkZXZpY2VS
Z2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKLQotaW5saW5lIHZvaWQgSW1h
Z2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0
IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3Jj
UGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShsdW1pbmFuY2VSZWN0KTsKLSAg
ICBpZiAoIXNyY1BpeGVsQXJyYXkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25l
ZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJheS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zmc2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsg
cGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50OF90IGEgPSBzcmNQaXhlbEFycmF5LT5p
dGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIGlmICghYSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0
KTsKLSAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCAr
IDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0
ICsgMik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAq
IDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUpYSAvIDI1NS4wKTsKLSAgICAgICAgc3Jj
UGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywgbHVtYSk7Ci0gICAgfQotICAgIHB1dEJ5
dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKQotewotICAg
IC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlvbnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRU
b0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAgICBnZW5lcmljQ29udmVydFRvTHVtaW5hbmNl
TWFzaygpOwotfQotCi0jaWYgIVVTRShDQUlSTykKLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVy
OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFn
ZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwg
R0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKQorSW50U2l6
ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3Jt
IGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hlcgorICAgIC8vIHJlc29sdXRpb24gdGhh
biBvbmUgcGl4ZWwgcGVyIHVuaXQuCisgICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICog
Y29udGV4dC5zY2FsZUZhY3RvcigpKTsKIH0KLSNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCiB7CkBAIC0yMDQsNjMgKzEyNSwyNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdAogCiAg
ICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXpl
KHJlY3Quc2l6ZSgpLCBjb250ZXh0KTsKIAotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4
dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYnVm
ZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsK
LSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShz
aXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNv
bXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0gICAg
aWYgKCFidWZmZXIpCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGVD
b21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UsIGNvbnRleHQpOworICAg
IGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgLy8gU2V0
IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQu
Ci0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOwotICAgIHJl
dHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1QyRCkKLSAgICByZXR1cm4gY3JlYXRlKHNp
emUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29udGV4dCwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRl
cmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbmRpZgotfQotCi1J
bnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICAvLyBFbmxhcmdl
IHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0
IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBpeGVsIHBl
ciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQuc2NhbGVG
YWN0b3IoKSk7CisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRo
aXMsIC1yZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKIH0KIAotYm9v
bCBJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJbnRv
TmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKIHsK
LSAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChjb250ZXh0LnNjYWxlRmFjdG9yKCksIHRo
aXMtPmNvbnRleHQoKS5zY2FsZUZhY3RvcigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNp
bmtJbnRvTmF0aXZlSW1hZ2UoKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK1JlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKIHsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZy
b20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRh
IHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRl
cm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAg
ICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNpemUoKS5oZWln
aHQoKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBj
b25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIDA7CisgICAgaW1hZ2VCdWZm
ZXItPmRyYXdDb25zdW1pbmcoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwog
fQotI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCmluZGV4IDNiZGVlNGVlMDBlZDE3YWUz
NDNiMmY2YThkZGQwMDkzODljMmU2YmYuLmM2MGI3NWQ0ZmJmYmE1ZDJiZDQ1MGIxM2E3NTMxMzBm
YzZiY2NhZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDct
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTcwICsyNyw4MSBAQAogCiAjcHJhZ21hIG9uY2UK
IAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIK
LSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAjaW5jbHVkZSAiSW1hZ2VQYWludGluZ09w
dGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5o
IgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVk
ZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3RmL0lzb01h
bGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R0xPcGVuR0w7Ci1jbGFzcyBJbWFnZTsK
LWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50OwotY2xhc3MgSW50UmVjdDsKLWNsYXNz
IEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3JlQ29weSB7Ci0gICAgQ29weUJhY2tpbmdT
dG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5
LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVj
dCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIHsKLSAgICBO
bywKLSAgICBZZXMsCi19OworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERyYXdpbmdD
b250ZXh0OworfQogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVfRVhQT1JUKTsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJpZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1
YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwgcG9pbnRlciBvbiBhbGxvY2F0aW9uIGZh
aWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0
V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJFQ1QyRCkKLSAgICBXRUJDT1JFX0VYUE9S
VCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RX
aW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQotICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBidWZm
ZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFuZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1
ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0Jik7CiAKLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGli
bGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5n
IGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBo
aWNzQ29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUo
Y29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7Ci0gICAgYm9vbCBpc0Nv
bXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKLQotICAg
IFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwotCi0gICAgLy8gVGhlIGFjdHVhbCByZXNv
bHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9naWNh
bFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0KLSAgICBGbG9hdFNpemUg
c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUpIGNvbnN0OwotCi0gICAgZmxvYXQgcmVz
b2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAv
LyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIg
d2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0
aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMg
Ym9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxl
KTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYpOwor
ICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRT
aXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgp
IGNvbnN0OworICAgIHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZs
b2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQg
UmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3Rv
cmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0Owot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObyk7Ci0gICAgLy8gR2l2ZSBoaW50cyBvbiB0aGUgZmFzdGVyIGNvcHlJbWFn
ZSBNb2RlLCByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmUgaWYgaXQgc3VwcG9ydHMgdGhlIERv
bnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yCi0gICAgLy8gb3IgcmV0dXJuIENvcHlCYWNraW5n
U3RvcmUgaWYgaXQgZG9lc24ndC4gIAotICAgIHN0YXRpYyBCYWNraW5nU3RvcmVDb3B5IGZhc3RD
b3B5SW1hZ2VNb2RlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB+SW1hZ2VCdWZmZXIo
KSA9IGRlZmF1bHQ7CiAKLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9OworICAgIHZpcnR1YWwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBm
bHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldFVu
bXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURp
bWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lv
bnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0p
IGNvbnN0OworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5n
Q29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3
aW5nQ29udGV4dCgpIHsgfQogCi0gICAgdm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50
U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0
dWFsIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOwogICAgIAotICAgIHZvaWQgY29udmVydFRvTHVt
aW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qg
eyByZXR1cm4gMDsgfQogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50
OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFs
aXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0OworICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qg
PSAwOwogCi0jaWYgVVNFKENBSVJPKQotICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkg
Y29uc3Q7Ci0jZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0
VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0Jik7CiAKLSNpZiAhVVNFKENHKQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KLSAgICB2b2lkIHRyYW5zZm9y
bUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9y
U3BhY2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRy
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwg
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0jZW5kaWYKLSAgICBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRyYXcoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdP
cHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0
OwotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICBzdGF0aWMgTmF0
aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0lt
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAs
IC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSAgICAvLyBG
SVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgdGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVz
dHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawotICAgIC8vIHdpdGggdGV4dHVyZXMgdGhhdCBh
cmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdORURfQllURSB0eXBlLgotICAgIGJvb2wg
Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0s
IFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29sLCBib29sKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNm
b3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENv
bG9yU3BhY2UpID0gMDsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNs
YW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tl
ciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZs
b2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0
U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNp
emUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShj
b25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0
IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
ID0gMDsKIAotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAgLy8gVGhlIHJldHVybmVkIGltYWdl
IG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNpemUoKS4gSWYgeW91IHdhbnQgdGhl
IHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVzdWx0LgotICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc2lua0ludG9O
YXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKLSAgICB2b2lkIGZsdXNo
Q29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBzaW5rSW50b05hdGl2ZUlt
YWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0
KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxv
YXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7
Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3Rl
bSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSBJbnRQb2ludCgpLCBDb29y
ZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCkgPSAwOwogCi0gICAgc3Rh
dGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dM
ZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIGlu
bGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsK
LSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNs
YXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3JhZGllbnRJ
bWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKLQotcHJpdmF0ZToKLSAg
ICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIEludFNpemUgbV9zaXplOwotICAgIEludFNp
emUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIC8v
IFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMgc3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBv
dXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxk
IHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotI2lmIFVTRShDRykKLSAgICBJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29s
b3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nl
c3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0
IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRleHQqLCBib29sJiBzdWNjZXNzKTsKLSNl
bmRpZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpID0g
MDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29s
dXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRy
YXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0g
MDsKIH07CiAKLSNpZiBVU0UoQ0cpCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwotVmVjdG9y
PHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRjMDVjYWZkMjg4NzdmZDVkMDc2Yzc3OGVi
NDBmNmNmYzc5OGZkZDAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkltYWdl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdl
QnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXpl
KQorICAgICwgbV9pbnRlcm5hbFNpemUoaW50ZXJuYWxTaXplKQorICAgICwgbV9yZXNvbHV0aW9u
U2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7
Cit9CisKK0ludFNpemUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxv
YXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgo
KSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNj
YWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUo
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW50
U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50
ZXJuYWxTaXplLndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZs
b3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGludGVybmFs
U2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZs
b3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIAorICAgIHJldHVybiBpbnRlcm5hbFNp
emU7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRp
dmVJbWFnZSgpCit7CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdT
dG9yZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJu
IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30K
Kwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBk
cmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQg
SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBJbnRS
ZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQ6Onplcm8oKSwgbV9pbnRlcm5hbFNpemUpOworICAg
IGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3QsIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2lj
YWwpOworICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZv
ciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5n
dGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJh
eS0+aXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9m
ZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZz
ZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9m
ZnNldCArIDIpOworICAgICAgICAKKyAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSAr
IGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7CisgICAgICAg
IHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOworICAgIH0KKworICAg
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpz
cmNQaXhlbEFycmF5LCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVtaW5hbmNlUmVjdCwgSW50UG9p
bnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEodm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBW
ZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQo
KSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAq
IDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVp
bnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKTsKKworICAg
IGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9y
bWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUp
OworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OmNyZWF0ZUdldEltYWdlRGF0YUFycmF5KGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVkLCBJbnRSZWN0JiBkZXN0UmVjdCkgY29u
c3QKK3sKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Cisg
ICAgYXJlYSAqPSBzcmNSZWN0LndpZHRoKCk7CisgICAgYXJlYSAqPSBzcmNSZWN0LmhlaWdodCgp
OworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlh
bGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYgKCFhcnJheSB8fCAhYXJyYXktPmRhdGEo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7
IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXplIH07CisgICAgc3JjUmVjdENsaXBwZWQg
PSBpbnRlcnNlY3Rpb24oYnVmZmVyUmVjdCwgc3JjUmVjdCk7CisgICAgZGVzdFJlY3QgPSB7IElu
dFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNpemUoKSB9OworCisgICAgaWYgKHNyY1Jl
Y3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WCgtc3JjUmVjdC54KCkpOworCisgICAg
aWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0WSgtc3JjUmVjdC55KCkp
OworCisgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBzcmNSZWN0LnNpemUoKSkKKyAgICAgICAg
YXJyYXktPnplcm9GaWxsKCk7CisgICAgCisgICAgcmV0dXJuIGFycmF5OworfQorCit2b2lkIElt
YWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50U2l6
ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdAor
eworICAgIEludFJlY3QgZGF0YVJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1NpemUgfTsK
KyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbihkYXRhUmVjdCwgc3JjUmVjdCk7Cisg
ICAgCisgICAgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnko
ZGVzdFBvaW50KTsKKyAgICAKKyAgICBpZiAoc3JjUmVjdC54KCkgPCAwKQorICAgICAgICBkZXN0
UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3QueCgpKTsKKworICAgIGlmIChzcmNSZWN0
LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55
KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0geyBJbnRQb2ludDo6emVybygpLCBtX2lu
dGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVyc2VjdChidWZmZXJSZWN0KTsKKworICAg
IHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Quc2l6ZSgpKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0
ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQ
aXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNo
YW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07Cisg
ICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4
ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNy
Y0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENv
bG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNy
Y1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNv
cHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwg
ZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0
UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhl
bFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzJd
ID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbM10gPSBh
bHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBTd2FwIHBpeGVsIGNo
YW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICog
MjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBh
bHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8gYWxwaGE7Cisg
ICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5w
cmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBj
b25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50
OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAg
IGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVk
VG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0
LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChzcmND
b2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0g
KHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMV0g
PSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsy
XSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVs
WzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gU3dhcCBw
aXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhl
bFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxb
MV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBd
ICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworfQorCit0
ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKENvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90Kiwg
Q29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4KK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhl
bHNVbmFjY2VsZXJhdGVkKAorICAgIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3Ms
IGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53
aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNpemUuaGVpZ2h0KCk7ICsreSkg
eworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisg
ICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZvcm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RD
b2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OworICAgIH0KK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1h
dCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50
U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhh
Rm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5h
Y2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3Jt
YXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11
bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNp
emUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGNvcHlJbWFnZVBpeGVsc1Vu
YWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JG
b3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRl
c1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0sIHZvaWQqIGRhdGEpIGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0
U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBDb29yZGluYXRl
U3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNjYWxlICE9IDEpCisgICAgICAgIHNyY1Jl
Y3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgSW50UmVjdCBzcmNSZWN0
Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0OworICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVH
ZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3Qp
OworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRhKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQu
d2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IGFycmF5LT5kYXRhKCkgKyBkZXN0UmVj
dC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworICAgIAorICAgIHVu
c2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNS
b3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55
KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5
SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAg
ICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0
Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJldHVybiBhcnJheTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUm
IHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkKK3sKKyAg
ICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBzcmNTaXplOworICAgIEludFJlY3Qgc3JjUmVjdFNj
YWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5
c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2FsZSAhPSAxKSB7CisgICAgICAgIHNyY1Np
emVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworICAgICAgICBzcmNSZWN0U2NhbGVk
LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICB9CisKKyAgICBJbnRSZWN0IHNyY1JlY3RD
bGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7CisgICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRh
UmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVjdFNjYWxlZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xp
cHBlZCwgZGVzdFJlY3QpOworICAgIAorICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5
dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVp
bnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3RSZWN0
LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzcmNTaXplU2Nh
bGVkLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93cyA9IGFycmF5LmRhdGEoKSArIHNyY1Jl
Y3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsK
KworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgaW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0
OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIGRlc3RCeXRlc1Bl
clJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTgwYjIzYmFmYzgwNjM2ZThmYjczNjAxZWVlNzM3
MTcwY2M3MTQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIK
KyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50
OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSG9zdFdpbmRvdzsKK2Ns
YXNzIEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNvcHkgeworICAgIENvcHlCYWNraW5nU3Rv
cmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4K
KyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3Qg
dGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3Qg
eworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0gY2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50
OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisKK2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5
c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisgICAgQmFja2luZ1N0b3JlCit9OworCitj
bGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHZp
cnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICAKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRT
aXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQo
KSB7IH0KKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zv
cm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpOyB9Cisg
ICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IHsgcmV0dXJuIDQgKiBtX2ludGVy
bmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5h
bE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUlt
YWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9y
ZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1
YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9
IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
UmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29u
c3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygp
OworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9y
U3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0
dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRl
U3lzdGVtKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pID0gMDsKKyAgICAKKyAgICB2aXJ0dWFs
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9
CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSwgUGxhdGZv
cm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOworCisgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShjb25zdCBJbnRSZWN0JiBzcmNSZWN0
LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVjdCYgZGVzdFJlY3QpIGNvbnN0OworICAg
IHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVj
dCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RSZWN0KSBjb25zdDsKKworICAgIHZpcnR1
YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNp
emUud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0
KCkgY29uc3QgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OlJHQkE7IH0KKworICAgIFdFQkNPUkVfRVhQ
T1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0OworCisgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JG
b3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAorICAgICAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVz
dENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dz
LCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSwgdm9pZCog
ZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0sIHZvaWQqIGRhdGEpOworCisgICAg
SW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIEludFNpemUgbV9pbnRlcm5hbFNpemU7CisgICAg
ZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29sb3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBmODllYzBkMzZmZWZiZDEyYWJlNTQzYzNmMjAzNGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWYg
VVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNU
MkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlS
TykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWlyby5oIgotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNDc3MmM2OTRkMzgxYWNiYzkyNjBkYmI0N2U5ZmUyNzAxZTQyNzY1YQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BoeXNpY2Fs
SW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2Vu
ZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsK
K3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNh
bEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHN0
YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEltYWdlQnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+
Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgaWYg
KCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1v
dmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0
cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAgICA6IG1fYmFja2VuZChXVEZNb3ZlKGJh
Y2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQaHlzaWNhbEltYWdlQnVmZmVyKCkgPSBkZWZh
dWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAg
ICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVz
aENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFm
ZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNp
emUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5h
bFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVz
b2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5
Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmV4dGVybmFs
TWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdl
KEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNv
cHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkg
eworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1h
Z2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1h
Z2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1
dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+
dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2Fs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24p
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25z
dF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2Fs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNhbEltYWdlQnVmZmVy
Jj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBl
ZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAg
ICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5w
dXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRl
U3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3Jt
TGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1M
YXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29sIGNvcHlU
b1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGlu
YXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5h
bGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWRhMmI4
MzFmMzNjZDU3MjJiZDcyOTc3MzRjNzlmMWEwMTM0MGNlNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIgor
I2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgor
CisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwg
RU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0
Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRl
ZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYg
VVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
ID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIFVT
RShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVm
ZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsKKyNlbGlmIFVTRShDQUlS
TykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3VzaW5nIFBsYXRmb3JtQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0g
UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kOworI2VuZGlmCisKK3VzaW5n
IFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1
ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41YjgwMDZkOTc5NTE0NTYxNzAwOWIzNDk2ZTEyYjA2NTNkYWViYTRlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjZWxpZiBVU0UoRElSRUNUMkQpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCIKKyNlbGlmIFVTRShDQUlSTykK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorI2VuZGlmCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOwor
I2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRhMGFmYTc5ZDc0NjFjZDlmMmYxMDkxMzUwYzgxNWRiYmJk
N2JjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUg
IkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUlt
YWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJl
bmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgp
KTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVy
aW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVy
biBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpo
b3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFj
a2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5n
TW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBS
ZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQ
bGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBj
YXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1
ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAg
aW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7Cisg
ICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6
CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBs
YXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU3MWI5MmQ1ODRmZWU4ZjRhZjdhODU5NjRlYWFiYzFjZWQ1MDE3MzEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgor
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7
CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5k
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+
IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmluZ0JhY2tlbmQmIHNoYXJlZFJlbmRlcmlu
Z0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKKyAgICAKKyAgICB2aXJ0dWFs
IH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBSZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RX
aW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBSZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZh
dWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVu
ZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhmZDY0M2RhNzA0NDFlNTMzOGIxNmExMWIw
NTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgeworICAgIEFjY2VsZXJhdGVkLAor
ICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3RBY2NlbGVyYXRlZCwKKyAgICBEaXNw
bGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwKKyAgICBSZW1vdGUKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEwNzY3OGM1NmFjZGIwYzUzM2EwOTg2Zjdl
NjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0NDk0ZWMzMzJkNWY5NDU3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtODMs
NyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFyU2NyYXRjaEJ1ZmZlcigpOwogCiAgICAg
ICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0aCBhY2NlbGVyYXRlZCBkcmF3aW5nLCBz
byBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVy
LgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6
ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAg
ICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7CiAgICAgfQogCkBAIC01OTMsNyArNTkz
LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3coY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAogdm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVj
dFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRS
b3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBMYXllckltYWdlUHJvcGVydGllcyYgbGF5
ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZmZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikK
IHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50
U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBVbmFjY2VsZXJhdGVkLCAxKTsK
KyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6
ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjIx
LDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1JlY3RTaGFkb3dXaXRob3V0VGlsaW5n
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0CiAKIHZvaWQgU2hhZG93Qmx1cjo6
ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25z
dCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9hdFJvdW5kZWRSZWN0JiBob2xlUmVjdCwg
Y29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVySW1hZ2VQcm9wZXJ0aWVzLCBjb25zdCBE
cmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7Ci0gICAgYXV0byBsYXllckltYWdlID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMu
bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1h
Z2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5
ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFsYXllcklt
YWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3ICs2ODUsNyBAQCB2b2lkIFNoYWRvd0Js
dXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0
b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9Q
QVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAg
IGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0g
bGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC03MzksNyArNzM5LDcgQEAgdm9p
ZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRoVGlsaW5nKGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cpCiAgICAgYXV0byogbGF5ZXJJbWFnZSA9
IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNjcmF0Y2hCdWZmZXIodGVtcGxhdGVTaXpl
KTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0
ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5n
ZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwxMiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRl
bXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0IGJsdXJSZWN0KEludFBvaW50KCks
IHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAgYXV0byBsYXllckRhdGEgPSBsYXllcklt
YWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQs
IGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
Ymx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCksIGJsdXJSZWN0LnNpemUoKSwgYmx1clJl
Y3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2UucHV0Qnl0ZUFycmF5KCpsYXllckRhdGEs
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3Quc2l6ZSgp
LCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJsdXJSZWN0LnNpemUo
KSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1
ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXpl
KQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0CiAKICAgICBhZGp1
c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy0+bGF5ZXJT
aXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZm
ZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJbWFnZVByb3BlcnRpZXMtPmxheWVyU2l6
ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghbGF5ZXJJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRleCAzOTZjZjBiZTA3MDVh
NjZhNGZmNGYyY2E1NzE2MGM3NTFkZjcwNzg1Li5iMjM2NTQxM2ZkZTM3NzNiNzMyMTg5OTAwYjVm
NmUxZTk2MmQ4MWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBl
bnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZm
ZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdWZmZXImIGxh
eWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBjb25zdCBGbG9hdFNpemUm
IGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlKQogewotICAgIGlmIChh
dXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsKKyAgICBpZiAoYXV0byBz
dXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
KSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0
KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmlnaW4pLCBsYXllclNpemUpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNoYWRvd1N0YXRlLmdsb2JhbENv
bXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgp
KTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1NoYWRvd0xh
eWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnUK
IC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdTaGFkb3dMYXllckJ1ZmZlciwg
c28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0
Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFn
ZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9
IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXll
ckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAg
ZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3Qs
IHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93
U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0KIH0KQEAgLTE5Miw3ICsx
OTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJv
JiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIHNhdmUocGxhdGZvcm1Db250
ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkp
CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VCdWZmZXIocGxhdGZvcm1Db250
ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6
ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxTb3VyY2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJlMTRhZDQ4Zjg2N2IwNDU4NWVl
ODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAyZGY1N2IyNzQ3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBG
bG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1
dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
KQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBz
dXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBs
Q2Fpcm8uY3BwCmluZGV4IDFhODFkNDAzZDQwMjRjMzFiMDJhMjQ4YzRlZTJjYWU2YWRkNTEyN2Yu
LjBlZGE2NWNmNDI0NTllNTQwYzE3OTI3MmIxYzcyOWU5ZDI4YzZkZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxD
YWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDExLDcgKzQxMSw3IEBAIEludFJlY3QgR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAogdm9pZCBHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5u
YXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZmZXIuY29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVm
ZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1h
Z2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTMzM2E3
NDI2OWY1MjQ3MDVmNTQzZjBkZGI4MzRjYzdjYmRmMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODEgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1h
bm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGly
ayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fp
cm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgotI2luY2x1ZGUg
Ik1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1
ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1
ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5lcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
QmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29udGV4dC5oIgotI2luY2x1ZGUg
IlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNpZiBVU0UoTElCRVBPWFkpCi0j
aW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8RUdML2VnbC5oPgotI2VuZGlm
Ci0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYgVVNFKExJQkVQT1hZKQotI2lu
Y2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VTKQotI2luY2x1ZGUgPEdMRVMy
L2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2VuZGlmCi0KLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotSW1hZ2VCdWZm
ZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9ybUNvbnRleHQoMCkKLSAgICAsIG1fc2l6
ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJlbmRlcmluZ01vZGUpCi0jaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0g
ICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5kaWYKLSAgICAsIG1fdGV4dHVyZSgwKQot
I2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9k
ZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgbV9uaWNvc2lhTGF5
ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJU
ZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgqdGhpcykpOwotI2Vsc2UKLSAgICAgICAg
bV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3Jt
TGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5kaWYKLX0KLQotSW1hZ2VCdWZmZXJEYXRh
Ojp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAobV9yZW5kZXJpbmdNb2RlICE9IEFjY2Vs
ZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykgJiYgVVNFKE5JQ09TSUEpCi0gICAg
ZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3Np
YUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQoKTsKLSNlbmRpZgotCi0gICAgR0xDb250
ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENv
bnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAgICBpZiAobV90ZXh0dXJlKQotICAg
ICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0b3JUZXh0dXJlKQotICAgICAgICBnbERl
bGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSNlbmRpZgotCi0gICAgaWYg
KHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi12b2lkIEltYWdlQnVm
ZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCi17Ci0gICAgYXV0byogY29udGV4dCA9
IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dM
Q29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xH
ZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShH
TF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYo
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAg
IGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xB
TVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsUGl4ZWxTdG9y
ZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVf
MkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBHTF9S
R0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAgIG1fY29tcG9zaXRvclN1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShjb250ZXh0LT5jYWly
b0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJl
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgbV9jb21wb3NpdG9yQ3Ig
PSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3NpdG9yU3VyZmFjZS5nZXQoKSkpOwotICAg
IGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX0FOVElBTElB
U19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkKLVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6OnByb3h5KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOwotfQotI2VuZGlmCi0KLXZvaWQg
SW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKLXsKLSAgICBHTENvbnRleHQq
IHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOwotCi0gICAgaWYg
KCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIo
KTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KLSAgICAgICAgICAgIFt0aGlzXShU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOwotICAgICAgICAg
ICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAgICAgICAgICAgfTsKLSNpZiBVU0UoTklD
T1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOwot
I2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKLSNl
bmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qg
c3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFr
cyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJl
YWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBj
b250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0
X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAs
IDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9f
T1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7
Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotI2VuZGlmCi0KLXZvaWQgY2xlYXJT
dXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJm
YWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9D
TEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVy
RGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRl
eHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIC8vIFdlIG11
c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENh
aXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3Vy
ZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOwotICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlO
X0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotCi0gICAgZ2xQaXhlbFN0b3JlaShH
TF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJE
LCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
LCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7Ci0KLSAgICBj
YWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8v
IFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwg
ZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZB
TFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRl
X2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJl
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1f
c3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBh
dXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JN
QVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNl
KSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0K
LSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBj
YWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAg
Y2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICBj
YWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1cm4gY29weTsKLX0KLQotc3RhdGljIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJm
YWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UKLSAgICAgICAgJiYgY2Fpcm9fc3VyZmFj
ZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBKQotICAg
ICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVybiBjYWlyb1N1cmZhY2VDb3B5KHN1cmZh
Y2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25z
dAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChzdXJmYWNlLmdldCgp
KTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZh
Y2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gaW1hZ2VEYXRhOwotCi0g
ICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0
KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxzLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgcmV0dXJuIGltYWdlRGF0YTsKLX0KLQot
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29s
JiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUoc2l6ZSksIHJlbmRlcmluZ01vZGUpCi0g
ICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0
aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAgLy8gTWFrZSBlYXJseSByZXR1cm4g
bWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYobV9yZXNvbHV0aW9u
U2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1f
cmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0
U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNj
YWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9IG1fc2l6ZTsKLQotICAgIGlmIChtX3Np
emUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IEFjY2VsZXJhdGVk
KSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotICAgICAgICBpZiAo
IW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCi0gICAgICAgICAgICBtX2RhdGEubV9y
ZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFs
bCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLSAgICBpZiAobV9kYXRhLm1f
cmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQotI2Vsc2UKLSAgICBBU1NFUlQobV9kYXRh
Lm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAg
IHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKLQotICAgICAg
ICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFU
X0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAgICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAg
ICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1fc2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSku
Z2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIG1f
ZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3Jf
ZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4oc3VyZmFjZURhdGEpLCBDQUlST19GT1JN
QVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKLSAg
ICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCks
ICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwgW10odm9pZCogZGF0YSkgeyBmYXN0RnJl
ZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1
cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlkbid0IHNldCBtX2luaXRpYWxpemVkIGFu
ZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIFJl
ZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2RhdGEubV9zdXJmYWNl
LmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsK
LSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBo
aWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX2RhdGEubV9wbGF0Zm9ybUNvbnRl
eHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZl
cigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1
ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250
ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICptX2RhdGEu
bV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdl
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1
dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlC
ZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIC8vIGNvcHlDYWlyb0lt
YWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBp
ZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpCi0gICAgICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3VyZmFjZShtX2RhdGEubV9zdXJmYWNlLmdl
dCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxsIHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBz
dXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3VyZmFjZSkpOwotfQotCi1CYWNraW5nU3Rv
cmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpCi17Ci0gICAgcmV0dXJuIERv
bnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5n
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4
dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAg
aW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25z
KTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RpbmF0
aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYg
KGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKSB7Ci0gICAgICAgIGlmICgm
ZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkpCi0gICAgICAgICAgICBzdXJmYWNlID0g
Y2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsKLQotICAgICAgICBJbnRlcnBvbGF0aW9u
UXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGlu
YXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRpb25RdWFsaXR5KCkpOwotICAgICAgICBj
b25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5z
dGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2UoKmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9u
cywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRl
KGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAgfQotfQotCi12b2lkIEltYWdlQnVmZmVy
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBp
ZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQotICAgICAgICBDYWlybzo6ZHJhd1BhdHRl
cm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpCi17Ci0gICAgLy8gRklYTUU6IEVuYWJs
ZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2NlbGVyYXRlZCBjYW52YXNlcy4KLSAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGNo
YXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fZGF0YS5tX3N1cmZh
Y2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJp
ZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX3Np
emUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgrKykgewotICAgICAgICAgICAgdW5zaWdu
ZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAgIENvbG9yIHBpeGVsQ29sb3IgPSBjb2xv
ckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotICAgICAgICAgICAgcGl4ZWxDb2xvciA9
IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVkKCldLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVsQ29sb3IuYWxwaGEoKSk7Ci0gICAgICAg
ICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKTsKLSAg
ICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1f
ZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dp
Y2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJm
YWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0
JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBh
biBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsKLSAgICAv
LyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAo
c3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm4g
c3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDApOwotICAg
IHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRf
QVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGxv
Z2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNpemUmIHNp
emUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17
Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBiaWcuCi0g
ICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEg
Kj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJl
YS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBy
ZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVu
c2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBl
bmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0aCgpLCBl
bmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFz
IHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAoIVdURjo6
c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+
IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56
ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQgZGVzdHgg
PSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmlnaW54Owot
ICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUud2lkdGgo
KSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVu
ZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBpbnQgZGVz
dHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1vcmlnaW55
OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNpemUuaGVp
Z2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1Sb3dzID0g
ZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBzbyBqdXN0
IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8
PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRl
cml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8v
IFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2Ug
ZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9y
aWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1
cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUo
aW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2FsZSk7Ci0g
ICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVjdC55KCk7
Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAg
ICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3Jk
aW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24o
bG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNp
emUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5vdGhlcihk
YXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1sb2dpY2Fs
QXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxB
cmVhLnNpemUoKSksIEludFNpemUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hhciogZGF0
YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsK
LSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0
cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkp
OwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAg
ICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RCeXRlc1Bl
clJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkg
ewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQq
PihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXggPSB4ICog
NDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54OwotCi0g
ICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhl
bCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAoKnBpeGVs
ICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAoKnBpeGVs
ICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4
ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4
ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSBy
ZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1
NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBn
cmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgICAgIGRlc3RS
b3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQoY29uc3Qg
VW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3JkaW5hdGVT
eXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCBy
ZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCBy
ZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2NhbGUpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUg
VW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6
QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQot
ICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3Vs
dC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0
cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29v
cmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9n
aWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5p
dChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBp
eGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNr
aW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9naWNhbFJl
Y3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19
Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxp
ZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVu
c2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJ
bnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwg
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9IGJhY2tp
bmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwot
ICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNp
b25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YTxB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBs
b2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNj
YWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xh
bXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
Ci17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChzb3Vy
Y2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50U2l6
ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBjb29yZGlu
YXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVkRGVzdFBv
aW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVz
b2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9naWNhbFVu
aXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAg
IEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQsIGNvb3Jk
aW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VSVChzY2FsZWRTb3Vy
Y2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5oZWlnaHQo
KSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBp
bnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54KCk7Ci0g
ICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNhbFNvdXJj
ZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHggPCBt
X3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNTRVJUKG9y
aWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHggPSBzY2Fs
ZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50IGxvZ2lj
YWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhYKCk7
Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51bUNvbHVt
bnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9naWNhbEVu
ZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJjZVJlY3Qu
eSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRTb3VyY2VS
ZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBs
b2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAgIEFTU0VS
VChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0g
ICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0gICAgaW50
IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZKCk7Ci0g
ICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNl
UmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsKLSAgICBp
bnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3MgPSBsb2dp
Y2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBkZXJpdmVk
IHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBu
ZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20g
dGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVzdHksIG51
bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3Vy
ZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1
cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
ZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAg
IHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VT
dXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNjYWxl
ZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50OF90KiBz
cmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdp
bnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAg
IHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0
YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBu
dW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAg
ICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OwotCi0gICAgICAgICAgICAv
LyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGJlY2F1
c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhw
ZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1bnNpZ25l
ZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAgICAgaWYgKHNvdXJjZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9
IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0g
KGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0g
KGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8
IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9IHNyY0J5
dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24g
aXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJmYWNlX21h
cmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4LCBsb2dp
Y2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAgICBpZiAo
aW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAgLy8gVGhp
cyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdlU3VyZmFj
ZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAs
IGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNpemUobG9naWNhbERlc3RQ
b2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQueSgpICsg
bG9naWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAgfQotfQotCi0jaWYgIVBMQVRGT1JNKEdUSykK
LXN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0aW9uKHZvaWQqIG91dHB1dCwgY29uc3Qg
dW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIXJl
aW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Kj4ob3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEs
IGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfV1JJVEVfRVJST1I7Ci0gICAg
cmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFn
ZShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8
dWludDhfdD4qIG91dHB1dCkKLXsKLSAgICBBU1NFUlRfVU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlw
ZSA9PSAiaW1hZ2UvcG5nIik7IC8vIE9ubHkgUE5HIG91dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5v
dy4KLQotICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2Us
IHdyaXRlRnVuY3Rpb24sIG91dHB1dCkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLVN0
cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFZl
Y3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOwot
ICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gImRhdGE6LCI7
Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoZW5jb2Rl
ZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICBy
ZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4pIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAg
ICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCktPmNyKCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFn
ZTsKLSAgICBpZiAoIWltYWdlIHx8ICFlbmNvZGVJbWFnZShpbWFnZSwgbWltZVR5cGUsICZlbmNv
ZGVkSW1hZ2UpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgcmV0dXJuIGVuY29kZWRJbWFn
ZTsKLX0KLQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiAh
VVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
b3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsKLQotICAgIC8vIENhaXJvIG1heSBj
aGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJh
Y2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQg
PSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFj
ZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRy
YXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgbV9zaXpl
LCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQotI2VuZGlmCi0KLVBsYXRmb3JtTGF5
ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIGlmIChtX2RhdGEubV9y
ZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKQotICAgICAgICByZXR1
cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vsc2UKLSAgICBpZiAobV9kYXRhLm1f
dGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8SW1hZ2VCdWZmZXJEYXRhKj4oJm1f
ZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dM
ZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51
bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQotewot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1
cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7
Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgR0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsK
LSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xf
VEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0g
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAg
ICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGNh
aXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5D
b250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsK
LSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICB1aW50MzJfdCBmYm87Ci0g
ICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xf
RlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJV
RkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fZGF0YS5tX3RleHR1
cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9u
VGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIDAsIGludGVybmFsZm9ybWF0
LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwKTsKLSAgICBnbEJpbmRU
ZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAgIGdsRGVsZXRlRnJhbWVidWZmZXJz
KDEsICZmYm8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0odGFy
Z2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25UZXh0dXJlKTsKLSAgICBVTlVTRURf
UEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShwcmVtdWx0aXBseUFscGhh
KTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc2YWY0MDg5NmJhYWNk
ODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApA
QCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIgorCisjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWlyb09wZXJhdGlvbnMuaCIKKyNpbmNs
dWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5oIgorI2luY2x1ZGUgIk1JTUVUeXBl
UmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUg
PGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBVU0UoQ0FJUk8p
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRo
ZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgorICAgIHJldHVybiBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEludGVycG9sYXRpb25RdWFs
aXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0Q29udGV4
dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKKyAgICBjb25zdCBhdXRvJiBkZXN0
aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0
byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENv
cHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRyYXdOYXRp
dmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0
UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5pbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmFscGhhLCBXZWJD
b3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3RhdGUpKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29w
eUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqZGVzdENvbnRleHQu
cGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xvZ2ljYWxTaXplLCBkZXN0UmVjdCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3Jj
Q29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkKK3sKKyAgICBpZiAoc3JjQ29s
b3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gb25s
eSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50CisgICAgaWYg
KChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNl
ICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChkZXN0Q29sb3JTcGFjZSAhPSBDb2xv
clNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNl
OjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwg
MjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3Qs
IDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBp
KyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAg
ICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7CisgICAg
ICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAq
IDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGFycmF5OworICAgICAg
ICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQp
OworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6U1JHQikgewor
ICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGRldmljZVJnYkxV
VD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0g
bGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAgICAgIGFycmF5
W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOworICAgICAgICBw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsKKyAgICB9Cit9CisKK1N0
cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWltZVR5cGUs
IHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKKyAgICBiYXNlNjRF
bmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0
YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2
NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29u
c3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0g
Y2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOworICAg
IHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIyZWExNzhiMzJjMDA5ZjVkODhkNWQ3MTZk
ZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFj
a2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQ
YXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgdm9pZCB0cmFuc2Zv
cm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29s
b3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3By
b3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2Vu
ZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
VHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45ZGQwYTE5ZjAxOTAwYzUwM2NjMmYyYjU1OWM1OGIzNTFjOGQwYzY0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBz
ZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGty
aXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWpp
bmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJM
RShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2luY2x1
ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0UoRUdMKQorI2lmIFVTRShMSUJFUE9Y
WSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxFR0wvZWdsLmg+Cisj
ZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+CisKKyNpZiBVU0UoTElCRVBPWFkp
CisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShPUEVOR0xfRVMpCisjaW5jbHVkZSA8
R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjZW5kaWYKKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxh
dGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJTdXJm
YWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3Ig
PSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOworICAgIGNhaXJvX3NldF9vcGVyYXRv
cihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOworICAgIGNhaXJvX3BhaW50KGNyLmdl
dCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3Vs
YXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFs
U2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogY29u
dGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hh
cmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisg
ICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhl
cmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0CisgICAgLy8gZnJvbSBhIHByZS1l
eGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUKKyAgICBnbEdlblRleHR1cmVz
KDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIHRleHR1cmUp
OworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAgICBnbFRleFBhcmFtZXRlcmko
R0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJ
TkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworCisg
ICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIGlu
dGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICov
LCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIGNhaXJvX2RldmljZV90KiBk
ZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOworCisgICAgLy8gVGhyZWFkLWF3YXJlbmVz
cyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5vbi1JbnRlbCBkcml2ZXJzLgorICAgIGNh
aXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRldmljZSwgRkFMU0UpOworCisgICAgYXV0
byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUo
ZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCB0ZXh0dXJlLCBpbnRlcm5hbFNpemUu
d2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vf
c3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSwgdGV4dHVyZSkpOworfQor
CitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
aW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlLCB1aW50MzJfdCB0ZXh0dXJlKQor
ICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5h
bFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAg
ICAsIG1fdGV4dHVyZSh0ZXh0dXJlKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykK
KyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRM
YXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVh
dGVGYWN0b3J5KCp0aGlzKSk7CisjZWxzZQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRv
cHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5k
aWYKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAm
JiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwor
I2VuZGlmCisKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBv
c2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRl
eHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUp
OworI2VuZGlmCisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2
aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxh
eWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09T
SUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90
ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRy
OworfQorCitib29sIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0
Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9u
VGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
Ym9vbCBmbGlwWSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUg
cmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlw
bHlBbHBoYSB8fCBmbGlwWSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3Rl
eHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJl
VGFyZ2V0OworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgor
ICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgor
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdM
X1RFWFRVUkVfQ1VCRV9NQVA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFj
ZS5nZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xD
b250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICB1aW50MzJfdCBmYm87CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Cisg
ICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRh
cmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKKyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwg
MCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1faW50ZXJuYWxTaXplLndpZHRoKCksIG1faW50ZXJu
YWxTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0
LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7CisgICAgZ2xG
bHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOworICAgIHJldHVybiB0
cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpCit7CisgICAg
YXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0
aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVu
dCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJlKTsKKyAgICBn
bFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRV
UkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFt
ZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwor
ICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgZ2xUZXhJbWFn
ZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBt
X2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
CisKKyAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9j
cmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9D
T0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9pbnRlcm5hbFNpemUud2lkdGgoKSwg
bV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpKTsKKyAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0
X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOwor
fQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lm
TmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29u
dGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAg
ICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0
aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRl
cihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1h
a2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRl
eHR1cmUsIG1faW50ZXJuYWxTaXplLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9S
R0JBKSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShOSUNPU0lBKQorICAgICAgICBwcm94eU9w
ZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4o
bV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7CisjZWxzZQorICAgICAgICBwcm94eU9w
ZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisgICAgfQorCisgICAgLy8g
SXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUg
YXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJlYWtzIHRoZSBjYXNlcworICAgIC8vIHdo
ZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHBy
ZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhlIGNvbnRlbnQKKyAgICAvLyBpbnRvIHRo
ZSBjb21wb3NpdG9yIGJ1ZmZlci4KKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21w
b3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fc2V0X29w
ZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAg
IGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgpKTsKKworICAgIGlmIChwcmV2aW91c0Fj
dGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYgdGV4dHVyZU1hcHBlciwgY29u
c3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0
cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VSVChtX3RleHR1cmUpOworCisgICAgLy8g
Q2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRleHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBj
aGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KKyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0
aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1
c2gobV9zdXJmYWNlLmdldCgpKTsKKyAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgc3RhdGljX2Nhc3Q8VGV4dHVyZU1hcHBlckdMJj4odGV4dHVy
ZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJlLCBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJs
ZW5kLCBtX2ludGVybmFsU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKK30KKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NDQ3NDRhZDhhZDFmOThhMTM3MDc0
OTNkMWI5ZDJlODAyYTY5NGZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApA
QCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRlICJOaWNvc2lhQ29u
dGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5jbHVkZSAiUGxhdGZvcm1M
YXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0UoTklDT1NJQSkKKyAgICA6IHB1YmxpYyBO
aWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50CisjZWxzZQorICAg
IDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorICAgICwgcHVibGljIEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKTsKKworICAgIH5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpOwor
CisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xlbnVtIHRhcmdldCwgUGxhdGZvcm1HTE9i
amVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0LCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIElt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworI2lmIFVTRShDT09SRElO
QVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2
b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisg
ICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigpOyB9CisjZW5k
aWYKKyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNp
ZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVyPiBtX25pY29z
aWFMYXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJv
eHk+IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisgICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3Np
dG9yQ3I7CisgICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZSB7IDAgfTsKKyNlbmRpZgor
ICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7IDAgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45MmNmNTc2MDhkMDk3NzVkM2ZiOTE4ZWMwNWNkYjc0MzE0NWY5NDc2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJl
eXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERp
cmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNo
IE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIFVT
RShDQUlSTykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dU
Rl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tl
eV90IHNfc3VyZmFjZURhdGFLZXk7CisKKyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1
bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5h
bFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGludCBzdHJp
ZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQVJHQjMyLCBp
bnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAgdm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0
cnlGYXN0WmVyb2VkTWFsbG9jKGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFs
dWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOwor
ICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNl
RGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUo
ZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNl
LmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Uo
Y29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZh
Y2UuZ2V0KCkpOworICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJp
ZGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNp
emUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRf
Y2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9y
ID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVs
Q29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhl
bENvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JG
cm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFj
ZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNp
emUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMwZGI3OWJhOWEzZTZk
NmRiMWM5MmMzMDZhNDc1MjA3MTRkYzNhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNl
QmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFj
a2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOwor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKK3ByaXZhdGU6
CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAg
dm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90
LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMTUyMDk0N2RiOTg1OTM1NTAwZjVkZGUw
MDZlY2U4ODZiYjRlMWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1h
bm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFu
cyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKwor
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWly
by5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxv
Z2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAg
ICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJm
YWNlX3N0YXR1cyhtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKKwor
ICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX3N1cmZhY2Uu
Z2V0KCkpKTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7CisgICAgbV9j
b250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxD
YWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29udGV4dCkpOworfQorCitHcmFwaGljc0Nv
bnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVyQ2Fpcm9T
dXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVybiBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKK30KKworTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVo
YXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6IHsKKyAgICAgICAgYXV0byBjb3B5
ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0Iz
MiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9zdXJmYWNlLmdldCgp
KSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQo
KSkpKTsKKworICAgICAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0
KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgpLCBDQUlST19PUEVSQVRP
Ul9TT1VSQ0UpOworICAgICAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1f
c3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKKwor
ICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0
b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdl
KCkgY29uc3QKK3sKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0Vf
VFlQRV9JTUFHRSAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQoKSkg
PT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9u
dENvcHlCYWNraW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5
QmFja2luZ1N0b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsK
K30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9C
R1JBRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNl
VG9JbWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1
cyhzdXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1dG8g
cGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAg
ICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KHN1cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
IHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1f
c3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBj
b29yZGluYXRlU3lzdGVtLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5n
ZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBzcmNS
ZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICBjYWlyb19zdXJmYWNlX21h
cmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50LngoKSwgZGVzdFBv
aW50LnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBzcmNSZWN0U2NhbGVkLmhlaWdodCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzhl
YWIwNmQzYTY5NWE4ZWQ4NWVlNDU0YWNhMDUxZGU1M2ViZWIxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CitwdWJsaWM6CisgICAgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFn
ZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBp
bnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBJbnRTaXplJiBzcmNT
aXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBD
b29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1
cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBj
b25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9z
dXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0IHsgbnVs
bHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyRGF0YUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckRhdGFDYWlyby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTYx
ZTM1OTk0NmVmNGJhZDY5MjNmZGJmNzU2NGEyZTM5Zjc2OWM0Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLSNkZWZpbmUgSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm9faAotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1h
cHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eVByb3ZpZGVyLmgiCi0jZW5kaWYKLQot
I2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShOSUNPU0lBKQotI2luY2x1
ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbC5oIgotI2VuZGlmCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHk7Ci0KLWNsYXNzIEltYWdlQnVmZmVyRGF0YQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgOiBwdWJsaWMgTmlj
b3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAotI2Vsc2UKLSAgICA6
IHB1YmxpYyBQbGF0Zm9ybUxheWVyCi0jZW5kaWYKLSNlbmRpZgotewotcHVibGljOgotICAgIElt
YWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiwgUmVuZGVyaW5nTW9kZSk7Ci0gICAgdmlydHVh
bCB+SW1hZ2VCdWZmZXJEYXRhKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1
cmZhY2U7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OwotICAgIEludFNpemUg
bV9zaXplOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5kZXJpbmdNb2RlOwotCi0jaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2b2lkIGNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7
Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
dm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJpZGU7Ci0jZWxzZQotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2VuZGlmCi0gICAgdm9p
ZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiBtX2NvbXBvc2l0b3JTdXJmYWNlOwotICAgIHVpbnQzMl90IG1fY29tcG9zaXRvclRleHR1cmU7
Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOwotCi0jaWYgVVNFKE5JQ09TSUEp
Ci0gICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxz
ZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3Jt
TGF5ZXJQcm94eTsKLSNlbmRpZgotI2Vsc2UKLSAgICB2aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1
cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwotI2VuZGlmCi0gICAgdWludDMy
X3QgbV90ZXh0dXJlOwotI2VuZGlmCi19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoQ0FJUk8pCi0KLSNlbmRpZiAvLyBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhMmJjZTlh
OTc1OTc1MGIwNjE3NDYxMTE4MWY2MmIzNzNkNGZkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0Nh
aXJvLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKworI2lmIFVTRShDQUlSTykK
KworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3Ry
eS5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNs
dWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisjaWYgIVBMQVRGT1JNKEdUSykKKworc3RhdGljIGNhaXJvX3N0YXR1c190IHdyaXRlRnVuY3Rp
b24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCit7CisgICAgaWYgKCFyZWludGVycHJldF9jYXN0PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1
dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVT
X1dSSVRFX0VSUk9SOworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworc3Rh
dGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRwdXQpCit7CisgICAgQVNTRVJUX1VOVVNF
RChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3BuZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQg
aXMgc3VwcG9ydGVkIGZvciBub3cuCisKKyAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90
b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9uLCBvdXRwdXQpID09IENBSVJPX1NUQVRV
U19TVUNDRVNTOworfQorCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqIGlt
YWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+KQoreworICAgIFZl
Y3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1h
Z2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdlKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQorCisjZWxzZQorCitzdGF0aWMgYm9vbCBlbmNv
ZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgR1VuaXF1ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwg
Z3NpemUmIGJ1ZmZlclNpemUpCit7CisgICAgLy8gTGlzdCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5j
b2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUgR2RrUGl4YnVmIGRvY3VtZW50YXRpb24uCisgICAg
Ly8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2RrLXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1
Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhidWYtc2F2ZS10by1idWZmZXJ2CisKKyAgICBTdHJp
bmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmluZyhzaXplb2YgImltYWdlIik7CisgICAgaWYgKHR5
cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBuZyIgJiYgdHlwZSAhPSAidGlmZiIgJiYgdHlwZSAh
PSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBH
UmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOworICAgIGlmICh0eXBlID09ICJqcGVnIikgeworICAg
ICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9ydCBhbHBoYSBjaGFubmVsLiBUaGUgPGNhbnZhcz4g
c3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwoKSBtdXN0IGVuY29kZSBhIFBvcnRlci1EdWZmCisg
ICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Utb3ZlciBibGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhh
dCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KKyAgICAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bmV3U3VyZmFjZTsKKyAgICAgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkg
PT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7CisgICAgICAgICAgICBuZXdTdXJmYWNlID0g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICBDQUlST19GT1JNQVRf
UkdCMjQsCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3Vy
ZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1
cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShz
dXJmYWNlKSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSW50U2l6ZSBzaXplID0g
Y2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsKKyAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9w
dFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNy
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICAgICAgICAg
IGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7CisgICAg
ICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcGl4YnVm
ID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2Rr
UGl4YnVmKHN1cmZhY2UpKTsKKyAgICBpZiAoIXBpeGJ1ZikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAgIGlmICh0eXBlID09ICJq
cGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsK
KyAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihzdGF0aWNfY2Fz
dDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUpKTsKKyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZl
X3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIub3V0UHRyKCksICZidWZmZXJTaXplLCB0
eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIoKSwgInF1YWxpdHkiLCBxdWFsaXR5U3Ry
aW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworICAgIH0gZWxzZQorICAgICAgICBnZGtfcGl4YnVm
X3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNp
emUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCBOVUxMKTsKKworICAgIHJl
dHVybiAhZXJyb3I7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkK
K3sKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZmZXI7CisgICAgZ3NpemUgYnVmZmVyU2l6
ZTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVy
LCBidWZmZXJTaXplKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3Rvcjx1aW50OF90
PiBpbWFnZURhdGE7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNp
emUpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKKyNlbmRpZiAvLyAhUExBVEZPUk0oR1RL
KQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2RlMzNjN2NhMDk2Y2Fk
ODkyMjYzNzM5Yzc1Zjk1YjIwZmVkYzAzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVy
bWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykK
KworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitW
ZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNlX3QqLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggNDk2ZWNhMzI0
ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5YS4uNzIyZWVmZmU2YzllNWZkMjg2NmJlMjcy
ODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcApAQCAtNTAwLDcgKzUwMCw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGJ1
ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRlc3RSZWN0LnNpemUoKSk7CisgICAgRmxvYXRT
aXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RSZWN0LnNpemUoKTsKICAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFj
a2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTZmMTk2NGQwOTU1
MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNjU0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
LQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRl
ICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRl
IDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgotI2luY2x1
ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tl
ZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVidWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKLSNlbmRpZgotCi0jaWYg
VVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2Uu
aCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8v
IENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiByZXNhbXBs
aW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1NfRkFNSUxZ
KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xBUkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9J
REVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5U
SUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMgRmxvYXRTaXplIHNjYWxlU2l6ZVRvVXNlclNw
YWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tpbmdT
dG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKLXsKLSAgICBmbG9hdCB4TWFn
bmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0PihiYWNraW5nU3RvcmVTaXplLndpZHRoKCkp
IC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAgZmxvYXQgeU1hZ25pZmljYXRpb24gPSBzdGF0
aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgLyBpbnRlcm5hbFNpemUu
aGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShsb2dpY2FsU2l6ZS53aWR0aCgpICogeE1h
Z25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdodCgpICogeU1hZ25pZmljYXRpb24pOwotfQot
Ci1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRp
YmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlOwotI2lmIFBM
QVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7
Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoKLSAgICAgICAgY29sb3JTcGFjZSA9IENH
Qml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0j
aWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFjZToKLSAg
ICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250
ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBkZWZhdWx0OgotICAgICAgICBjb2xv
clNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQp
KTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2UpCi0gICAgICAgIGNvbG9yU3BhY2UgPSBz
UkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3Bh
Y2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRl
eHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3Mg
PSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1h
Z2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFjZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwg
bnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9u
IHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxl
ZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENH
Q29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNv
bnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2lj
YWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17
Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVhcmx5IHJldHVybiBtZWFuIGZhaWx1cmUu
Ci0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndp
ZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAq
IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5
IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgs
IHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAg
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRl
UmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXpl
LndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBDaGVja2VkPGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXplLndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxp
bnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3NpemUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQot
ICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cg
PSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVt
Qnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdT
dG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OwotICAgIGlmIChudW1CeXRl
cy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjpt
YXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNhZmVHZXQoKSA+IG1heFNpemUud2lkdGgo
KSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXplLmhlaWdodCgpKQotICAgICAgICBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQotICAgIEFTU0VSVChyZW5kZXJpbmdNb2Rl
ID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAgICBtX2RhdGEuY29sb3JTcGFjZSA9IGNv
bG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAg
aWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNlckJvdW5kcyA9IHNpemVGb3JEZXN0aW5h
dGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkp
KTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRzKSwgY29sb3JTcGFjZSk7Ci0gICAgICAg
IGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAgICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1
cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKLSAgICAgICAgICAgIGlm
IChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4
dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdXNlckJvdW5kcykpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5zdXJmYWNlID0gbnVsbHB0cjsKLSAgICAg
ICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKGhvc3RXaW5kb3cpOwotI2VuZGlmCi0g
ICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9
IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJh
dGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAg
ICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxsb2M6OnRyeVplcm9lZE1hbGxvYyhtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVH
ZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAm
IDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0Owot
I2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCks
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpLCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbykpOwotICAg
ICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEgPSBbXSAodm9pZCosIGNvbnN0IHZvaWQq
IGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1hZ2VCdWZmZXJNYWxsb2M6OmZyZWUoY29u
c3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9OwotICAgICAgICAvLyBDcmVhdGUgYSBs
aXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0gICAgICAgIHZlcmlmeUltYWdlQnVmZmVy
SXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICAgICAg
bV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0
YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCksIHJlbGVhc2VJbWFnZURhdGEp
KTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRl
eHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEp
KTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0
aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29u
c3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVm
ZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGltYWdlQ29sb3JT
cGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdl
QnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZl
cjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUgZGVzdGluYXRpb25TaXplKSBjb25z
dAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJTcGFjZShkZXN0aW5hdGlvblNpemUsIG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUoKSk7Ci19Ci0KLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlD
b3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3Vy
cmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQg
d2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFj
Y2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hh
c2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2Ug
dGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0
aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZh
Y2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50
ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJm
YWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgp
ICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBleHRlcm5hbE1lbW9yeUNvc3QoKSBt
YXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQg
dG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAg
ICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZh
Y2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdl
QnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFs
Qnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAg
IGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3Rh
bEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotR3JhcGhpY3NDb250ZXh0JiBJ
bWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBt
X2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpmbHVzaENvbnRleHQo
KSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdl
SWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewot
ICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRoKGltYWdlKSAhPSBzdGF0aWNfY2FzdDxz
aXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKQotICAgICAgICByZXR1cm4gYWRvcHRD
RihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJv
dW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7Ci0gICAgcmV0dXJuIGltYWdlOwotfQot
Ci1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVl
ZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwg
SW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0g
ICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVz
ZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgbG9naWNh
bFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53
aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExh
c3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0Js
ZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCks
IEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplKSk7Ci0gICAgICAgIEZs
b2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNjYWxlU2l6ZVRvVXNlclNwYWNlKGxvZ2lj
YWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNpemUpOwotICAgICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwg
aW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRv
cHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQot
Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4g
Qml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4g
SW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgcmV0
dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSks
IGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwg
bV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFn
ZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsK
LSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsK
LSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0g
ICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5n
U3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jl
c29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRl
cm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tpbmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6
OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1cm4gRG9udENvcHlCYWNraW5nU3RvcmU7
Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJ
bWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+
bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUlt
YWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJ
bnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1
ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVm
PiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2
aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAo
IWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29w
eUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAg
ICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0
YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRt
YXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJ
bnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFj
a2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5z
dXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAg
ICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250
ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tp
bmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2Uo
SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsK
LSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1
c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3
TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1
c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1h
Z2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0Lmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENv
cHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8g
ZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNy
Y1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9p
ZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25z
JiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0Owot
ICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAo
IWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlC
YWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVl
cCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPElt
YWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkp
Ci0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwg
c3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
UmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAg
ICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9
Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlw
bGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGlt
ZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAg
IGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250
ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRl
U3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAg
ICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1
cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJy
YXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17
Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVz
aENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3Jk
aW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Qu
c2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25z
KQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAg
IHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQs
IGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAg
IGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNl
UmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlm
IChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAg
IHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2Fs
ZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2Rh
dGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVk
U291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3Vy
ZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VD
b250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3Nh
cnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBj
b250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotc3RhdGljIGlu
bGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKSB8
fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVH
ID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5kaWYKLSAgICByZXR1cm4ga1VUVHlwZUpQRUc7
Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIC8vIEZJWE1FOiBXaHkg
ZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMgdmVyc2lvbj8KLSNpZiBQTEFURk9STShN
QUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmco
KTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBp
ZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBv
cnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20g
TUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgotICAgIC8vIEZvciBub3csIG9ubHkg
c3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4u
Ci0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGlj
LnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIo
ImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVND
SUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0gICAgICAgIHJldHVybiBrVVRUeXBlUE5H
OwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdl
L2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJz
SWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKLSAgICAgICAgcmV0dXJu
IGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ga1VU
VHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShDR0ltYWdlUmVm
IGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRh
YmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICghaW1hZ2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJ
bWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYg
KCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmV0YWluUHRyPENG
RGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwotICAgIGlmIChDRkVxdWFsKHV0aSwganBl
Z1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjAp
IHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNzaW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcg
aW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8gY29tcHJlc3Npb25RdWFsaXR5ID0gYWRv
cHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVU
eXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qgdm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0
aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5OwotICAgICAgICBjb25zdCB2b2lkKiB2YWx1
ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAgICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0g
YWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtleSwgJnZhbHVlLCAxLCAma0NGVHlwZURp
Y3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7
Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFnZURlc3RpbmF0aW9uQmFja2dyb3VuZENv
bG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBpbWFnZVByb3BlcnRpZXMgd291bGQgc2F2
ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vz
bid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3Rp
bmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKLSAgICByZXR1cm4g
Q0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwotfQotCi1zdGF0
aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Ci17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0
YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0K
LSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7
Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRh
KQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGRhdGEuYXBwZW5kKENGRGF0YUdl
dEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3RoKGNmRGF0YSkpOwotICAgIHJldHVybiBk
YXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1p
bWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQotICAgICAgICByZXR1cm4gZGF0
YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0K
LVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBpZiAoYXV0byBkYXRh
ID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQot
ICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9Owot
fQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0g
ICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENv
bnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWlt
ZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGlt
YWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcHJlbXVsdGlwbGllZERhdGE7Ci0K
LSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBF
R3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNv
bXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhID0gZ2V0
UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIGxvZ2ljYWxTaXplKCkp
KTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndp
ZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwotICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZl
cklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplKTsKLSAgICAg
ICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERh
dGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIp
KTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgp
LndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDMyLCA0ICogbG9naWNhbFNpemUo
KS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0
IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxz
ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0
aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9u
OjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9y
ZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2Uu
Z2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpbWFnZSA9IGNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGF1dG8gY29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplKCkud2lkdGgo
KSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwg
c1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7Ci0g
ICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVD
b3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBDR1JlY3RN
YWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSkp
OwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBzaXplRm9yRGVzdGlu
YXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29u
dGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFnZVNpemVJblVzZXJTcGFjZS53aWR0aCgp
LCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSksIGltYWdlLmdldCgpKTsKLSAgICAgICAg
aW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkp
KTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJs
ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShpbWFnZS5n
ZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Ci19Ci0KLXN0YXRpYyBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBBU1NFUlQo
TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWlt
ZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUobWlt
ZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAgQ0dJbWFnZUFscGhhSW5mbyBkYXRhQWxw
aGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YSA9IHNv
dXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8dWludDhfdD4gcHJlbXVsdGlwbGllZERh
dGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKLSAgICAgICAg
Ly8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVh
bGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAgIHNpemVfdCBzaXplID0gNCAq
IHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpOwotICAgICAgICBpZiAoIXByZW11bHRp
cGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXplKSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWREYXRhLmdyb3coc2l6ZSk7Ci0gICAgICAg
IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1
KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAwXSA9IGRhdGFbaSArIDBdICogYWxwaGEg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdICogYWxw
aGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdICog
YWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGJ1ZmZl
cltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAgICAgICAgICBidWZmZXJbaSArIDFdID0g
ZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJd
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgZGF0YUFscGhhSW5mbyA9IGtD
R0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9yZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAg
ICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRhdGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJp
ZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJj
ZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3Zp
ZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhl
aWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lk
dGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAqIHNvdXJjZS53aWR0aCgpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwgZGF0YUFscGhhSW5mbywg
ZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkp
OwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0
aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1TdHJpbmcgZGF0YVVSTChjb25z
dCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1l
VHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVU
eXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEo
Y29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwg
bWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgp
KTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRv
QkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFE
YXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9z
aXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mM2Q5ZWRkMGVmNTFmMzg0MWFjNThjOGI2
MWUxNWNlMmQ0YTVjZjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjMzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNF
KENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VM
RVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRl
eHQoKQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250
ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2ludGVybmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgY29udGV4
dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOworfQorCitzdGF0
aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENH
SW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSkKK3sKKyAgICBpZiAo
aW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihp
bnRlcm5hbFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUuaGVpZ2h0KCkpKSkKKyAgICAgICAgcmV0dXJuIGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAw
LCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSkpOworICAgIHJl
dHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VB
ZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3Qg
SW50U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQor
eworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0g
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZElt
YWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxzZSB7Cisg
ICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxv
Z2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNp
emUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBr
Q0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0Lmdl
dCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOworICAgICAg
ICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAgICAgICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6
ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFn
ZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOwor
ICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBj
b3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxl
ID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQor
ICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UK
KyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwor
ICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUo
aW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChz
aW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1faW50ZXJuYWxTaXplLCBtX3Jl
c29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBzcmNSZWN0U2NhbGVkID0g
c3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29u
dGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAg
ICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2ludGVybmFsU2l6
ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhh
c2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Cisg
ICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChh
dXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJh
Y2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQ
YXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7
Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0
YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNl
cnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVU
eXBlKSk7CisgICAgCisgICAgYXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZSht
aW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
aW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsK
KworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VUSSgpKSkgeworICAgICAgICAvLyBK
UEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNvIHdlIGhhdmUgdG8gbWFudWFsbHkg
Y29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAgICAgcHJlbXVsdGlwbGllZERhdGEgPSBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50UmVj
dChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7
CisgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0
aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAg
IGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7
CisgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53
aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCku
d2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8
IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2Us
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUp
OworICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdl
dCgpLCBpbnRlcm5hbFNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNvbnRleHQg
PSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCks
IGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFr
ZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsK
KyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwg
MCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2Uu
Z2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1h
Z2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihD
RkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVu
Y29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsK
K30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAg
IGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAg
IHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBk
YXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlvbikpCisg
ICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4g
ImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3RhdGljIGlubGluZSB2SW1h
Z2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQgYnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdkltYWdlX0J1ZmZlciB2SW1hZ2VC
dWZmZXI7CisgICAgCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFn
ZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0
YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdlQnVm
ZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dz
OworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5
SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0Fs
cGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3Jj
LAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0Fs
cGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29sb3JG
b3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1h
dCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAgICAv
LyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4
X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVs
c19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9y
bWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRl
c3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3JjQ29sb3JG
b3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VQcmVtdWx0aXBs
eURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ICE9IGRl
c3RDb2xvckZvcm1hdCkgeworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+
IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Cisg
ICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwg
a3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywg
dWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZv
cm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAoreworICAg
IGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQgJiYgc3JjQ29sb3JGb3JtYXQg
PT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIEltYWdlQnVmZmVyQmFja2VuZDo6Y29weUlt
YWdlUGl4ZWxzKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3cs
IHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJS
b3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHZJbWFn
ZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihzcmNCeXRlc1BlclJvdywgc3JjUm93cywg
c2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0gbWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0
ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKworICAgIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJh
dGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1hdCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQs
IGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWFiN2E3NDY5MzNkZDFkMjc3NjhjYTQ0OGVhOGZjNjFmYTQxZTc0MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIklt
YWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNP
UkVfRVhQT1JUIEltYWdlQnVmZmVyQ0dCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2Vu
ZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFn
ZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgdm9pZCBkcmF3KEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKyAgICB2b2lkIGRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJh
bnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5n
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgQWZmaW5lVHJh
bnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZTsKKworICAgIFN0cmluZyB0b0Rh
dGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQ
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIHVzaW5nIEltYWdlQnVmZmVyQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCisgICAgdm9pZCBzZXR1cENvbnRleHQoKTsKKyAgICB2
aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsK
KworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUltYWdlUGl4ZWxzKAorICAgICAg
ICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmND
b2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisg
ICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1h
dCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhfdCogZGVz
dFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyMzMzOTQ3ZWY1NWRiOTA3OWVlMmVjOWU1
YjhiYTU3OWViNWFlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwx
MzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgi
CisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2Nv
bnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworI2Vsc2UK
K2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJu
YWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQgKiBpbnRlcm5h
bFNpemUud2lkdGgoKTsKKworICAgIGlmICghdHJ5RmFzdENhbGxvYyhpbnRlcm5hbFNpemUuaGVp
Z2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRhKSAmIDMp
KTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGludGVybmFsU2l6ZS5oZWlnaHQoKSAqIGJ5dGVz
UGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMp
OworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShk
YXRhLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpLCA4LCBieXRl
c1BlclJvdywgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5m
bykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0
KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25z
dCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lk
Kj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUltYWdl
RGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRl
ciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJl
Zj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29u
dGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fZGF0YShkYXRhKQorICAg
ICwgbV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJvdmlkZXIpKQorICAgICwgbV9jb250ZXh0
KFdURk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgQVNTRVJUKG1f
ZGF0YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICBzZXR1cENvbnRleHQo
KTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29u
dGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK05hdGl2ZUltYWdl
UHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3Ip
IHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwor
ICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9w
dENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2ludGVybmFsU2l6ZS53aWR0aCgpLCBt
X2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5dGVzUGVyUm93KCksCisgICAgICAgICAg
ICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNlKSwgRGVmYXVsdEJpdG1hcEluZm8sIG1f
ZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50
ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJC
YWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0
ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVT
eXN0ZW0sIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50
OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0
YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRp
bmF0ZVN5c3RlbSwgbV9kYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzBhYTk2NjMxM2M5YzNhODBhMDFlYmM4ZjAxYjBlM2Q0ZjExNWVkOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
IDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NB
VEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBP
UlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKworICAg
IFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25z
dCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNy
Y1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCB2b2lk
KiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+JiYsIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+JiYpOworCisgICAgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQorI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7IH0KKyNlbmRpZgorCisgICAg
dm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9kYXRhUHJv
dmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZjMDMxY2MwNjY0ZGU3
YTU3N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENHKQotCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGlu
ZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRl
IDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxk
aXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJ
Lmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIg
LT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NF
TEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9C
dWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3Jj
LmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9y
ICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdl
Tm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQg
MywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRh
IGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9
OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwg
a3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEo
Y29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewot
ICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAo
a3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZk
ZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hh
bm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdS
QSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsg
MiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwg
JmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRF
KSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkK
LQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlu
cHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93KQotewot
I2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1
dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0aDsKLSAg
ICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJS
b3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAg
ICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVz
dC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2
SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxh
Z3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURfUEFSQU0o
aW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdo
dCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIHdp
ZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAg
ICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJh
Y2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
I2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJmYWNlOjpM
b2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxv
Y2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVy
Um93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJE
YXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJp
bmcpIGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEg
PSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQo
KTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0
aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVz
dWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJlY3QubWF4
WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYgKHJlY3Qu
eCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgo
KSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56
ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRl
c3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0gICAgaWYg
KG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAgIGRlc3R4
ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0dyA9IHN0
ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdpbngpOwot
ICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0g
c2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmlnaW54Owot
ICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAg
ICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmlnaW55IDwg
MCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1vcmlnaW55
OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+
KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAgaWYgKGVu
ZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWln
aHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0gICAgCi0g
ICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgpIDw9IDAp
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlc3VsdERh
dGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAgICB1bnNp
Z25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAotICAgIGlm
ICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYg
VVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZm
ZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAg
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3Jj
LnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jv
d3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qu
d2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVz
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVy
Um93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMy
Ci0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UK
LSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoKHdpZHRo
ICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAg
ICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIK
LSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNl
IGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAq
IDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
M10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1ti
YXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNy
Y1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFz
ZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBi
YXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJh
c2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNS
b3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNpZiBVU0Vf
QVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVH
ZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsg
MV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jh
c2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3Nb
YmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkKLSAgICAg
ICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgeClb
MF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwotI2VuZGlm
Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAg
ICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAgICBzcmNC
eXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBvcmlnaW55
ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQot
ICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IHNy
Y1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRo
ID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAg
IGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgdW5wcmVt
dWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAgICAgICAg
Y29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFn
ZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFn
cyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxv
d2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgdWludDhf
dCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93
c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAyNTUpIC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNy
Y1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVz
dEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAg
ICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewot
ICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAg
ICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RS
b3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAg
ZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0j
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6
cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6
ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChzb3VyY2VS
ZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwot
ICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hl
Y2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJl
Y3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJU
X1VOVVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNT
RVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZl
R2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4
ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAg
ICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAotICAgIENo
ZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4g
ZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJj
ZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBv
aW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgp
ID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwot
ICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55
LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGlu
dD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFko
KSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAg
ICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2Vk
PGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwg
aGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3Jj
Um93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lu
eCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1
aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsK
LSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RC
eXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVy
Um93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
ICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAg
IHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9
IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNS
b3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVz
dC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBk
ZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdC
MzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UK
LSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwg
a3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgp
OyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0
KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0Iz
MgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBp
bWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNl
eCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4
ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAq
IGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlm
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAg
ICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNj
ZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+
Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4o
bG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBk
ZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJ
bWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsK
LSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJv
d0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1
aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAg
ICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0g
ZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAg
ICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAg
ICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAg
ICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJ
bWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5ID0gMDsg
eSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFz
ZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsK
LSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAg
ICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFz
ZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCAr
IDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
ICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RP
UkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0
YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWE1NGFkOTExNzk1M2NhNWU2
OTZkYTA3ZTZlMGRmNjgxNDNkNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAi
SW1hZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgot
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgot
Ci10eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNHQ29sb3JTcGFjZVJlZjsKLXR5cGVkZWYg
c3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92aWRlclJlZjsKLXR5cGVkZWYgdWludDMy
X3QgQ0dCaXRtYXBJbmZvOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIElPU3VyZmFj
ZTsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVT
aXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsK
LSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZTsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3
YXJlIEltYWdlQnVmZmVycy4KLSAgICB2b2lkKiBkYXRhIHsgbnVsbHB0ciB9OwotICAgIFJldGFp
blB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyOwotICAgIENHQml0bWFwSW5mbyBi
aXRtYXBJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7
Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIC8vIE9ubHkg
Zm9yIGFjY2VsZXJhdGVkIEltYWdlQnVmZmVycy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBzdXJmYWNlOwotI2VuZGlmCi0KLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YShi
b29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0g
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVy
aW5nKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUm
IHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWY0ODhjODEyN2JiNjhjMWY1NmZjYWZmZTQ3MzBhMzIyMTI0NWJl
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNF
KENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgor
I2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQpOworCitJbnRTaXplIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAg
IGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
SW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlmIChpbnRl
cm5hbFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgoKSB8fCBpbnRlcm5hbFNpemUuaGVpZ2h0
KCkgPiBtYXhTaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJu
IGludGVybmFsU2l6ZTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKGludGVybmFsU2l6ZSwgaW50ZXJuYWxT
aXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Cisg
ICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250
ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgaW50ZXJuYWxTaXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQo
c2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
c3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50
U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCit7Cisg
ICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKK30KKwordm9p
ZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCgpCit7CisgICAgQ0dD
b250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKK30KKworc2l6ZV90IElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRlcygpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBt
ZW1vcnlDb3N0KCk7Cit9CisKK3Vuc2lnbmVkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6
Ynl0ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmJ5dGVzUGVyUm93
KCk7Cit9CisKK0NvbG9yRm9ybWF0IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2Vu
ZENvbG9yRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7Cit9
CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+
Y3JlYXRlSW1hZ2UoKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gSU9TdXJmYWNlOjpz
aW5rSW50b0ltYWdlKFdURk1vdmUobV9zdXJmYWNlKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gc2lua0ludG9OYXRpdmVJbWFn
ZSgpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1f
aW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKwor
VmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFjZUJhc2VBZGRy
ZXNzKCkpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9y
bWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0
LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsK
K30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
YXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6
TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBv
aW50LCBjb29yZGluYXRlU3lzdGVtLCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAg
IC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8g
U2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4
cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChG
bG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8
fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzNlYTQ2MWJhNjU3NmMzYTg2NDE2NDBmNjI2NzEwYzk0MmY4
NzAxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNo
U2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSU9TdXJmYWNlOwor
CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgOiBwdWJs
aWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBJbnRTaXplIGNh
bGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisKKyAgICBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29u
dGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlC
YWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKyAgICAKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsgICAgCisgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlu
cHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1Np
emUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENv
b3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6
OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIChV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKaW5kZXggODlkMDQzOWMyMTBk
YjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uZDA5MTM5ZjAxYmQzMzZmMjg0OGFlYTUyNmE0
ZjlmODAwZWU3ODVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2
LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDRy5oIgogCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIK
KyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1l
dGljLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisKKyNpZiBQTEFURk9STShDT0NP
QSkKKyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQxLDQgKzUyLDE0MCBAQCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdF
bm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKICAgICByZXR1cm4g
Kih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorQ0ZTdHJpbmdSZWYganBlZ1VUSSgpCit7CisjaWYg
IVBMQVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBF
RyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOworI2VuZGlmCisgICAgcmV0dXJuIGtVVFR5cGVKUEVH
OwogfQorCitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcmV0
dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKKyNlbHNlCisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0
aHJlYWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0
aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8g
VVRJIHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcs
IEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCisgICAgc3RhdGlj
IGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOworICAg
IHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNl
cnZlLmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVU
eXBlLCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVybiBrVVRUeXBlUE5HOworICAgIGlmIChl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKKyAg
ICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJ
SUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ga1VUVHlwZVBORzsKKyNl
bmRpZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1hZ2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVm
IHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBDRk11dGFibGVEYXRhUmVmIGRhdGEpCit7
CisgICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAgICBpZiAoIWRlc3RpbmF0aW9uKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFn
ZVByb3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRpLCBqcGVnVVRJKCkpICYmIHF1YWxpdHkg
JiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgeworICAgICAgICAvLyBBcHBs
eSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUgSlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4K
KyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkgPSBhZG9wdENGKENGTnVtYmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRvdWJsZVR5cGUsICYqcXVhbGl0eSkpOwor
ICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFnZURlc3RpbmF0aW9uTG9zc3lDb21wcmVz
c2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQqIHZhbHVlID0gY29tcHJlc3Npb25RdWFs
aXR5LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRpZXMgPSBhZG9wdENGKENGRGljdGlvbmFy
eUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZUeXBlRGljdGlvbmFyeUtleUNhbGxCYWNr
cywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFja3MpKTsKKyAgICB9CisKKyAgICAvLyBT
ZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3JvdW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQ
RUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3VsZCBzYXZlIHNvbWUgbWF0aAorICAgIC8v
IGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgor
ICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwg
aW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmlu
YWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENGRGF0YVJl
Zj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0
cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAg
ICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBB
U1NFUlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUluZm8gZGF0YUFscGhhSW5mbyA9IGtDR0lt
YWdlQWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5k
YXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11bHRpcGxpZWREYXRhOworCisgICAgaWYg
KENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0
IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUg
b24gdG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qgc2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgo
KSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0YS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
ICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUpOworICAgICAgICB1bnNpZ25lZCBjaGFy
KiBidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IGRhdGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAg
ICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXSAqIGFscGhhIC8gMjU1OworICAgICAg
ICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kgKyAxXSAqIGFscGhhIC8gMjU1OworICAg
ICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXSAqIGFscGhhIC8gMjU1Owor
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBidWZmZXJbaSArIDBdID0gZGF0
YVtpICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAxXSA9IGRhdGFbaSArIDFdOwor
ICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRhW2kgKyAyXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBoYUluZm8gPSBrQ0dJbWFnZUFscGhhTm9u
ZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNoYW5uZWwuCisgICAgICAgIGRhdGEgPSBw
cmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQorCisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJ
c0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRoKCkgKiBzb3VyY2UuaGVpZ2h0KCkpOwor
ICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhE
YXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSwgMCkpOwor
ICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUoc291cmNlLndpZHRoKCksIHNvdXJjZS5o
ZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwg
a0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFBbHBoYUluZm8sIGRhdGFQcm92aWRlci5n
ZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKworICAgIGF1dG8g
Y2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQs
IDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxp
dHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IFdURk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7Cisg
ICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0aChk
YXRhKSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFz
ZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0
eSkpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICBy
ZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRh
UmVmIGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBkYXRhLmFwcGVu
ZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0YUdldExlbmd0aChjZkRhdGEpKTsKKyAg
ICByZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRh
JiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxp
dHkpKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICByZXR1cm4g
eyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
clV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhhMTlhYmQxZmI4M2FiMzFhMTE1YzY4OTUw
NDkxZDQxOTU1Mi4uODRjNTdkMmZlZTkzMzhlZDVlMGVmYzRhOGUzMzY1YTE5YTgwMjA0YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJV
dGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjUsOCArMjUsMzEgQEAKIAogI3ByYWdtYSBvbmNl
CiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBXRUJDT1JFX0VYUE9SVCB1aW50OF90IHZl
cmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3QgYnVm
ZmVyU2l6ZSk7CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdVVEkoKTsKK1JldGFpblB0cjxDRlN0cmlu
Z1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUoY29uc3QgU3RyaW5nJik7CisKK2Jvb2wg
ZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdSZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworCitTdHJpbmcgZGF0YVVSTChDRkRhdGFSZWYs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5nIGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKKwor
VmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBk
YXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BE
RkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggODBmNmIxODcyNTIyOTY4ZWE3ZDk1NzZiN2UwMDU2
MzMzMjU4ODIzYy4uMjgyMWVmODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmViMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJ
bWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9j
dW1lbnRJbWFnZS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjaW5jbHVkZSA8Q29yZUdy
YXBoaWNzL0NHUERGRG9jdW1lbnQuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1JBTVNp
emUuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCmluZGV4IDI0M2M0OGI5NTFiMTc0
YjZiMjRiYWM1MzY0YzlhMDRmZjk2OWNkYjMuLjRjYzBmYTNmNzk3MjdlYjlkZWVkYzRhZDBlMTE3
MzRkYWIyMTRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5oCkBAIC0xMDAsMTAgKzEwMCw2IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNl
UmVmLCBDR0NvbG9yU3BhY2VSZWYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1hZ2UoQ0dJbWFnZVJlZik7CiAgICAgCi0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4pOwotI2VuZGlmCi0KICAgICBXRUJDT1JFX0VYUE9SVCB+SU9TdXJmYWNl
KCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBtb3ZlVG9Qb29sKHN0ZDo6dW5p
cXVlX3B0cjxJT1N1cmZhY2U+JiYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4IGMyMTI1YzNlZjE2MGMwODEwMTA5ODIz
YjRiOTAzNmRkZjZmYmNmNjcuLjM5MWZjMjNjZDBhOGY4NjlhY2MxMDczMmQxNGZkZjQ1MGZjMjg1
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lP
U3VyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UubW0KQEAgLTMzLDcgKzMzLDYgQEAKICNpbXBvcnQgIkhvc3RXaW5kb3cuaCIKICNp
bXBvcnQgIklPU3VyZmFjZVBvb2wuaCIKICNpbXBvcnQgIkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0
ICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiUGxh
dGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBA
IC0xMTAsMTMgKzEwOSw2IEBAIHZvaWQgSU9TdXJmYWNlOjptb3ZlVG9Qb29sKHN0ZDo6dW5pcXVl
X3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKICAgICBJT1N1cmZhY2VQb29sOjpzaGFyZWRQb29s
KCkuYWRkU3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKTsKIH0KIAotI2lmIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBJT1N1cmZh
Y2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyKQotewotICAgIHJldHVybiBXVEZNb3ZlKGltYWdlQnVmZmVyLT5tX2RhdGEuc3Vy
ZmFjZSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIE5TRGljdGlvbmFyeSAqb3B0aW9uc0ZvckJpcGxh
bmFyU3VyZmFjZShJbnRTaXplIHNpemUsIHVuc2lnbmVkIHBpeGVsRm9ybWF0LCBzaXplX3QgZmly
c3RQbGFuZUJ5dGVzUGVyUGl4ZWwsIHNpemVfdCBzZWNvbmRQbGFuZUJ5dGVzUGVyUGl4ZWwpCiB7
CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRl
eCAyOGUyNjQ0ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5ZTNmMmFlNDkyLi4yYzY3N2Y2YjczNmU3
NTJlNDFmOGIzZjI0MzQ3NmQ0NTA4NDI0MzcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaApAQCAt
MTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fbGlzdFtpbmRleF0uZ2V0
KCk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y2xlYXIoKTsKICAgICB2b2lkIHJlbW92ZUl0ZW1zRnJvbUluZGV4KHNpemVfdCk7CiAKICAgICBz
aXplX3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQpAQCAtMjUx
LDYgKzI1MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3Ry
ZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAKIH0gLy8gV2ViQ29yZQot
Ci11c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5ZjFjZTI3
MzU0NTBiZGFjM2JiZGYxMWEzMDg1ZDlhN2YzYzllMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RS
ZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVwbGF5ZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKKworY2xhc3MgRHJhd2luZ0NvbnRleHQgeworcHVibGljOgorICAgIERyYXdpbmdD
b250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpCisgICAgICAgIDogbV9jb250ZXh0
KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0Q29udGV4dCkgeworICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3BsYXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5
TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxvYXRSZWN0KHsgfSwgbG9naWNhbFNpemUp
LCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIH0pCisgICAgeworICAgIH0KKworICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2lu
Z0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyAgfQorICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3Qg
RGlzcGxheUxpc3QqIHJlcGxheURpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYXlE
aXNwbGF5TGlzdC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxh
eShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgIHsKKyAgICAgICAgbV90cmFja3NE
aXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OworICAgICAgICBtX3Jl
cGxheURpc3BsYXlMaXN0LnJlc2V0KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmVwbGF5RGlz
cGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlm
ICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBSZXBsYXllciByZXBsYXllcihkZXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAg
ICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgICAgICAgICAgbV9yZXBsYXlE
aXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBs
YXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAg
ICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGlj
c0NvbnRleHQgbV9jb250ZXh0OworICAgIERpc3BsYXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAg
c3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBtX3JlcGxheURpc3BsYXlMaXN0OworICAgIGJv
b2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07Cit9OworCit9IC8vIERpc3Bs
YXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIw
NGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLmFmM2FhZGUyYTMzMmNjMTBhOTYxM2YyMTI2
MTcxN2RkMWQ4NThiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjg2LDEzICsyODYsMTUg
QEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBy
ZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdS
ZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJl
Y3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAg
ICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJl
c3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJh
eURpbWVuc2lvbnMpOworICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3Qp
OwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPGZs
b2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKIAorICAgIEludFNpemUg
cGl4ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKTsKKyAgICBw
aXhlbEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1bHRJbWFnZS0+cmVzb2x1dGlvblNjYWxlKCkp
OworCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBjYXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9V
TktOT1dOOgogICAgICAgICBicmVhazsKQEAgLTMxMSw3ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JN
YXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnBpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJ
bnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVsQXJyYXksIGltYWdlUmVjdC5zaXplKCks
IGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5k
ZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMjVkNTdhZjA2YzAx
YTdjNzhhN2ZiOTQ3ZDQwNTgwMDRlYTcxNzJkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMTAw
LDEzICsxMDAsMTMgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
CiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxk
IGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KICAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShzaGFkb3dBcmVh
LCBudWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSk7Cisg
ICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLCBDb29yZGluYXRlU3lz
dGVtOjpCYWNraW5nU3RvcmUpOwogICAgIGlmICghc3JjUGl4ZWxBcnJheSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5k
YXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7
CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93
QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0pOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXksIHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFk
b3dBcmVhLCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtOjpCYWNraW5nU3RvcmUpOwogCiAg
ICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6
OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBv
aW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXIuaAppbmRl
eCA0OWU4YzVhMjZlNzcxYzQyNDk2NzgxOTUyN2E1NjI3MzUzZGY0NDk2Li5kZDM1Y2M2NWIxMzdk
ODIyYzcwMTUzMmRhYmQyNDkwMDRiZjJhOWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgKQEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0
ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IG1fc291cmNlSW1hZ2U7CiAgICAg
RmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNv
bHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFVuYWNj
ZWxlcmF0ZWQgfTsKKyAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZSB7IFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKICAgICBmbG9hdCBtX2ZpbHRlclNjYWxlIHsgMSB9Owog
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRh
MmY5NzJiNTkwZmEuLjVjOGIzYjRkZTBhZmE3MTQ1OGNkY2Y2YzZiYzBmZmQyY2NiZDE0MzEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVy
RWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3OSw5ICsyNzksOSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVy
RWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgaWYgKG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRC
eXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJl
Y3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKm1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwog
ICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQo
KSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0
LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBAIC00NDMsNyArNDQzLDcgQEAgdm9pZCBG
aWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRl
c3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewog
ICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4K
ICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJ
bWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSkp
OworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJS
ZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAg
ICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBAIC00NjksNyArNDY5LDcgQEAgdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAg
ICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgog
ICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVk
SW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkp
KTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKICAg
ICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGFiNWEwZDUwZjhjZTFhYWY2NTM1ZGVlYzk0MGI4NWRjNTUxN2U0YjEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVyR3RrLmNwcAorKysgL2Rldi9u
dWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5o
IgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5o
IgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotI2lu
Y2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSwgY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRy
PGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6ZSkKLXsKLSAgICAvLyBMaXN0IG9mIHN1
cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21lcyBmcm9tIHRoZSBHZGtQaXhidWYgZG9j
dW1lbnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2ZWxvcGVyLmdub21lLm9yZy9nZGstcGl4YnVm
L3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1
ZmZlcnYKLQotICAgIFN0cmluZyB0eXBlID0gbWltZVR5cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1h
Z2UiKTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIgJiYgdHlwZSAhPSAicG5nIiAmJiB0eXBlICE9
ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUgIT0gImJtcCIpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBwaXhidWY7Ci0gICAgaWYgKHR5cGUg
PT0gImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcgZG9lc24ndCBzdXBwb3J0IGFscGhhIGNoYW5u
ZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0IHRvRGF0YVVSTCgpIG11c3QgZW5jb2Rl
IGEgUG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29tcG9zaXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZv
ciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGFscGhhLgotICAgICAgICBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOwotICAgICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9n
ZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpIHsKLSAgICAgICAg
ICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3Jf
ZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKHN1cmZhY2UpLAotICAgICAgICAgICAg
ICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCi0gICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBJbnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UpOwotICAgICAgICAgICAg
bmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZP
Uk1BVF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBS
ZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobmV3U3VyZmFjZS5nZXQo
KSkpOwotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJm
YWNlLCAwLCAwKTsKLSAgICAgICAgICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLSAgICAgICAg
fQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYobmV3
U3VyZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYo
Y2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkpOwotICAgIGlmICghcGl4YnVmKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0g
ICAgaWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpx
dWFsaXR5IDw9IDEuMCkgewotICAgICAgICBTdHJpbmcgcXVhbGl0eVN0cmluZyA9IFN0cmluZzo6
bnVtYmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAuMCArIDAuNSkpOwotICAgICAg
ICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIo
KSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91dFB0cigpLCAicXVh
bGl0eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEoKSwgTlVMTCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIocGl4YnVmLmdldCgpLCAmYnVmZmVyLm91
dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCks
IE5VTEwpOwotCi0gICAgcmV0dXJuICFlcnJvcjsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0
b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5
LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdl
RGF0YSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Ci0gICAgaWYgKGltYWdlRGF0YS5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsKLQotICAgIFZlY3RvcjxjaGFyPiBiYXNl
NjREYXRhOwotICAgIGJhc2U2NEVuY29kZShpbWFnZURhdGEuZGF0YSgpLCBpbWFnZURhdGEuc2l6
ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAiZGF0YToiICsgbWltZVR5cGUgKyAiO2Jh
c2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0
b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBj
b25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4g
YnVmZmVyOwotICAgIGdzaXplIGJ1ZmZlclNpemU7Ci0gICAgaWYgKCFlbmNvZGVJbWFnZShtX2Rh
dGEubV9zdXJmYWNlLmdldCgpLCBtaW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBidWZmZXJTaXpl
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7
Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOwotICAgIHJl
dHVybiBpbWFnZURhdGE7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29zaWFHQzNETGF5ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXll
ci5jcHAKaW5kZXggNGM0YzQyNjk2MTI3MWM3YjdhMTlkMjk2YTk0MDBlZmRjMGZhYzlhZS4uNzU3
MDAzYjFmMTFkZjRiMjc2NmI0MDllODIyY2Q4YjQyMGZiNGE1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXll
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXht
YXAvTmljb3NpYUdDM0RMYXllci5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBHQzNETGF5ZXI6
OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQogICAgIEludFNpemUgdGV4dHVyZVNpemUobV9jb250ZXh0
Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJyZW50SGVpZ2h0KTsKICAgICBUZXh0dXJl
TWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxw
aGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kIDogMDsKICNpZiBVU0UoQU5HTEUpCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVy
OjpjcmVhdGUodGV4dHVyZVNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVT
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWltYWdlQnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNwcAppbmRleCA3ZDJjZWZkNjI2MWRl
ZTJhMzlhODlkMTAxNzAyZWI1MDI1MmY0ZjVlLi5mMDM5MTM4MDYwZDM0NDM0ZTZjZGRiZjk2ZWE2
NGMzMDFhNjM1NTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3BwCkBAIC0zOCw3ICszOCw3IEBAIHZvaWQg
Qml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMoVGV4dHVyZU1hcHBlciYsIEdyYXBoaWNzTGF5
ZXIqIHNvdXJjZUxheWVyLCBjCiB7CiAgICAgLy8gTWFraW5nIGFuIHVuY29uZGl0aW9uYWxseSB1
bmFjY2VsZXJhdGVkIGJ1ZmZlciBoZXJlIGlzIE9LIGJlY2F1c2UgdGhpcyBjb2RlCiAgICAgLy8g
aXNuJ3QgdXNlZCBieSBhbnkgcGxhdGZvcm1zIHRoYXQgcmVzcGVjdCB0aGUgYWNjZWxlcmF0ZWQg
Yml0LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAK
ICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmlu
ZGV4IGNhMTFiYjhiYTBiMTkxMGM2Mjc5NjdkNGQyNjBiMDRjNjg0ODY3MzEuLjVhYzlkNjYwNmM0
MjIxMjQ4YmM0MWRlOTM4OWNlNWM4N2U0YTQxN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgs
NyArNDU4LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1
ZmZlcigpIGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVh
dGUoY2FwdHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7CisgICAgbV9pbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggZDViOTFiMjY4
NmFlMjYxZWI1M2MwNjg5YmVlYzYyZjU1ZTNmYjQ1OC4uOGY1MGU1NzU3MWQ3YjM4NTAwZWVkN2Jj
ZGE2YjNhNjQyYWJmNzk1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
Y3BwCkBAIC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJlbmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQ
YWludGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAgICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7
Ci0gICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJs
ZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZCk7CisgICAgbV9maWx0ZXJzLT5idWls
ZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIo
KS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6
OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQg
UmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlhMmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4
NjNjMWVkMmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1ZDJiNTIxYTY5OTFjNjE1MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0xODEsMTQgKzE4MSwx
NCBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFn
ZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAgIEludFJlY3QgbWFyZ2luUmVjdCA9IHNu
YXBwZWRJbnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8gaW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxS
YXN0ZXJTaGFwZUludGVydmFscz4obWFyZ2luUmVjdC5oZWlnaHQoKSwgLW1hcmdpblJlY3QueSgp
KTsKICAgICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNv
bmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBV
bmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFnZUJ1ZmZlcikgewogICAgICAgICBHcmFw
aGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGltYWdlQnVmZmVyLT5jb250ZXh0KCk7CiAg
ICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2Uo
KmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUo
KSkpOworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFn
ZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVu
Z3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlP
ZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIgYnl0ZXM6IFJHQkEuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHAKaW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3
N2I2M2M2ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNw
cApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBs
eUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjCiAKICAgICBpZiAo
c2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAhcmVwYWludFJlY3QuaXNFbXB0eSgpKSB7
CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlzIGltYWdlIGJ1ZmZlciBzaG91bGQgbm90
IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkLiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNv
bnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhvdWdoLgotICAgICAgICBjbGlwcGVyTWFz
a0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlSW1hZ2VCdWZmZXIocmVwYWludFJl
Y3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNlOjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAm
Y29udGV4dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1hZ2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwgYWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9y
U3BhY2U6OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQsICZjb250ZXh0KTsKICAg
ICAgICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNlNDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0
MzE2MWIuLjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4ZDBkOWUyNjM0ZDhlODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VG
aWx0ZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9vbCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
cjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgUmVuZGUKICAg
ICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUud2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkp
OwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBseShmaWx0ZXJEYXRhLT5zaGVhckZyZWVB
YnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBy
ZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJh
dGVkIDogVW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBy
ZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICAgICBh
dXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZl
cihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZlY3RpdmVUcmFuc2Zvcm0sIENvbG9yU3Bh
Y2U6OkxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29udGV4dCk7CiAgICAgaWYgKCFzb3VyY2VH
cmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5kZXJlckZpbHRlckRhdGFNYXAuY29udGFp
bnMoJnJlbmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEdyYXBo
aWMKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFi
c29sdXRlVHJhbnNmb3JtKTsKICAgICAgICAgfQogICAgIH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJj
ZUdyYXBoaWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZm
ZXIgPSBudWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAi
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlzIDw8ICIgcG9zdEFwcGx5UmVzb3VyY2Ug
ZG9uZVxuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0
Y2ZjMDIyYjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcyMjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVz
b3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0
IFJlbmRlCiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCku
c3ZnU3R5bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlID0gc3ZnU3R5bGUuY29s
b3JJbnRlcnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBvbGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xv
clNwYWNlOjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpTUkdCOwogICAgICAgICAvLyBGSVhNRSAo
MTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkg
dW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRoZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBt
YXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5z
Zm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CisgICAgICAgIG1hc2tl
ckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVy
KHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAgICAgIGlmICghbWFza2VyRGF0YS0+bWFz
a0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2dy
YXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCBiODIxNDExYWRlNzc1MDg1NjE2ODg1NmVkMjJiNjJl
YTZiNWNkM2Q5Li45Nzg2N2FhZDNjMjdiNWI1MzhkM2E3OWZiNDk1ZGRkNGYwZjQzZDkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFnZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBA
QCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoY29u
c3QgR3JhcGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAvLyBD
YWlybyBkb2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVkIGRyYXdpbmcgZmxhZywgc28gaXQncyBP
SyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8gZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdl
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dAppbmRleCA1MzI2Nzhm
Mzc2MDMzYzNjMDBmOWY2YmQ1YTMwYzM4NjkwZTMzNGJmLi4wYWI5MjAxNjI0ZTg2MGEwZDljYzBm
MDcxOWZhNjMxNWYyZjE1NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAg
c2V0KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V2ViS2l0X0RFUklWRURfU09V
UkNFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCS0lUX0RJUn0iCiAgICAgIiR7V0VCS0lUX0RJ
Un0vR1BVUHJvY2VzcyIKKyAgICAiJHtXRUJLSVRfRElSfS9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MiCiAgICAgIiR7V0VCS0lU
X0RJUn0vTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllciIKICAgICAiJHtXRUJLSVRfRElSfS9OZXR3
b3JrUHJvY2Vzcy9Db29raWVzIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1
dC54Y2ZpbGVsaXN0CmluZGV4IDI0Y2FlNWY3ODE4ODU4ZDdlODg3ODdjZGU5MzgyYTI2NGU4NWMw
NzguLjNmZDEzOTk1ZThiZjFmNzc2Y2MyNmE1MmFkMDBiZjY3OTExMmZhOTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAgLTE1LDYgKzE1LDgg
QEAgJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFW
QVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVD
VF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikv
R1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2Fn
ZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nl
c3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikv
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5p
bgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlci5tZXNzYWdlcy5pbgpAQCAtMTA0LDYgKzEwNiw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvQ2FjaGUvV2ViQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25U
b1NlcnZlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9GdWxsU2NyZWVu
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFQbGF5
ZXJNYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS93ZWJy
dGMvTGliV2ViUlRDQ29kZWNzLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNz
L0dQVS93ZWJydGMvTGliV2ViUlRDUmVtb3RlQ29kZWNzLm1lc3NhZ2VzLmluCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0IGIvU291cmNl
L1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAppbmRleCAzY2YzNThhZDZi
YWZkYjkxMTlhM2I0ZmFiZTliZjFhMjE4YTU0ZmM4Li44MzU5YjhkZjI2NGU4YTc1ZmU4OWIzMzNj
MzJjMjE5NWE3MTViNTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LW91dHB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKQEAgLTEyNiw2ICsxMjYsMTIgQEAgJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXIKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlQXVkaW9NZWRpYVN0cmVh
bVRyYWNrUmVuZGVyZXJNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1lc3NhZ2Vz
UmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElS
KS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZm
ZXJNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVy
UHJveHlNZXNzYWdlcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXMu
aAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzUmVwbGllcy5oCkBAIC0xNDgsNiArMTU0LDkg
QEAgJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXJNZXNzYWdlc1IKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZVJlY2VpdmVyLmNwcAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0
UmVnaXN0cnlNZXNzYWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oCiskKEJV
SUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNzYWdlUmVjZWl2
ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXNS
ZXBsaWVzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZSBi
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCBmNjIwZTZjZGI5OTU0YjI5
NzAxOGFlZTJiODU5YzFkMWQzYmFkMjViLi5mYmE5NzhlM2VmYzQ2ODA4ZTFkMjg1MjMxY2MyYmQw
MzMxODQyYWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UK
KysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0yNSw2ICsyNSw3IEBA
IFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2VzcyBcCiAgICAgJChXZWJLaXQyKS9H
UFVQcm9jZXNzL21hYyBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL21lZGlhIFwKKyAgICAk
KFdlYktpdDIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9H
UFVQcm9jZXNzL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9OZXR3b3JrUHJvY2VzcyBcCiAgICAg
JChXZWJLaXQyKS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIFwKQEAgLTUyLDYgKzUzLDcgQEAgVlBB
VEggPSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uIFwKICAgICAkKFdl
YktpdDIpL1dlYlByb2Nlc3MvR1BVIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL21l
ZGlhIFwKKyAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQgXAog
ICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL1dl
YlByb2Nlc3MvSWNvbkRhdGFiYXNlIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvTWVkaWFD
YWNoZSBcCkBAIC0xNDIsNiArMTQ0LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1
Z2luUHJveHkgXAogICAgIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWFuYWdl
ciBcCiAgICAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgXAorICAgIFJlbW90
ZUltYWdlQnVmZmVyIFwKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIg
XAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwKQEAgLTE0OSw2ICsxNTMsNyBA
QCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlciBc
CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lz
dHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNjcm9s
bGluZ0Nvb3JkaW5hdG9yIFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JQcm94eSBcCiAgICAgUmVt
b3RlV2ViSW5zcGVjdG9yVUkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGQzOWQwN2NhM2IzMDQ5YzJmMDQw
NDkwNzQ5ODMyZGQwMWQyM2EzODguLmIzMjA2Yzg3MmUzZWYxOTg5YTdlZmI2M2JjYTc3MDM1NDdh
YWUwNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE3Myw2MiArMTczLDc3IEBAIExpYldlYlJUQ0NvZGVj
c1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94eSgp
CiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
cikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1v
dGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nl
c3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJl
TWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9u
LCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1v
dGVNZWRpYVJlY29yZGVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAg
IG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhj
b25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAg
ICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVkaWFSZWNvcmRlck1l
c3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9fVFJB
Q0spCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICBhdWRpb1RyYWNrUmVuZGVyZXJNYW5hZ2VyKCkuZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGF1ZGlvVHJhY2tSZW5k
ZXJlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVuZGVyZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29k
ZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRp
ZgogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYg
KGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2Rl
Y3NQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldlYlJUQ0NvZGVj
c1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5k
aWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVj
b2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2Rl
cikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQ
bGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhj
b25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAg
aWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFD
YXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21HUFVQ
cm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5j
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOworfQorCit2b2lkIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgQVNT
RVJUKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSgqdGhp
cywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVChtX3JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IG51bGxw
dHI7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggY2MyMTEwYjVmYTIx
OTQ1YzZjNDM5ODhjYzg5MTVmOWM1ODUxZjY5ZS4uMzhkYTQ2YjllZGU2NGFlMWI5YWNlNmEyMDQz
ZDBmMDc3YzRiMTdmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVkZSAiR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUgPFdlYkNvcmUv
RGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NN
ZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2luY2x1ZGUgIlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgogI2lu
Y2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+CisjaW5jbHVk
ZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ4LDE4ICs1MCwy
MCBAQCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogCiBjbGFzcyBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUoR1BVUHJvY2Vz
cyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZp
ZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nv
bm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJl
Y2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAgICBHUFVQcm9j
ZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9CisgICAgV2Vi
Q29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJl
dHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFudXBGb3JTdXNw
ZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5zaW9uKCk7CiAK
LSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRpZmllcigpIGNv
bnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1vdGVNZWRpYVJl
c291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAogICAgIExvZ2dl
ciYgbG9nZ2VyKCk7CkBAIC04MSwxNCArODUsMjEgQEAgcHJpdmF0ZToKIAogICAgIC8vIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBm
aW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAg
IGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwor
ICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOworCisgICAgdm9pZCBjcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJl
bGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKIAogICAg
IFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9j
b25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nlc3M7CisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAgICAgY29uc3QgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVtb3RlTWVkaWFSZXNvdXJj
ZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclBy
b3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAtMTAzLDYgKzExNCw3IEBA
IHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1Byb3h5
OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0OWQx
NGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1MjU5
YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkgQEAK
IAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdhbnRz
RGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0
OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
KyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU3MGY0MjJjM2U0NjkzYTAxMjg5ODE4YTFjMzI5NDRlZGNmMzNkMTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHku
aCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50
aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9p
bWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChh
dXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVj
ZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVy
UHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9V
SW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25u
ZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUlu
dDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgc2VuZChNZXNz
YWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dpY2Fs
U2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
aGFuZGxlKSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
KQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3Nh
Z2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmll
ciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM2OGI2MjY0ZmQxMGFkNDMxN2VlNGYzZjZkNjgzNGVk
NTcxZjA2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
KyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvTWFj
aFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwg
cHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVudGlm
aWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6CisgICAg
Ly8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVy
RGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6
OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSk7CisKKyAgICB2b2lkIGZsdXNo
Q29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdl
YWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5p
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iMGFlNzhlMmNlNGFiOTUxOWI2NWFiODRiNGQ3MmRkZWI1ZWM5NThjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRl
ZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNo
SWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Zl
NGUxZTNhZDUyMTg1NDVjOTUxZjZjYzE0Y2ZlNmQwZGYxZGVmOAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2Fs
SW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4K
KyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VCdWZm
ZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNp
bmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVmZmVy
PEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9iYWNr
ZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRlbXBs
YXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBoeXNp
Y2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmll
cikKKyAgICB7CisgICAgICAgIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2JhY2tl
bmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2VuZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2VuZC0+
cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2VuZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFkaXNwbGF5
TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6
OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOworICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAg
ICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpOworICAgIH0KK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kYTUwZDdlZjcwYWQzZDk4MDZkY2Y2Njk0NWJlYmQ5ZmQzNzI5MmQxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBSZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8UGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZVBsYXRmb3Jt
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5PFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjgxNzBiMzMwNzAzZTBjZGY1MjQ4M2VkNjEyNmMyYzAwMmE0YzQ2MmEKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5o
IgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYg
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
KTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQorICAg
ICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5hZGRN
ZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgp
LCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7Cit9
CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdl
U2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAg
IHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVm
ZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJpbmdN
b2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJQcm94
eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpbWFnZUJ1
ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghaW1hZ2VC
dWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGltYWdl
QnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRl
bnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFjZSBt
ZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlm
ICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOTkz
OGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNl
aXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsK
KworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6
TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOwor
CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3By
aXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1l
c3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAg
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikg
b3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50
aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmll
cik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFn
ZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5p
bgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5v
dFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRT
aXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJL
aXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9p
ZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VC
dWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVy
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
clByb3h5LmgKaW5kZXggMDBjZjdlODM5NDQ2YzkzMWVkZmM1MGI5ZDFmNjRmOTM3YjQ4MWQxNy4u
MGYyZDJmN2E5MzZiNDJhZGQzMGU1NjBiZjk3YjUzYmQ3NGYxOTU4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQcm94eS5o
CkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiUmVtb3RlTWVkaWFQbGF5ZXJTdGF0ZS5oIgog
I2luY2x1ZGUgIlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiU2Fu
ZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgIlRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nvb2tpZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFQ
bGF5ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5o
PgpAQCAtMTk3LDggKzE5OCw4IEBAIHByaXZhdGU6CiAgICAgY29uc3Qgdm9pZCogbWVkaWFQbGF5
ZXJMb2dJZGVudGlmaWVyKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2lkKj4o
bV9jb25maWd1cmF0aW9uLmxvZ0lkZW50aWZpZXIpOyB9CiAjZW5kaWYKIAotICAgIEhhc2hNYXA8
QXVkaW9UcmFja1ByaXZhdGUqLCBSZWY8UmVtb3RlQXVkaW9UcmFja1Byb3h5Pj4gbV9hdWRpb1Ry
YWNrczsKLSAgICBIYXNoTWFwPFZpZGVvVHJhY2tQcml2YXRlKiwgUmVmPFJlbW90ZVZpZGVvVHJh
Y2tQcm94eT4+IG1fdmlkZW9UcmFja3M7CisgICAgSGFzaE1hcDxXZWJDb3JlOjpBdWRpb1RyYWNr
UHJpdmF0ZSosIFJlZjxSZW1vdGVBdWRpb1RyYWNrUHJveHk+PiBtX2F1ZGlvVHJhY2tzOworICAg
IEhhc2hNYXA8V2ViQ29yZTo6VmlkZW9UcmFja1ByaXZhdGUqLCBSZWY8UmVtb3RlVmlkZW9UcmFj
a1Byb3h5Pj4gbV92aWRlb1RyYWNrczsKICAgICBNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVu
dGlmaWVyIG1faWQ7CiAgICAgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+IG1fc2FuZGJveEV4dGVu
c2lvbjsKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX3dlYlByb2Nlc3NDb25uZWN0aW9uOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggN2MzNThkZTAxZmE0
YjAxMzI2M2M3Y2M5ZjZlNDg4NDdmMzAwYjI0YS4uNzhmMWZjY2UxNmUyNDU4NGFkMDc4MWM3OWM5
OWE4MGEwODk2ZDMyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIK
IAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNf
RElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdB
Q1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURf
UkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJV
VEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fu
bm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAg
ICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScs
CiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcics
CkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVj
bGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcics
CisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNl
cnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJK
b2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERh
dGEnLApAQCAtMjE5LDEwICsyMjMsMTQgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zvcndh
cmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlNXU2VydmVyQ29ubmVjdGlvbklkZW50
aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAogICAgICAg
ICAnV2ViS2l0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklkZW50aWZpZXInLAorICAg
ICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUnLAorICAgICAgICAnV2ViS2l0
OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVm
ZmVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRleHRJRCcs
CiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAog
ICAgICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRl
bnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKICAgICAg
ICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2NCwxMyArNzcyLDE2IEBA
IGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgog
ICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3lu
Y19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmli
dXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFw
cGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5l
Y3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2
ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJV
VEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBu
b3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJV
VEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vf
c3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdl
c10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNT
QUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3Bh
dGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNs
YXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAg
ICAgICBlbHNlOgpAQCAtNzc5LDEzICs3OTAsMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFu
ZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYg
c3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRy
aWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQu
YXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVT
eW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAl
IChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUo
TEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZD
T1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1
bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNz
YWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUo
V0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJl
cGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1
cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rp
b24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVy
KTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNv
ZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1l
bnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
CmluZGV4IDg0ZDQzOWM1MDU0MDRiN2U1OTA1YjM2ZTdkZWM3Njg5ZGRmYTk0NTQuLjA5YTE0MmVm
YzA1MTJiZDVkYWE0NDA0NThhYjM3NzMyMzdhZTFmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBo
YVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFn
bm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNv
cmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RpZmljYXRpb25E
aXJlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9s
bFNuYXBPZmZzZXRzSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VydmljZVdvcmtlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oPgpAQCAtODAz
LDYgKzgwNSwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNl
cmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7Cisg
ICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkCisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6
UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdl
YkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3Rl
CisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29s
b3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6
Q29sb3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IGUxMzljMzU3YTVjYTM2NWEwNTQyN2JiZjc5ZjUz
ZmY0NTFiZDc3ZTAuLjkwZThmMWMwOGQ5YjVhMTA0OTQ5MzVjOTI2NzdhN2E2ZDU4NTA1MzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9T
b3VyY2VzLnR4dApAQCAtMzUsNiArMzUsOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlh
UmVzb3VyY2UuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIu
Y3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAogR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVWaWRlb1RyYWNrUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiAKIE5ldHdvcmtQcm9j
ZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
QWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTIwLDYgKzUyMiw5IEBAIFdlYlByb2Nlc3MvR1BVL21l
ZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1Jl
bW90ZU1lZGlhUGxheWVyTUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL0dQ
VS9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRp
YS9WaWRlb1RyYWNrUHJpdmF0ZVJlbW90ZS5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAorV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3Mv
R1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVk
aWFSZWNvcmRlclByaXZhdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRl
clByb3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IGQ3ZGJkNGRiZWZjYTY1ODhi
ZWYyNmU3ZjhjMjhlNDkyZjAxZmFjMmYuLjRhMGY1MGViOTgyZjJkYTUyN2ViNDkyMGJhOWNlYjkw
NGE5ZjVjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU1MSw2ICs1NTEsOCBAQCBXZWJQ
cm9jZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQogCiBXZWJQcm9jZXNzL0VudHJ5UG9pbnQv
Q29jb2EvWFBDU2VydmljZS9XZWJDb250ZW50U2VydmljZUVudHJ5UG9pbnQubW0KIAorV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuY3BwCisKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQ
YWdlQmFubmVyLmNwcAogCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1
bmRsZU1hYy5tbQpAQCAtNjM1LDEzICs2MzcsMTcgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3Vy
Y2VzCiBFZGl0YWJsZUltYWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlv
bk1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAK
IEdQVVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90
ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAK
IFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWVzc2FnZVJlY2VpdmVyLmNwcAor
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1lc3NhZ2VSZWNlaXZl
ci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogU2VydmljZVdvcmtl
ckZldGNoVGFza01lc3NhZ2VSZWNlaXZlci5jcHAKIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94
eU1lc3NhZ2VSZWNlaXZlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IDM4ZTZlNWM4ZjUzZmQ3NWMzNzczMDAyYWI2YTU0MzAxYWJm
NGU3MDguLjY4YWEyN2EwNGQwYzcwZDU5ZGZhMjY5ZmI2NzRhNGJjMDBhNmI4MTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMzk5NCw4
ICszOTk0LDMyIEBACiAJCTcxQTY3NkE0MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9u
R2VzdHVyZVJlY29nbml6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV0tU
b3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmg7IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdl
c3R1cmVSZWNvZ25pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxQTY3NkE1
MjJDNjIzMTgwMDdENjI5NSAvKiBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXS1RvdWNoQWN0aW9uR2VzdHVy
ZVJlY29nbml6ZXIubW07IHBhdGggPSBpb3MvV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVy
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZCODEwQTIyNjA2MjdBMDAzMjM2
NzcgLyogV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlzcGF0Y2hQb2xpY3kuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vic2l0ZVNpbXVsYXRlZE1vdXNlRXZlbnRzRGlz
cGF0Y2hQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDEyM0M4
RkUwMjAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0MjIz
QzhGRTAzMDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0MzIzQzhGRTA0
MDA0MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDQyM0M5MDBEQTAw
NDE4ODFGIC8qIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIw
MTc1NDYyM0M5NDVEODAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjAxNzU0NzIzQzk0
NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5ODIzQUQyRkQ2MDBCREFGRjcgLyogUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
MUYxRTk5MjNBRDJGRDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2Vz
LmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2Fn
ZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMUYxRTlBMjNBRDJGRDYwMEJE
QUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
SWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUVBNjIzQUQ0
RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjFGMUVBOTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjAyM0MxODI4NzAwMjYyNjMz
IC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM1Qzk2
NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQ
aWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNr
ZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAw
ODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFn
ZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxMTIzQUIwNzYzMDBBNjEyM0MgLyogUmVtb3RlUGxh
dGZvcm1JbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkJFNDE0MjNBQjBBRjEwMEE2
MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUIyM0I0QzdBOTAw
RjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW47
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJENUMyRUQyM0I0QzgyMzAwRjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQzIC8qIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NG
OUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3Rv
cmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMz
OUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNjQzOSw2ICs2NDYzLDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwog
CQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlhICov
LAorCQkJCTcyQkJFNDBFMjNBQjA0NTgwMEE2MTIzQyAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAog
CQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQzQzAy
Mzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQkyRDdF
NDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAgLTY0
NTUsNiArNjQ4MCw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywK
IAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5
OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjFGMUU5NzIzQUQyRjVDMDBCREFGRjcg
LyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYgLyog
d2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzg0MCw2ICs3ODY2LDUyIEBACiAJCQlu
YW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzIwMTc1NDUy
M0M5NDVCMTAwNDE4ODFGIC8qIGNnICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQk3MjAxNzU0NjIzQzk0NUQ4MDA0MTg4MUYgLyogSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjAxNzU0NzIzQzk0NUQ4MDA0MTg4
MUYgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggKi8sCisJCQkpOwor
CQkJcGF0aCA9IGNnOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzIxRjFF
OTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMUYxRTlBMjNBRDJGRDYwMEJEQUZGNyAv
KiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCAqLywKKwkJCQk3MjFGMUU5ODIzQUQyRkQ2MDBC
REFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyMUYxRTk5MjNBRDJG
RDYwMEJEQUZGNyAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJ
CTcyMzVDOTY0MjNDMUEwNDEwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJv
eHkuaCAqLywKKwkJCQk3MjFGMUVBNjIzQUQ0RjMzMDBCREFGRjcgLyogUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzJENUMyRUMyM0I0QzgyMzAwRjY3RDQzIC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzJENUMyRUQyM0I0QzgyMzAw
RjY3RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAorCQkJCTcyRDVDMkVC
MjNCNEM3QTkwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworCQk3MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVy
aW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNzIwMTc1NDUyM0M5NDVCMTAwNDE4ODFGIC8qIGNnICovLAorCQkJCTcyMDE3NTQ0MjNDOTAw
REEwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCAqLywKKwkJCQk3MjFGMUVB
OTIzQUQ3QkRGMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLywKKwkJ
CQk3MjFGMUU5QjIzQUQzNkQwMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8s
CisJCQkJNzIwMTc1NDEyM0M4RkUwMjAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5jcHAgKi8sCisJCQkJNzIwMTc1NDIyM0M4RkUwMzAwNDE4ODFGIC8qIEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oICovLAorCQkJCTcyMDE3NTQzMjNDOEZFMDQw
MDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oICovLAorCQkJ
CTcyQkJFNDBGMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8sCisJ
CQkJNzJCQkU0MTAyM0FCMDQ4QjAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8sCisJ
CQkJNzJCQkU0MTQyM0FCMEFGMTAwQTYxMjNDIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2Vz
LmluICovLAorCQkJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MkQ1QzJFNzIzQjM4NDIxMDBGNjdENDMgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzJENUMyRTgyM0IzODQyMTAwRjY3
RDQzIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MkQ1QzJFRTIzQjU2Qzg0
MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlw
YXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCTdBODQzQTFEMjFFNDFGRDkwMERFRjY2MyAvKiBDbGFzc2lmaWVyICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKaW5kZXggMThlOTM2ZGUzMjMw
NzcwZjI0MzYxYjZhYmFhOGUxN2U0ZDJlNWFjMC4uMTg4ZmFjMjBhMWU5MjNkZjYyYmIxYTM4MDU1
MGFhYTRmOTRkOGUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9H
UFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAKQEAgLTYwLDI5ICs2MCwzNSBAQCB2b2lkIEdQVVBy
b2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewogfQogCi12b2lk
IEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQotewot
fQotCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyTWFuYWdlcjo6bWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBs
ZW1lbnQ8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZlTWVzc2FnZUZyb21H
UFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChk
ZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogY2Fw
dHVyZU1hbmFnZXIgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRp
YUNhcHR1cmVNYW5hZ2VyPigpKQogICAgICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2Vp
dmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjaWYgVVNFKExJQldF
QlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVy
TmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5saWJXZWJSVENDb2RlY3MoKS5k
aWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJl
Y2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOworfQorCiti
b29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2
ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5j
b2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UpCit7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IGE4
YWQ0ZmVlODZiMjY1OWI0YWZmYjdjNDg0ZGExODFjM2JlZjI3ZDAuLmU4ZWU4NWRjMzJmZTU3OGYx
NzUzOGJhM2Q4OWZkNzQ2MDc0NmJhMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNDYsNiArNDcsNyBAQCBwdWJsaWM6CiAg
ICAgfkdQVVByb2Nlc3NDb25uZWN0aW9uKCk7CiAgICAgCiAgICAgSVBDOjpDb25uZWN0aW9uJiBj
b25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNz
YWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJl
Y2VpdmVyTWFwOyB9CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIHZvaWQgc2V0QXVkaXRU
b2tlbihPcHRpb25hbDxhdWRpdF90b2tlbl90PiBhdWRpdFRva2VuKSB7IG1fYXVkaXRUb2tlbiA9
IGF1ZGl0VG9rZW47IH0KQEAgLTU4LDExICs2MCwxNSBAQCBwcml2YXRlOgogICAgIC8vIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBv
dmVycmlkZTsKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpT
dHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIG92ZXJyaWRlOwogCisgICAgYm9vbCBkaXNwYXRj
aE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CisgICAgYm9vbCBkaXNw
YXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5p
cXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CisKICAgICAvLyBUaGUgY29ubmVjdGlvbiBmcm9tIHRo
ZSB3ZWIgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuCiAgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gbV9jb25uZWN0aW9uOwotCisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdl
UmVjZWl2ZXJNYXA7CiAjaWYgSEFWRShBVURJVF9UT0tFTikKICAgICBPcHRpb25hbDxhdWRpdF90
b2tlbl90PiBtX2F1ZGl0VG9rZW47CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmlu
ZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYy
N2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5p
bgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdl
cyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVj
dGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1OTYzMDY5ZjY2MTgxODNkMDc4
YTY0YzJkZWFjYzJkODNhNGNkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8
d3RmL01hY2hTZW5kUmlnaHQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlID0gVmFyaWFudDwK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBNYWNoU2VuZFJpZ2h0LAorI2VuZGlmCisgICAgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUKKz47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDJjZjI0NWUzNDVlMWRmZWM2MmRjMWQ3
YTNlY2FlZmNkOWFiNWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKQEAg
LTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsK
K3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZl
cklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTFiYzlhZTg3ZGM4ZDcyNDI4YTBiODA5Y2FkMGQ4
MGE0Y2QxY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitlbnVtIEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBl
PjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1ZTdmYjU0YjcxNGU5MjJiZjZmYWYzMDM1M2Nh
ODYwYThmOGYyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNw
cApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
CitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxj
dWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJu
YWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgU2hh
cmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247CisjaWYgUExBVEZPUk0o
Q09DT0EpCisgICAgY29uZmlndXJhdGlvbi5jb2xvclNwYWNlID0geyBjYWNoZWRDR0NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkgfTsKKyNlbmRpZgorICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGVTaGFyZWFibGUoaW50ZXJuYWxTaXplLCBjb25maWd1cmF0aW9uKTsKKyAgICBp
ZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQg
PSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZChzaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShiaXRtYXApLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAg
aWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRs
ZSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUo
V1RGTW92ZShXVEY6OmdldDxTaGFyZWFibGVCaXRtYXA6OkhhbmRsZT4oaGFuZGxlKSkpOworICAg
IGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4
dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgV1RGTW92ZShiaXRtYXApLCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBo
eXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgYml0bWFwLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhp
Y3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZChs
b2dpY2FsU2l6ZSwgcGh5c2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisg
ICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkpCisgICAgLCBtX2NvbnRleHQoV1RGTW92ZShj
b250ZXh0KSkKK3sKK30KKworSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkgY29u
c3QKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgbV9iaXRtYXAt
PmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUoV1RGTW92ZShoYW5kbGUpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29u
c3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgcmV0dXJuIG1fYml0bWFwLT5tYWtlQ0dJbWFnZUNvcHko
KTsKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNlbGlmIFVTRShD
QUlSTykKKyAgICByZXR1cm4gbV9iaXRtYXAtPmNyZWF0ZUNhaXJvU3VyZmFjZSgpOworI2VuZGlm
Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAorewor
ICAgIHJldHVybiBtX2JpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2JpdG1hcC0+ZGF0
YSgpKTsKK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldElt
YWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fYml0bWFw
LT5kYXRhKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VE
YXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29y
ZGluYXRlU3lzdGVtLCBtX2JpdG1hcC0+ZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjQ3MGVjNjk5YmIzZWQ2OWFlMDBjNjc0ZjM2ZDUyNzIyNjgyNzAwMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNo
YXJlYWJsZUJpdG1hcDsKKworY2xhc3MgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
IDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kIHsKKyAgICBXVEZf
TUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
KTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
Y29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopOworICAgIAorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIElt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZSk7CisKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUg
Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkgY29uc3Q7CisgICAgCisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1f
Y29udGV4dDsgfQorCisgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdl
KFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBj
b25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJD
b3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwgV2ViQ29y
ZTo6UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKFdl
YkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiwgV2ViQ29yZTo6Q29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBwdXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1
dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBzcmNTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgZGVzdFBvaW50LCBXZWJDb3JlOjpDb29yZGluYXRlU3lzdGVtKSBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3Bh
Y2UsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+JiYpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xv
ckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xv
ckZvcm1hdDo6QkdSQTsgfQorI2VuZGlmCisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBt
X2JpdG1hcDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBt
X2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1h
Z2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTcxOTMxMTVkZTExZjE1MjNk
YzA5MGYwMTFjMTQ2NTE0OTQ5NzVmYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVh
YmxlQmFja2VuZC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCA9
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDsKKworI2lmIFVTRShDRykgJiYgKFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxl
QmFja2VuZCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1
c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gUGxh
dGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kOworI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGE1MWI0Y2U4
MGY3YjFhNmVjYmM4MmJlNDY1ZDlhODFmZDFkMzlkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdl
QnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVj
dGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAg
ICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nl
c3NDb25uZWN0aW9uLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2
ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlv
bigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNz
YWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJO
YW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKKworICAg
IC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJl
bmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1h
Z2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRz
ZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBt
ZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZl
ck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmll
ciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24q
IFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1l
c3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6
d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlv
bj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3ND
b25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9y
QW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0
ZUltYWdlQnVmZmVyQmFja2VuZD4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpX
YWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQor
Citib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAg
ICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJu
IGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmll
ciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdl
QXJyaXZlcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNr
ZW5kKCkKK3sKKyAgICBjb25zdGV4cHIgY29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7
CisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2Vu
ZENyZWF0ZWQoKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZCgpOworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHND
b3VudDsgaXNQZW5kaW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNl
dEZsdXNoSWRlbnRpZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVz
aElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQor
eworICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisK
K3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZs
dXNoSWRlbnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOwor
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChk
aXNwbGF5TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZp
ZXIpOworICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZGQ5MTk5NWZhZTVlYTZlM2Y0ODc0Zjc2YTRjYzM4
NDY0Y2FiYjFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2Vp
dmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+
CisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRl
cgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgflJl
bW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rp
b24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0
X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8v
IEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAg
Ym9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0ZWRC
YWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vu
dEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICAv
LyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpD
b25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIHZvaWQg
Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0ID0gMDsKKwor
ICAgIHZvaWQgc2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsg
ICAgICAgIAorICAgIHZvaWQgcmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYpOworCisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1h
Z2VCdWZmZXJJZGVudGlmaWVyIHsgSW1hZ2VCdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07
CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOwor
ICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7
CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3Nh
Z2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjM0MWZkMjRmMjk2OWFhNzdkMmJiZWU3MjcxNWJmMjZmM2M5YmFk
MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlciBOb3RSZWZDb3VudGVk
IHsKKyAgICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJDb3JlOjpGbG9hdFNpemUg
bG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNpemUgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1
ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdl
YktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
aHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGNlMDI0YzdiYjRjMDc1ODY3NWY2YjEw
N2ZlZDhmZDNkN2UzZWVhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgKQEAg
LTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
IlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNr
ZW5kVHlwZT4KK2NsYXNzIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZlciB7
CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisg
ICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4o
bmV3IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCByZW5kZXJpbmdNb2RlLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRl
cmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFs
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdl
QnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NF
UlQoIW1fYmFja2VuZCk7CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUo
bG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKGhhbmRsZSkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQmFja2VuZENyZWF0ZWQo
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEJhY2tl
bmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
ICghbV9iYWNrZW5kKQorICAgICAgICAgICAgY29uc3RfY2FzdDxSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyJj4oKnRoaXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgICAgIHJldHVybiBt
X2JhY2tlbmQuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OmRpc3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1v
dGVGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYmQyMDE2Mzgw
NGIwMjRkNGYxNDAxZDQ0NjYzNjIzYWQ1M2E5N2FmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNp
bmNsdWRlICJSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCit1c2luZyBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyID0gUmVtb3RlUGh5c2ljYWxJbWFn
ZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+
OwordXNpbmcgUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyID0gUmVtb3RlUGh5
c2ljYWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMGM1OGFhYzczZTI1YmNhN2QwYTkzMDk3YzczNjE5NjNmZTQwZWJkZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQor
CitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAg
ICAvLyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1l
c3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJlbGVhc2UgdGhl
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVy
biAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3Nh
Z2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdp
bmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOwor
CisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAg
ICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBp
bWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5k
ZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlt
YWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVu
ZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0
OGU1MTcxODUwOWQ5ZDFmNDRjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVy
aW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAs
IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJl
Y2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0Jh
Y2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKworICAg
IC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFJlbmRlcmluZ0JhY2tl
bmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdl
QnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29y
ZTo6SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI6OmdlbmVyYXRlKCkg
fTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kMjM1NDcwY2NmZTdiNzliYjkyNDU3OGFmYjQxNzAzNWM5MTNkZDAyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5j
bHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Vu
dW0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYyNDZjMmQ5
NWRkZmI1ZWUwZTNhNWQxNzYzYmYyYTIyMWY3NjA0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisjaWYgVVNFKENHKSAm
JiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKTsK
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4g
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRTaXplIGludGVybmFsU2l6
ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlm
IChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKGludGVybmFsU2l6ZSwgaW50ZXJuYWxT
aXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBj
Z0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Cisg
ICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250
ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8o
KSwgaW50ZXJuYWxTaXplKSk7CisgICAgCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAo
IVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8TWFjaFNlbmRSaWdodD4oaGFuZGxlKSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1v
dmUoV1RGOjpnZXQ8TWFjaFNlbmRSaWdodD4oaGFuZGxlKSksIGNhY2hlZENHQ29sb3JTcGFjZShj
b2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZChs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIEltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKG1fc3Vy
ZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
IHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorI2VuZGlmIC8vIEVOQUJMRShHUFVf
UFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmU3MDEwODk2MmM3MjQy
OTI5ZGVlYTllMzZkZWViYjIwYTY5Njc5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZC5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFNoYXJlYWJsZUJpdG1hcDsKKworY2xhc3MgSW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5k
b3cqKTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSgpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1c2luZyBXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gVVNFKENHKSAmJiAoVVNF
KElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykpCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9BdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZS5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9BdWRpb1RyYWNrUHJpdmF0ZVJl
bW90ZS5oCmluZGV4IDMwZTFhNjdiN2M1OTJmOTEyM2FmMjAzMzEwNGU0MjM0NjI0YzA5NzcuLmQy
OGMwN2U0N2Q5ZjYwMzI2NDllMDA0ZThiZWI2Y2VhMjBhNGU4ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvQXVkaW9UcmFja1ByaXZhdGVSZW1vdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL0F1ZGlvVHJhY2tQcml2YXRl
UmVtb3RlLmgKQEAgLTI4LDEwICsyOCwxMiBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQog
CisjaW5jbHVkZSAiVHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdl
YkNvcmUvQXVkaW9UcmFja1ByaXZhdGUuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK2NsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTsKIHN0cnVjdCBUcmFja1ByaXZhdGVSZW1vdGVDb25m
aWd1cmF0aW9uOwogCiBjbGFzcyBBdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZSBmaW5hbCA6IHB1Ymxp
YyBXZWJDb3JlOjpBdWRpb1RyYWNrUHJpdmF0ZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4
IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1OGEuLjc3MjZmZTk0OGEyMjc5
YmJmOTM5ZjA2NDRmNjQ1NjgyZWQ2Yjc5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC0x
MDIsNiArMTAyLDEwIEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Nb2NrV2ViQXV0aGVudGljYXRpb25D
b25maWd1cmF0aW9uLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpbmNs
dWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktp
dCB7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CkBAIC04ODEsMTUgKzg4NSwyMiBAQCBHcmFwaGljc0xheWVyRmFjdG9yeSogV2ViQ2hyb21lQ2xp
ZW50OjpncmFwaGljc0xheWVyRmFjdG9yeSgpIGNvbnN0CiB9CiAKICNpZiBVU0UoUkVRVUVTVF9B
TklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCiBSZWZQdHI8RGlzcGxheVJlZnJlc2hN
b25pdG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIGNvbnN0CiB7CiAgICAgaWYgKGF1dG8qIGRyYXdpbmdB
cmVhID0gbV9wYWdlLmRyYXdpbmdBcmVhKCkpCiAgICAgICAgIHJldHVybiBkcmF3aW5nQXJlYS0+
Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCk7CiAgICAgcmV0dXJuIG51bGxw
dHI7CiB9CisjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNo
cm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUo
KTsKKyNlbHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOwogI2VuZGlm
Cit9CiAKIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFt
ZSYsIEdyYXBoaWNzTGF5ZXIqIGxheWVyKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGZkYTMz
OGVjZmE2ODU1ZTFjMWQ2MDg1MGU0NzFmNjc5NGVkMWMyY2QuLjRkZWRmZWU3ODQxMTY1ZTU3N2Q5
NDAzMjM1NTFiNGY1M2IyZDFkZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMSw2ICsyMzEs
OCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+
IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkg
Y29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZW5k
ZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisKICAg
ICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNv
bnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRpbmdU
cmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQppbmRleCBlZjAzNTAzNDJi
YjgyMjQ2Y2QxOWYzNTRkOWJjYzAyOTFmMjkwNDNkLi4yNDA3ZjEwNjliNTdmYmY2NTk0ODg3NTQx
MjhjZThmYWIxZWNiYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5tbQpAQCAtMjAyLDcg
KzIwMiw3IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VG
b3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgICAgIHJldHVybiBuaWw7CiAK
ICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFuZCB3aWxsIGJlIHBhaW50
ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0aCBGcmFtZVNuYXBzaG90
dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUo
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAzYzk0NTczMTU0MjNkM2U0NzdkMDc1NjM2Mzc4ZTBl
MzRjYTE4NDY4Li44Yjk0ZWE5ZDExNGRjZDhlMzUxNGQzYmI5M2M5ZTMxZjAyMWMzZTUyIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMjAtMDEtMTQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3Vo
YWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5k
ZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
NDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorICAgICAgICBU
aGUgZXh0cmEgcmVjb3JkaW5nIGhhcHBlbnMgYmVjYXVzZSBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1
ZmZlcigpIHVzZWQgdG8KKyAgICAgICAgaXNzdWUgaXRzIEdyYXBoaWNzQ29udGV4dCBjb21tYW5k
cyBkaXJlY3RseSB0byB0aGUgYmFja2VuZC4gV2l0aCBwYXRjaCwKKyAgICAgICAgRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlciBkb2VzIG5vdCBhbGxvdyBhY2Nlc3MgdG8gdGhlIGJhY2tlbmQgY29udGV4
dC4gU28KKyAgICAgICAgYWxsIHRoZSBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgaGFzIHRvIGJl
IHJlY29yZGVkLgorCiAyMDIwLTAxLTEzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
IAogICAgICAgICBVc2UgZXZlbiBtb3JlICJzaG9ydGVzdCBmb3JtIiBmb3JtYXR0aW5nLCBhbmQg
bGVzcyAiZml4ZWQgcHJlY2lzaW9uIiBhbmQgImZpeGVkIHdpZHRoIgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3Yjli
MDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAg
LTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRl
Ci0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5n
ZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xv
ciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QK
ICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6
ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387688</attachid>
            <date>2020-01-14 12:20:37 -0800</date>
            <delta_ts>2020-02-04 22:36:17 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200114122036.patch</filename>
            <type>text/plain</type>
            <size>500014</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NTE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODBlYTM2MTYwYjhmNDcz
NmQ4NWUyMjA2ZjAyZjE4ODQwZGQ0ODY3YS4uM2ViZjUwZDBmNDVkZGMxYjg1NzdhYmM4YmNjNmJi
MTBjODMyNDEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQyOSBAQAorMjAyMC0wMS0xNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW1hZ2VCdWZmZXIgd2lsbCBiZSByZS1mYWN0b3JlZCB0byBh
bGxvdyByZW1vdGUgcmVuZGVyaW5nLiBUaGUgY29kZSByZS0KKyAgICAgICAgZmFjdG9yaW5nIGlz
IG5lZWRlZCB0byBkZWNvdXBsZSB0aGUgZm9sbG93aW5nIGRlc2lnbiBhc3BlY3RzIGZyb20gdGhl
CisgICAgICAgIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiOgorCisgICAgICAgICAgICAtLSBCYWNr
IGVuZCAodGhlIHBpeGVscyBzdG9yYWdlKQorICAgICAgICAgICAgLS0gRHJhd2luZyBjb250ZXh0
ICh0aGUgcmVjZWl2ZXIgb2YgdGhlIGRyYXdpbmcgY29tbWFuZHMpCisgICAgICAgICAgICAtLSBS
ZW1vdGUgSVBDIGNvbW11bmljYXRpb25zCisgICAgICAgICAgICAtLSBTaGFyaW5nIHRoZSBiYWNr
IGVuZCBkYXRhCisKKyAgICAgICAgVGhlIGNsYXNzIGhpZXJhcmNoeSBvZiBJbWFnZUJ1ZmZlciBp
czoKKworICAgICAgICBJbWFnZUJ1ZmZlcgorICAgICAgICAgICAgfAorICAgICAgICAgICAgfCAg
dGVtcGxhdGU8QmFja2VuZFR5cGU+CisgICAgICAgICAgICArLSBQaHlzaWNhbEltYWdlQnVmZmVy
ICAgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0ICAgICBJUEM6Ok1lc3NhZ2VTZW5kZXIK
KyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAg
ICAgICAgICAgICAgICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgICAgICAgICAgICB8ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICB0ZW1w
bGF0ZTxCYWNrZW5kVHlwZT4gICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICArLSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIC0tLS0tKyAgIFJl
bW90ZUltYWdlQnVmZmVyIC0tLS0tLS0tLS0tLS0rCisgICAgICAgICAgICAgICB8ICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8
CisgICAgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cisg
ICAgICAgICAgICAgICB8ICAgICAgIHwgIHRlbXBsYXRlPEJhY2tlbmRUeXBlPiAgICAgIHwgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICAgICAgICstIFJlbW90
ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgLSsgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IC0rCisgICAg
ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8CisgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8CisgICAgICAgICAgICAgICB8ICB0ZW1wbGF0ZTxCYWNrZW5kVHlwZT4gICAg
ICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICArLSBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHkgLS0tLS0tLS0tLS0tLS0rCisKKyAgICAgICAgMSkgUGh5c2ljYWxJbWFn
ZUJ1ZmZlciBpcyBhICJicmlkZ2UiIHRvIHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisgICAgICAg
IDIpIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgaXMgYSBQaHlzaWNhbEltYWdlQnVmZmVyIHdoaWNo
IGFsc28gaW1wbGVtZW50cworICAgICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQu
IFRoZSBHcmFwaGljc0NvbnRleHQgb2YgdGhpcyBjbGFzcyByZWNvcmRzCisgICAgICAgICAgIHRo
ZSBkcmF3aW5nIGNvbW1hbmRzIGluIGEgRGlzcGxheUxpc3QuIEZsdXNoaW5nIHRoaXMgRHJhd2lu
Z0NvbnRleHQKKyAgICAgICAgICAgcmVwbGF5cyBiYWNrIHRoZSBEaXNwbGF5TGlzdCB0byB0aGUg
UGh5c2ljYWxJbWFnZUJ1ZmZlci4KKyAgICAgICAgMykgUmVtb3RlSW1hZ2VCdWZmZXIgYW5kIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkgaGFuZGxlIHRoZSBJUEMgY29tbXVuaWNhdGlvbnMKKyAgICAg
ICAgICAgZnJvbSBhbmQgdG8gdGhlIFdlYlByb2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgorICAg
ICAgICA0KSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIGlzIGEgUmVtb3RlSW1hZ2VCdWZmZXIg
d2hpY2ggYWxzbyBpbXBsZW1lbnRzCisgICAgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
IFdoZW4gaXQgaXMgY3JlYXRlZCwgaXQgc2VuZHMgYSBtZXNzYWdlIHRvIAorICAgICAgICAgICBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgdG8gY3JlYXRlIGFuIGFzc29jaWF0ZWQgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eQorICAgICAgICAgICBpbiB0aGUgR1BVIHByb2Nlc3MuIFdoZW4gaXRz
IERyYXdpbmdDb250ZXh0IGlzIGZsdXNoZWQsIFJlbW90ZUltYWdlQnVmZmVyCisgICAgICAgICAg
IHNlbmRzIGl0cyBEaXNwbGF5TGlzdCB0byBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHRvIGJlIHJl
cGxheWVkIGJhY2sgaW4KKyAgICAgICAgICAgdGhlIHNoYXJlZCBiYWNrLWVuZCBidXQgaW4gR1BV
IHByb2Nlc3MuCisgICAgICAgIDUpIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eSBpcyBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHdoaWNoIGFsc28gCisgICAgICAgICAgIGltcGxlbWVudHMg
UGh5c2ljYWxJbWFnZUJ1ZmZlci4gSXQgaXMgY3JlYXRlZCBpbiB0aGUgR1BVIHByb2Nlc3MgdXBv
bgorICAgICAgICAgICBhIGNyZWF0aW9uIG9mIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIgaW4g
dGhlIFdlYlByb2Nlc3MuIEl0IGNyZWF0ZXMKKyAgICAgICAgICAgYSBzaGFyZWFibGUgYml0bWFw
L3N1cmZhY2UgYW5kIHNoYXJlIGl0IHdpdGggdGhlIGFzc29jaWF0ZWQgCisgICAgICAgICAgIFJl
bW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgVGhlIGNsYXNzIGhpZXJhcmNoeSBv
ZiBJbWFnZUJ1ZmZlckJhY2tlbmQgZm9yIENHIHBsYXRmb3JtcyBpczoKKworICAgICAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmQKKyAgICAgICAgICAgIHwKKyAgICAgICAgICAgIHxfXyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICAgICst
LSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8CisgICAg
ICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQKKyAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICB8CisgICAgICAgICAgICAgICAgICAgIHwgICAgICAgKy0tIElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8
CisgICAgICAgICAgICAgICAgICAgICstLSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQKKworCisgICAgICAgIFRoZSBjbGFzcyBoaWVyYXJjaHkgb2YgSW1hZ2VCdWZmZXJCYWNrZW5k
IGZvciBDYWlybyBwbGF0Zm9ybXM6CisKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kICAgICAg
ICAKKyAgICAgICAgICAgIHwgICAgCisgICAgICAgICAgICArLS0gSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQKKyAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICArLS0gSW1h
Z2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kCisgICAgICAgICAgICAgICAgICAgIHwgICAgICAg
fAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgICstLSBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZAorICAgICAgICAgICAgICAgICAgICB8ICAgICAgIHwKKyAgICAgICAgICAg
ICAgICAgICAgfCAgICAgICArLS0gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAg
ICAgICstLSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQKKworCisgICAgICAgIDEp
IEltYWdlQnVmZmVyQmFja2VuZCBrbm93cyB0aGUgZGltZW5zaW9ucyBhbmQgdGhlIGNvbG9yIHNw
YWNlIGFuZCBwcm92aWRlcworICAgICAgICAgICBiYXNpYyBmdW5jdGlvbmFsaXRpZXMgZm9yIHRo
ZSBkYXRhIGNvcHlpbmcgYW5kIGNvbG9yIHBlcm11dGF0aW9uLgorICAgICAgICAyKSBJbWFnZUJ1
ZmZlckNHQmFja2VuZC9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCBwcm92aWRlcyBiYXNpYyBmdW5j
dGlvbmFsaXRpZXMKKyAgICAgICAgICAgZm9yIGRyYXdpbmcgdGhlIEltYWdlQnVmZmVyIHRvIGEg
ZGVzdGluYXRpb24gR3JhcGhpY3NDb250ZXh0LgorICAgICAgICAzKSBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCBpcyBhbgorICAg
ICAgICAgICB1bmFjY2VsZXJhdGVkIGJhY2sgZW5kLgorICAgICAgICA0KSBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQvSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQgaXMgYW4KKyAg
ICAgICAgICAgYWNjZWxlcmF0ZWQgYmFjayBlbmQuCisgICAgICAgIDUpIEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZCBpcyBhbiB1bmFjY2VsZXJhdGVkIHNoYXJlYWJsZSBiYWNrIGVu
ZC4KKyAgICAgICAgNikgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kIGlzIGFu
IGFjY2VsZXJhdGVkIHNoYXJlYWJsZSBiYWNrIGVuZC4KKworICAgICAgICBGb3IgQ0cgcGxhdGZv
cm1zLCBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKCkgd2lsbCBjcmVhdGUgdGhlIGZvbGxvd2luZyB0eXBl
cworICAgICAgICBvZiBJbWFnZUJ1ZmZlcjoKKworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5k
ZXJpbmc6CisgICAgICAgICAgICAgICAgVW5hY2NlbGVyYXRlZDogIFBoeXNpY2FsSW1hZ2VCdWZm
ZXI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+CisgICAgICAgICAgICAgICAgQWNjZWxlcmF0
ZWQ6ICAgIFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPgor
CisgICAgICAgICAgICBPdXQtT2YtUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAgICAg
VW5hY2NlbGVyYXRlZDogIAorICAgICAgICAgICAgICAgICAgICAgICAgV2ViUHJvY2VzczogUmVt
b3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+
CisgICAgICAgICAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPgorCisgICAgICAg
ICAgICAgICAgQWNjZWxlcmF0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBXZWJQcm9jZXNz
OiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIEdQVVByb2Nlc3M6IFJlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eTxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+
CisKKyAgICAgICAgU2ltaWxhcmx5IEltYWdlQnVmZmVyOjpjcmVhdGUoKSBvbiBDYWlybyBwbGF0
Zm9ybXMgd2lsbCBjcmVhdGUgdGhlCisgICAgICAgIGZvbGxvd2luZyB0eXBlcyBvZiBJbWFnZUJ1
ZmZlcjoKKworICAgICAgICAgICAgSW4tUHJvY2VzcyByZW5kZXJpbmc6CisgICAgICAgICAgICAg
ICAgVW5hY2NlbGVyYXRlZDogIFBoeXNpY2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ+CisgICAgICAgICAgICAgICAgQWNjZWxlcmF0ZWQ6ICAgIFBoeXNp
Y2FsSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+CisKKyAgICAg
ICAgICAgIE91dC1PZi1Qcm9jZXNzIHJlbmRlcmluZzoKKyAgICAgICAgICAgICAgICBXZWJQcm9j
ZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZD4KKyAgICAgICAgICAgICAgICBHUFVQcm9jZXNzOiBSZW1vdGVQaHlzaWNhbEltYWdl
QnVmZmVyUHJveHk8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPgorCisgICAgICAg
IFRoZSBnb2FsIG9mIHRoaXMgcGF0Y2ggaXMgdG8gbWFrZSB0aGUgbWluaW1hbCBjaGFuZ2VzIGlu
IFdlYkNvcmUgYW5kIGhpZGUKKyAgICAgICAgYWxsIHRoZSBkZXRhaWxzIG9mIHJlbW90ZSBkcmF3
aW5nIHVuZGVyIHRoZSBJbWFnZUJ1ZmZlciBhbmQgSW1hZ2VCdWZmZXJCYWNrZW5kLgorCisgICAg
ICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBNb2R1bGVzL2FzeW5jLWNsaXBib2FyZC9D
bGlwYm9hcmRJdGVtQmluZGluZ3NEYXRhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNs
aXBib2FyZEl0ZW1CaW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpz
YW5pdGl6ZURhdGFJZk5lZWRlZCk6CisgICAgICAgICogUGxhdGZvcm1BcHBsZVdpbi5jbWFrZToK
KyAgICAgICAgKiBQbGF0Zm9ybU1hYy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFNvdXJjZXNHVEsudHh0OgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xv
bmVTZXJpYWxpemVyOjpkdW1wSW1hZ2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVE
ZXNlcmlhbGl6ZXI6OnJlYWRJbWFnZUJpdG1hcCk6CisgICAgICAgICogY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTRmlsdGVySW1hZ2VWYWx1ZTo6aW1h
Z2UpOgorICAgICAgICAqIGh0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlIGNvbnN0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50OjpjcmVhdGVDb250ZXh0MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0Vs
ZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TENhbnZhc0VsZW1lbnQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdl
QnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9JbWFnZUJpdG1hcC5jcHA6CisgICAgICAgICogaHRtbC9PZmZzY3JlZW5DYW52
YXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRvSW1h
Z2VCaXRtYXApOgorICAgICAgICAoV2ViQ29yZTo6T2Zmc2NyZWVuQ2FudmFzOjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OnRha2VJ
bWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVQYXR0ZXJuKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
ZGlzcGxheUxpc3RBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Ojpp
c0FjY2VsZXJhdGVkIGNvbnN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkcmF3SW1hZ2VJbnRvQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVy
KToKKyAgICAgICAgKiBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xUZXh0VHJhY2tDb250YWluZXJFbGVtZW50OjpjcmVh
dGVUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgY29u
c3QpOgorICAgICAgICAqIHBhZ2UvQ2hyb21lLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFj
a2VuZCBjb25zdCk6CisgICAgICAgICogcGFnZS9GcmFtZVNuYXBzaG90dGluZy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKToKKyAgICAgICAgKiBwYWdl
L1BhZ2VDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xp
ZW50OjpzY3JlZW5zaG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9Ib3N0V2luZG93Lmg6CisgICAgICAgICogcGxhdGZvcm0vU291cmNlc0Nh
aXJvLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9BbHBoYVByZW11bHRpcGxpY2F0
aW9uLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJlbmRl
cmluZ01vZGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlw
ZXMuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6
Y29weVJlY3RUb0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0lu
dG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2lua0ludG9J
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3Jt
Q29sb3JTcGFjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2Vu
ZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENvbnRl
eHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1lbW9y
eUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5n
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmludGVybmFsU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemUgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnJlc29sdXRpb25TY2FsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6YmFzZVRyYW5zZm9ybSBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Oklt
YWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmNhbGN1bGF0ZUludGVybmFsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQmFja2VuZDo6Y3JlYXRlR2V0SW1hZ2VEYXRhQXJyYXkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVQdXRJbWFnZURhdGFSZWN0cyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvUHJlbXVsdGlwbGll
ZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjppbnRlcm5hbFNpemUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpyZXNvbHV0aW9uU2NhbGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb2xvclNwYWNlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6cGxhdGZv
cm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
cHlUb1BsYXRmb3JtVGV4dHVyZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9QaHlzaWNhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBoeXNp
Y2FsSW1hZ2VCdWZmZXI6OlBoeXNpY2FsSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UGh5c2ljYWxJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRj
aEJ1ZmZlcjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVy
OjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyk6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhUaWxpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aFRpbGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFkb3dCbHVyOjpibHVyU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRv
d0JsdXI6OmRyYXdTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQ2Fpcm9PcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhaXJvOjpkcmF3U2hh
ZG93TGF5ZXJCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZmlsbFNoYWRvd0J1ZmZlcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnBsYXRm
b3JtVHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJTdXJmYWNlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjp+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6c3dhcEJ1ZmZlcnNJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVN
YXBwZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oOiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2Vu
ZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjp3cml0ZUZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuY29kZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAo
V2ViQ29yZTo6Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6Om1ha2VWSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUltYWdl
UGl4ZWxzQWNjZWxlcmF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tl
bmQ6OmNvcHlJbWFnZVBpeGVscyBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJv
dyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmJhY2tlbmRDb2xvckZvcm1hdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3Vt
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9C
R1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anBlZ1VUSSk6CisgICAgICAgIChXZWJDb3JlOjp1dGlGcm9tSW1hZ2VCdWZm
ZXJNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpjZkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YVVSTCk6CisgICAgICAgIChX
ZWJDb3JlOjpkYXRhVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW06CisgICAgICAgIChXZWJDb3JlOjpJT1N1cmZhY2U6
OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRl
eHQ6OmRpc3BsYXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5n
Q29udGV4dDo6ZGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRyYXdpbmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
cmVwbGF5RGlzcGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Zp
bHRlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1
bHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZlckd0ay5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmlj
b3NpYUdDM0RMYXllci5jcHA6CisgICAgICAgIChOaWNvc2lhOjpHQzNETGF5ZXI6OnN3YXBCdWZm
ZXJzSWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBU
ZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmU6OnVwZGF0ZUNvbnRl
bnRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL01vY2tSZWFsdGltZVZpZGVvU291cmNlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZl
ciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAg
ICAqIHJlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcGU6
OmNyZWF0ZVJhc3RlclNoYXBlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlQ2xpcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNs
aXBwZXI6OmFwcGx5Q2xpcHBpbmdUb0NvbnRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZH
UmVzb3VyY2VGaWx0ZXI6OmFwcGx5UmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXI6OnBvc3RBcHBseVJlc291cmNlKToKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclNWR1Jlc291cmNlTWFza2VyOjphcHBseVJlc291cmNlKToKKyAgICAgICAgKiBzdmcvZ3Jh
cGhpY3MvU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2U6Om5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKToKKwogMjAyMC0wMS0xNCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFk
ZGFkQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0NTA1
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwppbmRleCBhN2ZjMjE2OTUxZjA2ZGI1Y2QxNzUyNzczZDRmZDMxZmE0ZmE1YmI0Li41
NjIzMjc2MDI0OWVhMGUyZGI3OTg0YTg0OTNhNWQ1ZWFjNTNiMGYyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEyNiBAQAorMjAyMC0wMS0xNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLS0gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlcgorICAgICAgICAgICBpbiB0aGUgV2ViUHJvY2VzcyBzaWRlLgorCisgICAg
ICAgIC0tIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBpcyByZXNwb25zaWJsZSBmb3IgY3Jl
YXRpbmcgYW5kIHJlbGVhc2luZyAKKyAgICAgICAgICAgUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
ciBpbiB0aGUgR1BVUHJvY2VzcyBzaWRlLgorCisgICAgICAgIC0tIFJlbW90ZUltYWdlQnVmZmVy
IGFuZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IGFyZSByZXNwb25zaWJsZSBmb3IgbWFuYWdpbmcK
KyAgICAgICAgICAgdGhlIElQQyBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIHRoZSBQaHlzaWNhbElt
YWdlQnVmZmVycyB1bmRlcmx5aW5nIHRoZXNlCisgICAgICAgICAgIG9iamVjdHMuCisKKyAgICAg
ICAgLS0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kIGlzIGFuIHVuYWNjZWxlcmF0
ZWQgSW1hZ2VCdWZmZXIKKyAgICAgICAgICAgYmFja2VkIGJ5IFNoYXJlYWJsZUJpdG1hcC4KKwor
ICAgICAgICAtLSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQgaXMgYSBDRyBv
bmx5IGFjY2VsZXJhdGVkIEltYWdlQnVmZmVyCisgICAgICAgICAgIGJhY2tlZCBieSBJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIERlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2Up
OgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5
bmNNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6
Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlU3lu
Y01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjp3ZWJQcm9jZXNzSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJv
Y2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdl
QnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjpmbHVzaENvbnRleHQpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIEdQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOiBB
ZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2lj
YWxJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVQaHlz
aWNhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5KToK
KyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFn
ZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKToKKyAgICAgICAgKiBHUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4K
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQv
V2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5j
cHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3Nh
Z2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5j
TWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlv
bjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25u
ZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQ
VVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk6CisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAo
V2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlJbWFnZSBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6
dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcik6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2VuZCk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6aXNQ
ZW5kaW5nRmx1c2ggY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW46IEFkZGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6UmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUgY29uc3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
IGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oOgorCiAyMDIwLTAxLTE0ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIE5ha2UgTWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlUHJveHkgYSBtZXNz
YWdlIHJlY2VpdmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggMWNmMTk0MzEzZDk1
ZjVjNWNjNzI0YzlkMmM4YWI1OTAyNjEzYmE4Zi4uZWM3YjI1YzQ3ZjRkZDkxMjU5NTAwNjM0OGVj
OWQ5MDRjOWQyNjNlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDIwLTAxLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5j
b20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6
OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6CisKIDIwMjAtMDEtMTQg
IEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW0ludGVn
cmF0aW9uXSBTdXBwb3J0IHRoZSBmZWF0dXJlIGZsYWcgaW4gRHVtcFJlbmRlclRyZWUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCmluZGV4IDI5NmRlYTc4MzFiZWU0OWNmMDA0YTY4MmRkMjVlODkzYjk5NjRlNzcu
Ljg1YTdiYzAyZmQwNzVhZjNlODA1N2EzZDc4ZDI4MGY3NmE4MTRmYjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5j
bWFrZQpAQCAtMTAxNSw2ICsxMDE1LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktf
SEVBREVSUwogICAgIHBsYXRmb3JtL2dhbWVwYWQvR2FtZXBhZFByb3ZpZGVyQ2xpZW50LmgKICAg
ICBwbGF0Zm9ybS9nYW1lcGFkL1BsYXRmb3JtR2FtZXBhZC5oCiAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9BTkdM
RVdlYktpdEJyaWRnZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQXVkaW9UcmFja1ByaXZhdGUu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKQEAgLTEwMjQsNiArMTAyNSw3
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rh
c2hBcnJheS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGVjb2RpbmdPcHRpb25zLmgKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Rp
c3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yTWFuYWdlci5oCkBAIC0xMDczLDcgKzEwNzUsNyBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJEYXRhLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlT2JzZXJ2ZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uaApA
QCAtMTEwNSwxMyArMTEwNywxOCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aFV0aWxpdGllcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1EaXNwbGF5LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
QnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2Vu
ZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1MYXllci5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybVRleHRUcmFjay5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1U
aW1lUmFuZ2VzLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1JlbW90ZVZpZGVvU2FtcGxlLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5k
ZXJpbmdCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
U3RyaW5nVHJ1bmNhdG9yLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9UYWJTaXplLmgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXN5bmMtY2xpcGJvYXJkL0NsaXBib2FyZEl0
ZW1CaW5kaW5nc0RhdGFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1j
bGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKaW5kZXggNDY0MWQ1
ODA4YTUyN2VjNmUzMGQxY2ZiNmU4MGIyMzFkZDU2ZDZiMC4uNzQ2NWQwZTZhODY2ODczOGY0ZWJk
YzU3NGY5MjZjNzQ4OGU3YWE0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9h
c3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRpbmdzRGF0YVNvdXJjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9hc3luYy1jbGlwYm9hcmQvQ2xpcGJvYXJkSXRlbUJpbmRp
bmdzRGF0YVNvdXJjZS5jcHAKQEAgLTI4NCw3ICsyODQsNyBAQCB2b2lkIENsaXBib2FyZEl0ZW1C
aW5kaW5nc0RhdGFTb3VyY2U6OkNsaXBib2FyZEl0ZW1UeXBlTG9hZGVyOjpzYW5pdGl6ZURhdGFJ
Zk5lZQogCiAgICAgICAgIGF1dG8gYml0bWFwSW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7
CiAgICAgICAgIGJpdG1hcEltYWdlLT5zZXREYXRhKFdURk1vdmUoYnVmZmVyVG9TYW5pdGl6ZSks
IHRydWUpOwotICAgICAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShi
aXRtYXBJbWFnZS0+c2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICAgICAgYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoYml0bWFwSW1hZ2UtPnNpemUoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpIHsKICAgICAg
ICAgICAgIG1fZGF0YSA9IHsgbnVsbFN0cmluZygpIH07CiAgICAgICAgICAgICByZXR1cm47CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBmNzEyOTI3Y2M5MThmM2FiMGZl
NzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZTU0MjZjMTE0ZDNhY2Y1MGI0NzE4YmNjZjQ2YTM3YzJj
Y2FmOTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTEzMiw4ICsx
MzIsOSBAQCBlbHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dEdMQ0cuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAot
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Nyw5IEBAIGVs
c2UgKCkKIAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5o
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1VUSVJlZ2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFj
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKaW5kZXggYzAzY2U2YjUx
MzE4MjFhMDFjYzdkNjY1M2QxNjkxOTFkYmI3OWE4MS4uMGIyYmNjYzViNTY2NjAzNTQ1MjM3YmQ1
YWMwMzVhYzExYjRkMmM3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UKQEAgLTI4OSw4ICsy
ODksMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0R0xDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3Vy
Y2VDR01hYy5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ludFBvaW50Q0cuY3BwCkBAIC01
MjUsNyArNTI3LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmgKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGQ4
NWIxNzlhZGM3MTI0N2JiYmU4NjM5M2EyYzAzNWVhZTBhYjNiNDAuLjJhMTFhZDg5NTAyNTg1YTMz
NTNkMDc1NTZiNzZmNjFhN2FjNzNjZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODY5LDYgKzE4Njks
NyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSWNvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXIuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUZyYW1lLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0x
ODg4LDYgKzE4ODksNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUGxhdGZvcm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9u
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJl
Y3QuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhp
Y3MvU3RyaW5nVHJ1bmNhdG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZTZmODE3
YTc4MTZkNmE0YmNjMjAxM2E1Nzk0NDQ0NzY3YWU3MDgwZS4uZDA4NThhODU3MTY5OGVlNDYzMTg0
ZjU3MTIxMWQ3MDE2MDNiOGFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0Nv
Y29hLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yODgsOCAr
Mjg4LDkgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wu
Y3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvU291cmNlc0dUSy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dAppbmRleCA3
MjA1ZTIwZDNhYjRlMzlmYmVlNGJiOTQzMWFlY2I0YmNjYzI4YmQyLi45N2YzMzZlN2M1YzllOGQw
ZGEyNWUyYmQ0ZTYxYWQ3MWFlNTJkZjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzR1RLLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzR1RLLnR4dApAQCAtODQsNyAr
ODQsNiBAQCBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRGlzcGxheVJlZnJlc2hNb25pdG9yR3RrLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dka0NhaXJvVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsu
Y3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW1hZ2VCdWZmZXJHdGsuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9ndGsvSW1hZ2VHdGsuY3BwCiAKIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bWFnZUdTdHJlYW1lckNhaXJvLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGUwNTUzNmY3M2NiMGFlNjRmZTUyYTIxMDZiZDZm
OTY1YTI3OTNlMDUuLjE0NzZiMTM5YzMxOTZlMzQ1MmFlMmQzYTU3YWJiZDI5NmRkMGU2OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTY0NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uLmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJl
Z2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1
QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQw
RDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJs
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIy
QkQ5RjdGMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEw
MiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJE
YXRhQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIy
QkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUw
MEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpT
U1ZHQWx0R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0Fs
dEdseXBoSXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8q
IEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVs
ZW1lbnQuaCAqLzsgfTsKQEAgLTIxMzAsMTQgKzIxMjgsMjYgQEAKIAkJNzFFMkM0MjYyMUM5MzUy
ODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUUyQzQyNDIxQzkzNTFEMDAyNEY4QzggLyogQW5p
bWF0aW9uRWZmZWN0UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3
RTZEMDA2NUE0NUYgLyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlv
bkVmZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyMDE3NTRBMjNDOTY5REYw
MDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIwMTc1NDgyM0M5NjkzRTAwNDE4ODFGIC8q
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzEyMjNFQzg1NDAwRjEyRkY3IC8qIChudWxs
KSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMjIyM0VDODVGMDBGMTJGRjcgLyog
KG51bGwpIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZG
NyAvKiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNF
QzkxNjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQ
cm9wZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzIxRjFFQTcyM0FENTBBMTAwQkRBRkY3IC8qIEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJCQkU0MDYyM0FBQ0NCQTAwQTYxMjNDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMjgz
RjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0YyMzBCMDRCNzAwNjg0
N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzNUM5NjEyM0MxOTVBODAwMjYyNjMzIC8qIFBsYXRm
b3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQkJFNDIzMjNBQzQ5M0UwMEE2MTIzQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzNUM5
NjMyM0MxOTVDRTAwMjYyNjMzIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTQwQzIzQUFFQjFF
MDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM4MjZBODIzQzFGNThCMDA0OUY3
RjkgLyogUmVuZGVyaW5nTW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzODI2QTYyM0MxRjE0MzAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjM4MjZD
MjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzODI2QzEyM0M1NjU4NTAwNDlG
N0Y5IC8qIEFscGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNF
WFRCbGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsg
fTsKIAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIw
MEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5
U3RhdGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFu
Z2VPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyQjA5OTAxMjNDMDkyM0MwMDczQjlDQiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkEwN0M0
NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkJFNDFDMjNBQzIxQ0Mw
MEE2MTIzQyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJCRTNGRTIzQUFCRkEyMDBBNjEyM0MgLyogUGh5c2lj
YWxJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0
MDkyM0FBQ0U4MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJCQkU0MjEyM0FDMkNENzAw
QTYxMjNDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQkU0MDAyM0FBQzRDMTAwQTYxMjNDIC8qIEltYWdlQnVm
ZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJC
RTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyRDVDMkVBMjNC
NEMwRjgwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkQ1QzJFNjIzQjM4MjcxMDBGNjdENDMgLyogUmVu
ZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc1NTNDRkU4MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NTND
RkU2MTA4RjQ3M0YwMEVBMjgxRSAvKiBUaW1lbGluZVJlY29yZEZhY3RvcnkuaCAqLzsgfTsKIAkJ
NzU3OTNFODQwRDBDRTBCMzAwN0ZDMEFDIC8qIE1lc3NhZ2VFdmVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFODEwRDBDRTBCMzAwN0ZDMEFD
IC8qIE1lc3NhZ2VFdmVudC5oICovOyB9OwogCQk3NTc5M0VDOTBEMENFNzJEMDA3RkMwQUMgLyog
SlNNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc1NzkzRUM3MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oICovOyB9
OwpAQCAtNjU0MCw5ICs2NTUwLDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdl
YkV2ZW50UmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50
UmVnaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkw
MDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEz
NTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hD
aGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdl
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAw
RDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NjA1
LDggKzk2MTIsMTIgQEAKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9u
RWZmZWN0Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
QW5pbWF0aW9uRWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzFGOTM2RjcxREQ0Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmln
YXRvck1heFRvdWNoUG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ4
MjNDOTY5M0UwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjAyODBEMTIzQkE5MzdCMDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYxMkZGNyAvKiBTVkdBbmlt
YXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRWYWx1ZVByb3Bl
cnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ2MjI0MENBRDIwMEYx
MkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ZhbHVlUHJvcGVy
dHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzODI2QTYyM0MxRjE0MzAwNDlG
N0Y5IC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nTW9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyog
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7IHBhdGggPSAuLi9BbHBoYVByZW11bHRpcGxpY2F0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5MUEzQTdFNTQwMEY1
RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhUQmxlbmRNaW5NYXgu
aWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MjcsNyArOTYzOCwyMCBAQAogCQk3MjdBRkVEMTFBMkVB
NkEwMDAwNDQyRTggLyogRVhUc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBFWFRzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI3QUZF
RDIxQTJFQTZBMDAwMDQ0MkU4IC8qIEVYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRVhUc1JHQi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjdBRkVE
MzFBMkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0g
RVhUc1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQTA3QzQ1MjNCRUVE
OUYwMEFGQTZBOCAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJC
QkUzRkUyM0FBQkZBMjAwQTYxMjNDIC8qIFBoeXNpY2FsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGh5c2ljYWxJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwMDIzQUFDNEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3MkJCRTQwNjIzQUFDQ0JBMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwNzIzQUFDRDUyMDBBNjEyM0MgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkJFNDA4MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyQkJFNDA5MjNBQUNFODIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQwQzIzQUFFQjFFMDBBNjEyM0MgLyogSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQkU0MEQyM0FBRUNBMjAw
QTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzJCQkU0MjMyM0FDNDkzRTAwQTYxMjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAv
KiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0
aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFNjIzQjM4MjcxMDBG
NjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkU5MjNCNDRBMzgwMEY2
N0Q0MyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmlu
Z0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4
RDJGMDA0QzU2MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
RTQxNzYyMUEyRThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURnJhZ0RlcHRoLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjkxLDcgKzEyNzE1LDYgQEAKIAkJQjJBMDE1OTQwQUY2Q0Q1
MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFn
ZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFn
ZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTEwQ0VG
MEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0Zv
bnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2OTQsNiArMTY3MTcsNyBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0
LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCAq
LywKKwkJCQk3MkJCRTQyNjIzQUNCMDlCMDBBNjEyM0MgLyogRGlzcGxheUxpc3REcmF3aW5nQ29u
dGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0
ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJ
dGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJl
Y29yZGVyLmNwcCAqLywKQEAgLTI0ODkzLDYgKzI0OTE3LDcgQEAKIAkJQjI3NTM1MjkwQjA1Mzgx
NDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQk3MjM4MjZDMTIzQzU2NTg1MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRCNjc5NSAvKiBDb2xvckNHLmNwcCAqLywK
IAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRQb2ludENHLmNwcCAqLywKIAkJ
CQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRSZWN0Q0cuY3BwICovLApAQCAtMjQ5
MDIsOSArMjQ5MjcsMTIgQEAKIAkJCQk5MzQ5MDdFMzEyNUJCQkM4MDA3RjIzQTAgLyogR3JhcGhp
Y3NDb250ZXh0Q0cuaCAqLywKIAkJCQk2RTIxQzZDMTExMjYzMzk5MDBBN0JFMDIgLyogR3JhcGhp
Y3NDb250ZXh0R0xDRy5jcHAgKi8sCiAJCQkJQTgwRDY3MDcwRTlFOURFQjAwRTQyMEYwIC8qIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNHLmggKi8sCi0JCQkJQjJBMTBCOTMwQjM4MThE
NzAwMDk5QUE0IC8qIEltYWdlQnVmZmVyQ0cuY3BwICovLAotCQkJCTIyOTJCMjdCMTM1NjY2OTQw
MENGMTFFRiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5jcHAgKi8sCi0JCQkJMjJCRDlGODAxMzUzNjRG
RTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggKi8sCisJCQkJNzJCQkU0MDgyM0FBQ0U4
MjAwQTYxMjNDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwOTIz
QUFDRTgyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQw
RDIzQUFFQ0EyMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwICovLAor
CQkJCTcyQkJFNDBDMjNBQUVCMUUwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5oICovLAorCQkJCTcyQkJFNDA3MjNBQUNENTIwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuY3BwICovLAorCQkJCTcyQkJFNDA2MjNBQUNDQkEwMEE2MTIzQyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLywKIAkJCQlDRDU4OTQ5MzIxODc0MDY0MDA0RjQy
NEEgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAgKi8sCiAJCQkJQ0QzRTIxREIyMTgzM0Y1
MTAwRTY2RjU1IC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCAqLywKIAkJCQk1NTVCODdFQTFD
QUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovLApAQCAtMjUwMDAsNiArMjUw
MjgsNyBAQAogCQkJCTRCN0FFNDkyMjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdl
LmggKi8sCiAJCQkJQThDQjQxMDIwRTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAog
CQkJCTU1NTEzMDAwMUU3Q0NDQ0EwMEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJ
CQk3MkEwN0M0NTIzQkVFRDlGMDBBRkE2QTggLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICov
LAogCQkJCTQ5RkM3QTRGMTQ0NEFGNUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3Iu
Y3BwICovLAogCQkJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3IuaCAqLywKIAkJCQkyRDI5RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJl
c2hNb25pdG9yQ2xpZW50LmNwcCAqLywKQEAgLTI1MDkxLDcgKzI1MTIwLDggQEAKIAkJCQk1NUEz
MzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0Qy
NTk3NjEzQzgxNkY0MDA2MDg1NTkgLyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkx
MEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYy
NUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCAqLywKKwkJCQk3MjAyODBEMTIzQkE5MzdC
MDA2RjQ3NjcgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJCRTQwMDIzQUFD
NEMxMDBBNjEyM0MgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3
Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3
MjAwMEM0MkZCIC8qIEltYWdlRGVjb2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMEND
QzA0QyAvKiBJbWFnZUZyYW1lLmNwcCAqLywKQEAgLTI1MTQ4LDYgKzI1MTc4LDkgQEAKIAkJCQky
RDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2
RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENG
REVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTcyQkJFM0ZFMjNBQUJGQTIwMEE2MTIz
QyAvKiBQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzJCQkU0MjMyM0FDNDkzRTAwQTYx
MjNDIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjAxNzU0ODIzQzk2OTNFMDA0
MTg4MUYgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQkwNTYyRjk2MDE1
NzNGODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMz
REMwMDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4
NDdFMjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MTU3
LDYgKzI1MTkwLDkgQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmgg
Ki8sCiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNw
cCAqLywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUu
aCAqLywKKwkJCQk3MkQ1QzJFOTIzQjQ0QTM4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8sCisJCQkJNzJENUMyRTYyM0IzODI3MTAwRjY3RDQzIC8qIFJlbmRlcmluZ0JhY2tlbmQu
aCAqLywKKwkJCQk3MjM4MjZBNjIzQzFGMTQzMDA0OUY3RjkgLyogUmVuZGVyaW5nTW9kZS5oICov
LAogCQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJ
CQkJQTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCiAJCQkJMEYz
REQ0NEQxMkY1RUExQjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuY3BwICovLApAQCAtMjg5OTksNiAr
MjkwMzUsNyBAQAogCQkJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3U2l6
ZU9yTm90LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEQwQzQwNjExMTVGMUVBMDAxOEFBMzQgLyog
QWZmaW5lVHJhbnNmb3JtLmggaW4gSGVhZGVycyAqLywKIAkJCQk4M0JCNUM4ODFENUQ2RjQ1MDA1
QTcxRjQgLyogQWxsRGVzY2VuZGFudHNDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk3
MjM4MjZDMjIzQzU2Rjc5MDA0OUY3RjkgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQ0VEQTEyRDcxNTJDQTFDQjAwRDlFMDhEIC8qIEFsdGVybmF0aXZlVGV4
dENsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0UwOEMzRDIxNTJCNTk5QTAwMjFCOEMyIC8q
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUNFN0IyREIz
MTU4NkFCQUQwMDk4QjNGQSAvKiBBbHRlcm5hdGl2ZVRleHRVSUNvbnRyb2xsZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtMjk2OTQsNiArMjk3MzEsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3
MDU0QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMy
Mjc3NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkU1RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDI3MjNBQ0IzRTAwMEE2MTIzQyAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkIwOTkwMTIzQzA5MjNDMDA3M0I5Q0IgLyogRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAw
MDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDMwMiw4ICszMDM0MSwxMCBAQAogCQkJCTdDNzkwM0IzMUY4NkY5
NUMwMDQ2M0E3MCAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJBMTBCOTIwQjM4MThCRDAwMDk5
QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY3RjEzNTM2MjVD
MDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLywKLQkJCQkyMkJEOUY4
MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCBpbiBIZWFkZXJzICovLAor
CQkJCTcyQkJFNDIxMjNBQzJDRDcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyQkJFNDIwMjNBQzJCNzcwMEE2MTIzQyAvKiBJbWFnZUJ1ZmZlckNH
QmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjMyM0MxOTVDRTAwMjYyNjMzIC8q
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjFGMUVB
NzIzQUQ1MEExMDBCREFGRjcgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDRDNFMjFERDIxODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8q
IEltYWdlQ29udHJvbHNCdXR0b25FbGVtZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAx
OTJENjE4QjZCOUI3MDA3RkM3QTEgLyogSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKQEAgLTMxNzczLDYgKzMxODE0LDcgQEAKIAkJCQlBNTU0QjVGMzFFMzgzOTNBMDAx
RDRFMDMgLyogUGVyZm9ybWFuY2VVc2VyVGltaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDU4
MUZCNTE1MjBGOTNCMDAzQTdBNzUgLyogUGVyaW9kaWNXYXZlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUQ1REMyRTBGNDIzQTczMDA4RjIwRkQgLyogUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRp
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQkJFNDFDMjNBQzIxQ0MwMEE2MTIzQyAvKiBQaHlz
aWNhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxREJDMUI1NjIzNDdCM0QyMDBC
OTAxQUYgLyogUGljdHVyZUluUGljdHVyZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
RDJDODJCNzIzNkEzRjZBMDA1NUQ2QzUgLyogUGljdHVyZUluUGljdHVyZVN1cHBvcnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTFEMkY4RTA2MjM0NDc1MjMwMDk5M0I2OCAvKiBQaWN0dXJlSW5QaWN0
dXJlV2luZG93LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNzkyLDYgKzMxODM0LDggQEAKIAkJCQlC
Q0FBNDg3MDE0QTA1MjUzMDA4OEZBQzQgLyogUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MjNGNzdCMTQ4NENBNEMwMDhDNkRCRSAvKiBQbGF0Zm9ybUV4cG9y
dE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOTUxRDU0RjVGQjAwREQ3QzY4IC8q
IFBsYXRmb3JtR2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIzNUM5NjEyM0MxOTVBODAw
MjYyNjMzIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyMDE3
NTRBMjNDOTY5REYwMDQxODgxRiAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFDNEQ0MzAwQTZBQUI0IC8qIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDU2MkY5NjExNTczRjg4RjAwMzFDQTE2IC8q
IFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUY1NDRGNzg5MTVDRkIyQTgwMEFG
MzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTk2OSw2ICszMjAx
Myw4IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlckltYWdlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBEQ0VDNDggLyogUmVuZGVySW1hZ2VS
ZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFENDgxMjE0MkY3RDAwOERFOUY2IC8q
IFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkQ1
QzJFQTIzQjRDMEY4MDBGNjdENDMgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNzIzODI2QTgyM0MxRjU4QjAwNDlGN0Y5IC8qIFJlbmRlcmluZ01vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVT
Y2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODc4MDk3RDkzMDIwMDk0QzlFNCAv
KiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUI1OTVGRjQ3MTgyNENFRTMwMEZG
NTFDRCAvKiBSZW5kZXJJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA2NGRm
ZjJkOTg0ZWY3MmRkOWViYTUxMDI0MDYxMGZjMThlMjFkOTQ3Li5mYTRlNDkwYWI0ZDgxYmQ2ZmYx
MjhlMjVhNzc2NzQxZDllZjc3OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTkyMSw4ICs5MjEsOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgSW50
U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8g
aW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwg
MCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAg
SW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKKyAgICAgICAgYXV0
byBpbWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpQcmVtdWx0aXBsaWVkLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2lj
YWxTaXplLmhlaWdodCgpKSk7CiAgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CiAgICAgICAgICAg
ICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRpb25FcnJvcjsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTI3ODUsMTMgKzI3ODUsMTMgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGUoRmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdo
dCksIFVuYWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgICAgIGF1dG8gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVp
Z2h0KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAg
ICAgICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJh
eSgqaW1hZ2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRT
aXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdp
ZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEs
IEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0KSwgSW50UmVjdCgwLCAwLCBsb2dp
Y2FsV2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBJbnRQb2ludCgpKTsKIAogICAgICAgICBhdXRvIGJp
dG1hcCA9IEltYWdlQml0bWFwOjpjcmVhdGUoeyBXVEZNb3ZlKGJ1ZmZlciksIHN0YXRpY19jYXN0
PGJvb2w+KG9yaWdpbkNsZWFuKSB9KTsKICAgICAgICAgcmV0dXJuIGdldEpTVmFsdWUoYml0bWFw
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGaWx0ZXJJbWFnZVZhbHVlLmNwcAppbmRleCBlNWI4
YWI0NjljZWM0YmMwNThjNDM3ZDE5OTUwNDBiNTAyMWM3NDMxLi4yZmE1M2FhMzhjMWZjYzExNzM1
NmFmOWYxNTVkMDE1ZDQ0MzdmMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
RmlsdGVySW1hZ2VWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZpbHRlcklt
YWdlVmFsdWUuY3BwCkBAIC0xMTYsNyArMTE2LDcgQEAgUmVmUHRyPEltYWdlPiBDU1NGaWx0ZXJJ
bWFnZVZhbHVlOjppbWFnZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgRmxvYXRTaXoK
IAogICAgIC8vIFRyYW5zZm9ybSBJbWFnZSBpbnRvIEltYWdlQnVmZmVyLgogICAgIC8vIEZJWE1F
ICgxNDk0MjQpOiBUaGlzIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkLgotICAgIGF1dG8gdGV4dHVyZSA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
VW5hY2NlbGVyYXRlZCk7CisgICAgYXV0byB0ZXh0dXJlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIXRleHR1cmUpCiAg
ICAgICAgIHJldHVybiAmSW1hZ2U6Om51bGxJbWFnZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0N1c3RvbVBhaW50Q2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Q3VzdG9tUGFpbnRDYW52YXMuY3BwCmluZGV4IGY0Yjc3MDdlOTdhOGZlNTFmOGUyNTc3NThhZGU0
YjZkZGZmNTAyZTUuLjY1ZDQ2NGZkZDdkNTg4ZWM3MzE2MTZiNzQwMzdhODQyOGVlZjMxZjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvQ3VzdG9tUGFpbnRDYW52YXMuY3BwCkBAIC05Myw3ICs5Myw3
IEBAIEltYWdlKiBDdXN0b21QYWludENhbnZhczo6Y29waWVkSW1hZ2UoKSBjb25zdAogICAgIGlm
ICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
bV9jb3BpZWRCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRl
ZCwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7CisgICAgbV9jb3BpZWRCdWZmZXIgPSBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7
CiAgICAgaWYgKCFtX2NvcGllZEJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAg
LTEwMiw3ICsxMDIsNyBAQCBJbWFnZSogQ3VzdG9tUGFpbnRDYW52YXM6OmNvcGllZEltYWdlKCkg
Y29uc3QKICAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygp
OwogICAgIG1fZGVzdGluYXRpb25HcmFwaGljc0NvbnRleHQgPSBudWxscHRyOwogCi0gICAgbV9j
b3BpZWRJbWFnZSA9IG1fY29waWVkQnVmZmVyLT5jb3B5SW1hZ2UobV9jb3BpZWRCdWZmZXItPmZh
c3RDb3B5SW1hZ2VNb2RlKCksIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICBtX2NvcGll
ZEltYWdlID0gbV9jb3BpZWRCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogICAgIHJldHVybiBtX2NvcGllZEltYWdlLmdldCgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDIz
ZDliMzRlODQ4ZjZkMDFkMzRhOWRhZmZiYTMwNTBmYzdhNzEzMTYuLjkwOTMzZTIzYWMwODE4MDMz
Yzc2ZmMzZTI4MjExOTE4MDE0ODZjNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQu
aCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxv
YWRlckNsaWVudC5oIgpAQCAtNjAsNiArNjEsMTAgQEAKICNpbmNsdWRlIDx3dGYvUkFNU2l6ZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAorI2lmIFVTRShDRykKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCiAjaW5jbHVkZSAiQ2FudmFzQ2FwdHVyZU1lZGlhU3RyZWFtVHJhY2suaCIK
ICNpbmNsdWRlICJNZWRpYVN0cmVhbS5oIgpAQCAtMzQ1LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBT
dHJpbmcmIHR5cGUpCiAKICAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNyZWF0ZSgqdGhpcywgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlz
dERyYXdpbmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBv
c2l0aW9uKCk7CkBAIC04MTgsMzkgKzgyMCwyNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50Ojpz
aG91bGRBY2NlbGVyYXRlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENh
bnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxp
c3REcmF3aW5nKQogewotICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rp
c3BsYXlMaXN0RHJhd2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2Fz
dDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlz
dERyYXdpbmcobV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlz
dFJlcGxheSkKIHsKLSAgICBpZiAodHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NE
aXNwbGF5TGlzdFJlcGxheSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5
TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlz
dFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYg
YnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29u
dGV4dCgpLT5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KTsKIH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChE
aXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RB
c1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29u
dGV4dCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3Bs
YXlMaXN0KCkuYXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmlu
ZyBIVE1MQ2FudmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6
OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0
KGZsYWdzKTsKLQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQo
KSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAg
ICAgICAgcmV0dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlz
dCgpLT5hc1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg1LDEx
ICs4NzUsMjcgQEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBj
b25zdAogICAgIGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgp
KSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKLQogICAgIGF1dG8gaG9zdFdpbmRvdyA9
IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgpKSA/IGRvY3Vt
ZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisgICAgCisgICAg
Ly8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNh
bnZhcy4KKyAgICBib29sIHVzZXNEaXNwbGF5TGlzdERyYXdpbmcgPSBtX3VzZXNEaXNwbGF5TGlz
dERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgpLnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5n
RW5hYmxlZCgpKTsKKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIHJl
bW90ZSBkcmF3aW5nIG9uIGNhbnZhcy4KKyAgICBib29sIHVzZXNSZW1vdGVEcmF3aW5nID0gZmFs
c2U7CisKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGU7CisgICAgaWYgKHVzZXNSZW1v
dGVEcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXpl
KCkpID8gUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGU7CisgICAgZWxzZSBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVu
ZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRp
c3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDsKKyAgICBl
bHNlCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVy
aW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgaG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+
ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSk7CisKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYg
bV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcg
cmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGI1Mjg2NDVjNjU4NzRjZDBjYTA5MzQ0NDYx
YjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEyMjk0MTQ5NmJmMzFiY2RkNzljNmJjNWMzOTFhNzhhNDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTE2MSw3ICsxNjEs
NyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKIAotICAg
IGJvb2wgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxi
b29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5IHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJp
bmdDb250ZXh0PiBtX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0lt
YWdlQml0bWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAuY3BwCmluZGV4
IDVmNDlmNzM5YTFmNWMzYmUwZWUxNzFmMzRmOTYzZTAyNjZiYzQ0OTIuLjJiODE5ODllOGZkNjJl
ZmUzNDUzODdhOTAyZmU2OTJiMzA5OTU0ZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSW1hZ2VCaXRtYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXAu
Y3BwCkBAIC02MSw5ICs2MSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFdURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChJbWFnZUJpdG1hcCk7CiAKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotc3RhdGljIFJl
bmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IEFjY2VsZXJhdGVkOworc3RhdGljIFJl
bmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJh
dGVkOwogI2Vsc2UKLXN0YXRpYyBSZW5kZXJpbmdNb2RlIGJ1ZmZlclJlbmRlcmluZ01vZGUgPSBV
bmFjY2VsZXJhdGVkOworc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CiAjZW5kaWYKIAogUmVmPEltYWdlQml0bWFw
PiBJbWFnZUJpdG1hcDo6Y3JlYXRlKEludFNpemUgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zm
c2NyZWVuQ2FudmFzLmNwcAppbmRleCBmNzQ0ODUxMjAwMTU3NWI0YWY0YmJhMjRlYWE1N2FiZTZh
MDY0M2M5Li43NTVmMTFlZjg5ZTExODFiZTA2ZDVlYTJmMDA3ODY5NmUzOWJlNGQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9PZmZzY3JlZW5DYW52YXMuY3BwCkBAIC0xMjYsNyArMTI2LDcgQEAgRXhj
ZXB0aW9uT3I8UmVmUHRyPEltYWdlQml0bWFwPj4gT2Zmc2NyZWVuQ2FudmFzOjp0cmFuc2ZlclRv
SW1hZ2VCaXRtYXAoKQogICAgICAgICAgICAgcmV0dXJuIHsgUmVmUHRyPEltYWdlQml0bWFwPiB7
IG51bGxwdHIgfSB9OwogCiAgICAgICAgIGlmICghbV9oYXNDcmVhdGVkSW1hZ2VCdWZmZXIpCi0g
ICAgICAgICAgICByZXR1cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKCksIFVuYWNjZWxlcmF0ZWQpLCB0cnVlIH0pIH07CisgICAgICAgICAgICByZXR1
cm4geyBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKCksIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpLCB0cnVlIH0pIH07CiAKICAgICAgICAgYXV0byBi
dWZmZXIgPSB0YWtlSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgaWYgKCFidWZmZXIpCkBAIC0yNDMs
NyArMjQzLDcgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNyZWF0ZUltYWdlQnVmZmVyKCkgY29u
c3QKICAgICBpZiAoIXdpZHRoKCkgfHwgIWhlaWdodCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRl
ZCkpOworICAgIHNldEltYWdlQnVmZmVyKEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0YWtlSW1hZ2VCdWZmZXIoKSBjb25zdApAQCAtMjU3LDcg
KzI1Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gT2Zmc2NyZWVuQ2FudmFzOjp0
YWtlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmIChzaXplKCkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUoKSwgVW5hY2NlbGVyYXRlZCkpOworICAgIHJldHVybiBzZXRJbWFnZUJ1
ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCkpOwogfQogCiB2b2lkIE9mZnNjcmVlbkNhbnZhczo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcAppbmRleCA4OWQ4ZjQyNDNiMmI5MmRmYmNiMzJhYTIyMWI3NTNjOTNmMWY1OTQxLi41
YjFiMDdlZjc3Mzg0MzM2MDhlODgyZmI5ZTNiYTlhMmIxYTRjOWMxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlLmNwcApAQCAtMTgwNiw3ICsxODA2LDcgQEAgdGVtcGxhdGU8Y2xhc3MgVD4gSW50UmVjdCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjYWxjdWxhdGVDb21wb3NpdGluZ0J1ZmYKIAog
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpjcmVhdGVDb21wb3NpdGluZ0J1ZmZlcihjb25zdCBJbnRSZWN0JiBidWZmZXJSZWN0KQogewot
ICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBpc0FjY2Vs
ZXJhdGVkKCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0ZWQpOworICAgIHJldHVybiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGJ1ZmZlclJlY3Quc2l6ZSgpLCBpc0FjY2VsZXJhdGVkKCkgPyBSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNvbXBvc2l0ZUJ1ZmZlcihJ
bWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBJbnRSZWN0JiBidWZmZXJSZWN0LCBDb21wb3NpdGVP
cGVyYXRvciBvcCkKQEAgLTE5OTAsNyArMTk5MCw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxDYW52
YXNQYXR0ZXJuPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3JlYXRlUGF0dGVybihI
CiAgICAgICAgIHJldHVybiBSZWZQdHI8Q2FudmFzUGF0dGVybj4geyBDYW52YXNQYXR0ZXJuOjpj
cmVhdGUoQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKG5hdGl2ZUltYWdlKSksIHJlcGVhdFgs
IHJlcGVhdFksIG9yaWdpbkNsZWFuKSB9OwogI2VuZGlmCiAKLSAgICBhdXRvIGltYWdlQnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKHZpZGVvRWxlbWVudCksIGRyYXdpbmdDb250ZXh0
KCkgPyBkcmF3aW5nQ29udGV4dCgpLT5yZW5kZXJpbmdNb2RlKCkgOiBBY2NlbGVyYXRlZCk7Cisg
ICAgYXV0byBpbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSh2aWRlb0VsZW1l
bnQpLCBkcmF3aW5nQ29udGV4dCgpID8gZHJhd2luZ0NvbnRleHQoKS0+cmVuZGVyaW5nTW9kZSgp
IDogUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpOwogICAgIGlmICghaW1hZ2VCdWZmZXIpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0yMDc1LDIxICsyMDc1LDYgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29s
IHRyYWNrc0Rpc3BsYXkKICAgICAgICAgY29udGV4dERpc3BsYXlMaXN0TWFwKCkucmVtb3ZlKHRo
aXMpOwogfQogCi1TdHJpbmcgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6ZGlzcGxheUxp
c3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBjb25zdAotewotICAgIGlm
ICghbV9yZWNvcmRpbmdDb250ZXh0KQotICAgICAgICByZXR1cm4geyB9OwotICAgIHJldHVybiBt
X3JlY29yZGluZ0NvbnRleHQtPmRpc3BsYXlMaXN0LmFzVGV4dChmbGFncyk7Ci19Ci0KLVN0cmlu
ZyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChE
aXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0Ci17Ci0gICAgYXV0byogZGlzcGxh
eUxpc3QgPSBjb250ZXh0RGlzcGxheUxpc3RNYXAoKS5nZXQodGhpcyk7Ci0gICAgaWYgKCFkaXNw
bGF5TGlzdCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXR1cm4gZGlzcGxheUxpc3QtPmFz
VGV4dChmbGFncyk7Ci19Ci0KIGNvbnN0IFZlY3RvcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRC
YXNlOjpTdGF0ZSwgMT4mIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnN0YXRlU3RhY2so
KQogewogICAgIHJlYWxpemVTYXZlcygpOwpAQCAtMjE1OSwxMCArMjE0NCwxMCBAQCBFeGNlcHRp
b25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Y3Jl
YXRlSW1hZ2VEYXRhKGZsbwogCiBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKGZsb2F0IHN4LCBmbG9hdCBzeSwg
ZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewotICAgIHJldHVybiBnZXRJbWFnZURhdGEoSW1h
Z2VCdWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtLCBzeCwgc3ksIHN3LCBzaCk7CisgICAg
cmV0dXJuIGdldEltYWdlRGF0YShDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsLCBzeCwgc3ksIHN3
LCBzaCk7CiB9CiAKLUV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQg
c2gpIGNvbnN0CitFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0CiB7CiAg
ICAgaWYgKCFjYW52YXNCYXNlKCkub3JpZ2luQ2xlYW4oKSkgewogICAgICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBjb25zb2xlTWVzc2FnZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1Q
TCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzIGJlY2F1c2UgdGhlIGNhbnZh
cyBoYXMgYmVlbiB0YWludGVkIGJ5IGNyb3NzLW9yaWdpbiBkYXRhLiIpKTsKQEAgLTIxOTYsNyAr
MjE4MSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRCYXNlOjpnZXRJbWFnZURhdGEoSW1hZ2VCCiAgICAgaWYgKCFidWZmZXIpCiAgICAg
ICAgIHJldHVybiBjcmVhdGVFbXB0eUltYWdlRGF0YShpbWFnZURhdGFSZWN0LnNpemUoKSk7CiAK
LSAgICBhdXRvIGJ5dGVBcnJheSA9IGJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGlt
YWdlRGF0YVJlY3QsIG51bGxwdHIsIGNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8gYnl0ZUFy
cmF5ID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0LCBjb29yZGluYXRlU3lzdGVtKTsKICAgICBpZiAoIWJ5
dGVBcnJheSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnNvbGVNZXNzYWdlOwogICAgICAg
ICBjb25zb2xlTWVzc2FnZS5hcHBlbmRMaXRlcmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRhdGEg
ZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiKTsKQEAgLTIyMTgsMTAgKzIyMDMsMTAg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VE
YXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0
eUhlaWdodCkKIHsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2ljYWxD
b29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0
eUhlaWdodCk7CisgICAgcHV0SW1hZ2VEYXRhKGRhdGEsIENvb3JkaW5hdGVTeXN0ZW06OkxvZ2lj
YWwsIGR4LCBkeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VE
YXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
LCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBk
aXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgQ29vcmRpbmF0ZVN5c3RlbSBj
b29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQg
ZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCkKIHsKICAgICBJbWFn
ZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzQmFzZSgpLmJ1ZmZlcigpOwogICAgIGlmICghYnVmZmVy
KQpAQCAtMjI0NSw3ICsyMjMwLDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
OjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZlcjo6Q28KICAgICBJbnRT
aXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCksIHN0YXRpY19jYXN0PGludD4oZHkp
KTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCk7CiAg
ICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09IEltYWdlQnVmZmVyOjpMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZlci0+bG9naWNhbFNpemUoKSA6IGJ1ZmZlci0+aW50ZXJu
YWxTaXplKCkpKTsKKyAgICAKKyAgICBkZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBjb29yZGluYXRlU3lzdGVtID09IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwgPyBidWZm
ZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVybmFsU2l6ZSgpKSk7CiAgICAgaWYgKGRl
c3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVj
dChkZXN0UmVjdCk7CkBAIC0yMjUzLDcgKzIyMzksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpD
bwogICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBk
YXRhLmhlaWdodCgpKSk7CiAKICAgICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAg
ICBidWZmZXItPnB1dEJ5dGVBcnJheSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgSW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkp
LCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7Cisg
ICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgKmRhdGEuZGF0YSgpLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWln
aHQoKSksIHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVt
KTsKIAogICAgIGRpZERyYXcoZGVzdFJlY3QsIENhbnZhc0RpZERyYXdBcHBseU5vbmUpOyAvLyBp
Z25vcmUgdHJhbnNmb3JtLCBzaGFkb3cgYW5kIGNsaXAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaAppbmRl
eCAzZGZjOWM5ZmNlNTJiZTg4OTJiZjQ5OGFlNjcyMjE4N2YxYmVlOTFkLi45NjQwMGQxYWY1MDBk
NThlMWRkOWJkMTExNzQ4MjE0MWE3MmJiNWIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCkBAIC0yMjIs
OSArMjIyLDYgQEAgcHVibGljOgogICAgIGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoKSBj
b25zdCB7IHJldHVybiBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OyB9CiAgICAgdm9pZCBzZXRU
cmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sKTsKIAotICAgIFN0cmluZyBkaXNwbGF5TGlzdEFz
VGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MpIGNvbnN0OwotICAgIFN0cmluZyByZXBsYXlE
aXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MpIGNvbnN0OwotCiAgICAg
dXNpbmcgRGlyZWN0aW9uID0gQ2FudmFzRGlyZWN0aW9uOwogCiAgICAgY2xhc3MgRm9udFByb3h5
IDogcHVibGljIEZvbnRTZWxlY3RvckNsaWVudCB7CkBAIC0zNzEsOCArMzY4LDggQEAgcHJvdGVj
dGVkOgogCiAgICAgdGVtcGxhdGU8Y2xhc3MgVD4gdm9pZCBmdWxsQ2FudmFzQ29tcG9zaXRlZERy
YXdJbWFnZShUJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IpOwogCi0gICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdl
RGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5LCBm
bG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OwotICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0
YSYsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZs
b2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhl
aWdodCk7CisgICAgRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IGdldEltYWdlRGF0YShD
b29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkg
Y29uc3Q7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgQ29vcmRpbmF0ZVN5c3Rl
bSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQg
ZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpOwogCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVk
KCkgY29uc3Qgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0ltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9JbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDE0ZWEzN2Q4ZDdl
YWZiMDFiNWM0Y2UxOWViZTc2YzUxOGNmY2Q0YTguLmI1MWI0ZGJmMTNlZTUwNmViOTQ5OGM0M2Vm
NDVjOTQ0ZGQ3M2UwYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0lt
YWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzYsOSArMzYsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCaXRt
YXBSZW5kZXJpbmdDb250ZXh0KTsKIAogI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi1zdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gQWNjZWxlcmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5n
TW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7CiAj
ZWxzZQotc3RhdGljIFJlbmRlcmluZ01vZGUgYnVmZmVyUmVuZGVyaW5nTW9kZSA9IFVuYWNjZWxl
cmF0ZWQ7CitzdGF0aWMgUmVuZGVyaW5nTW9kZSBidWZmZXJSZW5kZXJpbmdNb2RlID0gUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKICNlbmRpZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0PiBJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0
ZShDYW52YXNCYXNlJiBjYW52YXMsIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dFNldHRpbmdz
JiYgc2V0dGluZ3MpCkBAIC02OSw3ICs2OSw3IEBAIEhUTUxDYW52YXNFbGVtZW50KiBJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OmNhbnZhcygpIGNvbnN0CiAKIGJvb2wgSW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0Ojppc0FjY2VsZXJhdGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYnVm
ZmVyUmVuZGVyaW5nTW9kZSA9PSBBY2NlbGVyYXRlZDsKKyAgICByZXR1cm4gYnVmZmVyUmVuZGVy
aW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKIH0KIAogdm9pZCBJbWFnZUJp
dG1hcFJlbmRlcmluZ0NvbnRleHQ6OnNldE91dHB1dEJpdG1hcChSZWZQdHI8SW1hZ2VCaXRtYXA+
IGltYWdlQml0bWFwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA2N2NhNTNjNDdlZWEwMDhiZWEzZjYx
ZGY5NmU3Mzg5Y2FlY2E2ZGVhLi42OTIyMDFhYzZiNzUwYjIwZjIzZDU4OTc1YmZmNjA1YjA0NDgw
ZDU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtMzk4Miw3ICszOTgyLDcgQEAgRXhjZXB0aW9uT3I8
dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQ0dMZW51bSB0
YXJnZXQsIEdDR0wKICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBidWZmZXItPmNvcHlJbWFnZShJbWFn
ZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7CisgICAgICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSBidWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlm
IChpbWFnZSkKICAgICAgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhv
ZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4
dEdMOjpET01Tb3VyY2U6OkltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEpOwogICAgICAgICByZXR1cm4geyB9OwpAQCAtNDEwNCw3ICs0MTA0LDcgQEAgRXhjZXB0
aW9uT3I8dm9pZD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQ0dM
ZW51bSB0YXJnZXQsIEdDR0wKICAgICAgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmMoInRleFN1Yklt
YWdlMkQiLCBUZXhTdWJJbWFnZSwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxGb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdo
dCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQogICAgICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1h
Z2UodmlkZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBE
b250Q29weUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBy
ZXR1cm4geyB9OwogICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHRH
TDo6RE9NU291cmNlOjpWaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhKTsKQEAgLTQ1NDMsNyArNDU0Myw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50CiAgICAg
ICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dEdMOjpVTlNJR05FRF9CWVRFKSB7CiAg
ICAgICAgICAgICBhdXRvIHRleHR1cmVJbnRlcm5hbEZvcm1hdCA9IHRleHR1cmUtPmdldEludGVy
bmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwogICAgICAgICAgICAgaWYgKGlzUkdCRm9ybWF0KHRl
eHR1cmVJbnRlcm5hbEZvcm1hdCkgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1f
Y29udGV4dC5nZXQoKSwgdGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQs
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlLT5v
YmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBh
Y2tGbGlwWSkpIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBiaXRtYXAtPndpZHRoKCksIGJpdG1hcC0+aGVp
Z2h0KCksIHR5cGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAg
ICAgICAgIH0KQEAgLTQ1NTEsNyArNDU1MSw3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0NHTGVudW0gdGFyZ2V0LCBHQ0dMaW50CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgcHVyZSBTVyBwYXRoLgotICAgICAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5
SW1hZ2VNb2RlKCkpOworICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gYnVmZmVyLT5jb3B5
SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwogICAgICAgICBpZiAoaW1hZ2UpCiAgICAgICAg
ICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0
LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJjZTo6SW1hZ2Us
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgICAgIHJldHVy
biB7IH07CkBAIC00NjIwLDcgKzQ2MjAsNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDR0xlbnVtIHRhcmdldCwgR0NHTGludAogICAg
ICAgICAgICAgYXV0byB0ZXh0dXJlSW50ZXJuYWxGb3JtYXQgPSB0ZXh0dXJlLT5nZXRJbnRlcm5h
bEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKICAgICAgICAgICAgIGlmIChpc1JHQkZvcm1hdCh0ZXh0
dXJlSW50ZXJuYWxGb3JtYXQpIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKSB7
CiAgICAgICAgICAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4
dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0YXJnZXQsIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5h
bGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAg
ICAgICAgICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUo
dGFyZ2V0LCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKICAgICAgICAgICAgICAgICAgICAgdGV4dHVy
ZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndp
ZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOwogICAgICAgICAgICAgICAgICAgICByZXR1
cm4geyB9OwogICAgICAgICAgICAgICAgIH0KQEAgLTQ2NjUsNyArNDY2NSw3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0NHTGVudW0g
dGFyZ2V0LCBHQ0dMaW50CiAgICAgICAgIH0KIAogICAgICAgICAvLyBOb3JtYWwgcHVyZSBTVyBw
YXRoLgotICAgICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2Uodmlk
ZW8uZ2V0KCksIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKKyAgICAgICAgUmVm
UHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLmdldCgpLCBEb250Q29w
eUJhY2tpbmdTdG9yZSk7CiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICByZXR1cm4g
eyB9OwogICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0R0w6OkRPTVNvdXJj
ZTo6VmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSk7CkBAIC00
NjkwLDcgKzQ2OTAsNyBAQCBSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UmIGltYWdlLCBpbnQgdwogICAgIEZsb2F0UmVjdCBz
cmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2Uuc2l6ZSgpKTsKICAgICBGbG9hdFJlY3QgZGVzdFJl
Y3QoRmxvYXRQb2ludCgpLCBzaXplKTsKICAgICBidWYtPmNvbnRleHQoKS5kcmF3SW1hZ2UoaW1h
Z2UsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoSW1hZ2VC
dWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSk7CiB9CiAKICNpZiBFTkFCTEUoVklERU8pCkBAIC02Mzg2LDcg
KzYzODYsNyBAQCBJbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1h
Z2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29uc3QgSQogICAgIH0KIAogICAgIC8vIEZJWE1F
ICgxNDk0MjMpOiBTaG91bGQgdGhpcyBJbWFnZUJ1ZmZlciBiZSB1bmNvbmRpdGlvbmFsbHkgdW5h
Y2NlbGVyYXRlZD8KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIFVuYWNjZWxlcmF0ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCF0ZW1wKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICBBU1NFUlQobV9idWZmZXJzLnNpemUoKSA+IDApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuY3BwCmluZGV4IDM0YmEz
NzJkNDkxNDNjZmUyOTNhN2MyYTg5NDVlNDBmMzUxYjEwNTEuLmY2YmJmYWRkMzc3YmI1MWIwNjBh
YTBiMzNmMGI2ODBmMTEyYzk5NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hh
ZG93L01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAKQEAgLTE0NDcsNyArMTQ0Nyw3IEBAIFJlZlB0
cjxJbWFnZT4gTWVkaWFDb250cm9sVGV4dFRyYWNrQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRlVGV4
dFRyYWNrUmVwcmVzZW50YXRpCiAgICAgSW50UmVjdCBwYWludGluZ1JlY3QgPSBJbnRSZWN0KElu
dFBvaW50KCksIGxheWVyLT5zaXplKCkpOwogCiAgICAgLy8gRklYTUUgKDE0OTQyMik6IFRoaXMg
YnVmZmVyIHNob3VsZCBub3QgYmUgdW5jb25kaXRpb25hbGx5IHVuYWNjZWxlcmF0ZWQuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShw
YWludGluZ1JlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkLCBkZXZpY2VTY2FsZUZhY3RvcikpOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKEltYWdlQnVmZmVyOjpjcmVh
dGUocGFpbnRpbmdSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgZGV2
aWNlU2NhbGVGYWN0b3IpKTsKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcAppbmRleCBmNTg2Y2NiMTc4Yzc2ZTU3OGMyMTMwODQ2
YTFmYmZhN2VmZmQ3YWY1Li42MzdlNzdjNWZlZGFiMzNjNWJkYjgwYzZmZDBlMTFhYjdmNGE4MjE3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9DaHJvbWUuY3BwCkBAIC00OTQsNiArNDk0LDEzIEBAIHZvaWQgQ2hyb21l
OjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92
ZXMpCiAgICAgbV9jbGllbnQuc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGhpZGRlblVu
dGlsTW91c2VNb3Zlcyk7CiB9CiAKK1JlbmRlcmluZ0JhY2tlbmQqIENocm9tZTo6c2hhcmVkUmVu
ZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tlbmQpCisg
ICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZCA9IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kLmdldCgpOworfQorCiBQbGF0Zm9y
bURpc3BsYXlJRCBDaHJvbWU6OmRpc3BsYXlJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlz
cGxheUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5kZXggNjYyYmUwMGZhMGFiYWU4YjdiYTdkNjY4ZDQ0
NzBlYzUxMzYxYWY0OS4uNDY4YzE3MDA4YWFmYTQ3ZmFhMjM3Yzc0ZmY0OGY0MDIzMGRkYmFlNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0Nocm9tZS5oCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dEN1cnNvcihjb25zdCBDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRl
blVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmQq
IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBvdmVycmlkZTsKKyAgICAKICAgICB2b2lk
IHNjaGVkdWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAKICAgICBQbGF0Zm9ybURpc3BsYXlJ
RCBkaXNwbGF5SUQoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE5NSw2ICsxOTcsNyBAQCBwcml2YXRl
OgogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgYm9vbCBtX2lzRGlzcGF0Y2hWaWV3cG9y
dERhdGFEaWRDaGFuZ2VTdXBwcmVzc2VkIHsgZmFsc2UgfTsKICNlbmRpZgorICAgIG11dGFibGUg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVuZGVyaW5nQmFja2VuZDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmlu
ZGV4IDYyNjE3Zjc4ZjNlMmYwNDc0OGFhNThhZGFlYjhmYTMwYmQ3MTJhZDQuLmM5OWQzNmFmZmFh
ODY1YTllNmE5NWRjNTM1YjQ4NzQ4YzdlZTNlMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGll
bnQuaApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVyRW1iZWRkZWRPYmpl
Y3QuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlw
ZXMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlYXJj
aFBvcHVwTWVudS5oIgpAQCAtMzAzLDYgKzMwNCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJl
ZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQ
bGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQogI2VuZGlmCiAKKyAg
ICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJp
bmdCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAgLy8gUGFzcyBudWxs
cHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3QgbGF5ZXIuCiAgICAg
dmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXll
ciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlHcmFwaGljc0xheWVy
KEdyYXBoaWNzTGF5ZXIqKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lU25hcHNob3R0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRp
bmcuY3BwCmluZGV4IDBhNDRjMmZhMWEwOTQ5N2NmZGY1NTg4ODMyZmZkZmYxMDIzMzMwZTEuLmUy
NGQ5MmU2ZjNlNjFkMzhhOWIyNDQ4NWY0ZDEzZGU1MGU1MzNhMmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVTbmFwc2hvdHRpbmcuY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdEZyYW1lUmVjdFdpdGhDbGlwKEZyYW1lJiBmcmFt
ZSwgY29uc3QgSW50UmUKICAgICBpZiAob3B0aW9ucyAmIFNuYXBzaG90T3B0aW9uc1BhaW50V2l0
aEludGVncmFsU2NhbGVGYWN0b3IpCiAgICAgICAgIHNjYWxlRmFjdG9yID0gY2VpbGYoc2NhbGVG
YWN0b3IpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGltYWdlUmVjdC5zaXplKCksIFVuYWNjZWxlcmF0ZWQsIHNjYWxlRmFj
dG9yKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoaW1hZ2VSZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZCwgc2NhbGVGYWN0b3IpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICBidWZmZXItPmNvbnRleHQoKS50cmFuc2xhdGUoLWltYWdlUmVjdC54KCksIC1pbWFn
ZVJlY3QueSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVD
bGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5k
ZXggNGMzNTMzMDkxNjE5ZGM2NDNmODcyOTA5Y2I3MWY3ODI4ZWY4NWJiYy4uMjEwN2E5ZTFlOTlj
ZjM1MWQ5ZTYxNjY4MDVjNGE1NjMzYWU0N2RhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
Q29uc29sZUNsaWVudC5jcHAKQEAgLTM3Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xp
ZW50OjpzY3JlZW5zaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3Qs
IFJlZgogICAgICAgICAgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgp
OwogICAgICAgICAgICAgICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzb3VyY2VTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7
Ci0gICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0
YS0+ZGF0YSgpLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJj
ZVNpemUsIHNvdXJjZVJlY3QsIEludFBvaW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFn
ZUJ1ZmZlci0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCwgKmltYWdlRGF0YS0+ZGF0YSgpLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0KTsKICAgICAg
ICAgICAgICAgICAgICAgZGF0YVVSTCA9IGltYWdlQnVmZmVyLT50b0RhdGFVUkwoImltYWdlL3Bu
ZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2Fpcm8uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5jbWFrZQppbmRl
eCA5YTNhOGJmOTQzYWQ2NTg2ZGE0M2NlZDBkYTdlNjNmMDU1YWI5YTVkLi4xMmEyZDc0ZmZiZThm
Y2M3M2YwNjhiYmZjYmEwMDU0MDc3NTcxNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWlyby5j
bWFrZQpAQCAtMTMsNyArMTMsMTAgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1F
V09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmgKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uaAogKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vSG9zdFdpbmRvdy5oCmluZGV4IDJjZmVjYWRjMjRkOTgyYTg2MTYzNzRiNzZhMGU0
ZmIwZmZmN2E5ZDQuLmY1ZjIxN2NjZDg0MDYwODAwMjU1YzIwM2QyMjE3Y2FlY2UwY2UyNTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMywxNCArMjMsMTQgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSG9zdFdpbmRvd19oCi0jZGVmaW5lIEhvc3RXaW5k
b3dfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJXaWRnZXQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBDdXJzb3I7CitjbGFzcyBSZW5kZXJpbmdCYWNrZW5kOwogCiBjbGFz
cyBIb3N0V2luZG93IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIb3N0V2luZG93KTsgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NCw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgPSAwOwogCisg
ICAgdmlydHVhbCBSZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29u
c3QgPSAwOworICAgIAogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUFuaW1hdGlvbigpID0gMDsK
IAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgPSAwOwpA
QCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fp
cm8udHh0CmluZGV4IDQyMWRmYmQ5NTc1NGM0NjI3NTdiNzhkYmZhNDEwMjU0MzJhZjBiN2QuLjZm
YTRmZmUxNDYwZWE3MTM4MjFiY2EzNjIyNmQyNmE5N2U1ZDk5ODkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyArMzAsMTEgQEAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dy
YXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8u
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAK
K3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
LmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxp
dGllc0NhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW50UmVjdENhaXJvLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWlyby5jcHAKIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0FscGhhUHJlbXVsdGlwbGljYXRpb24uaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
ZDFjYWVmODU0MWRlZTA2MmJmZTA1NDE2Y2RhMmYyYTdmNzkyNmUyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bi5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxpY2F0aW9uIDog
dWludDhfdCB7CisgICAgUHJlbXVsdGlwbGllZCwKKyAgICBVbnByZW11bHRpcGxpZWQKK307CisK
K1dFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJl
YW0mLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhYWI0Njg2NzY4ZjFhMjgyZDU4ODFjOTM5Nzk0
NmQ1YmEyMDA2OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJQaHlzaWNh
bEltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFja2VuZFR5cGU+CitjbGFzcyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIDogcHVibGljIFBo
eXNpY2FsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+ICwgcHVibGljIERpc3BsYXlMaXN0OjpEcmF3
aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBQaHlzaWNh
bEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VQaHlzaWNhbEltYWdlQnVm
ZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93LCBzaXplKTsKKyAgICB9CisKKyAgICBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRh
QmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEJhc2VQaHlzaWNhbElt
YWdlQnVmZmVyKFdURk1vdmUoZGF0YUJhY2tlbmQpKQorICAgICAgICAsIERpc3BsYXlMaXN0OjpE
cmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBEaXNwbGF5TGlzdDo6RHJh
d2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKwor
ICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICByZXR1cm4gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCBmNTg2ZGQ0YjJhZjkxZjQ1NjU1MzVhNzAyOTM5MjNhZjJiYWFk
YmEyLi4zNWJkNThjM2QxMmZmODRjMGU2NjQyZjgxODI3MDk5Y2U4MzdlMjgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAt
MzUwLDcgKzM1MCw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldElzQWNj
ZWxlcmF0ZWRDb250ZXh0KGJvb2wpOwogI2VuZGlmCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkQ29u
dGV4dCgpIGNvbnN0OwotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIGlzQWNjZWxlcmF0ZWRDb250ZXh0KCkgPyBBY2NlbGVyYXRlZCA6IFVuYWNjZWxlcmF0
ZWQ7IH0KKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUoKSBjb25zdCB7IHJldHVybiBp
c0FjY2VsZXJhdGVkQ29udGV4dCgpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5k
ZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOyB9CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNh
dmUoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3RvcmUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKaW5kZXggNDU4YWU3
MmYyYWUwMjU2MjQ3NjhlODc5ZGJkNDk2OTY0YjQ5MWIxOC4uMDBiZTBmZWEwNjA1NWNhMzFiMmM4
ODc0ZGQzNzRlZWExZDQyODQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5jcHAKQEAgLTI4LDYgKzI4LDggQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAKKyNpbmNsdWRlICJBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmgiCisKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
VHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMu
aAppbmRleCBjZWVhMWRhNDBlYjMyZmY3OGExZTc1ZTE3YmZlMDA5MjAxYjc2ZjEyLi4yNmExMmRl
M2JlNGFjNmI4ODQzNjRjNTU0Mzk3ZjdmNzFjNzhhYTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgogI2luY2x1ZGUgIldp
bmRSdWxlLmgiCiAjaW5jbHVkZSA8d3RmL0VudW1UcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgpAQCAtMTIyLDE3ICsxMjMsNiBAQCBlbnVtIFRleHRBbGlnbiB7CiAgICAgUmlnaHRU
ZXh0QWxpZ24KIH07CiAKLWVudW0gUmVuZGVyaW5nTW9kZSB7Ci0gICAgVW5hY2NlbGVyYXRlZCwK
LSAgICBVbmFjY2VsZXJhdGVkTm9uUGxhdGZvcm1CdWZmZXIsIC8vIFVzZSBwbGFpbiBtZW1vcnkg
YWxsb2NhdGlvbiByYXRoZXIgdGhhbiBwbGF0Zm9ybSBBUEkgdG8gYWxsb2NhdGUgYmFja2luZyBz
dG9yZS4KLSAgICBBY2NlbGVyYXRlZAotfTsKLQotZW51bSBjbGFzcyBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHsKLSAgICBQcmVtdWx0aXBsaWVkLAotICAgIFVucHJlbXVsdGlwbGllZAotfTsKLQog
U3RyaW5nIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvciwg
V2ViQ29yZTo6QmxlbmRNb2RlKTsKIFN0cmluZyBibGVuZE1vZGVOYW1lKFdlYkNvcmU6OkJsZW5k
TW9kZSk7CiBib29sIHBhcnNlQmxlbmRNb2RlKGNvbnN0IFN0cmluZyYsIFdlYkNvcmU6OkJsZW5k
TW9kZSYpOwpAQCAtMTQzLDcgKzEzMyw2IEBAIFdFQkNPUkVfRVhQT1JUIFdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBXZWJDb3JlOjpDb21wb3NpdGVPCiBXRUJD
T1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwg
V2luZFJ1bGUpOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdU
Rjo6VGV4dFN0cmVhbSYsIExpbmVDYXApOwogV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIExpbmVKb2luKTsKLVdFQkNPUkVfRVhQT1JU
IFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAKaW5kZXggYzAxMjYzNzBj
Yjg2NTkyN2EzMmJmMTFmNjE0ODZkNzFhZjdiNDc1OC4uNGUyYmU3MWM3NDFjNTVmNTZjMGFkMDQ2
YTc5N2U1MGEwOTcxODhiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDM4ICsyOCw0NCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAKLSNpbmNsdWRlICJD
b2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkTGVuZ3RoID0g
NDA5NjsKLXN0YXRpYyBjb25zdCBmbG9hdCBNYXhDbGFtcGVkQXJlYSA9IE1heENsYW1wZWRMZW5n
dGggKiBNYXhDbGFtcGVkTGVuZ3RoOworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5k
ZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFj
a2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZl
cihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RX
aW5kb3cpOworfQogCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXIpOwor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICByZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNw
YWNlOjpTUkdCLCBjb250ZXh0KTsKK30KIAotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKSk7Ci0gICAg
aWYgKCFzdWNjZXNzKQorICAgIGlmIChzaXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1
dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzY2Fs
ZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcg
c2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5j
b250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZl
cjsKIH0KIAotI2lmIFVTRShESVJFQ1QyRCkKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6
OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3csIHRhcmdldENvbnRl
eHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIHJldHVybiBidWZmZXI7CisgICAgcmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJl
bmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgor
CitzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQwOTY7CitzdGF0aWMgY29u
c3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3RoICogTWF4Q2xhbXBlZExl
bmd0aDsKIAogYm9vbCBJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRT
aXplJiBzaXplKQogewpAQCAtMTA1LDk3ICsxMTEsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVy
OjpjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVj
dChyZWN0LmxvY2F0aW9uKCksIGNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAh
VVNFKENHKSAmJiAhVVNFKENBSVJPKQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JH
UkFEYXRhKCkgY29uc3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVy
IGJhY2tlbmRzLgotICAgIHJldHVybiB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8
fCBVU0UoRElSRUNUMkQpKQotCi1GbG9hdFNpemUgSW1hZ2VCdWZmZXI6OnNpemVGb3JEZXN0aW5h
dGlvblNpemUoRmxvYXRTaXplIHNpemUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHNpemU7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xv
clNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCi17Ci0gICAgaWYgKHNyY0NvbG9yU3Bh
Y2UgPT0gZHN0Q29sb3JTcGFjZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gb25seSBzUkdC
IDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50Ci0gICAgaWYgKChzcmND
b2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENv
bG9yU3BhY2U6OlNSR0IpCi0gICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6
OkxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IpIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5l
YXJSZ2JMVVQgPSBbXSB7Ci0gICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJy
YXk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAg
ICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAg
Y29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAg
ICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0g
ICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOwotICAgIH0g
ZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpTUkdCKSB7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gZGV2aWNlUmdiTFVUPSBbXSB7Ci0g
ICAgICAgICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7Ci0gICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBmbG9h
dCBjb2xvciA9IGkgLyAyNTUuMGY7Ci0gICAgICAgICAgICAgICAgY29sb3IgPSBsaW5lYXJUb1NS
R0JDb2xvckNvbXBvbmVudChjb2xvcik7Ci0gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0
aWNfY2FzdDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIGFycmF5OwotICAgICAgICB9KCk7Ci0gICAgICAgIHBsYXRmb3JtVHJh
bnNmb3JtQ29sb3JTcGFjZShkZXZpY2VSZ2JMVVQpOwotICAgIH0KLX0KLQotI2VuZGlmIC8vIFVT
RShDRykKLQotaW5saW5lIHZvaWQgSW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCkKLXsKLSAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQoKSwgaW50ZXJu
YWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldFVubXVsdGlwbGllZEltYWdl
RGF0YShsdW1pbmFuY2VSZWN0KTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gc3JjUGl4ZWxBcnJh
eS0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBwaXhlbE9mZnNldCA9IDA7IHBpeGVsT2Zm
c2V0IDwgcGl4ZWxBcnJheUxlbmd0aDsgcGl4ZWxPZmZzZXQgKz0gNCkgewotICAgICAgICB1aW50
OF90IGEgPSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMyk7Ci0gICAgICAgIGlm
ICghYSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB1aW50OF90IHIgPSBzcmNQaXhl
bEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0KTsKLSAgICAgICAgdWludDhfdCBnID0gc3JjUGl4ZWxB
cnJheS0+aXRlbShwaXhlbE9mZnNldCArIDEpOwotICAgICAgICB1aW50OF90IGIgPSBzcmNQaXhl
bEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMik7Ci0gICAgICAgIAotICAgICAgICBkb3VibGUg
bHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3VibGUp
YSAvIDI1NS4wKTsKLSAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsgMywg
bHVtYSk7Ci0gICAgfQotICAgIHB1dEJ5dGVBcnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsdW1pbmFuY2VSZWN0LnNpemUoKSwgbHVt
aW5hbmNlUmVjdCwgSW50UG9pbnQoKSk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmNvbnZlcnRU
b0x1bWluYW5jZU1hc2soKQotewotICAgIC8vIEFkZCBwbGF0Zm9ybSBzcGVjaWZpYyBmdW5jdGlv
bnMgd2l0aCBwbGF0Zm9ybUNvbnZlcnRUb0x1bWluYW5jZU1hc2sgaGVyZSBsYXRlci4KLSAgICBn
ZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpOwotfQotCi0jaWYgIVVTRShDQUlSTykKLVBs
YXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xl
bnVtLCBib29sLCBib29sKQorSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNp
emUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEVubGFyZ2UgdGhlIGJ1ZmZlciBzaXplIGlm
IHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28gd2UgbmVlZCBhIGhpZ2hl
cgorICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVuaXQuCisgICAgcmV0dXJu
IGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3RvcigpKTsKIH0KLSNlbmRp
ZgogCiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRv
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CkBAIC0yMDQsNjMgKzEyNSwyNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjb3B5UmVjdFRvQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdAogCiAgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZm
ZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKHJlY3Quc2l6ZSgpLCBjb250ZXh0KTsKIAotICAgIGF1
dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6
ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVmZmVyKCp0
aGlzLCAtcmVjdC5sb2NhdGlvbigpKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVy
Ojpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLQotICAgIGF1dG8gYnVmZmVy
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29s
b3JTcGFjZSwgY29udGV4dCk7Ci0gICAgaWYgKCFidWZmZXIpCisgICAgYXV0byBpbWFnZUJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNv
bG9yU3BhY2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Ig
b24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2Nh
bGVkU2l6ZSAvIHNpemUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotI2lmIFVTRShESVJFQ1Qy
RCkKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5nTW9kZSgpLCAmY29u
dGV4dCwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKLSNlbHNlCi0gICAgcmV0dXJuIGNy
ZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlKTsKLSNlbmRpZgotfQotCi1JbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKLXsKLSAgICAvLyBFbmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdz
IHRyYW5zZm9ybSBpcyBzY2FsaW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKLSAgICAvLyByZXNv
bHV0aW9uIHRoYW4gb25lIHBpeGVsIHBlciB1bml0LgotICAgIHJldHVybiBleHBhbmRlZEludFNp
emUoc2l6ZSAqIGNvbnRleHQuc2NhbGVGYWN0b3IoKSk7CisgICAgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKS5kcmF3SW1hZ2VCdWZmZXIoKnRoaXMsIC1yZWN0LmxvY2F0aW9uKCkpOworICAgIHJldHVy
biBpbWFnZUJ1ZmZlcjsKIH0KIAotYm9vbCBJbWFnZUJ1ZmZlcjo6aXNDb21wYXRpYmxlV2l0aENv
bnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KSBjb25zdAorTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlcikKIHsKLSAgICByZXR1cm4gYXJlRXNzZW50aWFsbHlFcXVhbChj
b250ZXh0LnNjYWxlRmFjdG9yKCksIHRoaXMtPmNvbnRleHQoKS5zY2FsZUZhY3RvcigpKTsKKyAg
ICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKIH0KIAotI2lmICFV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6ZV90IEltYWdlQnVmZmVyOjpt
ZW1vcnlDb3N0KCkgY29uc3QKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1h
Z2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKIHsKLSAgICAvLyBtZW1vcnlDb3N0KCkgbWF5IGJl
IGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJl
IGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8g
SXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRvZXNuJ3QgZG8g
YW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRo
KCkgKiBpbnRlcm5hbFNpemUoKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNp
bmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVy
OjpleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1
bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAg
cmV0dXJuIDA7CisgICAgaW1hZ2VCdWZmZXItPmRyYXdDb25zdW1pbmcoY29udGV4dCwgZGVzdFJl
Y3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQotI2VuZGlmCiAKLX0KK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5o
CmluZGV4IDNiZGVlNGVlMDBlZDE3YWUzNDNiMmY2YThkZGQwMDkzODljMmU2YmYuLmM2MGI3NWQ0
ZmJmYmE1ZDJiZDQ1MGIxM2E3NTMxMzBmYzZiY2NhZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjcsMTcwICsy
Nyw4MSBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgot
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCisj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCiAj
aW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+Ci0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0
R0xPcGVuR0w7Ci1jbGFzcyBJbWFnZTsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFBvaW50
OwotY2xhc3MgSW50UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7Ci0KLWVudW0gQmFja2luZ1N0b3Jl
Q29weSB7Ci0gICAgQ29weUJhY2tpbmdTdG9yZSwgLy8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJh
d3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgotICAgIERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1
YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUgY29weS4KLX07Ci0KLWVudW0gY2xhc3MgUHJl
c2VydmVSZXNvbHV0aW9uIHsKLSAgICBObywKLSAgICBZZXMsCi19OworbmFtZXNwYWNlIERpc3Bs
YXlMaXN0IHsKK2NsYXNzIERyYXdpbmdDb250ZXh0OworfQogCiBjbGFzcyBJbWFnZUJ1ZmZlciB7
Ci0gICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9FWFBPUlQoSW1hZ2VCdWZmZXIsIFdFQkNPUkVf
RVhQT1JUKTsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcik7Ci0gICAgZnJp
ZW5kIGNsYXNzIElPU3VyZmFjZTsKIHB1YmxpYzoKLSAgICAvLyBXaWxsIHJldHVybiBhIG51bGwg
cG9pbnRlciBvbiBhbGxvY2F0aW9uIGZhaWx1cmUuCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJl
bmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9yU3BhY2UgPSBDb2xv
clNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwotI2lmIFVTRShESVJF
Q1QyRCkKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9y
U3BhY2U6OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jZW5kaWYKLQotICAg
IC8vIENyZWF0ZSBhbiBpbWFnZSBidWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0IGFu
ZCBjb3B5IHJlY3QgZnJvbSB0aGlzIGJ1ZmZlciBpbnRvIHRoaXMgbmV3IG9uZS4KLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICAvLyBDcmVhdGUg
YW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJs
ZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8gdGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRo
aXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBh
dGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgQ29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogCi0gICAgc3RhdGljIEludFNp
emUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7Ci0gICAgYm9vbCBpc0NvbXBhdGlibGVXaXRoQ29udGV4dChjb25zdCBHcmFwaGlj
c0NvbnRleHQmKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOwot
Ci0gICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAg
Y29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0g
ICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxT
aXplOyB9Ci0KLSAgICBGbG9hdFNpemUgc2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNpemUp
IGNvbnN0OwotCi0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXNvbHV0aW9uU2NhbGU7IH0KKyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBj
bGFtcGluZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNr
ZXIgb3IgY2xpcHBlci4KKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBG
bG9hdFNpemUmKTsKKyAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9h
dFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRT
aXplKGNvbnN0IEZsb2F0U2l6ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUo
Y29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVj
dCBjbGFtcGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworICAgIHN0YXRpYyBJbnRTaXplIGNvbXBh
dGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYp
OwogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZl
UmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7Ci0gICAgLy8gR2l2ZSBoaW50
cyBvbiB0aGUgZmFzdGVyIGNvcHlJbWFnZSBNb2RlLCByZXR1cm4gRG9udENvcHlCYWNraW5nU3Rv
cmUgaWYgaXQgc3VwcG9ydHMgdGhlIERvbnRDb3B5QmFja2luZ1N0b3JlIGJlaGF2aW9yCi0gICAg
Ly8gb3IgcmV0dXJuIENvcHlCYWNraW5nU3RvcmUgaWYgaXQgZG9lc24ndC4gIAotICAgIHN0YXRp
YyBCYWNraW5nU3RvcmVDb3B5IGZhc3RDb3B5SW1hZ2VNb2RlKCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgdmlydHVhbCB+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAKLSAgICBlbnVtIENvb3JkaW5h
dGVTeXN0ZW0geyBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0
ZVN5c3RlbSB9OworICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSA9IDA7CiAKLSAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IGdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JiwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lz
dGVtID0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiwgSW50
U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBudWxscHRyLCBDb29yZGluYXRlU3lzdGVtID0g
TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0OworICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIHsgfQogCi0gICAgdm9pZCBwdXRC
eXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBi
YXNlVHJhbnNmb3JtKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6
ZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEludFNpemUgaW50ZXJuYWxTaXplKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOwogICAg
IAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBzaXplX3QgZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQogCi0gICAgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBX
VEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8p
IGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdDsKLSAgICBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAgIHZpcnR1YWwgTmF0aXZlSW1h
Z2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5n
U3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0jaWYgVVNFKENBSVJPKQotICAgIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgY29uc3Q7Ci0jZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JT
cGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSNpZiAhVVNFKENHKQotICAgIEFmZmlu
ZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KCk7IH0KLSAgICB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNw
YWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAg
ICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRy
YW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkp
OyB9Ci0jZW5kaWYKLSAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAt
MSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYg
c3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KSA9IDA7CiAKLSAgICBz
aXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3Qo
KSBjb25zdDsKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4s
IFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIHN0YXRp
YyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiA9IHsgfSk7CiAKLSAgICAvLyBGSVhNRTogY3VycmVudCBpbXBsZW1lbnRhdGlvbnMgb2Yg
dGhpcyBtZXRob2QgaGF2ZSB0aGUgcmVzdHJpY3Rpb24gdGhhdCB0aGV5IG9ubHkgd29yawotICAg
IC8vIHdpdGggdGV4dHVyZXMgdGhhdCBhcmUgUkdCIG9yIFJHQkEgZm9ybWF0LCBhbmQgVU5TSUdO
RURfQllURSB0eXBlLgotICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xlbnVtLCBib29s
LCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9y
U3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpID0gMDsKIAotICAgIC8vIFRoZXNlIGZ1
bmN0aW9ucyBhcmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBj
cmVhdGVkIGZvciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNp
emVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVO
ZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0
YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGlj
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxl
KTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwor
ICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9
IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1
aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKIAotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0g
ICAgLy8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5h
bFNpemUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUg
cmVzdWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVD
VDJEKQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQx
Qml0bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4p
OwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKLSAgICAKLSAgICB2b2lk
IGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiwgQ29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgSW50U2l6
ZSYgZGF0YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lzdGVtID0gQ29vcmRpbmF0ZVN5c3RlbTo6
TG9naWNhbCkgPSAwOwogCi0gICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKKyAgICB2aXJ0dWFsIFBsYXRm
b3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0s
IGJvb2wsIGJvb2wpIGNvbnN0ID0gMDsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZl
cigpID0gZGVmYXVsdDsKIAotICAgIGlubGluZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCk7Ci0KLSAgICBmcmllbmQgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVu
ZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJh
dGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAg
ICBmcmllbmQgY2xhc3MgR3JhZGllbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFp
bnRJbWFnZTsKLQotcHJpdmF0ZToKLSAgICBJbWFnZUJ1ZmZlckRhdGEgbV9kYXRhOwotICAgIElu
dFNpemUgbV9zaXplOwotICAgIEludFNpemUgbV9sb2dpY2FsU2l6ZTsKLSAgICBmbG9hdCBtX3Jl
c29sdXRpb25TY2FsZTsKLQotICAgIC8vIFRoaXMgY29uc3RydWN0b3Igd2lsbCBwbGFjZSBpdHMg
c3VjY2VzcyBpbnRvIHRoZSBnaXZlbiBvdXQtdmFyaWFibGUKLSAgICAvLyBzbyB0aGF0IGNyZWF0
ZSgpIGtub3dzIHdoZW4gaXQgc2hvdWxkIHJldHVybiBmYWlsdXJlLgotICAgIFdFQkNPUkVfRVhQ
T1JUIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nl
c3MpOwotI2lmIFVTRShDRykKLSAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiwgUmVuZGVyaW5nTW9kZSwgY29uc3Qg
SG9zdFdpbmRvdyosIGJvb2wmIHN1Y2Nlc3MpOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHRv
Q0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdDsKLSNlbGlmIFVTRShESVJFQ1QyRCkKLSAgICBJbWFn
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQqLCBib29sJiBzdWNjZXNzKTsKLSNlbmRpZgorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIg
c2lua0ludG9OYXRpdmVJbWFnZSgpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lu
a0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKIH07CiAKLSNpZiBVU0UoQ0cpCi1TdHJpbmcgZGF0
YVVSTChjb25zdCBJbWFnZURhdGEmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxk
b3VibGU+IHF1YWxpdHkpOwotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KTsKLSNlbmRp
ZgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRj
MDVjYWZkMjg4NzdmZDVkMDc2Yzc3OGViNDBmNmNmYzc5OGZkZDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tl
bmQuaCIKKworI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBt
X2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICwgbV9pbnRlcm5hbFNpemUoaW50ZXJuYWxT
aXplKQorICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9j
b2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9CisKK0ludFNpemUgSW1hZ2VCdWZmZXJCYWNrZW5k
OjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNlaWxmKHJlc29s
dXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUu
aGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFzY2FsZWRTaXpl
LmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIElu
dFNpemUgaW50ZXJuYWxTaXplID0gSW50U2l6ZShzY2FsZWRTaXplKTsKKworICAgIENoZWNrZWQ8
dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4oaW50ZXJuYWxTaXplLndpZHRoKCkpOworICAgIGlmIChieXRl
c1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBDaGVj
a2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwg
UmVjb3JkT3ZlcmZsb3c+KGludGVybmFsU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJvdzsKKyAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworICAg
IAorICAgIHJldHVybiBpbnRlcm5hbFNpemU7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIGNvcHlOYXRp
dmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJl
c29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmRyYXdD
b25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVj
dCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb252ZXJ0VG9MdW1p
bmFuY2VNYXNrKCkKK3sKKyAgICBJbnRSZWN0IGx1bWluYW5jZVJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgbV9pbnRlcm5hbFNpemUpOworICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Qs
IENvb3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpOworICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVs
QXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5zaWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhl
bE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAg
dWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDMpOworICAgICAg
ICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdWludDhfdCByID0gc3Jj
UGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1Bp
eGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKKyAgICAgICAgdWludDhfdCBiID0gc3Jj
UGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOworICAgICAgICAKKyAgICAgICAgZG91
YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQgKyBiICogMC4wNzIxKSAqICgoZG91
YmxlKWEgLyAyNTUuMCk7CisgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCAr
IDMsIGx1bWEpOworICAgIH0KKworICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsICpzcmNQaXhlbEFycmF5LCBsdW1pbmFuY2VSZWN0LnNpemUo
KSwgbHVtaW5hbmNlUmVjdCwgSW50UG9pbnQoKSwgQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7
Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEodm9p
ZCogZGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiBtX2xvZ2lj
YWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRlc1BlclJvdyA9
IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVzUGVyUm93ID0g
Ynl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0
PHVpbnQ4X3QqPihkYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9ybWF0KCksIHNy
Y0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3Vs
dC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNyZWF0ZUdldEltYWdl
RGF0YUFycmF5KGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIEludFJlY3QmIHNyY1JlY3RDbGlwcGVk
LCBJbnRSZWN0JiBkZXN0UmVjdCkgY29uc3QKK3sKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNv
cmRPdmVyZmxvdz4gYXJlYSA9IDQ7CisgICAgYXJlYSAqPSBzcmNSZWN0LndpZHRoKCk7CisgICAg
YXJlYSAqPSBzcmNSZWN0LmhlaWdodCgpOworICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVk
QXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJlYS51bnNhZmVHZXQoKSk7CisgICAgaWYg
KCFhcnJheSB8fCAhYXJyYXktPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBJbnRSZWN0IGJ1ZmZlclJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIG1faW50ZXJuYWxTaXpl
IH07CisgICAgc3JjUmVjdENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oYnVmZmVyUmVjdCwgc3JjUmVj
dCk7CisgICAgZGVzdFJlY3QgPSB7IEludFBvaW50Ojp6ZXJvKCksIHNyY1JlY3RDbGlwcGVkLnNp
emUoKSB9OworCisgICAgaWYgKHNyY1JlY3QueCgpIDwgMCkKKyAgICAgICAgZGVzdFJlY3Quc2V0
WCgtc3JjUmVjdC54KCkpOworCisgICAgaWYgKHNyY1JlY3QueSgpIDwgMCkKKyAgICAgICAgZGVz
dFJlY3Quc2V0WSgtc3JjUmVjdC55KCkpOworCisgICAgaWYgKGRlc3RSZWN0LnNpemUoKSAhPSBz
cmNSZWN0LnNpemUoKSkKKyAgICAgICAgYXJyYXktPnplcm9GaWxsKCk7CisgICAgCisgICAgcmV0
dXJuIGFycmF5OworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y2FsY3VsYXRlUHV0SW1h
Z2VEYXRhUmVjdHMoY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIElu
dFJlY3QmIGRlc3RSZWN0KSBjb25zdAoreworICAgIEludFJlY3QgZGF0YVJlY3QgPSB7IEludFBv
aW50Ojp6ZXJvKCksIHNyY1NpemUgfTsKKyAgICBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlv
bihkYXRhUmVjdCwgc3JjUmVjdCk7CisgICAgCisgICAgZGVzdFJlY3QgPSBzcmNSZWN0Q2xpcHBl
ZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50KTsKKyAgICAKKyAgICBpZiAoc3JjUmVj
dC54KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRYKGRlc3RSZWN0LngoKSAtIHNyY1JlY3Qu
eCgpKTsKKworICAgIGlmIChzcmNSZWN0LnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFko
ZGVzdFJlY3QueSgpIC0gc3JjUmVjdC55KCkpOworCisgICAgSW50UmVjdCBidWZmZXJSZWN0ID0g
eyBJbnRQb2ludDo6emVybygpLCBtX2ludGVybmFsU2l6ZSB9OworICAgIGRlc3RSZWN0LmludGVy
c2VjdChidWZmZXJSZWN0KTsKKworICAgIHNyY1JlY3RDbGlwcGVkLnNldFNpemUoZGVzdFJlY3Qu
c2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQ
aXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7
CisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBp
eGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3JjUGl4ZWxbMV07Cisg
ICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVsWzNdID0gc3JjUGl4
ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVt
dWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQ
aXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7
CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxw
aGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNy
Y0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xv
ckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMF0gKiAyNTUpIC8g
YWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBo
YTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOwor
ICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBp
eGVsWzBdID0gKHNyY1BpeGVsWzJdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsxXSA9
IChzcmNQaXhlbFsxXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4
ZWxbMF0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjb3B5VW5wcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKENvbG9y
Rm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3Jt
YXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBh
bHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7Cisg
ICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBz
cmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0UGl4ZWwpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsK
KyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1
OworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
IGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBk
ZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVz
dFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworfQorCit0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKENvbG9y
Rm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4KK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAorICAgIENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93
cywKKyAgICBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6
ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8
IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZv
cm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAg
ICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3Jj
QWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RB
bHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAg
ICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGNvcHlJbWFnZVBpeGVs
c1VuYWNjZWxlcmF0ZWQ8Y29weVByZW11bHRpcGxpZWRUb1VucHJlbXVsdGlwbGllZD4oc3JjQ29s
b3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RC
eXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJlbXVsdGlwbGllZFRv
UHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBk
ZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworfQorCitS
ZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0sIHZvaWQqIGRhdGEpIGNvbnN0
Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBDb29yZGluYXRlU3lzdGVtOjpMb2dpY2FsICYmIG1fcmVzb2x1dGlvblNj
YWxlICE9IDEpCisgICAgICAgIHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZDsKKyAgICBJbnRSZWN0IGRlc3RSZWN0Owor
ICAgIGF1dG8gYXJyYXkgPSBjcmVhdGVHZXRJbWFnZURhdGFBcnJheShzcmNSZWN0U2NhbGVkLCBz
cmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIGlmICghYXJyYXkgfHwgIWFycmF5LT5kYXRh
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVy
Um93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9
IGFycmF5LT5kYXRhKCkgKyBkZXN0UmVjdC55KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVj
dC54KCkgKiA0OworICAgIAorICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJS
b3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
ZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlw
cGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBzcmNCeXRl
c1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdC
QSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKworICAgIHJl
dHVybiBhcnJheTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5
c3RlbSwgdm9pZCogZGF0YSkKK3sKKyAgICBJbnRTaXplIHNyY1NpemVTY2FsZWQgPSBzcmNTaXpl
OworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgaWYgKGNvb3JkaW5h
dGVTeXN0ZW0gPT0gQ29vcmRpbmF0ZVN5c3RlbTo6TG9naWNhbCAmJiBtX3Jlc29sdXRpb25TY2Fs
ZSAhPSAxKSB7CisgICAgICAgIHNyY1NpemVTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OworICAgICAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKyAgICB9
CisKKyAgICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkOworICAgIEludFJlY3QgZGVzdFJlY3Q7Cisg
ICAgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMoc3JjU2l6ZVNjYWxlZCwgc3JjUmVjdFNjYWxl
ZCwgZGVzdFBvaW50LCBzcmNSZWN0Q2xpcHBlZCwgZGVzdFJlY3QpOworICAgIAorICAgIHVuc2ln
bmVkIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93KCk7CisgICAgdWludDhfdCogZGVzdFJv
d3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIGRlc3RSZWN0LnkoKSAqIGRl
c3RCeXRlc1BlclJvdyArIGRlc3RSZWN0LngoKSAqIDQ7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRl
c1BlclJvdyA9IDQgKiBzcmNTaXplU2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogc3JjUm93
cyA9IGFycmF5LmRhdGEoKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNyY0J5dGVzUGVyUm93ICsg
c3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAgICAg
aW5wdXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywK
KyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENv
bG9yRm9ybWF0KCksIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIGRlc3RSZWN0LnNpemUoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTgwYjIz
YmFmYzgwNjM2ZThmYjczNjAxZWVlNzM3MTcwY2M3MTQ5YwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0w
LDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgor
I2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzR0wuaCIKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgSG9zdFdpbmRvdzsKK2NsYXNzIEltYWdlOworCitlbnVtIEJhY2tpbmdTdG9yZUNv
cHkgeworICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBzdWJzZXF1ZW50IGRyYXdz
IGRvbid0IGFmZmVjdCB0aGUgY29weS4KKyAgICBEb250Q29weUJhY2tpbmdTdG9yZSAvLyBTdWJz
ZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCit9OworCitlbnVtIGNsYXNzIFByZXNl
cnZlUmVzb2x1dGlvbiA6IHVpbnQ4X3QgeworICAgIE5vLAorICAgIFllcywKK307CisKK2VudW0g
Y2xhc3MgQ29sb3JGb3JtYXQgOiB1aW50OF90IHsKKyAgICBSR0JBLAorICAgIEJHUkEKK307CisK
K2VudW0gY2xhc3MgQ29vcmRpbmF0ZVN5c3RlbSA6IHVpbnQ4X3QgeworICAgIExvZ2ljYWwsCisg
ICAgQmFja2luZ1N0b3JlCit9OworCitjbGFzcyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGlj
OgorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgfkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVm
YXVsdDsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxhdGVJ
bnRlcm5hbFNpemUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKwor
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBmbHVzaENvbnRleHQoKSB7IH0KKyAgICAKKyAgICBJbnRTaXplIGxvZ2ljYWxT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQorICAgIEludFNpemUgaW50ZXJu
YWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbFNpemU7IH0KKyAgICBmbG9hdCByZXNv
bHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdXRpb25TY2FsZTsgfQorICAgIENv
bG9yU3BhY2UgY29sb3JTcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3JTcGFjZTsgfQorCisg
ICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2ludGVybmFsU2l6ZS5hcmVhKCkudW5zYWZlR2V0KCk7IH0KKyAg
ICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiAwOyB9
CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3Rv
cmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRy
PEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFBy
ZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKKwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2
b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0
ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBz
cGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpOworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQorCisgICAgdmlydHVhbCBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEo
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2
b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25z
dCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0p
ID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3Jt
VGV4dHVyZShHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9S
VCBJbWFnZUJ1ZmZlckJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Up
OworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBjcmVhdGVHZXRJbWFnZURhdGFBcnJh
eShjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBJbnRSZWN0JiBzcmNSZWN0Q2xpcHBlZCwgSW50UmVj
dCYgZGVzdFJlY3QpIGNvbnN0OworICAgIHZvaWQgY2FsY3VsYXRlUHV0SW1hZ2VEYXRhUmVjdHMo
Y29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50
UG9pbnQmIGRlc3RQb2ludCwgSW50UmVjdCYgc3JjUmVjdENsaXBwZWQsIEludFJlY3QmIGRlc3RS
ZWN0KSBjb25zdDsKKworICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCB7
IHJldHVybiA0ICogbV9pbnRlcm5hbFNpemUud2lkdGgoKTsgfQorICAgIHZpcnR1YWwgQ29sb3JG
b3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OlJH
QkE7IH0KKworICAgIFdFQkNPUkVfRVhQT1JUIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKHZv
aWQqIGRhdGEpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJ
bWFnZVBpeGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1h
dCwgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1
aW50OF90KiBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBo
YUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQ
ZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Q29vcmRpbmF0ZVN5c3RlbSwgdm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBVaW50OENsYW1wZWRBcnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0
ZW0sIHZvaWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOworICAgIEludFNp
emUgbV9pbnRlcm5hbFNpemU7CisgICAgZmxvYXQgbV9yZXNvbHV0aW9uU2NhbGU7CisgICAgQ29s
b3JTcGFjZSBtX2NvbG9yU3BhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODllYzBkMzZmZWZiZDEyYWJlNTQzYzNmMjAz
NGY2MTU4YjNkMmNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisr
KyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotCi0jaWYgVVNFKENHKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0
YUNHLmgiCi0jZWxpZiBVU0UoRElSRUNUMkQpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuaCIKLSNlbGlmIFVTRShDQUlSTykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDYWly
by5oIgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9QaHlzaWNhbEltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDc3MmM2OTRkMzgxYWNiYzkyNjBk
YmI0N2U5ZmUyNzAxZTQyNzY1YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDIxNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBQaHlzaWNhbEltYWdlQnVmZmVy
IDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bWFnZUJ1ZmZlclR5cGUgPSBQaHlzaWNhbEltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19iYXNlX29mPEltYWdl
QnVmZmVyLCBJbWFnZUJ1ZmZlclR5cGU+Ojp2YWx1ZSk7CisgICAgICAgIGF1dG8gYmFja2VuZCA9
IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBo
b3N0V2luZG93KTsKKyAgICAgICAgaWYgKCFiYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihu
ZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBQaHlzaWNhbElt
YWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNrZW5kKQorICAgICAg
ICA6IG1fYmFja2VuZChXVEZNb3ZlKGJhY2tlbmQpKQorICAgIHsKKyAgICB9CisKKyAgICBQaHlz
aWNhbEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSog
ZW5zdXJlQmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7
CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5k
KCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBs
b2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVu
c3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUg
aW50ZXJuYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8g
ZW5zdXJlQmFja2VuZCgpLT5pbnRlcm5hbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIGZsb2F0
IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQo
KSA/IGVuc3VyZUJhY2tlbmQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CisKKyAgICBzaXpl
X3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/
IGVuc3VyZUJhY2tlbmQoKS0+bWVtb3J5Q29zdCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5h
bE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBl
bnN1cmVCYWNrZW5kKCktPmV4dGVybmFsTWVtb3J5Q29zdCgpIDogMDsgfQorCisgICAgTmF0aXZl
SW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0g
Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBo
eXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAg
ICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFn
ZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdT
dG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxQaHlzaWNh
bEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAg
IHJldHVybiBiYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0
LCBvcHRpb25zKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAg
IGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQ
dHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1h
Z2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBS
ZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRv
SW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAg
ICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3
Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQt
PmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2Ug
ZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNl
LCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFs
aXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1p
bWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PFBoeXNpY2FsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHJlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENv
b3JkaW5hdGVTeXN0ZW06OkxvZ2ljYWwpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBp
ZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3Rf
Y2FzdDxQaHlzaWNhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAg
ICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHJlY3QsIGNv
b3JkaW5hdGVTeXN0ZW0pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3QgSW50U2l6ZSYgZGF0
YVNpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSA9IENvb3JkaW5hdGVTeXN0ZW06Okxv
Z2ljYWwpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBi
YWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGFycmF5LCBkYXRhU2l6ZSwgc3JjUmVj
dCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQs
IFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZv
cm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKHRhcmdldCwgZGVz
dGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEJh
Y2tlbmRUeXBlPiBtX2JhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYWRhMmI4MzFmMzNjZDU3MjJiZDcyOTc3MzRjNzlmMWEwMTM0MGNl
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBoeXNpY2FsSW1hZ2VCdWZmZXIuaCIK
KworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oIgor
I2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
KyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3Vz
aW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQ7CisjZW5kaWYKKworI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQordXNpbmcgUGxh
dGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJC
YWNrZW5kOworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbElt
YWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBQaHlzaWNhbEltYWdlQnVmZmVyPFBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1EaXNw
bGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybVVuYWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZERp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtQWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YjgwMDZkOTc5NTE0NTYxNzAwOWIz
NDk2ZTEyYjA2NTNkYWViYTRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgi
CisjZWxpZiBVU0UoRElSRUNUMkQpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQuaCIKKyNlbGlmIFVTRShDQUlSTykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvQmFja2Vu
ZC5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworI2lmIFVTRShDRykKK3VzaW5n
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7CisjZWxp
ZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdl
QnVmZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDsKKyNlbmRpZgorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmRhMGFmYTc5ZDc0
NjFjZDlmMmYxMDkxMzUwYzgxNWRiYmJkN2JjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
NzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1
ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5k
PihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVy
aW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0
V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJl
ZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5k
KCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RX
aW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsK
KworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6
QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoK
KyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAg
ICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6
CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZm
ZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxp
c3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVk
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVu
ZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAg
ICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3MWI5MmQ1ODRmZWU4ZjRhZjdhODU5
NjRlYWFiYzFjZWQ1MDE3MzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUg
IlJlbmRlcmluZ01vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBIb3N0V2lu
ZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JF
X0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmlu
Z0JhY2tlbmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxs
cHRyKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5SZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0Owor
ICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kKCkgPSBkZWZhdWx0OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJjYzM5ODhm
ZDY0M2RhNzA0NDFlNTMzOGIxNmExMWIwNTQ2MzEzODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIFJlbmRlcmluZ01v
ZGUgeworICAgIEFjY2VsZXJhdGVkLAorICAgIFVuYWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxp
c3RBY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdCwKKyAgICBSZW1vdGVBY2NlbGVyYXRlZCwK
KyAgICBSZW1vdGUKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCA0MDQxYjNmODEw
NzY3OGM1NmFjZGIwYzUzM2EwOTg2ZjdlNjQ1NTk2Li42MTJmOWU5ZDIyZDY3MWY2OGQ1NjVmMTI0
NDk0ZWMzMzJkNWY5NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcApAQCAtODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNsZWFy
U2NyYXRjaEJ1ZmZlcigpOwogCiAgICAgICAgIC8vIFNoYWRvd0JsdXIgaXMgbm90IHVzZWQgd2l0
aCBhY2NlbGVyYXRlZCBkcmF3aW5nLCBzbyBpdCdzIE9LIHRvIG1ha2UgYW4gdW5jb25kaXRpb25h
bGx5IHVuYWNjZWxlcmF0ZWQgYnVmZmVyLgotICAgICAgICBtX2ltYWdlQnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShyb3VuZGVkU2l6ZSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgICAgIG1f
aW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJvdW5kZWRTaXplLCBSZW5kZXJpbmdN
b2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXIuZ2V0KCk7
CiAgICAgfQogCkBAIC01OTMsNyArNTkzLDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRT
aGFkb3coY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QKIAog
dm9pZCBTaGFkb3dCbHVyOjpkcmF3UmVjdFNoYWRvd1dpdGhvdXRUaWxpbmcoY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgc2hhZG93ZWRSZWN0LCBjb25zdCBM
YXllckltYWdlUHJvcGVydGllcyYgbGF5ZXJJbWFnZVByb3BlcnRpZXMsIGNvbnN0IERyYXdCdWZm
ZXJDYWxsYmFjayYgZHJhd0J1ZmZlcikKIHsKLSAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNp
emUpLCBVbmFjY2VsZXJhdGVkLCAxKTsKKyAgICBhdXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXllckltYWdlUHJvcGVydGllcy5sYXllclNpemUp
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWxheWVySW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtNjIxLDcgKzYyMSw3IEBAIHZvaWQgU2hhZG93Qmx1cjo6ZHJh
d1JlY3RTaGFkb3dXaXRob3V0VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEZs
b2F0CiAKIHZvaWQgU2hhZG93Qmx1cjo6ZHJhd0luc2V0U2hhZG93V2l0aG91dFRpbGluZyhjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFJlY3QmIGZ1bGxSZWN0LCBjb25zdCBGbG9h
dFJvdW5kZWRSZWN0JiBob2xlUmVjdCwgY29uc3QgTGF5ZXJJbWFnZVByb3BlcnRpZXMmIGxheWVy
SW1hZ2VQcm9wZXJ0aWVzLCBjb25zdCBEcmF3QnVmZmVyQ2FsbGJhY2smIGRyYXdCdWZmZXIpCiB7
Ci0gICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNp
emUobGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7Cisg
ICAgYXV0byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUo
bGF5ZXJJbWFnZVByb3BlcnRpZXMubGF5ZXJTaXplKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVy
YXRlZCk7CiAgICAgaWYgKCFsYXllckltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTY4NSw3
ICs2ODUsNyBAQCB2b2lkIFNoYWRvd0JsdXI6OmRyYXdSZWN0U2hhZG93V2l0aFRpbGluZyhjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29ucwogICAgIGF1dG8qIGxheWVySW1hZ2Ug
PSBTY3JhdGNoQnVmZmVyOjpzaW5nbGV0b24oKS5nZXRTY3JhdGNoQnVmZmVyKHRlbXBsYXRlU2l6
ZSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShsYXllckltYWdlUHJvcGVydGllcyk7Ci0gICAg
YXV0byBsYXllckltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUs
IFVuYWNjZWxlcmF0ZWQsIDEpOworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUodGVtcGxhdGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsK
ICAgICBhdXRvKiBsYXllckltYWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgog
CkBAIC03MzksNyArNzM5LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3SW5zZXRTaGFkb3dXaXRo
VGlsaW5nKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb24KICNpZiBVU0UoQ0cp
CiAgICAgYXV0byogbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNpbmdsZXRvbigpLmdldFNj
cmF0Y2hCdWZmZXIodGVtcGxhdGVTaXplKTsKICNlbHNlCi0gICAgYXV0byBsYXllckltYWdlQnVm
ZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0ZW1wbGF0ZVNpemUsIFVuYWNjZWxlcmF0ZWQsIDEp
OworICAgIGF1dG8gbGF5ZXJJbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGVtcGxh
dGVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBhdXRvKiBsYXllcklt
YWdlID0gbGF5ZXJJbWFnZUJ1ZmZlci5nZXQoKTsKICNlbmRpZgogCkBAIC04ODQsMTIgKzg4NCwx
MiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIoSW1hZ2VCdWZmZXImIGxheWVy
SW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRS
ZWN0IGJsdXJSZWN0KEludFBvaW50KCksIHRlbXBsYXRlU2l6ZSk7Ci0gICAgYXV0byBsYXllckRh
dGEgPSBsYXllckltYWdlLmdldFVubXVsdGlwbGllZEltYWdlRGF0YShibHVyUmVjdCk7CisgICAg
YXV0byBsYXllckRhdGEgPSBsYXllckltYWdlLmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0KTsKICAgICBpZiAoIWxheWVyRGF0YSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYmx1ckxheWVySW1hZ2UobGF5ZXJEYXRhLT5kYXRhKCks
IGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3Qud2lkdGgoKSAqIDQpOwotICAgIGxheWVySW1hZ2Uu
cHV0Qnl0ZUFycmF5KCpsYXllckRhdGEsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdCwgeyB9KTsKKyAgICBsYXllckltYWdl
LnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICps
YXllckRhdGEsIGJsdXJSZWN0LnNpemUoKSwgYmx1clJlY3QpOwogfQogCiB2b2lkIFNoYWRvd0Js
dXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29u
c3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQpAQCAtOTEyLDcgKzkxMiw3IEBAIHZvaWQgU2hhZG93
Qmx1cjo6ZHJhd1NoYWRvd0xheWVyKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBJbnRSZWN0CiAKICAgICBhZGp1c3RCbHVyUmFkaXVzKHRyYW5zZm9ybSk7CiAKLSAgICBh
dXRvIGxheWVySW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGV4cGFuZGVkSW50U2l6ZShsYXll
ckltYWdlUHJvcGVydGllcy0+bGF5ZXJTaXplKSwgVW5hY2NlbGVyYXRlZCwgMSk7CisgICAgYXV0
byBsYXllckltYWdlID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShleHBhbmRlZEludFNpemUobGF5ZXJJ
bWFnZVByb3BlcnRpZXMtPmxheWVyU2l6ZSksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OwogICAgIGlmICghbGF5ZXJJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25z
LmNwcAppbmRleCAzOTZjZjBiZTA3MDVhNjZhNGZmNGYyY2E1NzE2MGM3NTFkZjcwNzg1Li5iMjM2
NTQxM2ZkZTM3NzNiNzMyMTg5OTAwYjVmNmUxZTk2MmQ4MWUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5j
cHAKQEAgLTE3NSw3ICsxNzUsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMg
dm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3Jt
Q29udGV4dCwgSW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVy
T3JpZ2luLCBjb25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNo
YWRvd1N0YXRlKQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUlt
YWdlKCkpIHsKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0
Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5
ZXJPcmlnaW4pLCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUp
LCB7IHNoYWRvd1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmds
b2JhbEFscGhhLCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgzLDcgQEAg
c3RhdGljIHZvaWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBw
bGF0Zm9ybUNvbnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFz
IGRyYXdTaGFkb3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2
b2lkIGRyYXdTaGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0
LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7
Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAg
IGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwg
c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29t
cG9zaXRlT3BlcmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkp
OwogICAgIH0KIH0KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVm
ZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgog
ewogICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBs
YXllckltYWdlLm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1h
Z2UuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRv
SW1hZ2VCdWZmZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5
ZXJPcmlnaW4sIGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNl
IGZpbGxTb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3
NjczNTJlMTRhZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3
OGMyMjAyZGY1N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4
LDcgKzI2OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJU
KGhhc1BsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5h
dGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZm
ZXIoKnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNz
Q29udGV4dEltcGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IDFhODFkNDAzZDQwMjRjMzFi
MDJhMjQ4YzRlZTJjYWU2YWRkNTEyN2YuLjBlZGE2NWNmNDI0NTllNTQwYzE3OTI3MmIxYzcyOWU5
ZDI4YzZkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDEx
LDcgKzQxMSw3IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRz
KCkKIAogdm9pZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKElt
YWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZh
Y2UgPSBidWZmZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAg
ICAgQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdl
dCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDFmMTMzM2E3NDI2OWY1MjQ3MDVmNTQzZjBkZGI4MzRjYzdjYmRmMGQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSw3ODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtv
bGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAw
NyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBD
b3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVT
RShDQUlSTykKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVy
YXRpb25zLmgiCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVk
QXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUg
IkdMQ29udGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVH
TCkKLSNpZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5j
bHVkZSA8RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgot
Ci0jaWYgVVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BF
TkdMX0VTKQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xT
aGltcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVk
ZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotSW1hZ2VCdWZmZXJEYXRhOjpJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50
U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlKQotICAgIDogbV9wbGF0Zm9y
bUNvbnRleHQoMCkKLSAgICAsIG1fc2l6ZShzaXplKQotICAgICwgbV9yZW5kZXJpbmdNb2RlKHJl
bmRlcmluZ01vZGUpCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgLCBtX2NvbXBvc2l0b3JUZXh0dXJlKDApCi0jZW5k
aWYKLSAgICAsIG1fdGV4dHVyZSgwKQotI2VuZGlmCi17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykgJiYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX3JlbmRl
cmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSNpZiBVU0UoTklDT1NJ
QSkKLSAgICAgICAgbV9uaWNvc2lhTGF5ZXIgPSBOaWNvc2lhOjpDb250ZW50TGF5ZXI6OmNyZWF0
ZShOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Y3JlYXRlRmFjdG9yeSgq
dGhpcykpOwotI2Vsc2UKLSAgICAgICAgbV9wbGF0Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihu
ZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0jZW5k
aWYKLX0KLQotSW1hZ2VCdWZmZXJEYXRhOjp+SW1hZ2VCdWZmZXJEYXRhKCkKLXsKLSAgICBpZiAo
bV9yZW5kZXJpbmdNb2RlICE9IEFjY2VsZXJhdGVkKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElD
UykgJiYgVVNFKE5JQ09TSUEpCi0gICAgZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLmludmFsaWRhdGVDbGllbnQo
KTsKLSNlbmRpZgotCi0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENv
bnRleHQ6OmN1cnJlbnQoKTsKLSAgICBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JD
b21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKS0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0K
LSAgICBpZiAobV90ZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX3RleHR1
cmUpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotICAgIGlmIChtX2NvbXBvc2l0
b3JUZXh0dXJlKQotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0
dXJlKTsKLSNlbmRpZgotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKLSAgICAgICAg
cHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotfQot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigp
Ci17Ci0gICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOwotCi0gICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3NpdG9yVGV4dHVy
ZSk7Ci0gICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0b3JUZXh0dXJl
KTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Ms
IEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJp
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9M
SU5FQVIpOwotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAg
Z2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKLQotICAg
IG1fY29tcG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9m
b3JfdGV4dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FM
UEhBLCBtX2NvbXBvc2l0b3JUZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSk7Ci0gICAgbV9jb21wb3NpdG9yQ3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9jb21wb3Np
dG9yU3VyZmFjZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9jb21wb3NpdG9y
Q3IuZ2V0KCksIENBSVJPX0FOVElBTElBU19OT05FKTsKLX0KLQotI2lmICFVU0UoTklDT1NJQSkK
LVJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBJbWFnZUJ1ZmZlckRhdGE6
OnByb3h5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJl
ZigpOwotfQotI2VuZGlmCi0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpzd2FwQnVmZmVyc0lmTmVl
ZGVkKCkKLXsKLSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4
dDo6Y3VycmVudCgpOwotCi0gICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7Ci0gICAgICAg
IGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKLQotICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9u
ID0KLSAgICAgICAgICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBw
cm94eSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihw
cm94eS5sb2NrKCkpOwotICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VV
bmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1
cmUsIG1fc2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91bGRCbGVuZCwgR0xfUkdCQSkpOwotICAg
ICAgICAgICAgfTsKLSNpZiBVU0UoTklDT1NJQSkKLSAgICAgICAgcHJveHlPcGVyYXRpb24oZG93
bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw+KG1fbmljb3NpYUxh
eWVyLT5pbXBsKCkpLnByb3h5KCkpOwotI2Vsc2UKLSAgICAgICAgcHJveHlPcGVyYXRpb24oKm1f
cGxhdGZvcm1MYXllclByb3h5KTsKLSNlbmRpZgotICAgIH0KLQotICAgIC8vIEl0IHdvdWxkIGJl
IGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUgYnVmZmVycyBoZXJlIGFzIHdlIGRvIHdp
dGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2FzZXMKLSAgICAvLyB3aGVyZSBvbmUgZnJh
bWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRlcmVkIGluIHRoZSBwcmV2aW91cyBmcmFt
ZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Ci0gICAgLy8gaW50byB0aGUgY29tcG9zaXRv
ciBidWZmZXIuCi0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKG1fY29tcG9zaXRvckNyLmdl
dCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihtX2Nv
bXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19wYWlu
dChtX2NvbXBvc2l0b3JDci5nZXQoKSk7Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0
KQotICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwot
fQotI2VuZGlmCi0KLXZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkK
LXsKLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVT
X1NVQ0NFU1MpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFk
b3B0UmVmKGNhaXJvX2NyZWF0ZShzdXJmYWNlKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNy
LmdldCgpLCBDQUlST19PUEVSQVRPUl9DTEVBUik7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6Y3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKQotewot
ICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21w
b3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLQotICAgIC8vIFdlIG11c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVz
LCBiZWNhdXNlIHRoZXJlIGlzIG5vIENhaXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAotICAgIC8v
IGZyb20gYSBwcmUtZXhpc3Rpbmcgc3VyZmFjZS4KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX3Rl
eHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlKTsKLSAg
ICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NM
QU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKLSAgICBnbFRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIp
OwotCi0gICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLQotICAgIGds
VGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5T
SUdORURfQllURSwgMCk7Ci0KLSAgICBjYWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+
Y2Fpcm9EZXZpY2UoKTsKLQotICAgIC8vIFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZv
cm1hbmNlIGhpdCBvbiBub24tSW50ZWwgZHJpdmVycy4KLSAgICBjYWlyb19nbF9kZXZpY2Vfc2V0
X3RocmVhZF9hd2FyZShkZXZpY2UsIEZBTFNFKTsKLQotICAgIG1fc3VyZmFjZSA9IGFkb3B0UmVm
KGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVO
VF9DT0xPUl9BTFBIQSwgbV90ZXh0dXJlLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgp
KSk7Ci0gICAgY2xlYXJTdXJmYWNlKG1fc3VyZmFjZS5nZXQoKSk7Ci19Ci0jZW5kaWYKLQotc3Rh
dGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZhY2VDb3B5KGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSkKLXsKLSAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAotICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KHN1cmZhY2UpKSk7Ci0KLSAgICBhdXRvIGNyID0gYWRvcHRSZWYoY2Fpcm9fY3Jl
YXRlKGNvcHkuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgp
LCBzdXJmYWNlLCAwLCAwKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci0KLSAgICByZXR1
cm4gY29weTsKLX0KLQotc3RhdGljIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+Ci1jYWlyb1N1cmZh
Y2VDb2VyY2VUb0ltYWdlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKLXsKLSAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UK
LSAgICAgICAgJiYgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChzdXJmYWNlKSA9PSBDQUlST19D
T05URU5UX0NPTE9SX0FMUEhBKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLQotICAgIHJldHVy
biBjYWlyb1N1cmZhY2VDb3B5KHN1cmZhY2UpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VC
dWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGF1dG8gc3VyZmFjZSA9IGNhaXJvU3Vy
ZmFjZUNvZXJjZVRvSW1hZ2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgY2Fpcm9fc3Vy
ZmFjZV9mbHVzaChzdXJmYWNlLmdldCgpKTsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURh
dGE7Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gaW1hZ2VEYXRhOwotCi0gICAgYXV0byBwaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKHN1cmZhY2UuZ2V0KCkpOwotICAgIGltYWdlRGF0YS5hcHBlbmQocGl4ZWxz
LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoc3VyZmFjZS5nZXQoKSkgKgotICAgICAg
ICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZS5nZXQoKSkpOwotCi0gICAg
cmV0dXJuIGltYWdlRGF0YTsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6Om5hdGl2
ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLm1fc3VyZmFjZS5nZXQoKTsKLX0K
LQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogbV9kYXRhKEludFNpemUo
c2l6ZSksIHJlbmRlcmluZ01vZGUpCi0gICAgLCBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBt
X3Jlc29sdXRpb25TY2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNl
OyAgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBlcnJvci4KLQotICAgIGZsb2F0IHNjYWxlZFdp
ZHRoID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0
IHNjYWxlZEhlaWdodCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSk7
Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93ZXIgcmVz
b2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KS5p
c0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc2l6ZSA9
IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLm1fc2l6ZSA9
IG1fc2l6ZTsKLQotICAgIGlmIChtX3NpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0K
LSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChtX2RhdGEubV9yZW5k
ZXJpbmdNb2RlID09IEFjY2VsZXJhdGVkKSB7Ci0gICAgICAgIG1fZGF0YS5jcmVhdGVDYWlyb0dM
U3VyZmFjZSgpOwotICAgICAgICBpZiAoIW1fZGF0YS5tX3N1cmZhY2UgfHwgY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
Ci0gICAgICAgICAgICBtX2RhdGEubV9yZW5kZXJpbmdNb2RlID0gVW5hY2NlbGVyYXRlZDsgLy8g
SWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgot
ICAgIH0KLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSA9PSBVbmFjY2VsZXJhdGVkKQot
I2Vsc2UKLSAgICBBU1NFUlQobV9kYXRhLm1fcmVuZGVyaW5nTW9kZSAhPSBBY2NlbGVyYXRlZCk7
Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIHN0YXRpYyBjYWlyb191c2VyX2RhdGFfa2V5X3Qgc19z
dXJmYWNlRGF0YUtleTsKLQotICAgICAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlk
ZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRoKCkpOwotICAgICAg
ICB2b2lkKiBzdXJmYWNlRGF0YTsKLSAgICAgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKG1f
c2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQotICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgIG1fZGF0YS5tX3N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
c3VyZmFjZURhdGEpLCBDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSwgbV9zaXpl
LmhlaWdodCgpLCBzdHJpZGUpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRh
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksICZzX3N1cmZhY2VEYXRhS2V5LCBzdXJmYWNlRGF0YSwg
W10odm9pZCogZGF0YSkgeyBmYXN0RnJlZShkYXRhKTsgfSk7Ci0gICAgfQotCi0gICAgaWYgKGNh
aXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NUQVRV
U19TVUNDRVNTKQotICAgICAgICByZXR1cm47ICAvLyBjcmVhdGUgd2lsbCBub3RpY2Ugd2UgZGlk
bid0IHNldCBtX2luaXRpYWxpemVkIGFuZCBmYWlsLgotCi0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2
aWNlU2NhbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVmKGNhaXJv
X2NyZWF0ZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0gICAgbV9kYXRhLm1fcGxhdGZvcm1D
b250ZXh0LnNldENyKGNyLmdldCgpKTsKLSAgICBtX2RhdGEubV9jb250ZXh0ID0gbWFrZVVuaXF1
ZTxHcmFwaGljc0NvbnRleHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9y
eShtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQot
SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBG
bG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBy
ZXR1cm4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihzaXplLCBDb2xvclNwYWNlOjpTUkdCLCBjb250
ZXh0KTsKLX0KLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuICptX2RhdGEubV9jb250ZXh0OwotfQotCi1SZWZQdHI8SW1hZ2U+IElt
YWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAg
cmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dAotewotICAgIC8vIGNvcHlDYWlyb0ltYWdlU3VyZmFjZSBpbmhlcml0cyBzdXJmYWNlJ3MgZGV2
aWNlIHNjYWxlIGZhY3Rvci4KLSAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3Rv
cmUpCi0gICAgICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlDYWlyb0ltYWdlU3Vy
ZmFjZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKSk7Ci0KLSAgICAvLyBCaXRtYXBJbWFnZSB3aWxs
IHJlbGVhc2UgdGhlIHBhc3NlZCBpbiBzdXJmYWNlIG9uIGRlc3RydWN0aW9uCi0gICAgcmV0dXJu
IEJpdG1hcEltYWdlOjpjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4obV9kYXRhLm1fc3Vy
ZmFjZSkpOwotfQotCi1CYWNraW5nU3RvcmVDb3B5IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdl
TW9kZSgpCi17Ci0gICAgcmV0dXJuIERvbnRDb3B5QmFja2luZ1N0b3JlOwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1h
Z2VCdWZmZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRl
c3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhH
cmFwaGljc0NvbnRleHQmIGRlc3RpbmF0aW9uQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCAgY29uc3QgSW1hZ2VQYWludGluZ09wdGlv
bnMmIG9wdGlvbnMpCi17Ci0gICAgaWYgKGRlc3RpbmF0aW9uQ29udGV4dC5wYWludGluZ0Rpc2Fi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJ
bWFnZSgpKSB7Ci0gICAgICAgIGlmICgmZGVzdGluYXRpb25Db250ZXh0ID09ICZjb250ZXh0KCkp
Ci0gICAgICAgICAgICBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlLmdldCgpKTsK
LQotICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgaW50ZXJwb2xhdGlvblF1
YWxpdHlGb3JUaGlzU2NvcGUoZGVzdGluYXRpb25Db250ZXh0LCBvcHRpb25zLmludGVycG9sYXRp
b25RdWFsaXR5KCkpOwotICAgICAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0
ZSA9IGRlc3RpbmF0aW9uQ29udGV4dC5zdGF0ZSgpOwotICAgICAgICBkcmF3TmF0aXZlSW1hZ2Uo
KmRlc3RpbmF0aW9uQ29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgZGVz
dFJlY3QsIHNyY1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2Vi
Q29yZTo6Q2Fpcm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Ci0gICAg
fQotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAotICAgIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoY29udGV4dC5wYWludGluZ0Rpc2FibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBuYXRpdmVJbWFnZSgpKQot
ICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmNvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIHN1
cmZhY2UuZ2V0KCksIG1fc2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0s
IHBoYXNlLCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUp
Ci17Ci0gICAgLy8gRklYTUU6IEVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9ucyBvbiBhY2Nl
bGVyYXRlZCBjYW52YXNlcy4KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2RhdGEu
bV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRhdGFTcmMgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2dldF9kYXRhKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGludCBzdHJpZGUgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBtX3NpemUuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICB1bnNp
Z25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3Ry
aWRlICogeSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9zaXplLndpZHRoKCk7IHgr
KykgewotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeDsKLSAgICAgICAgICAg
IENvbG9yIHBpeGVsQ29sb3IgPSBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwot
ICAgICAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yKGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IucmVk
KCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29s
b3IuZ3JlZW4oKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ibHVlKCldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpeGVs
Q29sb3IuYWxwaGEoKSk7Ci0gICAgICAgICAgICAqcGl4ZWwgPSBwcmVtdWx0aXBsaWVkQVJHQkZy
b21Db2xvcihwaXhlbENvbG9yKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNl
X21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9n
aWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlLCBJbnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlw
ZV90IHN1cmZhY2VUeXBlID0gY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAg
IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhl
IHVuZGVybHlpbmcgZGF0YTsKLSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5
IHN1cmZhY2UgaW1hZ2UKLSAgICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFKQotICAgICAgICByZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7
Ci0gICAgcmVjdC5zZXRZKDApOwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpKTsKLX0KLQotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGll
ZD4KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IEludFJlY3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEm
IGRhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlm
IHRoZSByZWN0IGlzIHRvbyBiaWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZs
b3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVj
dC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBh
ZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChy
ZWN0LngoKSwgcmVjdC53aWR0aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBl
bmR5ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwg
ZW5keSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8
fCByZWN0LnkoKSA8IDAgfHwgZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSBy
ZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAg
ICAgICBkZXN0eCA9IC1vcmlnaW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAg
ICBpZiAoZW5keCA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsK
LSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkg
PSByZWN0LnkoKTsKLSAgICBpbnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewot
ICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0K
LSAgICBpZiAoZW5keSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdo
dCgpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5n
IHdpbGwgYmUgY29waWVkLCBzbyBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1D
b2x1bW5zIDw9IDAgfHwgbnVtUm93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0g
ICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVD
b29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUg
Zm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJl
Y3QgaW1hZ2VSZWN0KG9yaWdpbngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFn
ZUFuZEFkanVzdFJlY3QoZGF0YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fp
cm9TdXJmYWNlU2V0RGV2aWNlU2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2Nh
bGUsIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAg
b3JpZ2lueSA9IGltYWdlUmVjdC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1f
c3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9u
IGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9n
aWNhbEFyZWEgPSBpbnRlcnNlY3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNh
bFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNl
LmdldCgpLCBJbnRTaXplKC1sb2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRS
ZWN0KEludFBvaW50KCksIGxvZ2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSk7Ci0gICAgfQot
Ci0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Rh
dGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVz
dWx0LT5kYXRhKCk7Ci0gICAgaW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0
cmlkZShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9
IDQgKiByZWN0LndpZHRoKCk7Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFE
c3QgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5
ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRl
cnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55
KSk7Ci0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAg
ICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9
IHJvdyArIHggKyBvcmlnaW54OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9y
Ojpjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAv
LyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAg
dW5zaWduZWQgYWxwaGEgPSAoKnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCByZWQgPSAoKnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBncmVlbiA9ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAg
ICAgdW5zaWduZWQgYmx1ZSA9ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAg
aWYgKHByZW11bHRpcGxpZWQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAg
ICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBi
bHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwot
ICAgICAgICB9Ci0gICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5l
IFVuaXQgbG9naWNhbFVuaXQoY29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGlu
YXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
Ci17Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICBy
ZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgx
LjAgLyByZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFVuaXQ+Ci1pbmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQm
IHZhbHVlLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZW
YWx1ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVt
T2ZWYWx1ZSA9PSBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCBy
ZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCBy
ZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBw
aXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBj
b25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29y
ZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3Rv
cmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4
ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4g
Z2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFj
a2luZ1N0b3JlUmVjdCwgbG9naWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXpl
LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1h
Z2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwg
SW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQo
cmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3Qg
YmFja2luZ1N0b3JlUmVjdCA9IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3Rl
bSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAg
ICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0g
ICAgcmV0dXJuIGdldEltYWdlRGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9n
aWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlw
bGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRl
U3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0
ID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29s
dXRpb25TY2FsZSk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3Jl
VW5pdChzb3VyY2VTaXplLCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0g
ICAgSW50UG9pbnQgc2NhbGVkRGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQs
IGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2lj
YWxTb3VyY2VSZWN0ID0gbG9naWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwg
bV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dp
Y2FsVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQo
c2NhbGVkU291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2Fs
ZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsg
c2NhbGVkU291cmNlUmVjdC54KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0
UG9pbnQueCgpICsgbG9naWNhbFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAw
KTsKLSAgICBBU1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdp
bnggPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkp
OwotCi0gICAgaW50IGVuZHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVj
dC5tYXhYKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBs
b2dpY2FsU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRo
KCkpOwotCi0gICAgaW50IG51bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2lj
YWxOdW1Db2x1bW5zID0gbG9naWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3Jp
Z2lueSA9IHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQ
b2ludC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0g
bG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJU
KGRlc3R5ID49IDApOwotICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
QVNTRVJUKG9yaWdpbnkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNl
UmVjdC5tYXhZKCkpOwotCi0gICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2Nh
bGVkU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQ
b2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0g
bV9zaXplLmhlaWdodCgpKTsKLSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBp
bnQgbG9naWNhbE51bVJvd3MgPSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8v
IFRoZSBzaXplIG9mIHRoZSBkZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRp
bmF0ZVN5c3RlbS4KLSAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0
aGUgZGVyaXZlZCBzdXJmYWNlIGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGlt
YWdlUmVjdChkZXN0eCwgZGVzdHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVz
dFJlY3QobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZh
Y2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBt
X3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5
ID0gaW1hZ2VSZWN0LnkoKTsKLQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNy
Y0J5dGVzUGVyUm93ID0gNCAqIHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3Ry
aWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7
Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkg
KiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0
X3B0cjx1bnNpZ25lZCo+KHBpeGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAg
ICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGlu
dCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCAr
IGRlc3R4OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBs
aWVkQVJHQkZyb21Db2xvcigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBj
YWxsIHBlciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVk
ID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3Nb
YmFzZXggKyAxXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsg
Ml07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQot
ICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxw
aGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQot
ICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMg
Y2Fpcm8gc3VyZmFjZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bS4KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5n
ZXQoKSwgbG9naWNhbERlc3R4LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dp
Y2FsTnVtUm93cyk7Ci0KLSAgICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2Uu
Z2V0KCkpIHsKLSAgICAgICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25l
IGluIExvZ2ljYWxDb29yZGluYXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJm
YWNlVG9Bbm90aGVyKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwg
SW50U2l6ZSgpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93
cyksIEludFNpemUobG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCks
IGxvZ2ljYWxEZXN0UG9pbnQueSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAgfQot
fQotCi0jaWYgIVBMQVRGT1JNKEdUSykKLXN0YXRpYyBjYWlyb19zdGF0dXNfdCB3cml0ZUZ1bmN0
aW9uKHZvaWQqIG91dHB1dCwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgaW50
IGxlbmd0aCkKLXsKLSAgICBpZiAoIXJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPHVpbnQ4X3Q+Kj4o
b3V0cHV0KS0+dHJ5QXBwZW5kKGRhdGEsIGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBDQUlST19T
VEFUVVNfV1JJVEVfRVJST1I7Ci0gICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOwotfQot
Ci1zdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBWZWN0b3I8dWludDhfdD4qIG91dHB1dCkKLXsKLSAgICBBU1NFUlRf
VU5VU0VEKG1pbWVUeXBlLCBtaW1lVHlwZSA9PSAiaW1hZ2UvcG5nIik7IC8vIE9ubHkgUE5HIG91
dHB1dCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4KLQotICAgIHJldHVybiBjYWlyb19zdXJmYWNlX3dy
aXRlX3RvX3BuZ19zdHJlYW0oaW1hZ2UsIHdyaXRlRnVuY3Rpb24sIG91dHB1dCkgPT0gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1M7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0Rh
dGEobWltZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsK
LSAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUo
KSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNl
NjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4pIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9f
Z2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotCi0gICAgVmVj
dG9yPHVpbnQ4X3Q+IGVuY29kZWRJbWFnZTsKLSAgICBpZiAoIWltYWdlIHx8ICFlbmNvZGVJbWFn
ZShpbWFnZSwgbWltZVR5cGUsICZlbmNvZGVkSW1hZ2UpKQotICAgICAgICByZXR1cm4geyB9Owot
Ci0gICAgcmV0dXJuIGVuY29kZWRJbWFnZTsKLX0KLQotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJ
bWFnZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJl
KTsKLQotICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBt
YWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0
KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWly
b19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBw
ZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRCbGVuZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwot
fQotI2VuZGlmCi0KLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkg
Y29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNP
U0lBKQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkKQotICAgICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwot
I2Vsc2UKLSAgICBpZiAobV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8SW1hZ2VCdWZmZXJEYXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVy
biAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVz
dGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBib29sIGZsaXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5j
ZSB0aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFj
dG9yIGhlcmUgaXMgYWx3YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxp
cFkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7
Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAg
IGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVS
RV9DVUJFX01BUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFj
ZS5nZXQoKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xD
b250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICB1aW50MzJfdCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0g
ICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1
ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RF
WFRVUkVfMkQsIG1fZGF0YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRl
eHR1cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0
YXJnZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhl
aWdodCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAg
ICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwot
ICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVybiB0cnVlOwotI2Vs
c2UKLSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRp
b25UZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNF
RF9QQVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAg
IHJldHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMDc2YWY0MDg5NmJhYWNkODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlz
aC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdl
YmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBD
by4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJD
YWlyb09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWly
by5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNv
bnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFz
ZTY0Lmg+CisKKyNpZiBVU0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0
bWFwSW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlv
bgorICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVo
YXZpb3IpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQor
eworICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0
eUZvclRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgp
KTsKKyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0
LnN0YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENv
bnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdT
dG9yZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250
ZXh0KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5h
dGlvbkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9u
Q29udGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRp
b25Db250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJh
d1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0
byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENv
cHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpk
cmF3UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBt
X2xvZ2ljYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1D
b2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JT
cGFjZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRl
ZCBhdCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6Okxp
bmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8
IChkZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0
Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNv
bnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAg
ICAgICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xv
ciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xv
ckNvbXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2Fz
dDx1aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3Jt
Q29sb3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2Ug
PT0gQ29sb3JTcGFjZTo6U1JHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1
aW50OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwor
ICAgICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3Ip
OworICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQo
Y29sb3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsK
KyAgICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNl
UmdiTFVUKTsKKyAgICB9Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVk
SW1hZ2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2Uu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4g
YmFzZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2Rl
ZEltYWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVU
eXBlICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBj
YWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPmNyKCkpOworICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVh
bGl0eSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlS
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIy
ZWExNzhiMzJjMDA5ZjVkODhkNWQ3MTZkZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5o
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1t
ZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5k
IDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdl
PiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZl
UmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisg
ICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29u
c3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJy
aWRlOworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JT
cGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xv
ckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZGQwYTE5ZjAxOTAwYzUwM2NjMmYyYjU1OWM1
OGIzNTFjOGQwYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0w
LDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFu
biA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisK
KyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBV
U0UoRUdMKQorI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UK
KyNpbmNsdWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWds
Lmg+CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVT
RShPUEVOR0xfRVMpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9w
ZW5HTFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNp
bmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRl
eHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09f
QUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0
aWMgaW5saW5lIHZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sK
KyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkp
OworICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIp
OworICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNp
emUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25T
Y2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlz
cGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOworCisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVy
ZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5n
IGl0CisgICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRl
eHR1cmUKKyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJl
KEdMX1RFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJF
XzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJh
bWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdF
KTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VO
UEFDS19BTElHTk1FTlQsIDEpOworCisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAg
LyogbGV2ZWwgKi8sIEdMX1JHQkEsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNpemUu
aGVpZ2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsK
KworICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgpOwor
CisgICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9uIG5v
bi1JbnRlbCBkcml2ZXJzLgorICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJlKGRl
dmljZSwgRkFMU0UpOworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3Vy
ZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCB0ZXh0dXJlLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxTaXplLmhlaWdodCgpKSk7
CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19T
VUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNsZWFyU3VyZmFjZShzdXJm
YWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWly
b0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChz
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShz
dXJmYWNlKSwgdGV4dHVyZSkpOworfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dp
Y2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJm
YWNlLCB1aW50MzJfdCB0ZXh0dXJlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4dHVyZSh0ZXh0dXJlKQoreworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBtX25pY29zaWFM
YXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7CisjZWxzZQorICAgIG1f
cGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCgpCit7CisjaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklDT1NJQSkKKyAgICBkb3duY2FzdDxOaWNv
c2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwo
KSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisKKyAgICBHTENvbnRleHQqIHByZXZpb3Vz
QWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworICAgIFBsYXRmb3JtRGlzcGxh
eTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpLT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIGdsRGVsZXRl
VGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
CisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMo
MSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlmCisKKyAgICBpZiAocHJldmlvdXNBY3Rp
dmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigp
IGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAgcmV0dXJuIG1fbmljb3NpYUxheWVyLmdl
dCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQorICAgICAgICByZXR1cm4gdGhpczsKKyNl
bmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0
Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKK3sKKyAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwgIlNpbmNlIHRoZSBIaURQSSBDYW52YXMg
ZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlvbiBmYWN0b3IgaGVyZSBpcyBhbHdheXMg
MS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8fCBmbGlwWSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OworICAgIHN3aXRjaCAodGFyZ2V0KSB7Cisg
ICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RF
WFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAg
ICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjYWly
b19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQ
bGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpKTsKKyAgICBjb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1aW50MzJfdCBmYm87CisgICAgZ2xHZW5G
cmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xf
Q09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSwgMCk7CisgICAgZ2xC
aW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlKTsKKyAgICBn
bENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJuYWxmb3JtYXQsIDAsIDAsIG1faW50ZXJu
YWxTaXplLndpZHRoKCksIG1faW50ZXJuYWxTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRU
ZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9G
UkFNRUJVRkZFUiwgMCk7CisgICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJz
KDEsICZmYm8pOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTKQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29t
cG9zaXRvckJ1ZmZlcigpCit7CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6
c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNv
bnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9j
b21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2Nv
bXBvc2l0b3JUZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAg
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xf
TElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdO
TUVOVCwgMSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBt
X2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdC
QSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRv
cHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9E
ZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwg
bV9pbnRlcm5hbFNpemUud2lkdGgoKSwgbV9pbnRlcm5hbFNpemUuaGVpZ2h0KCkpKTsKKyAgICBt
X2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNl
LmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwg
Q0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAgICBHTENvbnRleHQqIHByZXZp
b3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgpOworCisgICAgaWYgKCFtX2Nv
bXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKTsKKwor
ICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAgICAgIFt0aGlzXShUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkpOworICAgICAgICAgICAgICAg
IHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1faW50ZXJuYWxTaXplLCBUZXh0dXJlTWFw
cGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7CisgICAgICAgICAgICB9OworI2lmIFVTRShO
SUNPU0lBKQorICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50
TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkucHJveHkoKSk7
CisjZWxzZQorICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVyUHJveHkpOwor
I2VuZGlmCisgICAgfQorCisgICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2UgY291bGQganVz
dCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0IHRoYXQgYnJl
YWtzIHRoZSBjYXNlcworICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBjb250ZW50IGFs
cmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0IGNvcHkgdGhl
IGNvbnRlbnQKKyAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KKyAgICBjYWlyb19z
ZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwg
MCwgMCk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlS
T19PUEVSQVRPUl9TT1VSQ0UpOworICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRvckNyLmdldCgp
KTsKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0
aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Cit9CisjZWxzZQordm9pZCBJbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1h
cHBlciYgdGV4dHVyZU1hcHBlciwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXRSZWN0LCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBvcGFjaXR5KQoreworICAgIEFTU0VS
VChtX3RleHR1cmUpOworCisgICAgLy8gQ2Fpcm8gbWF5IGNoYW5nZSB0aGUgYWN0aXZlIGNvbnRl
eHQsIHNvIHdlIG1ha2Ugc3VyZSB0byBjaGFuZ2UgaXQgYmFjayBhZnRlciBmbHVzaGluZy4KKyAg
ICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgp
OworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKyAgICBwcmV2aW91
c0FjdGl2ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgc3RhdGljX2Nhc3Q8
VGV4dHVyZU1hcHBlckdMJj4odGV4dHVyZU1hcHBlcikuZHJhd1RleHR1cmUobV90ZXh0dXJlLCBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBtX2ludGVybmFsU2l6ZSwgdGFyZ2V0UmVjdCwg
bWF0cml4LCBvcGFjaXR5KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45NDQ3NDRhZDhhZDFmOThhMTM3MDc0OTNkMWI5ZDJlODAyYTY5NGZjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJD
YWlyb0dMU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJ
QSkKKyNpbmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNl
bHNlCisjaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0Uo
TklDT1NJQSkKKyAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVy
SW1wbDo6Q2xpZW50CisjZWxzZQorICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgor
ICAgICwgcHVibGljIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01B
S0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOwor
cHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKworICAgIH5JbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZCgpOworCisgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXll
cigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdDR0xl
bnVtIHRhcmdldCwgUGxhdGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVt
IGludGVybmFsZm9ybWF0LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiYmKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNv
bXBvc2l0b3JCdWZmZXIoKTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlk
ZTsKKyNpZiAhVVNFKE5JQ09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyUHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVy
UHJveHkuY29weVJlZigpOyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShD
T09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3Np
YTo6Q29udGVudExheWVyPiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlm
CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKKyAgICBS
ZWZQdHI8Y2Fpcm9fdD4gbV9jb21wb3NpdG9yQ3I7CisgICAgdWludDMyX3QgbV9jb21wb3NpdG9y
VGV4dHVyZSB7IDAgfTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZSB7IDAgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykgJiYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MmNmNTc2MDhkMDk3NzVk
M2ZiOTE4ZWMwNWNkYjc0MzE0NWY5NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3Vy
ZmFjZUJhY2tlbmQuaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisj
aW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKK3sKKyAgICBz
dGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IHNfc3VyZmFjZURhdGFLZXk7CisKKyAgICBJbnRT
aXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0
aChDQUlST19GT1JNQVRfQVJHQjMyLCBpbnRlcm5hbFNpemUud2lkdGgoKSk7CisgICAgdm9pZCog
c3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGludGVybmFsU2l6ZS5o
ZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFsdWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0
YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIGludGVybmFsU2l6ZS53aWR0aCgpLCBpbnRlcm5hbFNp
emUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0YShz
dXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQqIGRh
dGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcgSW1h
Z2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworSW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1
cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1B
R0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpwbGF0
Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBs
b29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpOworICAgIGludCBzdHJpZGUgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdldCgpKTsKKyAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICB1bnNp
Z25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWduZWQqPihkYXRhU3JjICsgc3Ry
aWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sb2dpY2FsU2l6ZS53aWR0
aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7CisgICAg
ICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBp
eGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENv
bG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVb
cGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOworICAgICAgICAgICAgKnBp
eGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgIH0K
KyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2Uu
Z2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjMwZGI3OWJhOWEzZTZkNmRiMWM5MmMzMDZhNDc1MjA3MTRkYzNhMGIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHpl
Y2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAo
QmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUg
PHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3Vy
ZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93Kik7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2Uo
Y29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5k
MTUyMDk0N2RiOTg1OTM1NTAwZjVkZGUwMDZlY2U4ODZiYjRlMWQ3Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVk
ZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xv
clV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVz
Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZm
ZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSkKKyAgICA6IElt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQor
eworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX3N1cmZhY2UuZ2V0KCkpID09IENB
SVJPX1NUQVRVU19TVUNDRVNTKTsKKworICAgIFJlZlB0cjxjYWlyb190PiBjciA9IGFkb3B0UmVm
KGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UuZ2V0KCkpKTsKKyAgICBtX3BsYXRmb3JtQ29udGV4dC5z
ZXRDcihjci5nZXQoKSk7CisgICAgbV9jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRl
eHQ+KEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y3JlYXRlRmFjdG9yeShtX3BsYXRmb3JtQ29u
dGV4dCkpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2NvbnRleHQ7Cit9CisKK3Vu
c2lnbmVkIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3coKSBjb25z
dAoreworICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNl
LmdldCgpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3Rv
cmU6IHsKKyAgICAgICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgobV9zdXJmYWNlLmdldCgpKSwKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KG1fc3VyZmFjZS5nZXQoKSkpKTsKKworICAgICAgICBhdXRvIGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKGNvcHkuZ2V0KCkpKTsKKyAgICAgICAgY2Fpcm9fc2V0X29wZXJhdG9y
KGNyLmdldCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOworICAgICAgICBjYWlyb19zZXRfc291
cmNlX3N1cmZhY2UoY3IuZ2V0KCksIG1fc3VyZmFjZS5nZXQoKSwgMCwgMCk7CisgICAgICAgIGNh
aXJvX3BhaW50KGNyLmdldCgpKTsKKworICAgICAgICByZXR1cm4gY29weTsKKyAgICB9CisKKyAg
ICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gbV9zdXJmYWNlOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpj
YWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3QKK3sKKyAgICBCYWNraW5nU3RvcmVDb3B5
IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2Uu
Z2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSAmJiBjYWlyb19zdXJmYWNlX2dldF9j
b250ZW50KG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKKyAg
ICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7CisgICAgZWxzZQorICAg
ICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlOworICAgIHJldHVybiBjb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJm
YWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1
c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAg
IGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJu
IGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
ZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBp
bWFnZURhdGE7Cit9CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJ
bWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBjYWlyb19p
bWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lkIEltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBhcnJheSwgY29uc3Qg
SW50U2l6ZSYgc3JjU2l6ZSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQoreworICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwgc3JjU2l6
ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0U2Nh
bGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQo
KSwgZGVzdFBvaW50LngoKSwgZGVzdFBvaW50LnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBz
cmNSZWN0U2NhbGVkLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zMzhlYWIwNmQzYTY5NWE4ZWQ4NWVlNDU0YWNhMDUxZGU1M2Vi
ZWIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENB
SVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0Jiwg
Q29vcmRpbmF0ZVN5c3RlbSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmLCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtKSBvdmVycmlkZTsKKworcHJv
dGVjdGVkOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CisKKyAg
ICBOYXRpdmVJbWFnZVB0ciBjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3Q7CisgICAg
dW5zaWduZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZTsKKworICAgIG11dGFibGUgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOworICAgIFBsYXRmb3JtQ29udGV4dENhaXJv
IG1fcGxhdGZvcm1Db250ZXh0IHsgbnVsbHB0ciB9OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFw
aGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAyYTYxZTM1OTk0NmVmNGJhZDY5MjNmZGJmNzU2NGEyZTM5Zjc2
OWM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLSNk
ZWZpbmUgSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faAotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgotCi0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJQbGF0Zm9ybUxheWVy
LmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94
eVByb3ZpZGVyLmgiCi0jZW5kaWYKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
ICYmIFVTRShOSUNPU0lBKQotI2luY2x1ZGUgIk5pY29zaWFDb250ZW50TGF5ZXJUZXh0dXJlTWFw
cGVySW1wbC5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgSW50U2l6
ZTsKLWNsYXNzIFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk7Ci0KLWNsYXNzIEltYWdl
QnVmZmVyRGF0YQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKE5J
Q09TSUEpCi0gICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlcklt
cGw6OkNsaWVudAotI2Vsc2UKLSAgICA6IHB1YmxpYyBQbGF0Zm9ybUxheWVyCi0jZW5kaWYKLSNl
bmRpZgotewotcHVibGljOgotICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiwgUmVu
ZGVyaW5nTW9kZSk7Ci0gICAgdmlydHVhbCB+SW1hZ2VCdWZmZXJEYXRhKCk7Ci0KLSAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7Ci0gICAgUGxhdGZvcm1Db250ZXh0Q2Fpcm8g
bV9wbGF0Zm9ybUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4g
bV9jb250ZXh0OwotICAgIEludFNpemUgbV9zaXplOwotICAgIFJlbmRlcmluZ01vZGUgbV9yZW5k
ZXJpbmdNb2RlOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICB2b2lk
IGNyZWF0ZUNhaXJvR0xTdXJmYWNlKCk7Ci0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1Mp
Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVlZGVkKCkgb3ZlcnJp
ZGU7Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBw
cm94eSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92
ZXJyaWRlOwotI2VuZGlmCi0gICAgdm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOwotICAgIHVpbnQz
Ml90IG1fY29tcG9zaXRvclRleHR1cmU7Ci0gICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRv
ckNyOwotCi0jaWYgVVNFKE5JQ09TSUEpCi0gICAgUmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXll
cj4gbV9uaWNvc2lhTGF5ZXI7Ci0jZWxzZQotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZv
cm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQcm94eTsKLSNlbmRpZgotI2Vsc2UKLSAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZs
b2F0UmVjdCYgdGFyZ2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNp
dHkpOwotI2VuZGlmCi0gICAgdWludDMyX3QgbV90ZXh0dXJlOwotI2VuZGlmCi19OwotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBVU0UoQ0FJUk8pCi0KLSNlbmRpZiAvLyBJ
bWFnZUJ1ZmZlckRhdGFDYWlyb19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlhMmJjZTlhOTc1OTc1MGIwNjE3NDYxMTE4MWY2MmIzNzNkNGZkNzIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcApAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVj
a2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHpl
IDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChC
ZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uaCIKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1
ZGUgIkdSZWZQdHJHdGsuaCIKKyNpbmNsdWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgorI2luY2x1
ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgIVBMQVRGT1JNKEdUSykKKworc3RhdGljIGNh
aXJvX3N0YXR1c190IHdyaXRlRnVuY3Rpb24odm9pZCogb3V0cHV0LCBjb25zdCB1bnNpZ25lZCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgaWYgKCFyZWludGVycHJldF9jYXN0
PFZlY3Rvcjx1aW50OF90Pio+KG91dHB1dCktPnRyeUFwcGVuZChkYXRhLCBsZW5ndGgpKQorICAg
ICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1dSSVRFX0VSUk9SOworICAgIHJldHVybiBDQUlST19T
VEFUVVNfU1VDQ0VTUzsKK30KKworc3RhdGljIGJvb2wgZW5jb2RlSW1hZ2UoY2Fpcm9fc3VyZmFj
ZV90KiBpbWFnZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgVmVjdG9yPHVpbnQ4X3Q+KiBvdXRw
dXQpCit7CisgICAgQVNTRVJUX1VOVVNFRChtaW1lVHlwZSwgbWltZVR5cGUgPT0gImltYWdlL3Bu
ZyIpOyAvLyBPbmx5IFBORyBvdXRwdXQgaXMgc3VwcG9ydGVkIGZvciBub3cuCisKKyAgICByZXR1
cm4gY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZUZ1bmN0aW9u
LCBvdXRwdXQpID09IENBSVJPX1NUQVRVU19TVUNDRVNTOworfQorCitWZWN0b3I8dWludDhfdD4g
ZGF0YShjYWlyb19zdXJmYWNlX3QqIGltYWdlLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRp
b25hbDxkb3VibGU+KQoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2U7CisgICAg
aWYgKCFpbWFnZSB8fCAhZW5jb2RlSW1hZ2UoaW1hZ2UsIG1pbWVUeXBlLCAmZW5jb2RlZEltYWdl
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gZW5jb2RlZEltYWdlOworfQorCisj
ZWxzZQorCitzdGF0aWMgYm9vbCBlbmNvZGVJbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Us
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgR1VuaXF1
ZU91dFB0cjxnY2hhcj4mIGJ1ZmZlciwgZ3NpemUmIGJ1ZmZlclNpemUpCit7CisgICAgLy8gTGlz
dCBvZiBzdXBwb3J0ZWQgaW1hZ2UgZW5jb2RpbmcgdHlwZXMgY29tZXMgZnJvbSB0aGUgR2RrUGl4
YnVmIGRvY3VtZW50YXRpb24uCisgICAgLy8gaHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ2Rr
LXBpeGJ1Zi9zdGFibGUvZ2RrLXBpeGJ1Zi1GaWxlLXNhdmluZy5odG1sI2dkay1waXhidWYtc2F2
ZS10by1idWZmZXJ2CisKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVUeXBlLnN1YnN0cmluZyhzaXpl
b2YgImltYWdlIik7CisgICAgaWYgKHR5cGUgIT0gImpwZWciICYmIHR5cGUgIT0gInBuZyIgJiYg
dHlwZSAhPSAidGlmZiIgJiYgdHlwZSAhPSAiaWNvIiAmJiB0eXBlICE9ICJibXAiKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gcGl4YnVmOworICAgIGlm
ICh0eXBlID09ICJqcGVnIikgeworICAgICAgICAvLyBKUEVHIGRvZXNuJ3Qgc3VwcG9ydCBhbHBo
YSBjaGFubmVsLiBUaGUgPGNhbnZhcz4gc3BlYyBzdGF0ZXMgdGhhdCB0b0RhdGFVUkwoKSBtdXN0
IGVuY29kZSBhIFBvcnRlci1EdWZmCisgICAgICAgIC8vIGNvbXBvc2l0ZSBzb3VyY2Utb3ZlciBi
bGFjayBmb3IgaW1hZ2UgdHlwZXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBhbHBoYS4KKyAgICAgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbmV3U3VyZmFjZTsKKyAgICAgICAgaWYgKGNhaXJvX3N1
cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKSB7Cisg
ICAgICAgICAgICBuZXdTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlKSwKKyAgICAg
ICAgICAgICAgICBDQUlST19GT1JNQVRfUkdCMjQsCisgICAgICAgICAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCisgICAgICAgICAgICAgICAgY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpLAorICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlKSkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgSW50U2l6ZSBzaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlKTsKKyAgICAg
ICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShD
QUlST19GT1JNQVRfUkdCMjQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgICAg
ICAgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG5ld1N1cmZh
Y2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQo
KSwgc3VyZmFjZSwgMCwgMCk7CisgICAgICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcGl4YnVmID0gYWRvcHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4
YnVmKG5ld1N1cmZhY2UuZ2V0KCkpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGl4YnVmID0gYWRv
cHRHUmVmKGNhaXJvU3VyZmFjZVRvR2RrUGl4YnVmKHN1cmZhY2UpKTsKKyAgICBpZiAoIXBpeGJ1
ZikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOworICAgIGlmICh0eXBlID09ICJqcGVnIiAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAu
MCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKKyAgICAgICAgU3RyaW5nIHF1YWxpdHlTdHJpbmcgPSBT
dHJpbmc6Om51bWJlcihzdGF0aWNfY2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwLjAgKyAwLjUpKTsK
KyAgICAgICAgZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihwaXhidWYuZ2V0KCksICZidWZmZXIu
b3V0UHRyKCksICZidWZmZXJTaXplLCB0eXBlLnV0ZjgoKS5kYXRhKCksICZlcnJvci5vdXRQdHIo
KSwgInF1YWxpdHkiLCBxdWFsaXR5U3RyaW5nLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworICAgIH0g
ZWxzZQorICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1Zi5nZXQoKSwgJmJ1
ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEoKSwgJmVycm9yLm91
dFB0cigpLCBOVUxMKTsKKworICAgIHJldHVybiAhZXJyb3I7Cit9CisKK1ZlY3Rvcjx1aW50OF90
PiBkYXRhKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPGdjaGFyPiBidWZm
ZXI7CisgICAgZ3NpemUgYnVmZmVyU2l6ZTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLCBt
aW1lVHlwZSwgcXVhbGl0eSwgYnVmZmVyLCBidWZmZXJTaXplKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIFZlY3Rvcjx1aW50OF90PiBpbWFnZURhdGE7CisgICAgaW1hZ2VEYXRhLmFwcGVu
ZChidWZmZXIuZ2V0KCksIGJ1ZmZlclNpemUpOworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisK
KyNlbmRpZiAvLyAhUExBVEZPUk0oR1RLKQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uM2RlMzNjN2NhMDk2Y2FkODkyMjYzNzM5Yzc1Zjk1YjIwZmVkYzAzNwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlh
IFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitWZWN0b3I8dWludDhfdD4gZGF0YShjYWlyb19zdXJmYWNl
X3QqLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpOwor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAKaW5kZXggNDk2ZWNhMzI0ZDNlNGRhMjJmY2E1OTk5OGViNWVmNWVlNzNkMjA5YS4u
NzIyZWVmZmU2YzllNWZkMjg2NmJlMjcyODdhNDcwMjEwMGNiZmM1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcApAQCAtNTAwLDcgKzUwMCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFn
ZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRmxvYXRTaXplIGJ1
ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGJ1ZmZlci5zaXplRm9yRGVzdGluYXRpb25TaXplKGRlc3RS
ZWN0LnNpemUoKSk7CisgICAgRmxvYXRTaXplIGJ1ZmZlckRlc3RpbmF0aW9uU2l6ZSA9IGRlc3RS
ZWN0LnNpemUoKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBidWZmZXIuY29w
eU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKIAogICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAzNTZmMTk2NGQwOTU1MmJkMWEyN2ZjMGQyMjgwOWQ4YTNkYTZiNzViLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsNjU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2gg
TW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgiCi0jaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8Q29yZUdyYXBoaWNz
L0NvcmVHcmFwaGljcy5oPgotI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgotI2luY2x1ZGUg
PHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvRGVi
dWdIZWFwLmg+Ci0jaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBQTEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJVVElVdGls
aXRpZXMuaCIKLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3Vy
ZmFjZVNQSS5oPgotI2VuZGlmCi0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQg
QVJHQjMyIC0+IEFSR0IzMiByZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FS
R0IzMiBQTEFURk9STShJT1NfRkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLURFQ0xB
UkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLURFRklORV9B
TExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotCi1zdGF0aWMgRmxv
YXRTaXplIHNjYWxlU2l6ZVRvVXNlclNwYWNlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGJhY2tpbmdTdG9yZVNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFs
U2l6ZSkKLXsKLSAgICBmbG9hdCB4TWFnbmlmaWNhdGlvbiA9IHN0YXRpY19jYXN0PGZsb2F0Pihi
YWNraW5nU3RvcmVTaXplLndpZHRoKCkpIC8gaW50ZXJuYWxTaXplLndpZHRoKCk7Ci0gICAgZmxv
YXQgeU1hZ25pZmljYXRpb24gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYmFja2luZ1N0b3JlU2l6ZS5o
ZWlnaHQoKSkgLyBpbnRlcm5hbFNpemUuaGVpZ2h0KCk7Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShs
b2dpY2FsU2l6ZS53aWR0aCgpICogeE1hZ25pZmljYXRpb24sIGxvZ2ljYWxTaXplLmhlaWdodCgp
ICogeU1hZ25pZmljYXRpb24pOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb2xvclNwYWNlOwotI2lmIFBMQVRGT1JNKENPQ09BKQotICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOwotICAgIHN3aXRjaCAoQ0dDb250
ZXh0R2V0VHlwZShjZ0NvbnRleHQpKSB7Ci0gICAgY2FzZSBrQ0dDb250ZXh0VHlwZUJpdG1hcDoK
LSAgICAgICAgY29sb3JTcGFjZSA9IENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250
ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCi0gICAgY2FzZSBrQ0dD
b250ZXh0VHlwZUlPU3VyZmFjZToKLSAgICAgICAgY29sb3JTcGFjZSA9IENHSU9TdXJmYWNlQ29u
dGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAg
ICBkZWZhdWx0OgotICAgICAgICBjb2xvclNwYWNlID0gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2
aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvbG9yU3BhY2Up
Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwotI2Vsc2UKLSAgICBj
b2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbmRpZgotICAgIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUg
c2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250
ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgY29sb3JTcGFj
ZS5nZXQoKSwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgc3VjY2VzcykpOwotCi0gICAgaWYgKCFz
dWNjZXNzKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJl
c3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBncmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZl
ci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVy
OwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wm
IHN1Y2Nlc3MpCi0gICAgOiBtX2xvZ2ljYWxTaXplKHNpemUpCi0gICAgLCBtX3Jlc29sdXRpb25T
Y2FsZShyZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgc3VjY2VzcyA9IGZhbHNlOyAvLyBNYWtlIGVh
cmx5IHJldHVybiBtZWFuIGZhaWx1cmUuCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZihy
ZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkpOwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9
IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYg
KCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50
U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdp
ZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXpl
OwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBBY2Nl
bGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkg
PD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lO
R19TVE9SRSkKLSAgICBDaGVja2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IHdpZHRoID0gbV9zaXpl
LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiBoZWlnaHQgPSBtX3Np
emUuaGVpZ2h0KCk7Ci0jZW5kaWYKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MK
LSAgICBtX2RhdGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3Zl
cmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6
ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRP
dmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVz
UGVyUm93OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSW50U2l6
ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOwotICAgIGlmICh3aWR0aC51bnNh
ZmVHZXQoKSA+IG1heFNpemUud2lkdGgoKSB8fCBoZWlnaHQudW5zYWZlR2V0KCkgPiBtYXhTaXpl
LmhlaWdodCgpKQotICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFsc2U7Ci0jZWxzZQot
ICAgIEFTU0VSVChyZW5kZXJpbmdNb2RlID09IFVuYWNjZWxlcmF0ZWQpOwotI2VuZGlmCi0KLSAg
ICBtX2RhdGEuY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Ci0KLSAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjZ0NvbnRleHQ7Ci0gICAgaWYgKGFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBGbG9hdFNpemUgdXNl
ckJvdW5kcyA9IHNpemVGb3JEZXN0aW5hdGlvblNpemUoRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdl
dCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpKTsKLSAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBJT1N1
cmZhY2U6OmNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgSW50U2l6ZSh1c2VyQm91bmRz
KSwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGlmIChtX2RhdGEuc3VyZmFjZSkgewotICAgICAgICAg
ICAgY2dDb250ZXh0ID0gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0
V2luZG93KTsKLSAgICAgICAgICAgIGlmIChjZ0NvbnRleHQpCi0gICAgICAgICAgICAgICAgQ0dD
b250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwg
dXNlckJvdW5kcykpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZGF0YS5z
dXJmYWNlID0gbnVsbHB0cjsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFN
KGhvc3RXaW5kb3cpOwotI2VuZGlmCi0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAg
ICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBm
YWxsIGJhY2sgdG8gbm9uLWFjY2VsZXJhdGVkIHBhdGguCi0gICAgfQotCi0gICAgaWYgKCFhY2Nl
bGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIG1fZGF0YS5kYXRhID0gSW1hZ2VCdWZmZXJNYWxs
b2M6OnRyeVplcm9lZE1hbGxvYyhtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSAqIG1f
ZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIGlmICghbV9kYXRhLmRhdGEp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KG1fZGF0YS5kYXRhKSAmIDMpKTsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAg
bV9kYXRhLmJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NH
Qml0bWFwQnl0ZU9yZGVyMzJIb3N0OwotI2Vsc2UKLSAgICAgICAgbV9kYXRhLmJpdG1hcEluZm8g
PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7Ci0jZW5kaWYKLSAgICAgICAgY2dDb250
ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUobV9kYXRhLmRhdGEsIG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLndpZHRoKCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgp
LCA4LCBtX2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBt
X2RhdGEuYml0bWFwSW5mbykpOwotICAgICAgICBjb25zdCBhdXRvIHJlbGVhc2VJbWFnZURhdGEg
PSBbXSAodm9pZCosIGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCkgewotICAgICAgICAgICAgSW1h
Z2VCdWZmZXJNYWxsb2M6OmZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOwotICAgICAgICB9
OwotICAgICAgICAvLyBDcmVhdGUgYSBsaXZlIGltYWdlIHRoYXQgd3JhcHMgdGhlIGRhdGEuCi0g
ICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gobV9kYXRhLmRhdGEsIG51bUJ5dGVz
LnVuc2FmZUdldCgpKTsKLSAgICAgICAgbV9kYXRhLmRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZl
R2V0KCksIHJlbGVhc2VJbWFnZURhdGEpKTsKLQotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEuY29udGV4dCA9IG1ha2VVbmlxdWU8
R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwotICAgIH0KLQotICAgIGNvbnRleHQo
KS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKLSAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1t
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgY29udGV4dCgpLmFwcGx5RGV2
aWNlU2NhbGVGYWN0b3IobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgc3VjY2VzcyA9IHRydWU7
Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBpbWFnZUNvbG9yU3BhY2UsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCYg
c3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY2FjaGVk
Q0dDb2xvclNwYWNlKGltYWdlQ29sb3JTcGFjZSksIHJlbmRlcmluZ01vZGUsIGhvc3RXaW5kb3cs
IHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7
Ci0KLUZsb2F0U2l6ZSBJbWFnZUJ1ZmZlcjo6c2l6ZUZvckRlc3RpbmF0aW9uU2l6ZShGbG9hdFNp
emUgZGVzdGluYXRpb25TaXplKSBjb25zdAotewotICAgIHJldHVybiBzY2FsZVNpemVUb1VzZXJT
cGFjZShkZXN0aW5hdGlvblNpemUsIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBpbnRlcm5hbFNp
emUoKSk7Ci19Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc2l6
ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAvLyBtZW1vcnlDb3N0
KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBu
ZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cu
Ci0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBpbnRlcm5hbFNpemUoKSBiZWNhdXNlIGl0IGRv
ZXNuJ3QgZG8gYW55IHBvaW50ZXIgY2hhc2luZy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNz
IG1fZGF0YS5zdXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQg
ZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2Fm
ZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0
ZXMoKSBkb2Vzbid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDQg
KiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICogaW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7Ci19Ci0K
LXNpemVfdCBJbWFnZUJ1ZmZlcjo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKLXsKLSAgICAv
LyBleHRlcm5hbE1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBh
IEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2Ug
YWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5z
dXJmYWNlIGJlY2F1c2UgdGhlIHN1cmZhY2UgY2FuIG9ubHkgYmUgYXNzaWduZWQgZHVyaW5nIGNv
bnN0cnVjdGlvbiBvZiB0aGlzIEltYWdlQnVmZmVyLgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nl
c3MgbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKSBiZWNhdXNlIHRvdGFsQnl0ZXMoKSBkb2Vz
bid0IGNoYXNlIHBvaW50ZXJzLgotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0
dXJuIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0jZW5k
aWYKLQotR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpIGNvbnN0Ci17Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBpZiAobV9kYXRhLnN1
cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250
ZXh0KCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIENHQ29udGV4dEZsdXNoKGNv
bnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFnZVJlZiBpbWFnZSwgY29u
c3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIGlmIChpbWFnZSAmJiAoQ0dJbWFnZUdldFdpZHRo
KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkp
KQotICAgICAgICByZXR1cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGlt
YWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpKSk7
Ci0gICAgcmV0dXJuIGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRt
YXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdl
LCBJbnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNr
aW5nU3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1h
Z2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxT
aXplKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1h
cENvbnRleHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0
KCksIDgsIDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRN
b2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRD
bGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxv
Z2ljYWxTaXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IHNj
YWxlU2l6ZVRvVXNlclNwYWNlKGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCBpbnRlcm5h
bFNpemUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQo
KSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShj
b250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdl
KSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1f
cmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZp
b3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5n
SWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGludGVybmFsU2l6ZSgpLCBsb2dpY2FsU2l6ZSgpLCBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1
dGlvbik7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2Uoc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGltYWdl
QnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKLSAgICBJbnRTaXplIGxvZ2ljYWxTaXplID0gaW1hZ2VC
dWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0gaW1h
Z2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotICAgIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVh
dGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RG
TW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3Rv
cmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUJhY2tp
bmdTdG9yZUNvcHkgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkKLXsKLSAgICByZXR1
cm4gRG9udENvcHlCYWNraW5nU3RvcmU7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBp
bWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAg
IHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1h
Z2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdl
QnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19
Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENv
cHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0
ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6
ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRh
LmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgp
LCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQot
ICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0K
LSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmco
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXIt
Pm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAg
IAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25T
Y2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRh
LmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJ
T1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIo
V1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxl
KTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdT
dG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAg
ICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29u
dGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8g
b3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1h
Z2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1h
Z2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4
dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdl
PiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3Vy
IG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFn
ZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJp
bmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENv
cHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0
LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRl
eHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSBy
ZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVt
KQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChw
aXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3Jj
UmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4
dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJy
YXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3Qm
IHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVj
dCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVT
eXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAg
aWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpw
dXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBz
Y2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNp
emUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0
aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwg
c2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNp
emUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZv
cmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVz
dGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFp
bmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEs
IDAsIDApKTsKLX0KLQotc3RhdGljIGlubGluZSBDRlN0cmluZ1JlZiBqcGVnVVRJKCkKLXsKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKSB8fCBQTEFURk9STShXSU4pCi0gICAgc3RhdGljIGNvbnN0
IENGU3RyaW5nUmVmIGtVVFR5cGVKUEVHID0gQ0ZTVFIoInB1YmxpYy5qcGVnIik7Ci0jZW5kaWYK
LSAgICByZXR1cm4ga1VUVHlwZUpQRUc7Ci19Ci0gICAgCi1zdGF0aWMgUmV0YWluUHRyPENGU3Ry
aW5nUmVmPiB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KQotewotICAgIC8vIEZJWE1FOiBXaHkgZG9lc24ndCBpT1MgdXNlIHRoZSBDb3JlU2VydmljZXMg
dmVyc2lvbj8KLSNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZSht
aW1lVHlwZSkuY3JlYXRlQ0ZTdHJpbmcoKTsKLSNlbHNlCi0gICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsgLy8gSXQgaXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgotCi0gICAgLy8g
RklYTUU6IEFkZCBXaW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hl
biBhIHdheSB0byBjb252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5k
LgotICAgIC8vIEZvciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8
cmRhcjovL3Byb2JsZW0vNjA5NTI4Nj4uCi0gICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtV
VFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwotICAgIHN0YXRpYyBjb25zdCBDRlN0cmlu
Z1JlZiBrVVRUeXBlR0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOwotCi0gICAgaWYg
KGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCi0g
ICAgICAgIHJldHVybiBrVVRUeXBlUE5HOwotICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShtaW1lVHlwZSwgImltYWdlL2pwZWciKSkKLSAgICAgICAgcmV0dXJuIGpwZWdVVEko
KTsKLSAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFn
ZS9naWYiKSkKLSAgICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4ga1VUVHlwZVBORzsKLSNlbmRpZgotfQotCi1zdGF0aWMgYm9v
bCBlbmNvZGVJbWFnZShDR0ltYWdlUmVmIGltYWdlLCBDRlN0cmluZ1JlZiB1dGksIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQotewotICAgIGlmICghaW1h
Z2UgfHwgIXV0aSB8fCAhZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBk
ZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0
YSwgdXRpLCAxLCAwKSk7Ci0gICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gaW1hZ2VQcm9wZXJ0aWVzOwot
ICAgIGlmIChDRkVxdWFsKHV0aSwganBlZ1VUSSgpKSAmJiBxdWFsaXR5ICYmICpxdWFsaXR5ID49
IDAuMCAmJiAqcXVhbGl0eSA8PSAxLjApIHsKLSAgICAgICAgLy8gQXBwbHkgdGhlIGNvbXByZXNz
aW9uIHF1YWxpdHkgdG8gdGhlIEpQRUcgaW1hZ2UgZGVzdGluYXRpb24uCi0gICAgICAgIGF1dG8g
Y29tcHJlc3Npb25RdWFsaXR5ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JE
ZWZhdWx0LCBrQ0ZOdW1iZXJEb3VibGVUeXBlLCAmKnF1YWxpdHkpKTsKLSAgICAgICAgY29uc3Qg
dm9pZCoga2V5ID0ga0NHSW1hZ2VEZXN0aW5hdGlvbkxvc3N5Q29tcHJlc3Npb25RdWFsaXR5Owot
ICAgICAgICBjb25zdCB2b2lkKiB2YWx1ZSA9IGNvbXByZXNzaW9uUXVhbGl0eS5nZXQoKTsKLSAg
ICAgICAgaW1hZ2VQcm9wZXJ0aWVzID0gYWRvcHRDRihDRkRpY3Rpb25hcnlDcmVhdGUoMCwgJmtl
eSwgJnZhbHVlLCAxLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGlj
dGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7Ci0gICAgfQotCi0gICAgLy8gU2V0dGluZyBrQ0dJbWFn
ZURlc3RpbmF0aW9uQmFja2dyb3VuZENvbG9yIHRvIGJsYWNrIGZvciBKUEVHIGltYWdlcyBpbiBp
bWFnZVByb3BlcnRpZXMgd291bGQgc2F2ZSBzb21lIG1hdGgKLSAgICAvLyBpbiB0aGUgY2FsbGlu
ZyBmdW5jdGlvbnMsIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yay4KLQotICAgIENHSW1hZ2VE
ZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0
aWVzLmdldCgpKTsKLSAgICByZXR1cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGlu
YXRpb24uZ2V0KCkpOwotfQotCi1zdGF0aWMgU3RyaW5nIGRhdGFVUkwoQ0ZEYXRhUmVmIGRhdGEs
IGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7
Ci0gICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoZGF0YSksIENGRGF0YUdldExlbmd0
aChkYXRhKSwgYmFzZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsg
IjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8dWludDhfdD4gZGF0
YVZlY3RvcihDRkRhdGFSZWYgY2ZEYXRhKQotewotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwot
ICAgIGRhdGEuYXBwZW5kKENGRGF0YUdldEJ5dGVQdHIoY2ZEYXRhKSwgQ0ZEYXRhR2V0TGVuZ3Ro
KGNmRGF0YSkpOwotICAgIHJldHVybiBkYXRhOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRv
RGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHks
IFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgaWYg
KGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRp
b24pKQotICAgICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7Ci0gICAg
cmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29u
c3QKLXsKLSAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFBy
ZXNlcnZlUmVzb2x1dGlvbjo6Tm8pKQotICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdl
dCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1SZXRhaW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1
ZmZlcjo6dG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyhtaW1lVHlwZSkpOwotCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJv
bUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAg
UmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdV
VEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBz
byB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0gICAgICAg
IHByZW11bHRpcGxpZWREYXRhID0gZ2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KElu
dFBvaW50KCksIGxvZ2ljYWxTaXplKCkpKTsKLSAgICAgICAgaWYgKCFwcmVtdWx0aXBsaWVkRGF0
YSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHNpemVfdCBkYXRhU2l6
ZSA9IDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpOwot
ICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKHByZW11bHRpcGxpZWREYXRhLT5k
YXRhKCksIGRhdGFTaXplKTsKLSAgICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJlbXVsdGlwbGllZERhdGEtPmRh
dGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKLSAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZShsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCks
IDgsIDMyLCA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBr
Q0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwga0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0
YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwot
ICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRp
b24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7Ci0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBl
ZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSk7Ci0gICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwgOCwgNCAq
IGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSk7Ci0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250
ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVj
dChjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwg
bG9naWNhbFNpemUoKS5oZWlnaHQoKSkpOwotICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5V
c2VyU3BhY2UgPSBzaXplRm9yRGVzdGluYXRpb25TaXplKGxvZ2ljYWxTaXplKCkpOwotICAgICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBpbWFn
ZVNpemVJblVzZXJTcGFjZS53aWR0aCgpLCBpbWFnZVNpemVJblVzZXJTcGFjZS5oZWlnaHQoKSks
IGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBhdXRvIGNmRGF0YSA9IGFk
b3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7Ci0gICAg
aWYgKCFlbmNvZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEu
Z2V0KCkpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBXVEZNb3ZlKGNm
RGF0YSk7Ci19Ci0KLXN0YXRpYyBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBjZkRhdGEoY29uc3QgSW1h
Z2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4g
cXVhbGl0eSkKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGF1dG8gdXRpID0gdXRpRnJv
bUltYWdlQnVmZmVyTUlNRVR5cGUobWltZVR5cGUpOwotICAgIEFTU0VSVCh1dGkpOwotCi0gICAg
Q0dJbWFnZUFscGhhSW5mbyBkYXRhQWxwaGFJbmZvID0ga0NHSW1hZ2VBbHBoYUxhc3Q7Ci0gICAg
dW5zaWduZWQgY2hhciogZGF0YSA9IHNvdXJjZS5kYXRhKCktPmRhdGEoKTsKLSAgICBWZWN0b3I8
dWludDhfdD4gcHJlbXVsdGlwbGllZERhdGE7Ci0KLSAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCks
IGpwZWdVVEkoKSkpIHsKLSAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFu
bmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCi0g
ICAgICAgIHNpemVfdCBzaXplID0gNCAqIHNvdXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgp
OwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRhLnRyeVJlc2VydmVDYXBhY2l0eShzaXpl
KSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHByZW11bHRpcGxpZWRE
YXRhLmdyb3coc2l6ZSk7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciA9IHByZW11bHRp
cGxpZWREYXRhLmRhdGEoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBp
ICs9IDQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gZGF0YVtpICsgM107Ci0gICAg
ICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kgKyAw
XSA9IGRhdGFbaSArIDBdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVyW2kg
KyAxXSA9IGRhdGFbaSArIDFdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAyXSA9IGRhdGFbaSArIDJdICogYWxwaGEgLyAyNTU7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAwXTsKLSAgICAgICAg
ICAgICAgICBidWZmZXJbaSArIDFdID0gZGF0YVtpICsgMV07Ci0gICAgICAgICAgICAgICAgYnVm
ZmVyW2kgKyAyXSA9IGRhdGFbaSArIDJdOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICAgICAgZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3Q7IC8vIElnbm9y
ZSB0aGUgYWxwaGEgY2hhbm5lbC4KLSAgICAgICAgZGF0YSA9IHByZW11bHRpcGxpZWREYXRhLmRh
dGEoKTsKLSAgICB9Ci0KLSAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKGRhdGEsIDQg
KiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKSk7Ci0gICAgYXV0byBkYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgZGF0YSwgNCAqIHNv
dXJjZS53aWR0aCgpICogc291cmNlLmhlaWdodCgpLCAwKSk7Ci0gICAgaWYgKCFkYXRhUHJvdmlk
ZXIpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBpbWFnZSA9IGFkb3B0Q0Yo
Q0dJbWFnZUNyZWF0ZShzb3VyY2Uud2lkdGgoKSwgc291cmNlLmhlaWdodCgpLCA4LCAzMiwgNCAq
IHNvdXJjZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJE
ZWZhdWx0IHwgZGF0YUFscGhhSW5mbywgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NH
UmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOwotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENG
RGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5j
b2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwot
fQotCi1TdHJpbmcgZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQotewotICAgIGlmIChhdXRvIGRh
dGEgPSBjZkRhdGEoc291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCi0gICAgICAgIHJldHVybiBk
YXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0K
LQotVmVjdG9yPHVpbnQ4X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKLXsKLSAgICBpZiAoYXV0
byBkYXRhID0gY2ZEYXRhKHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQotICAgICAgICByZXR1
cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKLSAgICByZXR1cm4geyB9OwotfQotCi1WZWN0b3I8
dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0g
ICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
M2Q5ZWRkMGVmNTFmMzg0MWFjNThjOGI2MWUxNWNlMmQ0YTVjZjdkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRp
bGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2Nl
bGVyYXRlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQoKQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9h
dFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0KCkudHJhbnNsYXRlKDAsIC1tX2ludGVybmFsU2l6
ZS5oZWlnaHQoKSk7CisgICAgY29udGV4dCgpLmFwcGx5RGV2aWNlU2NhbGVGYWN0b3IobV9yZXNv
bHV0aW9uU2NhbGUpOworfQorCitzdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNy
b3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkg
IT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdl
dEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihpbnRlcm5hbFNpemUuaGVpZ2h0
KCkpKSkKKyAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVj
dChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJuYWxT
aXplLmhlaWdodCgpKSkpOworICAgIHJldHVybiBpbWFnZTsKK30KKworc3RhdGljIFJlZlB0cjxJ
bWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIGlmIChyZXNvbHV0aW9uU2NhbGUgPT0gMSB8
fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCisgICAgICAg
IGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0KCksIGludGVy
bmFsU2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhl
aWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwg
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJs
ZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250
ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygp
LCBsb2dpY2FsU2l6ZSkpOworICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2Ug
PSBsb2dpY2FsU2l6ZTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCks
IEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1h
Z2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
SW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92
ZShpbWFnZSkpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7Cisg
ICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShj
b3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2Uo
RG9udENvcHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2ludGVybmFs
U2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1JlZlB0
cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNv
bHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1h
Z2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2ZUltYWdlKCksIG1fbG9naWNhbFNp
emUsIG1faW50ZXJuYWxTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9u
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZs
b2F0UmVjdCBzcmNSZWN0U2NhbGVkID0gc3JjUmVjdDsKKyAgICBzcmNSZWN0U2NhbGVkLnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weU5hdGl2ZUlt
YWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRD
b3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLmdldCgpLCBtX2ludGVybmFsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlv
bnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVz
dGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4
dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3Jl
KSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Cit9CisKK0FmZmluZVRyYW5zZm9ybSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9y
bSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdl
QnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VN
SU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisgICAgCisgICAgYXV0byB1dGkgPSB1dGlG
cm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNTRVJUKHV0aSk7CisKKyAg
ICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBwcmVtdWx0aXBsaWVkRGF0YTsKKworICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBl
Z1VUSSgpKSkgeworICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWws
IHNvIHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KKyAgICAg
ICAgcHJlbXVsdGlwbGllZERhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSwgQ29v
cmRpbmF0ZVN5c3RlbTo6TG9naWNhbCk7CisgICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBzaXplX3QgZGF0YVNpemUg
PSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKKyAg
ICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0
YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0Rh
dGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRh
KCksIGRhdGFTaXplLCBudWxscHRyKSk7CisgICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1h
Z2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4
LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NH
Qml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQ
cm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAg
ICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9u
ID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7CisgICAgICAgIGltYWdlID0gY29weU5hdGl2
ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUp
OworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgw
LCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBs
b2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4
dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
Y29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRl
eHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2Fs
U2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0Yo
Q0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAg
IGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRl
ZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCks
IHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVy
Q0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlw
ZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRh
VmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHks
IHByZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCks
IG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVS
QVRFKQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWdu
ZWQgYnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7Cisg
ICAgdkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisgICAgCisgICAgdkltYWdlQnVmZmVyLmhl
aWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAg
IHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUu
d2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJvd0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAg
dkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAgIHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBo
YVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZv
cm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXIm
IGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgewor
ICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAg
ICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkKTsKKworICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJH
QkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07CisgICAg
ICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdklt
YWdlTm9GbGFncyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RB
bHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
KyAgICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAg
ICAgICAgdkltYWdlVW5wcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlVW5wcmVtdWx0aXBs
eURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29sb3JGb3JtYXQ6OlJHQkEpCisgICAg
ICAgICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlE
YXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfQorCisgICAg
aWYgKHNyY0NvbG9yRm9ybWF0ICE9IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICAvLyBTd2Fw
IHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdC
ODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KK30KKwordm9p
ZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1
bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0
LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRT
aXplJiBzaXplKSBjb25zdAoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFG
b3JtYXQgJiYgc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIElt
YWdlQnVmZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xv
ckZvcm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHZJbWFnZV9CdWZmZXIgc3JjID0gbWFrZVZJbWFnZUJ1ZmZlcihz
cmNCeXRlc1BlclJvdywgc3JjUm93cywgc2l6ZSk7CisgICAgdkltYWdlX0J1ZmZlciBkZXN0ID0g
bWFrZVZJbWFnZUJ1ZmZlcihkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKworICAg
IGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKHNyY0FscGhhRm9ybWF0LCBzcmNDb2xvckZvcm1h
dCwgc3JjLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdCk7Cit9CisjZW5k
aWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0dCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFiN2E3NDY5MzNkZDFkMjc3NjhjYTQ0OGVhOGZjNjFm
YTQxZTc0MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVyQ0dCYWNrZW5kIDog
cHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworICAgIFJl
ZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOwor
CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
KSBvdmVycmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0
IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Y29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92
ZXJyaWRlOworCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRl
OworICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAg
IHVzaW5nIEltYWdlQnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kOworCisgICAgdm9p
ZCBzZXR1cENvbnRleHQoKTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZE
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQg
Y29weUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhh
Rm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJS
b3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVz
dEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVy
cmlkZTsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgy
MzMzOTQ3ZWY1NWRiOTA3OWVlMmVjOWU1YjhiYTU3OWViNWFlYjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVmYXVs
dEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJIb3N0OworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBDR0JpdG1hcEluZm8gRGVm
YXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Q7CisjZW5kaWYK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
KTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
KQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50ZXJuYWxTaXplKHNp
emUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBi
eXRlc1BlclJvdyA9IDQgKiBpbnRlcm5hbFNpemUud2lkdGgoKTsKKworICAgIGlmICghdHJ5RmFz
dENhbGxvYyhpbnRlcm5hbFNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRh
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9j
YXN0PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGludGVy
bmFsU2l6ZS5oZWlnaHQoKSAqIGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNC
aWdFbm91Z2goZGF0YSwgbnVtQnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZShkYXRhLCBpbnRlcm5hbFNpemUud2lkdGgoKSwgaW50ZXJu
YWxTaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9y
U3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhp
Y3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1h
Z2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAg
ZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRh
dGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRh
LCBudW1CeXRlcywgcmVsZWFzZUltYWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBk
YXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0
IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJl
dGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0
cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5k
KGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkK
KyAgICAsIG1fZGF0YShkYXRhKQorICAgICwgbV9kYXRhUHJvdmlkZXIoV1RGTW92ZShkYXRhUHJv
dmlkZXIpKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCit7CisgICAgQVNTRVJU
KG1fZGF0YSk7CisgICAgQVNTRVJUKG1fZGF0YVByb3ZpZGVyKTsKKyAgICBBU1NFUlQobV9jb250
ZXh0KTsKKyAgICBzZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICptX2Nv
bnRleHQ7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKKyAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Cisg
ICAgICAgIHJldHVybiBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIAorICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3Rv
cmU6CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBt
X2ludGVybmFsU2l6ZS53aWR0aCgpLCBtX2ludGVybmFsU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIGJ5
dGVzUGVyUm93KCksCisgICAgICAgICAgICBjYWNoZWRDR0NvbG9yU3BhY2UobV9jb2xvclNwYWNl
KSwgRGVmYXVsdEJpdG1hcEluZm8sIG1fZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAg
MCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVp
bnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7Cit9CisK
K1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6Omdl
dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAor
eworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3Jt
YXQsIHNyY1JlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNp
emUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNy
Y1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9kYXRhKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBhYTk2NjMxM2M5YzNhODBhMDFlYmM4ZjAxYjBlM2Q0
ZjExNWVkOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsK
KyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7Citw
dWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgTmF0aXZlSW1h
Z2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3Qm
LCBDb29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRB
cnJheSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCB2b2lkKiBkYXRhLCBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJS
ZWY+JiYsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYpOworCisgICAgdW5zaWdu
ZWQgYnl0ZXNQZXJSb3coKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiA0ICogbV9pbnRlcm5hbFNp
emUud2lkdGgoKTsgfQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQg
YmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6
OkJHUkE7IH0KKyNlbmRpZgorCisgICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0Rh
dGFQcm92aWRlclJlZj4gbV9kYXRhUHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2MWZjMDMxY2MwNjY0ZGU3YTU3N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0
YS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBV
U0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRp
ZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJ
T1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHBh
bC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIg
Zm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVk
LgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlC
dWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYg
ZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwot
Ci0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4
ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJm
YWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90
IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdC
ODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMgdm9p
ZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2
SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJU
KGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlw
bHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+
UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBj
b25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVD
aGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQot
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVyRGF0
YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlucHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNpemVf
dCBpbnB1dEJ5dGVzUGVyUm93KQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VSVChp
bnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAg
ICBzcmMud2lkdGggPSB3aWR0aDsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy5y
b3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJSb3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQotICAg
IHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5o
ZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0
LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgm
c3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3V0
cHV0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBub3QgQUNDRUxFUkFURS4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQot
Ci1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoNCAqIHdpZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNjZWxl
cmF0ZVJlbmRlcmluZykgewotICAgICAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0
YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdf
U1RPUkUpCi0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJhbnNm
ZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBo
ZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVyUm93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXpl
LCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwot
ICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1
aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwot
ICAgIGlmICghcmVzdWx0RGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVj
a2VkPGludD4gZW5keCA9IHJlY3QubWF4WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVj
dC5tYXhZKCk7Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51
bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWln
aHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54
ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcg
PSByZWN0LndpZHRoKCk7Ci0gICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9
IG9yaWdpbng7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAw
OwotICAgIH0KLSAgICBkZXN0dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNp
emUud2lkdGgoKSAtIG9yaWdpbngpOwotICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53
aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3
aWR0aCA9IGVuZHggLSBvcmlnaW54OwotICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7
Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdo
dCgpOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55Owot
ICAgICAgICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0g
ICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgp
IC0gb3JpZ2lueSk7Ci0gICAgaWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQot
ICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0g
ZW5keSAtIG9yaWdpbnk7Ci0gICAgCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwg
aGVpZ2h0LnVuc2FmZUdldCgpIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0g
ICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50
OF90KiBkZXN0Um93cyA9IHJlc3VsdERhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRl
c3R4ICogNDsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90
KiBzcmNSb3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAg
ICBpZiAoIWRhdGEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5
dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJv
dyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRw
dXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0K
LSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0g
d2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2Fm
ZUdldCgpOwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIg
ZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAg
ICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0
LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVz
dFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVy
RGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChv
dXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7
Ci0gICAgICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAg
ICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51
bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3
aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNl
eCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRl
ciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFd
ICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jv
d3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4
ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAg
ICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2Fm
ZUdldCgpOyArK3kpIHsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
PSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0j
ZWxzZQotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5z
YWZlR2V0KCk7IHggKz0gNCkKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KGRlc3RSb3dzICsgeClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4o
c3JjUm93cyArIHgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
KnN1cmZhY2UpOwotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93
KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNl
QmFzZUFkZHJlc3MoKSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsK
LQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAg
ICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBo
ZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93
OwotICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBk
ZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRl
c3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBk
ZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAg
IGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKQotICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdS
QSB0byBSR0JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAs
IDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAm
ZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlm
ICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0g
ICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNh
ZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHgg
KiA0OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAg
ICAgICAgICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4
ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDJdID0gKGIgKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4
ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3Jj
Um93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXgg
KyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0g
c3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAg
ICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5z
YWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4
ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXgg
KyAxXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQ
ZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYg
c291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6
ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5n
KQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291
cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0g
c291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50Pihk
ZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZl
R2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQoKSA8
IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0g
ICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotICAg
IAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSAr
IHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXpl
LndpZHRoKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lk
dGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVj
a2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0
eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAg
QVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVH
ZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49
IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgp
KTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50
LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkg
PD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVj
dC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0gICAg
Ci0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7
Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAq
IHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVk
IGRlc3RCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAo
IWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdl
dCgpOwotICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEp
ICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQot
I2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2Vf
QnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwot
ICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBj
b25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZl
ciBkZXN0OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAg
ICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRl
c3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBk
ZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVy
RGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0
YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAw
OyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHgg
PSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBi
YXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jh
c2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIg
aXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAg
ICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAx
XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNS
b3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAg
ICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBo
YSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0g
PSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0
Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNS
b3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0
Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVz
UGVyUm93OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNl
LCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVz
dEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3Mg
PSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVz
dHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lk
dGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNh
ZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAg
IHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdklt
YWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7
Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qu
cm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dz
OwotCi0gICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywg
ZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVs
cyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0g
eyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4
ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQot
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0g
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsK
LSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50
OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0g
c3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkg
ewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCAr
IDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQp
IC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3Mg
Kz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkK
LSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM1NWE1NGFkOTExNzk1M2NhNWU2OTZkYTA3ZTZlMGRmNjgxNDNkNTguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5o
PgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0j
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yU3BhY2UgKkNH
Q29sb3JTcGFjZVJlZjsKLXR5cGVkZWYgc3RydWN0IENHRGF0YVByb3ZpZGVyICpDR0RhdGFQcm92
aWRlclJlZjsKLXR5cGVkZWYgdWludDMyX3QgQ0dCaXRtYXBJbmZvOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIElPU3VyZmFjZTsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0g
ICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29y
ZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZTsK
LQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIEltYWdlQnVmZmVycy4KLSAgICB2b2lkKiBkYXRh
IHsgbnVsbHB0ciB9OwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3Zp
ZGVyOwotICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IGNvbnRleHQ7Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgIC8vIE9ubHkgZm9yIGFjY2VsZXJhdGVkIEltYWdlQnVmZmVycy4KLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBzdXJmYWNlOwotI2VuZGlmCi0KLSAgICBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0
aCwgaW50IGhlaWdodCkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24sIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXpl
JiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdDsKLSAgICB2b2lkIHB1dERhdGEoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmLCBib29sIGFj
Y2VsZXJhdGVSZW5kZXJpbmcpOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWY0ODhjODEyN2JiNjhj
MWY1NmZjYWZmZTQ3MzBhMzIyMTI0NWJlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAK
QEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENHKSAmJiAoVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFD
S0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykpCisKKyNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1ZGUg
IkludFJlY3QuaCIKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5j
bHVkZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExP
Q0FURURfSU1QTChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworCitJbnRTaXplIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y2FsY3VsYXRlSW50ZXJuYWxTaXplKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEludFNpemUgaW50ZXJu
YWxTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhp
bXVtU2l6ZSgpOworICAgIGlmIChpbnRlcm5hbFNpemUud2lkdGgoKSA+IG1heFNpemUud2lkdGgo
KSB8fCBpbnRlcm5hbFNpemUuaGVpZ2h0KCkgPiBtYXhTaXplLmhlaWdodCgpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgcmV0dXJuIGludGVybmFsU2l6ZTsKK30KKworc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sK
KyAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IGNhbGN1bGF0ZUludGVybmFsU2l6ZShzaXplLCBy
ZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChpbnRlcm5hbFNpemUuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRl
KGludGVybmFsU2l6ZSwgaW50ZXJuYWxTaXplLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFj
ZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBS
ZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9y
bUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW50ZXJuYWxTaXplKSk7CisgICAgCisgICAgcmV0
dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGlu
dGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNl
KFdURk1vdmUoc3VyZmFjZSkpCit7CisgICAgQVNTRVJUKG1fc3VyZmFjZSk7CisgICAgc2V0dXBD
b250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5lbnN1cmVHcmFw
aGljc0NvbnRleHQoKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmZs
dXNoQ29udGV4dCgpCit7CisgICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5
Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+dG90YWxCeXRlcygpOworfQor
CitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpleHRlcm5hbE1lbW9yeUNvc3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtZW1vcnlDb3N0KCk7Cit9CisKK3Vuc2lnbmVkIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Ynl0ZXNQZXJSb3coKSBjb25zdAoreworICAgIHJldHVy
biBtX3N1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Cit9CisKK0NvbG9yRm9ybWF0IEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gQ29sb3JGb3JtYXQ6OkJHUkE7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKK30KKworTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKCkKK3sK
KyAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKFdURk1vdmUobV9zdXJmYWNlKSk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpkcmF3Q29uc3VtaW5nKEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRq
dXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGlt
YWdlID0gc2lua0ludG9OYXRpdmVJbWFnZSgpKQorICAgICAgICBkZXN0Q29udGV4dC5kcmF3TmF0
aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1faW50ZXJuYWxTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIg
bG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFE
YXRhKGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCitSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpM
b2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpn
ZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBsb2Nr
LnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2Nr
KCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUpOwor
ICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBhcnJheSwg
c3JjU2l6ZSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjb29yZGluYXRlU3lzdGVtLCBsb2NrLnN1cmZh
Y2VCYXNlQWRkcmVzcygpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFj
ZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5Lgor
ICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzNlYTQ2MWJhNjU3
NmMzYTg2NDE2NDBmNjI2NzEwYzk0MmY4NzAxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSU9TdXJmYWNlOworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdU
Rl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGlj
OgorICAgIHN0YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUludGVybmFsU2l6ZShjb25zdCBGbG9hdFNp
emUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOworICAgIAorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93Kik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1l
bW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAg
IE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKyAgICAKKyAg
ICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0
aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25z
dCBvdmVycmlkZTsgICAgCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmLCBD
b29yZGluYXRlU3lzdGVtKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0pIG92ZXJyaWRlOworCitwcm90
ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAg
IHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQg
YmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5jcHAKaW5kZXggODlkMDQzOWMyMTBkYjUwMWFjOTM5ZWIxMTQxNDg4MWVlZWM2NWIyNC4uZDA5
MTM5ZjAxYmQzMzZmMjg0OGFlYTUyNmE0ZjlmODAwZWU3ODVlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5jcHAKQEAgLTI2LDcgKzI2LDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgogCisjaWYgVVNFKENHKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5j
bHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJVVElVdGlsaXRpZXMuaCIKKyNl
bmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDQgKzUyLDE0MCBAQCB1aW50OF90
IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qgdm9pZCogYnVmZmVyLCBzaXplX3Qg
YnVmZmVyU2l6ZSkKICAgICByZXR1cm4gKih1aW50OF90KilsYXN0Qnl0ZTsKIH0KIAorQ0ZTdHJp
bmdSZWYganBlZ1VUSSgpCit7CisjaWYgIVBMQVRGT1JNKENPQ09BKQorICAgIHN0YXRpYyBjb25z
dCBDRlN0cmluZ1JlZiBrVVRUeXBlSlBFRyA9IENGU1RSKCJwdWJsaWMuanBlZyIpOworI2VuZGlm
CisgICAgcmV0dXJuIGtVVFR5cGVKUEVHOwogfQorCitSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHV0
aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisjaWYg
UExBVEZPUk0oQ09DT0EpCisgICAgcmV0dXJuIFVUSUZyb21NSU1FVHlwZShtaW1lVHlwZSkuY3Jl
YXRlQ0ZTdHJpbmcoKTsKKyNlbHNlCisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsgLy8gSXQg
aXMgdW5jbGVhciBpZiBDRlNUUiBpcyB0aHJlYWRzYWZlLgorCisgICAgLy8gRklYTUU6IEFkZCBX
aW5kb3dzIHN1cHBvcnQgZm9yIGFsbCB0aGUgc3VwcG9ydGVkIFVUSXMgd2hlbiBhIHdheSB0byBj
b252ZXJ0IGZyb20gTUlNRVR5cGUgdG8gVVRJIHJlbGlhYmx5IGlzIGZvdW5kLgorICAgIC8vIEZv
ciBub3csIG9ubHkgc3VwcG9ydCBQTkcsIEpQRUcsIGFuZCBHSUYuIFNlZSA8cmRhcjovL3Byb2Js
ZW0vNjA5NTI4Nj4uCisgICAgc3RhdGljIGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBD
RlNUUigicHVibGljLnBuZyIpOworICAgIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBl
R0lGID0gQ0ZTVFIoImNvbS5jb21wdXNlcnZlLmdpZiIpOworCisgICAgaWYgKGVxdWFsTGV0dGVy
c0lnbm9yaW5nQVNDSUlDYXNlKG1pbWVUeXBlLCAiaW1hZ2UvcG5nIikpCisgICAgICAgIHJldHVy
biBrVVRUeXBlUE5HOworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShtaW1l
VHlwZSwgImltYWdlL2pwZWciKSkKKyAgICAgICAgcmV0dXJuIGpwZWdVVEkoKTsKKyAgICBpZiAo
ZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWltZVR5cGUsICJpbWFnZS9naWYiKSkKKyAg
ICAgICAgcmV0dXJuIGtVVFR5cGVHSUY7CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4ga1VUVHlwZVBORzsKKyNlbmRpZgorfQorCitib29sIGVuY29kZUltYWdlKENHSW1h
Z2VSZWYgaW1hZ2UsIENGU3RyaW5nUmVmIHV0aSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBD
Rk11dGFibGVEYXRhUmVmIGRhdGEpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhdXRpIHx8ICFkYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlc3RpbmF0aW9uID0gYWRvcHRD
RihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLCB1dGksIDEsIDApKTsKKyAg
ICBpZiAoIWRlc3RpbmF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZXRhaW5Q
dHI8Q0ZEaWN0aW9uYXJ5UmVmPiBpbWFnZVByb3BlcnRpZXM7CisgICAgaWYgKENGRXF1YWwodXRp
LCBqcGVnVVRJKCkpICYmIHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9
IDEuMCkgeworICAgICAgICAvLyBBcHBseSB0aGUgY29tcHJlc3Npb24gcXVhbGl0eSB0byB0aGUg
SlBFRyBpbWFnZSBkZXN0aW5hdGlvbi4KKyAgICAgICAgYXV0byBjb21wcmVzc2lvblF1YWxpdHkg
PSBhZG9wdENGKENGTnVtYmVyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRk51bWJlckRv
dWJsZVR5cGUsICYqcXVhbGl0eSkpOworICAgICAgICBjb25zdCB2b2lkKiBrZXkgPSBrQ0dJbWFn
ZURlc3RpbmF0aW9uTG9zc3lDb21wcmVzc2lvblF1YWxpdHk7CisgICAgICAgIGNvbnN0IHZvaWQq
IHZhbHVlID0gY29tcHJlc3Npb25RdWFsaXR5LmdldCgpOworICAgICAgICBpbWFnZVByb3BlcnRp
ZXMgPSBhZG9wdENGKENGRGljdGlvbmFyeUNyZWF0ZSgwLCAma2V5LCAmdmFsdWUsIDEsICZrQ0ZU
eXBlRGljdGlvbmFyeUtleUNhbGxCYWNrcywgJmtDRlR5cGVEaWN0aW9uYXJ5VmFsdWVDYWxsQmFj
a3MpKTsKKyAgICB9CisKKyAgICAvLyBTZXR0aW5nIGtDR0ltYWdlRGVzdGluYXRpb25CYWNrZ3Jv
dW5kQ29sb3IgdG8gYmxhY2sgZm9yIEpQRUcgaW1hZ2VzIGluIGltYWdlUHJvcGVydGllcyB3b3Vs
ZCBzYXZlIHNvbWUgbWF0aAorICAgIC8vIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9ucywgYnV0IGl0
IGRvZXNuJ3Qgc2VlbSB0byB3b3JrLgorICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRl
c3RpbmF0aW9uLmdldCgpLCBpbWFnZSwgaW1hZ2VQcm9wZXJ0aWVzLmdldCgpKTsKKyAgICByZXR1
cm4gQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOworfQorCitz
dGF0aWMgUmV0YWluUHRyPENGRGF0YVJlZj4gY2ZEYXRhKGNvbnN0IEltYWdlRGF0YSYgc291cmNl
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpCit7Cisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1J
TUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIENHSW1hZ2VBbHBoYUlu
Zm8gZGF0YUFscGhhSW5mbyA9IGtDR0ltYWdlQWxwaGFMYXN0OworICAgIHVuc2lnbmVkIGNoYXIq
IGRhdGEgPSBzb3VyY2UuZGF0YSgpLT5kYXRhKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHByZW11
bHRpcGxpZWREYXRhOworCisgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7
CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2
ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgorICAgICAgICBzaXplX3Qg
c2l6ZSA9IDQgKiBzb3VyY2Uud2lkdGgoKSAqIHNvdXJjZS5oZWlnaHQoKTsKKyAgICAgICAgaWYg
KCFwcmVtdWx0aXBsaWVkRGF0YS50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZSkpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YS5ncm93KHNpemUp
OworICAgICAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXIgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRh
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSArPSA0KSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGRhdGFbaSArIDNdOworICAgICAgICAgICAgaWYgKGFs
cGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMF0gPSBkYXRhW2kgKyAw
XSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMV0gPSBkYXRhW2kg
KyAxXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBkYXRh
W2kgKyAyXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBidWZmZXJbaSArIDBdID0gZGF0YVtpICsgMF07CisgICAgICAgICAgICAgICAgYnVmZmVy
W2kgKyAxXSA9IGRhdGFbaSArIDFdOworICAgICAgICAgICAgICAgIGJ1ZmZlcltpICsgMl0gPSBk
YXRhW2kgKyAyXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGRhdGFBbHBo
YUluZm8gPSBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0OyAvLyBJZ25vcmUgdGhlIGFscGhhIGNo
YW5uZWwuCisgICAgICAgIGRhdGEgPSBwcmVtdWx0aXBsaWVkRGF0YS5kYXRhKCk7CisgICAgfQor
CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCA0ICogc291cmNlLndpZHRo
KCkgKiBzb3VyY2UuaGVpZ2h0KCkpOworICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihD
R0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGRhdGEsIDQgKiBzb3VyY2Uud2lkdGgoKSAq
IHNvdXJjZS5oZWlnaHQoKSwgMCkpOworICAgIGlmICghZGF0YVByb3ZpZGVyKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUo
c291cmNlLndpZHRoKCksIHNvdXJjZS5oZWlnaHQoKSwgOCwgMzIsIDQgKiBzb3VyY2Uud2lkdGgo
KSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGRhdGFB
bHBoYUluZm8sIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpKTsKKworICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRh
YmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdl
LmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworU3RyaW5nIGRh
dGFVUkwoQ0ZEYXRhUmVmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgVmVj
dG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIo
ZGF0YSksIENGRGF0YUdldExlbmd0aChkYXRhKSwgYmFzZTY0RGF0YSk7CisgICAgcmV0dXJuICJk
YXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOworfQorCitTdHJpbmcg
ZGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KQoreworICAgIGlmIChhdXRvIGRhdGEgPSBjZkRhdGEo
c291cmNlLCBtaW1lVHlwZSwgcXVhbGl0eSkpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEu
Z2V0KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVp
bnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRhUmVmIGNmRGF0YSkKK3sKKyAgICBWZWN0b3I8dWludDhf
dD4gZGF0YTsKKyAgICBkYXRhLmFwcGVuZChDRkRhdGFHZXRCeXRlUHRyKGNmRGF0YSksIENGRGF0
YUdldExlbmd0aChjZkRhdGEpKTsKKyAgICByZXR1cm4gZGF0YTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gY2ZEYXRh
KHNvdXJjZSwgbWltZVR5cGUsIHF1YWxpdHkpKQorICAgICAgICByZXR1cm4gZGF0YVZlY3Rvcihk
YXRhLmdldCgpKTsKKyAgICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKaW5kZXggMTYxMjhh
MTlhYmQxZmI4M2FiMzFhMTE1YzY4OTUwNDkxZDQxOTU1Mi4uODRjNTdkMmZlZTkzMzhlZDVlMGVm
YzRhOGUzMzY1YTE5YTgwMjA0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaApAQCAtMjUsOCAr
MjUsMzEgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW1hZ2VEYXRhOworCiBX
RUJDT1JFX0VYUE9SVCB1aW50OF90IHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goY29uc3Qg
dm9pZCogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSk7CiAKLX0KK0NGU3RyaW5nUmVmIGpwZWdV
VEkoKTsKK1JldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpRnJvbUltYWdlQnVmZmVyTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJik7CisKK2Jvb2wgZW5jb2RlSW1hZ2UoQ0dJbWFnZVJlZiwgQ0ZTdHJpbmdS
ZWYgdXRpLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIENGTXV0YWJsZURhdGFSZWYpOworCitT
dHJpbmcgZGF0YVVSTChDRkRhdGFSZWYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworU3RyaW5n
IGRhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KTsKKworVmVjdG9yPHVpbnQ4X3Q+IGRhdGFWZWN0b3IoQ0ZEYXRh
UmVmKTsKK1ZlY3Rvcjx1aW50OF90PiBkYXRhKGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSk7CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggODBmNmIx
ODcyNTIyOTY4ZWE3ZDk1NzZiN2UwMDU2MzMzMjU4ODIzYy4uMjgyMWVmODFkNzVkZmIwZmYwNWE4
NWJlNWM5ZmJjMjU4YjU2MmViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250
ZXh0Lmg+CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHUERGRG9jdW1lbnQuaD4KKyNpbmNsdWRl
IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAjaW5jbHVkZSA8d3RmL1JBTVNpemUuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFj
ZS5oCmluZGV4IDI0M2M0OGI5NTFiMTc0YjZiMjRiYWM1MzY0YzlhMDRmZjk2OWNkYjMuLjRjYzBm
YTNmNzk3MjdlYjlkZWVkYzRhZDBlMTE3MzRkYWIyMTRhNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5oCkBAIC0xMDAsMTAgKzEw
MCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3Jl
YXRlRnJvbVN1cmZhY2UoSU9TdXJmYWNlUmVmLCBDR0NvbG9yU3BhY2VSZWYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBjcmVhdGVGcm9tSW1h
Z2UoQ0dJbWFnZVJlZik7CiAgICAgCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gY3JlYXRlRnJvbUlt
YWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotI2VuZGlmCi0KICAgICBX
RUJDT1JFX0VYUE9SVCB+SU9TdXJmYWNlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dm9pZCBtb3ZlVG9Qb29sKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCmluZGV4
IGMyMTI1YzNlZjE2MGMwODEwMTA5ODIzYjRiOTAzNmRkZjZmYmNmNjcuLjM5MWZjMjNjZDBhOGY4
NjlhY2MxMDczMmQxNGZkZjQ1MGZjMjg1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0KQEAgLTMzLDcgKzMzLDYgQEAKICNp
bXBvcnQgIkhvc3RXaW5kb3cuaCIKICNpbXBvcnQgIklPU3VyZmFjZVBvb2wuaCIKICNpbXBvcnQg
IkltYWdlQnVmZmVyLmgiCi0jaW1wb3J0ICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgogI2ltcG9ydCAi
TG9nZ2luZy5oIgogI2ltcG9ydCAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbXBvcnQgPHBhbC9zcGkv
Y2cvQ29yZUdyYXBoaWNzU1BJLmg+CkBAIC0xMTAsMTMgKzEwOSw2IEBAIHZvaWQgSU9TdXJmYWNl
Ojptb3ZlVG9Qb29sKHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYgc3VyZmFjZSkKICAgICBJ
T1N1cmZhY2VQb29sOjpzaGFyZWRQb29sKCkuYWRkU3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKTsK
IH0KIAotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi1zdGQ6OnVuaXF1
ZV9wdHI8SU9TdXJmYWNlPiBJT1N1cmZhY2U6OmNyZWF0ZUZyb21JbWFnZUJ1ZmZlcihzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotICAgIHJldHVybiBXVEZNb3Zl
KGltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSk7Ci19Ci0jZW5kaWYKLQogc3RhdGljIE5TRGlj
dGlvbmFyeSAqb3B0aW9uc0ZvckJpcGxhbmFyU3VyZmFjZShJbnRTaXplIHNpemUsIHVuc2lnbmVk
IHBpeGVsRm9ybWF0LCBzaXplX3QgZmlyc3RQbGFuZUJ5dGVzUGVyUGl4ZWwsIHNpemVfdCBzZWNv
bmRQbGFuZUJ5dGVzUGVyUGl4ZWwpCiB7CiAgICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAyOGUyNjQ0ZTI2ZWRiNTBkMDI1ZGVhZTU0M2ExMTQ5
ZTNmMmFlNDkyLi4yYzY3N2Y2YjczNmU3NTJlNDFmOGIzZjI0MzQ3NmQ0NTA4NDI0MzcxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5
bGlzdHMvRGlzcGxheUxpc3QuaApAQCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIG1fbGlzdFtpbmRleF0uZ2V0KCk7CiAgICAgfQogCi0gICAgdm9pZCBjbGVhcigpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIHJlbW92ZUl0ZW1zRnJv
bUluZGV4KHNpemVfdCk7CiAKICAgICBzaXplX3QgaXRlbUNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9saXN0LnNpemUoKTsgfQpAQCAtMjUxLDYgKzI1MSwzIEBAIE9wdGlvbmFsPERpc3BsYXlMaXN0
PiBEaXNwbGF5TGlzdDo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0Jik7CiAKIH0gLy8gV2ViQ29yZQotCi11c2luZyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3Q7Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjk5ZjFjZTI3MzU0NTBiZGFjM2JiZGYxMWEzMDg1ZDlhN2YzYzllMTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0Lmgi
CisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZWNvcmRlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0
UmVwbGF5ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKworY2xhc3MgRHJhd2luZ0NvbnRleHQg
eworcHVibGljOgorICAgIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNp
emUpCisgICAgICAgIDogbV9jb250ZXh0KFsmXShHcmFwaGljc0NvbnRleHQmIGRpc3BsYXlMaXN0
Q29udGV4dCkgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8UmVjb3JkZXI+KGRpc3Bs
YXlMaXN0Q29udGV4dCwgbV9kaXNwbGF5TGlzdCwgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSwgRmxv
YXRSZWN0KHsgfSwgbG9naWNhbFNpemUpLCBBZmZpbmVUcmFuc2Zvcm0oKSk7CisgICAgICAgIH0p
CisgICAgeworICAgIH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIGNvbnN0X2Nhc3Q8RHJhd2luZ0NvbnRleHQmPigqdGhpcykubV9jb250ZXh0OyAgfQor
ICAgIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0K
KyAgICBjb25zdCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX2Rp
c3BsYXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QqIHJlcGxheURpc3BsYXlMaXN0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZXBsYXlEaXNwbGF5TGlzdC5nZXQoKTsgfQorCisgICAgdm9pZCBz
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQor
ICAgIHsKKyAgICAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5OworICAgICAgICBtX3JlcGxheURpc3BsYXlMaXN0LnJlc2V0KCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXBsYXllciByZXBsYXllcihkZXN0Q29udGV4
dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7IH0s
IG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIERpc3BsYXlM
aXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBtX3Jl
cGxheURpc3BsYXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZh
bHNlIH07Cit9OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRy
aXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLmFm
M2FhZGUyYTMzMmNjMTBhOTYxM2YyMTI2MTcxN2RkMWQ4NThiNTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4
LmNwcApAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1
ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdElt
YWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwot
ICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURh
dGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMpOworICAgIGF1dG8gcGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1f
dmFsdWVzKTsKIAorICAgIEludFNpemUgcGl4ZWxBcnJheURpbWVuc2lvbnMgPSByZXN1bHRJbWFn
ZS0+bG9naWNhbFNpemUoKTsKKyAgICBwaXhlbEFycmF5RGltZW5zaW9ucy5zY2FsZShyZXN1bHRJ
bWFnZS0+cmVzb2x1dGlvblNjYWxlKCkpOworCiAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICBj
YXNlIEZFQ09MT1JNQVRSSVhfVFlQRV9VTktOT1dOOgogICAgICAgICBicmVhazsKQEAgLTMxMSw3
ICszMTMsNyBAQCB2b2lkIEZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJlc3VsdEltYWdlLT5wdXRCeXRlQXJyYXkoKnBp
eGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VS
ZWN0LnNpemUoKSwgaW1hZ2VSZWN0LCBJbnRQb2ludCgpKTsKKyAgICByZXN1bHRJbWFnZS0+cHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKnBpeGVs
QXJyYXksIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXggMjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThl
OGZkZGQ4NGVjYi4uMjVkNTdhZjA2YzAxYTdjNzhhN2ZiOTQ3ZDQwNTgwMDRlYTcxNzJkOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcApAQCAtMTAwLDEzICsxMDAsMTMgQEAgdm9pZCBGRURyb3BTaGFkb3c6
OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4ZWwgYWNj
ZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0YS4KICAg
ICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmludGVybmFsU2l6
ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShzaGFkb3dBcmVhLCBudWxscHRyLCBJbWFnZUJ1ZmZlcjo6QmFja2luZ1N0
b3JlQ29vcmRpbmF0ZVN5c3RlbSk7CisgICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0SW1h
Z2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBz
aGFkb3dBcmVhLCBDb29yZGluYXRlU3lzdGVtOjpCYWNraW5nU3RvcmUpOwogICAgIGlmICghc3Jj
UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5
ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hh
ZG93QXJlYS5zaXplKCkud2lkdGgoKSk7CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5
KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBz
aGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJh
Y2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIHJlc3VsdEltYWdlLT5wdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgKnNyY1BpeGVsQXJyYXks
IHNoYWRvd0FyZWEuc2l6ZSgpLCBzaGFkb3dBcmVhLCBJbnRQb2ludCgpLCBDb29yZGluYXRlU3lz
dGVtOjpCYWNraW5nU3RvcmUpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZp
bGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgp
KSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXIuaAppbmRleCA0OWU4YzVhMjZlNzcxYzQyNDk2NzgxOTUyN2E1NjI3
MzUzZGY0NDk2Li5kZDM1Y2M2NWIxMzdkODIyYzcwMTUzMmRhYmQyNDkwMDRiZjJhOWY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyLmgK
QEAgLTcxLDcgKzcxLDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IG1fc291cmNlSW1hZ2U7CiAgICAgRmxvYXRTaXplIG1fZmlsdGVyUmVzb2x1dGlvbjsKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9hYnNvbHV0ZVRyYW5zZm9ybTsKLSAgICBSZW5kZXJpbmdNb2Rl
IG1fcmVuZGVyaW5nTW9kZSB7IFVuYWNjZWxlcmF0ZWQgfTsKKyAgICBSZW5kZXJpbmdNb2RlIG1f
cmVuZGVyaW5nTW9kZSB7IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQgfTsKICAgICBmbG9h
dCBtX2ZpbHRlclNjYWxlIHsgMSB9OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCmluZGV4IDZlOTg2
ZDRlYzJhOTc5Mjk2NjM4NGZjNTUwNzRhMmY5NzJiNTkwZmEuLjVjOGIzYjRkZTBhZmE3MTQ1OGNk
Y2Y2YzZiYzBmZmQyY2NiZDE0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKQEAgLTI3OSw5ICsyNzks
OSBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjppbWFnZUJ1ZmZlclJlc3VsdCgpCiAKICAg
ICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0
LnNpemUoKSk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQotICAgICAgICBt
X2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJl
Y3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdl
QnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVs
dGlwbGllZCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6
ZSgpLCBkZXN0aW5hdGlvblJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJl
c3VsdC0+cHV0Qnl0ZUFycmF5KCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRl
c3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQt
PnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5h
dGlvblJlY3QpOwogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOwogfQogCkBA
IC00NDMsNyArNDQzLDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1
bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogICAgIGlmICghbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9u
IGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQp
IHsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CkBAIC00
NjksNyArNDY5LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0
KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKICAgICBpZiAoIW1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24g
ZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkg
ewotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdlQnVmZmVy
R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JbWFnZUJ1ZmZl
ckd0ay5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiNWEwZDUwZjhjZTFhYWY2
NTM1ZGVlYzk0MGI4NWRjNTUxN2U0YjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ltYWdl
QnVmZmVyR3RrLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi0vKgotICogIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQot
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgot
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNp
bmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdSZWZQdHJHdGsuaCIKLSNpbmNs
dWRlICJHZGtDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIK
LSNpbmNsdWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDx3dGYv
Z2xpYi9HVW5pcXVlUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBib29sIGVuY29kZUltYWdlKGNhaXJvX3N1
cmZhY2VfdCogc3VyZmFjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91Ymxl
PiBxdWFsaXR5LCBHVW5pcXVlT3V0UHRyPGdjaGFyPiYgYnVmZmVyLCBnc2l6ZSYgYnVmZmVyU2l6
ZSkKLXsKLSAgICAvLyBMaXN0IG9mIHN1cHBvcnRlZCBpbWFnZSBlbmNvZGluZyB0eXBlcyBjb21l
cyBmcm9tIHRoZSBHZGtQaXhidWYgZG9jdW1lbnRhdGlvbi4KLSAgICAvLyBodHRwOi8vZGV2ZWxv
cGVyLmdub21lLm9yZy9nZGstcGl4YnVmL3N0YWJsZS9nZGstcGl4YnVmLUZpbGUtc2F2aW5nLmh0
bWwjZ2RrLXBpeGJ1Zi1zYXZlLXRvLWJ1ZmZlcnYKLQotICAgIFN0cmluZyB0eXBlID0gbWltZVR5
cGUuc3Vic3RyaW5nKHNpemVvZiAiaW1hZ2UiKTsKLSAgICBpZiAodHlwZSAhPSAianBlZyIgJiYg
dHlwZSAhPSAicG5nIiAmJiB0eXBlICE9ICJ0aWZmIiAmJiB0eXBlICE9ICJpY28iICYmIHR5cGUg
IT0gImJtcCIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdSZWZQdHI8R2RrUGl4YnVm
PiBwaXhidWY7Ci0gICAgaWYgKHR5cGUgPT0gImpwZWciKSB7Ci0gICAgICAgIC8vIEpQRUcgZG9l
c24ndCBzdXBwb3J0IGFscGhhIGNoYW5uZWwuIFRoZSA8Y2FudmFzPiBzcGVjIHN0YXRlcyB0aGF0
IHRvRGF0YVVSTCgpIG11c3QgZW5jb2RlIGEgUG9ydGVyLUR1ZmYKLSAgICAgICAgLy8gY29tcG9z
aXRlIHNvdXJjZS1vdmVyIGJsYWNrIGZvciBpbWFnZSB0eXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0
IGFscGhhLgotICAgICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBuZXdTdXJmYWNlOwotICAg
ICAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKSA9PSBDQUlST19TVVJGQUNF
X1RZUEVfSU1BR0UpIHsKLSAgICAgICAgICAgIG5ld1N1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19p
bWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KHN1cmZhY2UpLAotICAgICAgICAgICAgICAgIENBSVJPX0ZPUk1BVF9SR0IyNCwKLSAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKLSAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSksCi0gICAgICAg
ICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UpKSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRTaXplIHNpemUgPSBjYWlyb1N1cmZhY2VTaXpl
KHN1cmZhY2UpOwotICAgICAgICAgICAgbmV3U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9SR0IyNCwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKSk7Ci0gICAgICAgICAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWly
b19jcmVhdGUobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgICAgICAgICAgY2Fpcm9fc2V0X3NvdXJj
ZV9zdXJmYWNlKGNyLmdldCgpLCBzdXJmYWNlLCAwLCAwKTsKLSAgICAgICAgICAgIGNhaXJvX3Bh
aW50KGNyLmdldCgpKTsKLSAgICAgICAgfQotICAgICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fp
cm9TdXJmYWNlVG9HZGtQaXhidWYobmV3U3VyZmFjZS5nZXQoKSkpOwotICAgIH0gZWxzZQotICAg
ICAgICBwaXhidWYgPSBhZG9wdEdSZWYoY2Fpcm9TdXJmYWNlVG9HZGtQaXhidWYoc3VyZmFjZSkp
OwotICAgIGlmICghcGl4YnVmKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyb3I7Ci0gICAgaWYgKHR5cGUgPT0gImpwZWciICYmIHF1YWxpdHkg
JiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkgewotICAgICAgICBTdHJpbmcg
cXVhbGl0eVN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkg
KiAxMDAuMCArIDAuNSkpOwotICAgICAgICBnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKHBpeGJ1
Zi5nZXQoKSwgJmJ1ZmZlci5vdXRQdHIoKSwgJmJ1ZmZlclNpemUsIHR5cGUudXRmOCgpLmRhdGEo
KSwgJmVycm9yLm91dFB0cigpLCAicXVhbGl0eSIsIHF1YWxpdHlTdHJpbmcudXRmOCgpLmRhdGEo
KSwgTlVMTCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGdka19waXhidWZfc2F2ZV90b19idWZmZXIo
cGl4YnVmLmdldCgpLCAmYnVmZmVyLm91dFB0cigpLCAmYnVmZmVyU2l6ZSwgdHlwZS51dGY4KCku
ZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCksIE5VTEwpOwotCi0gICAgcmV0dXJuICFlcnJvcjsKLX0K
LQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
T3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0g
ICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YSA9IHRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7
Ci0gICAgaWYgKGltYWdlRGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAiZGF0YTosIjsK
LQotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwotICAgIGJhc2U2NEVuY29kZShpbWFnZURh
dGEuZGF0YSgpLCBpbWFnZURhdGEuc2l6ZSgpLCBiYXNlNjREYXRhKTsKLQotICAgIHJldHVybiAi
ZGF0YToiICsgbWltZVR5cGUgKyAiO2Jhc2U2NCwiICsgYmFzZTY0RGF0YTsKLX0KLQotVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0
aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOwotCi0g
ICAgR1VuaXF1ZU91dFB0cjxnY2hhcj4gYnVmZmVyOwotICAgIGdzaXplIGJ1ZmZlclNpemU7Ci0g
ICAgaWYgKCFlbmNvZGVJbWFnZShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBtaW1lVHlwZSwgcXVh
bGl0eSwgYnVmZmVyLCBidWZmZXJTaXplKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIFZl
Y3Rvcjx1aW50OF90PiBpbWFnZURhdGE7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChidWZmZXIuZ2V0
KCksIGJ1ZmZlclNpemUpOwotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL25pY29zaWEvdGV4bWFwL05pY29z
aWFHQzNETGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKaW5kZXggNGM0YzQyNjk2MTI3MWM3YjdhMTlk
Mjk2YTk0MDBlZmRjMGZhYzlhZS4uNzU3MDAzYjFmMTFkZjRiMjc2NmI0MDllODIyY2Q4YjQyMGZi
NGE1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvbmljb3Np
YS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvbmljb3NpYS90ZXhtYXAvTmljb3NpYUdDM0RMYXllci5jcHAKQEAgLTk0LDcg
Kzk0LDcgQEAgdm9pZCBHQzNETGF5ZXI6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQogICAgIEludFNp
emUgdGV4dHVyZVNpemUobV9jb250ZXh0Lm1fY3VycmVudFdpZHRoLCBtX2NvbnRleHQubV9jdXJy
ZW50SGVpZ2h0KTsKICAgICBUZXh0dXJlTWFwcGVyR0w6OkZsYWdzIGZsYWdzID0gbV9jb250ZXh0
LmNvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEgPyBUZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5k
IDogMDsKICNpZiBVU0UoQU5HTEUpCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUodGV4dHVyZVNpemUsIFVuYWNjZWxlcmF0
ZWQpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFn
ZUJ1ZmZlcjo6Y3JlYXRlKHRleHR1cmVTaXplLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVk
KTsKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9CaXRtYXBUZXh0dXJl
LmNwcAppbmRleCA3ZDJjZWZkNjI2MWRlZTJhMzlhODlkMTAxNzAyZWI1MDI1MmY0ZjVlLi5mMDM5
MTM4MDYwZDM0NDM0ZTZjZGRiZjk2ZWE2NGMzMDFhNjM1NTNmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvQml0bWFwVGV4dHVyZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0JpdG1hcFRleHR1cmUuY3Bw
CkBAIC0zOCw3ICszOCw3IEBAIHZvaWQgQml0bWFwVGV4dHVyZTo6dXBkYXRlQ29udGVudHMoVGV4
dHVyZU1hcHBlciYsIEdyYXBoaWNzTGF5ZXIqIHNvdXJjZUxheWVyLCBjCiB7CiAgICAgLy8gTWFr
aW5nIGFuIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVkIGJ1ZmZlciBoZXJlIGlzIE9LIGJl
Y2F1c2UgdGhpcyBjb2RlCiAgICAgLy8gaXNuJ3QgdXNlZCBieSBhbnkgcGxhdGZvcm1zIHRoYXQg
cmVzcGVjdCB0aGUgYWNjZWxlcmF0ZWQgYml0LgotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHRhcmdldFJlY3Quc2l6ZSgp
LCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZSh0YXJnZXRSZWN0LnNpemUoKSwgUmVuZGVyaW5n
TW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAKICAgICBpZiAoIWltYWdlQnVmZmVyKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL01vY2tSZWFs
dGltZVZpZGVvU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2UuY3BwCmluZGV4IGNhMTFiYjhiYTBiMTkxMGM2Mjc5NjdkNGQyNjBi
MDRjNjg0ODY3MzEuLjVhYzlkNjYwNmM0MjIxMjQ4YmM0MWRlOTM4OWNlNWM4N2U0YTQxN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2UuY3BwCkBAIC00NTgsNyArNDU4LDcgQEAgSW1hZ2VCdWZmZXIqIE1vY2tSZWFs
dGltZVZpZGVvU291cmNlOjppbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKG1faW1hZ2VCdWZm
ZXIpCiAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyLmdldCgpOwogCi0gICAgbV9pbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwgVW5hY2NlbGVyYXRlZCk7
CisgICAgbV9pbWFnZUJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2FwdHVyZVNpemUoKSwg
UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllci5jcHAKaW5kZXggZDViOTFiMjY4NmFlMjYxZWI1M2MwNjg5YmVlYzYyZjU1ZTNmYjQ1OC4u
OGY1MGU1NzU3MWQ3YjM4NTAwZWVkN2JjZGE2YjNhNjQyYWJmNzk1MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC02OTA1LDcgKzY5MDUsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVGaWx0ZXJQYWludGluZ1N0cmF0ZWd5KCkKICAgICB9CiAgICAgCiAg
ICAgZW5zdXJlTGF5ZXJGaWx0ZXJzKCk7Ci0gICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5k
ZXJlcigpLCBwYWdlKCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygp
LmFjY2VsZXJhdGVkRmlsdGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRl
ZCk7CisgICAgbV9maWx0ZXJzLT5idWlsZEZpbHRlcihyZW5kZXJlcigpLCBwYWdlKCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSwgcmVuZGVyZXIoKS5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmlsdGVyc0Vu
YWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXI6OmZpbHRlck5lZWRzUmVwYWludCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDkxNDIwMjlh
MmQ0NDY0ZGY1Y2I3YjNhNDQxOTNiZTI4NjNjMWVkMmEuLjkzNWE2ZWU5ZTc2ZmY0NDAyZjk4NGI1
ZDJiNTIxYTY5OTFjNjE1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
aGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hh
cGUuY3BwCkBAIC0xODEsMTQgKzE4MSwxNCBAQCBzdGQ6OnVuaXF1ZV9wdHI8U2hhcGU+IFNoYXBl
OjpjcmVhdGVSYXN0ZXJTaGFwZShJbWFnZSogaW1hZ2UsIGZsb2F0IHRocmVzaG9sZCwgYwogICAg
IEludFJlY3QgbWFyZ2luUmVjdCA9IHNuYXBwZWRJbnRSZWN0KG1hcmdpblIpOwogICAgIGF1dG8g
aW50ZXJ2YWxzID0gbWFrZVVuaXF1ZTxSYXN0ZXJTaGFwZUludGVydmFscz4obWFyZ2luUmVjdC5o
ZWlnaHQoKSwgLW1hcmdpblJlY3QueSgpKTsKICAgICAvLyBGSVhNRSAoMTQ5NDIwKTogVGhpcyBi
dWZmZXIgc2hvdWxkIG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4KLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShpbWFnZVJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShpbWFnZVJl
Y3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKIAogICAgIGlmIChpbWFn
ZUJ1ZmZlcikgewogICAgICAgICBHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCA9IGlt
YWdlQnVmZmVyLT5jb250ZXh0KCk7CiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdl
UmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBpeGVs
QXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50
UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOworICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IHBpeGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJl
Y3Quc2l6ZSgpKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOwogICAgICAg
ICB1bnNpZ25lZCBwaXhlbEFycmF5TGVuZ3RoID0gcGl4ZWxBcnJheS0+bGVuZ3RoKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlPZmZzZXQgPSAzOyAvLyBFYWNoIHBpeGVsIGlzIGZvdXIg
Ynl0ZXM6IFJHQkEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5kZXggMDhlNDkyODJhZDkzYmNhY2QyOTc3
NWI4NDZmMDU5ZDVhMmNhNzEzZS4uMWQ3N2I2M2M2ZmUyODMxMmFlMTFlZDgyNWI1MjNhYWNlNzE3
ZWM1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
ZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIGJvb2wgUmVuZGVy
U1ZHUmVzb3VyY2VDbGlwcGVyOjphcHBseUNsaXBwaW5nVG9Db250ZXh0KFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBjCiAKICAgICBpZiAoc2hvdWxkQ3JlYXRlQ2xpcHBlck1hc2tJbWFnZSAmJiAh
cmVwYWludFJlY3QuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIEZJWE1FICgxNDk0NjkpOiBUaGlz
IGltYWdlIGJ1ZmZlciBzaG91bGQgbm90IGJlIHVuY29uZGl0aW9uYWxseSB1bmFjY2VsZXJhdGVk
LiBNYWtpbmcgaXQgbWF0Y2ggdGhlIGNvbnRleHQgYnJlYWtzIG5lc3RlZCBjbGlwcGluZywgdGhv
dWdoLgotICAgICAgICBjbGlwcGVyTWFza0ltYWdlID0gU1ZHUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlSW1hZ2VCdWZmZXIocmVwYWludFJlY3QsIGFic29sdXRlVHJhbnNmb3JtLCBDb2xvclNwYWNl
OjpTUkdCLCBVbmFjY2VsZXJhdGVkLCAmY29udGV4dCk7CisgICAgICAgIGNsaXBwZXJNYXNrSW1h
Z2UgPSBTVkdSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihyZXBhaW50UmVjdCwg
YWJzb2x1dGVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OlNSR0IsIFJlbmRlcmluZ01vZGU6OlVuYWNj
ZWxlcmF0ZWQsICZjb250ZXh0KTsKICAgICAgICAgaWYgKCFjbGlwcGVyTWFza0ltYWdlKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCmluZGV4IDc1YjU5YjYzYzNl
NDk2MGJkNGUzYmRiZDg3NDkyYTkzMmY0MzE2MWIuLjEyZTdmMTVkNjMyZDc2ZDk5ZjZiYWJhOTM4
ZDBkOWUyNjM0ZDhlODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xOTEsNyArMTkxLDcgQEAgYm9v
bCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YXBwbHlSZXNvdXJjZShSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgY29uc3QgUmVuZGUKICAgICBlZmZlY3RpdmVUcmFuc2Zvcm0uc2NhbGUoc2NhbGUu
d2lkdGgoKSwgc2NhbGUuaGVpZ2h0KCkpOwogICAgIGVmZmVjdGl2ZVRyYW5zZm9ybS5tdWx0aXBs
eShmaWx0ZXJEYXRhLT5zaGVhckZyZWVBYnNvbHV0ZVRyYW5zZm9ybSk7CiAKLSAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmls
dGVyc0VuYWJsZWQoKSA/IEFjY2VsZXJhdGVkIDogVW5hY2NlbGVyYXRlZDsKKyAgICBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUgPSByZW5kZXJlci5zZXR0aW5ncygpLmFjY2VsZXJhdGVkRmls
dGVyc0VuYWJsZWQoKSA/IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9k
ZTo6VW5hY2NlbGVyYXRlZDsKICAgICBhdXRvIHNvdXJjZUdyYXBoaWMgPSBTVkdSZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGVJbWFnZUJ1ZmZlcihmaWx0ZXJEYXRhLT5kcmF3aW5nUmVnaW9uLCBlZmZl
Y3RpdmVUcmFuc2Zvcm0sIENvbG9yU3BhY2U6OkxpbmVhclJHQiwgcmVuZGVyaW5nTW9kZSwgY29u
dGV4dCk7CiAgICAgaWYgKCFzb3VyY2VHcmFwaGljKSB7CiAgICAgICAgIEFTU0VSVCghbV9yZW5k
ZXJlckZpbHRlckRhdGFNYXAuY29udGFpbnMoJnJlbmRlcmVyKSk7CkBAIC0yODYsNyArMjg2LDcg
QEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6cG9zdEFwcGx5UmVzb3VyY2UoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIEdyYXBoaWMKICAgICAgICAgICAgIGNvbnRleHQtPmNvbmNhdENU
TShmaWx0ZXJEYXRhLnNoZWFyRnJlZUFic29sdXRlVHJhbnNmb3JtKTsKICAgICAgICAgfQogICAg
IH0KLSAgICBmaWx0ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIucmVzZXQoKTsKKyAgICBmaWx0
ZXJEYXRhLnNvdXJjZUdyYXBoaWNCdWZmZXIgPSBudWxscHRyOwogCiAgICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIgIiA8PCB0aGlz
IDw8ICIgcG9zdEFwcGx5UmVzb3VyY2UgZG9uZVxuIik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlTWFza2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCmluZGV4
IDE3ODdlMThjMmRjZWY1YmRmOTkyNDc0Y2ZjMDIyYjUxNjZhZDU4NDguLjEyMGM1N2I1Njk3ODcy
MjA0NjViYzZhZWMwYjU4MDRjNDU1Y2Q4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXIuY3BwCkBAIC03MSw3ICs3
MSw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VNYXNrZXI6OmFwcGx5UmVzb3VyY2UoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIGNvbnN0IFJlbmRlCiAgICAgICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlJiBzdmdTdHlsZSA9IHN0eWxlKCkuc3ZnU3R5bGUoKTsKICAgICAgICAgQ29sb3JTcGFjZSBj
b2xvclNwYWNlID0gc3ZnU3R5bGUuY29sb3JJbnRlcnBvbGF0aW9uKCkgPT0gQ29sb3JJbnRlcnBv
bGF0aW9uOjpMaW5lYXJSR0IgPyBDb2xvclNwYWNlOjpMaW5lYXJSR0IgOiBDb2xvclNwYWNlOjpT
UkdCOwogICAgICAgICAvLyBGSVhNRSAoMTQ5NDcwKTogVGhpcyBpbWFnZSBidWZmZXIgc2hvdWxk
IG5vdCBiZSB1bmNvbmRpdGlvbmFsbHkgdW5hY2NlbGVyYXRlZC4gTWFraW5nIGl0IG1hdGNoIHRo
ZSBjb250ZXh0IGJyZWFrcyBhbHBoYSBtYXNraW5nLCB0aG91Z2guCi0gICAgICAgIG1hc2tlckRh
dGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJl
cGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwgY29sb3JTcGFjZSwgVW5hY2NlbGVyYXRlZCwg
Y29udGV4dCk7CisgICAgICAgIG1hc2tlckRhdGEtPm1hc2tJbWFnZSA9IFNWR1JlbmRlcmluZ0Nv
bnRleHQ6OmNyZWF0ZUltYWdlQnVmZmVyKHJlcGFpbnRSZWN0LCBhYnNvbHV0ZVRyYW5zZm9ybSwg
Y29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgY29udGV4dCk7CiAgICAg
ICAgIGlmICghbWFza2VyRGF0YS0+bWFza0ltYWdlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHSW1hZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL1NWR0ltYWdlLmNwcAppbmRleCBiODIxNDEx
YWRlNzc1MDg1NjE2ODg1NmVkMjJiNjJlYTZiNWNkM2Q5Li45Nzg2N2FhZDNjMjdiNWI1MzhkM2E3
OWZiNDk1ZGRkNGYwZjQzZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvU1ZHSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdJbWFn
ZS5jcHAKQEAgLTIxOCw3ICsyMTgsNyBAQCBOYXRpdmVJbWFnZVB0ciBTVkdJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoY29uc3QgR3JhcGhpY3NDb250ZXh0KikKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICAvLyBDYWlybyBkb2VzIG5vdCB1c2UgdGhlIGFjY2VsZXJhdGVk
IGRyYXdpbmcgZmxhZywgc28gaXQncyBPSyB0byBtYWtlIGFuIHVuY29uZGl0aW9uYWxseSB1bmFj
Y2VsZXJhdGVkIGJ1ZmZlci4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZl
ciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSgpLCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKICAgICBpZiAoIWJ1ZmZlcikgLy8g
ZmFpbGVkIHRvIGFsbG9jYXRlIGltYWdlCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9DTWFr
ZUxpc3RzLnR4dAppbmRleCA1MzI2NzhmMzc2MDMzYzNjMDBmOWY2YmQ1YTMwYzM4NjkwZTMzNGJm
Li4wYWI5MjAxNjI0ZTg2MGEwZDljYzBmMDcxOWZhNjMxNWYyZjE1NjJkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0
cy50eHQKQEAgLTE3LDYgKzE3LDcgQEAgc2V0KFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAg
ICAgIiR7V2ViS2l0X0RFUklWRURfU09VUkNFU19ESVJ9L2luY2x1ZGUiCiAgICAgIiR7V0VCS0lU
X0RJUn0iCiAgICAgIiR7V0VCS0lUX0RJUn0vR1BVUHJvY2VzcyIKKyAgICAiJHtXRUJLSVRfRElS
fS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29y
a1Byb2Nlc3MiCiAgICAgIiR7V0VCS0lUX0RJUn0vTmV0d29ya1Byb2Nlc3MvQ2xhc3NpZmllciIK
ICAgICAiJHtXRUJLSVRfRElSfS9OZXR3b3JrUHJvY2Vzcy9Db29raWVzIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dl
YktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDRjMzFhODgwNGNjZWM4
NTFmZmQzNTBjN2IwMTJjNzcwZmM2OWU3ZmQuLmM4ZmQ3YWMwZTc2OGI4YjVlYzEwOGRiZDc0OWVk
ZDk0MDBjODQxZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5w
dXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0Lnhj
ZmlsZWxpc3QKQEAgLTE1LDYgKzE1LDggQEAgJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURF
UlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikv
eHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5tZXNz
YWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4K
ICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vz
cy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVNZWRpYVBsYXllclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xMDMsNiArMTA1LDcgQEAg
JChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVk
REIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9X
ZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQo
UFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9t
ZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENSZW1vdGVDb2RlY3MubWVz
c2FnZXMuaW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0
LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVs
aXN0CmluZGV4IGZhYmRmOTgzZTQzYjM2NzlkNTY3N2MxMmU2NTY0MWEyMjNiYzI3MzEuLjFhYWVl
OTYyOWVjNGUwYmE5MDFlZDc3MDdkZjZhZjhkZDA5ZDljYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTIwLDYgKzEyMCwxMiBAQCAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNz
UHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUGx1Z2luUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9QbHVnaW5Qcm94eU1lc3NhZ2VzLmgKICQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1BsdWdpblByb3h5TWVz
c2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJL
aXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5o
CiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFn
ZUJ1ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNz
YWdlcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTE0NSw2ICsx
NTEsOSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rl
cml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVP
YmplY3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgK
KyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvck1lc3NhZ2VS
ZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3JNZXNz
YWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5t
YWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDNkNGMxOWIzNTdl
ZGMzMzEzYTE4YzU4MGY5M2UwZDJiMjgwZTZjMDQuLjgyNmMyN2E0ODNjNWFlMWRhZTg4NGJjZDk0
YmE5MzUyMDNiMzc4ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMu
bWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1
LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAor
ICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktp
dDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwK
ICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBA
QCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAg
ICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9H
UFUvbWVkaWEgXAorICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0
MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2UgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9N
ZWRpYUNhY2hlIFwKQEAgLTE0MCw2ICsxNDIsOCBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAg
ICBQbHVnaW5Qcm9jZXNzQ29ubmVjdGlvbk1hbmFnZXIgXAogICAgIFBsdWdpblByb2Nlc3NQcm94
eSBcCiAgICAgUGx1Z2luUHJveHkgXAorICAgIFJlbW90ZUltYWdlQnVmZmVyIFwKKyAgICBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5IFwKQEAgLTE0Nyw3ICsxNTEsOSBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwK
ICAgICBSZW1vdGVNZWRpYVJlY29yZGVyIFwKICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdl
ciBcCiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAorICAgIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eSBcCiAgICAgUmVtb3RlT2JqZWN0UmVnaXN0cnkgXAorICAgIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXAog
ICAgIFJlbW90ZVdlYkluc3BlY3RvclByb3h5IFwKICAgICBSZW1vdGVXZWJJbnNwZWN0b3JVSSBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKaW5kZXggN2Y3MzE5NWY1ZThhYjJlMzhkOTlhNGIwMDhlM2U1ZDE1YjdjMzE3
ZS4uNTM0NjEwZWZiODFhZWEzODJlYzM4NjExOWZmYThiMGM4ZTk4MzhhYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNw
cApAQCAtMTYyLDU1ICsxNjIsNzUgQEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OmxpYldlYlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12b2lk
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVj
dGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0
aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNv
ZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAo
ZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxh
eWVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBs
YXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVQbGF5ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAj
aWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCku
ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKICAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3Jk
ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRl
ck1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKwog
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3Rl
TWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVj
b3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNvbm5l
Y3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICNlbmRpZgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRD
Q29kZWNzUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBsaWJXZWJSVEND
b2RlY3NQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwg
ZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
I2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShj
b25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6
OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVu
Y29kZXIpCitib29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0
ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRl
Y29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXll
ck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1l
ZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nl
c3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQog
ICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1l
ZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAg
IHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9t
R1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNo
U3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKK30KKwordm9p
ZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAg
IEFTU0VSVCghbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUo
KnRoaXMsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS0+cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcik7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBu
dWxscHRyOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IGY0ODU5NjRk
NDZjNTJlMzM4ZDJhYmU0Zjc2NWRkY2I1YTk0YTA3OTAuLjAyNzAzN2ZlOTk0NjQwOWYwNmMyM2Jm
NmNlY2QzNzg1M2E1NmU3YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJD
b3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRl
ICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4K
ICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00NywxOCAr
NDksMjAgQEAgY2xhc3MgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTsKIAogY2xhc3MgR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVBy
b2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyLCBQQUw6OlNlc3Npb25JRCk7CiAgICAgdmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2VzcygpOwogCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4g
bV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3Nh
Z2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BV
UHJvY2VzcyYgZ3B1UHJvY2VzcygpIHsgcmV0dXJuIG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAg
IFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3Qg
eyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9y
U3VzcGVuc2lvbihGdW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigp
OwogCi0gICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIo
KSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVk
aWFSZXNvdXJjZU1hbmFnZXImIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBM
b2dnZXImIGxvZ2dlcigpOwpAQCAtNzcsMTQgKzgxLDIxIEBAIHByaXZhdGU6CiAKICAgICAvLyBJ
UEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9u
JikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJp
bmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1
bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVJbnZh
bGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdl
UmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CisK
KyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKKworICAgIHZvaWQgY3Jl
YXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9p
ZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CiAK
ICAgICBSZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKIAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+
IG1fY29ubmVjdGlvbjsKICAgICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQ
Qzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdl
YkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVz
b3VyY2VNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eT4gbV9yZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKQEAgLTk2LDYgKzEwNyw3
IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMpCiAgICAg
c3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldlYlJUQ0NvZGVjc1By
b3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0MGE1NzEyZTAyZDE0
OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVkZTliYjllZmI1NmY5YmM1
MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDkg
QEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIFdh
bnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoV2Vi
S2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6UmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9CiAKICNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmU3MGY0MjJjM2U0NjkzYTAxMjg5ODE4YTFjMzI5NDRlZGNmMzNkMTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdl
QnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2Fn
ZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKwor
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwg
bV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIGlm
IChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdl
UmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVm
ZmVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIu
dG9VSW50NjQoKSwgKnRoaXMpOworfQorCitSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VS
ZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpD
b25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlv
bigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBt
X2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOwor
fQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGlu
YXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRv
VUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgc2VuZChN
ZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChsb2dp
Y2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1v
dmUoaGFuZGxlKSksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQoY29uc3QgRGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlm
aWVyKQoreworICAgIGxvY2FsRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRp
ZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjM2OGI2MjY0ZmQxMGFkNDMxN2VlNGYzZjZkNjgz
NGVkNTcxZjA2NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYv
TWFjaFNlbmRSaWdodC5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAg
ICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKTsKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpOworCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNl
bmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdl
UmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdm9pZCByZW1vdGVDcmVhdGVJbWFnZUJ1ZmZl
ckJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSk7CisKKyAgICB2b2lkIGZs
dXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAg
IFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdl
cy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iMGFlNzhlMmNlNGFiOTUxOWI2NWFiODRiNGQ3MmRkZWI1ZWM5NThj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDI5IEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgTm90UmVmQ291
bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3Bs
YXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZs
dXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBo
eXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
N2ZlNGUxZTNhZDUyMTg1NDVjOTUxZjZjYzE0Y2ZlNmQwZGYxZGVmOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBoeXNp
Y2FsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIu
aD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BoeXNpY2FsSW1hZ2VCdWZmZXIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3Rl
UGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OlBoeXNpY2FsSW1hZ2VC
dWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAg
dXNpbmcgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpQaHlzaWNhbEltYWdlQnVm
ZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlUGh5c2ljYWxJbWFnZUJ1ZmZlcjo6bV9i
YWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50
aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OnRl
bXBsYXRlIGNyZWF0ZTxSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk+KHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0ciwgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB9CisKKyAgICBSZW1vdGVQaHlzaWNhbElt
YWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdl
QnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAgIDogQmFzZVBo
eXNpY2FsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRp
ZmllcikKKyAgICB7CisgICAgICAgIHJlbW90ZUNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChtX2Jh
Y2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2VuZC0+aW50ZXJuYWxTaXplKCksIG1fYmFja2Vu
ZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2VuZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQt
PmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFkaXNw
bGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5ZXIoQmFzZVBoeXNpY2FsSW1hZ2VCdWZm
ZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOworICAgICAgICByZXBsYXllci5yZXBsYXkoKTsK
KyAgICAgICAgQmFzZVBoeXNpY2FsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpOworICAgIH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tl
bmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kYTUwZDdlZjcwYWQzZDk4MDZkY2Y2Njk0NWJlYmQ5ZmQzNzI5MmQxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJT
aGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclBy
b3h5LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkgPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHk8UGxhdGZvcm1VbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZVBsYXRm
b3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
clByb3h5PFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjgxNzBiMzMwNzAzZTBjZGY1MjQ4M2VkNjEyNmMyYzAwMmE0YzQ2MmEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MobWFrZVdlYWtQdHIoZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIGlmIChhdXRvKiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpKQor
ICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdlUmVjZWl2ZXJNYXAoKS5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2
NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3Nh
Z2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50NjQoKSk7
Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAg
ICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpOworICAg
IHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCit2b2lkIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdl
QnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKTsKKyAgICBpZiAoIWdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisgICAgCisgICAgc3dpdGNoIChyZW5kZXJp
bmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJQ
cm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAg
ICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpbWFn
ZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2ljYWxT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1
bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1faW1hZ2VCdWZmZXJNYXAuYWRkKGlt
YWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFnZUJ1ZmZlcikpOworfQorCit2b2lkIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6cmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVy
SWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCit7CisgICAgLy8gQ3JlYXRlU3VyZmFj
ZSBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAg
IGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
OTkzOGJlZTUxMWU2OWRmZWZmZGU1NDlkMDgyMjI3ODllNDgwODEzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQ
Qzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citw
dWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgp
OworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisK
K3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgor
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
Jikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRp
Zmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJ
bWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEs
MzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6Rmxv
YXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBX
ZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAg
dm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBiL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggN2ZkMzNlMGVmOWQy
ZDc2ZjIyNjQwYWIyODQwYTNiZjMzODEzMmYxOC4uNmYyNzIxNjUzZDg1MGY4MzcwZWRhYTZiZTc2
MGYwNTAyYzI5ZWEwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9t
ZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5
CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJzZXIK
IAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FOVFNf
RElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdB
Q1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNPVU5URURf
UkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJV
VEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fu
bm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsKICAgICAg
ICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFjZScs
CiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29y
ZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OkZyYW1lSWRlbnRpZmllcics
CkBAIC0yMTEsNiArMjE0LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVj
bGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBhZ2VJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6OlBvaW50ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcics
CisgICAgICAgICdXZWJDb3JlOjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNl
cnZpY2VXb3JrZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJK
b2JJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERh
dGEnLApAQCAtMjE4LDEwICsyMjIsMTQgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2Zvcndh
cmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJSZWdpc3RyYXRp
b25JZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNXU2VydmVyQ29ubmVjdGlvbklkZW50
aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAorICAgICAg
ICAnV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUnLAorICAgICAgICAnV2ViS2l0OjpJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVy
SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAg
ICAgICAgICdXZWJLaXQ6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpNZWRpYVJlY29yZGVySWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlJlbW90ZU1lZGlhUmVzb3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRp
ZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYktpdDo6U3RvcmFnZUFyZWFJZGVudGlmaWVyJywKQEAgLTc2MywxMyArNzcxLDE2IEBAIGRl
ZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAg
ICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19t
ZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRl
KFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIu
bmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUp
IGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3Qg
cmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUp
OgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3Rh
dGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10K
KyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdF
X0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNo
TWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNz
KToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAg
ICBlbHNlOgpAQCAtNzc4LDEzICs3ODksMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxl
cihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3lu
Y19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1
dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBw
ZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5j
JXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNv
ZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChy
ZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVH
QUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
J3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VO
VEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
YXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQg
Kz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdl
IGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FO
VFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5
RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47
XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24p
O1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtc
bicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVy
KTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRD
b2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmlu
ZGV4IDg0ZDQzOWM1MDU0MDRiN2U1OTA1YjM2ZTdkZWM3Njg5ZGRmYTk0NTQuLjA5YTE0MmVmYzA1
MTJiZDVkYWE0NDA0NThhYjM3NzMyMzdhZTFmZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
U2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVBy
ZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAj
aW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9z
dGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
TmV0d29ya0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RpZmljYXRpb25EaXJl
Y3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2UuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFNu
YXBPZmZzZXRzSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VydmljZVdvcmtlclR5cGVzLmg+
CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oPgpAQCAtODAzLDYg
KzgwNSwyNiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlh
bGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBz
dHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAg
dXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
CisgICAgPjsKK307CisKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6
UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisg
ICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JT
cGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29s
b3JTcGFjZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQgYi9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0CmluZGV4IDYwNmYwMzk0ZTEwM2RkOWIyMTJhNDM5NGE4NzQ2MGMy
NWMyNWQ3ZmUuLmZkODUxZGJkYjc2OTc3MDc0MDM2ODc1Y2U2Zjc4YmRkZjhhNjE3MDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzLnR4dApAQCAtMzMsNiArMzMsOCBAQCBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVz
b3VyY2UuY3BwCiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VMb2FkZXIuY3Bw
CiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyLmNwcAogR1BVUHJv
Y2Vzcy9tZWRpYS9SZW1vdGVWaWRlb1RyYWNrUHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiAKIE5ldHdvcmtQcm9jZXNz
L0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQWN0
aXZpdHlUcmFja2VyLmNwcApAQCAtNTE5LDYgKzUyMSw5IEBAIFdlYlByb2Nlc3MvR1BVL21lZGlh
L1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90
ZU1lZGlhUGxheWVyTUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9jZXNzL0dQVS9t
ZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9W
aWRlb1RyYWNrUHJpdmF0ZVJlbW90ZS5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAorV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKK1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKIFdlYlByb2Nlc3MvR1BV
L3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFS
ZWNvcmRlclByaXZhdGUuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTWVkaWFSZWNvcmRlclBy
b3ZpZGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0IGIv
U291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CmluZGV4IDM5NGM2NzA0NDVmZmQxNzJmZTAy
ZjE1NmQ2MGU1ZjExZWZlOTdkODUuLjNhMGU2ZmQyMjY0YjA1YmU5ODk4YjU4MTYxZThkOWVlYWY1
Y2M0ODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKQEAgLTU1MSw2ICs1NTEsOCBAQCBXZWJQcm9j
ZXNzL2NvY29hL1dlYlByb2Nlc3NDb2NvYS5tbQogCiBXZWJQcm9jZXNzL0VudHJ5UG9pbnQvQ29j
b2EvWFBDU2VydmljZS9XZWJDb250ZW50U2VydmljZUVudHJ5UG9pbnQubW0KIAorV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuY3BwCisKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdl
QmFubmVyLmNwcAogCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL21hYy9XS0J1bmRs
ZU1hYy5tbQpAQCAtNjM1LDExICs2MzcsMTUgQEAgV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5tbQogLy8gRGVyaXZlZCBTb3VyY2Vz
CiBFZGl0YWJsZUltYWdlQ29udHJvbGxlck1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCitHUFVQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2VSZWNlaXZlci5jcHAKIEdQVVByb2Nlc3NQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIEdQ
VVByb2Nlc3NNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NQcm94eU1lc3NhZ2VS
ZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc01lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUlt
YWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBS
ZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFNlcnZpY2VXb3JrZXJGZXRjaFRh
c2tNZXNzYWdlUmVjZWl2ZXIuY3BwCiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHlNZXNzYWdl
UmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBiMTk0MzNhZTJiYjlmYTc2Njc1MjZlNzI1NWQ5ZDE1ZGE0MmE0MWY1Li4z
MTRlNjY3MTQ3ZWYxN2VmY2E5MDI4YWVmMzMxNzQ4ZTI5ZDgwZjIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTM5OTMsOCArMzk5Mywz
MiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVS
ZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rp
b25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVj
b2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4
MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25p
emVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdl
YnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9s
aWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQxMjNDOEZFMDIwMDQx
ODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDIyM0M4RkUwMzAw
NDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDMyM0M4RkUwNDAwNDE4ODFG
IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ0MjNDOTAwREEwMDQxODgxRiAv
KiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMDE3NTQ2MjND
OTQ1RDgwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIwMTc1NDcyM0M5NDVEODAwNDE4
ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8qIFJlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5OTIz
QUQyRkQ2MDBCREFGRjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyog
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzIxRjFFOUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIxRjFFQTYyM0FENEYzMzAwQkRB
RkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzIxRjFFQTkyM0FEN0JERjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzVDOTYwMjNDMTgyODcwMDI2MjYzMyAvKiBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzNUM5NjQyM0MxQTA0
MTAwMjYyNjMzIC8qIFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI4RTg2RUYxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFj
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkYwMTc5NTE4OEMwMDg3ODc5RSAv
KiBXZWJDb2xvclBpY2tlck1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsg
cGF0aCA9IFdlYkNvbG9yUGlja2VyTWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MkJCRTQwRjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkJCRTQxMDIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJCQkU0MTEyM0FCMDc2MzAwQTYxMjNDIC8qIFJlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJCRTQxNDIzQUIwQUYxMDBBNjEyM0MgLyog
UmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVt
b3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyRDVDMkU3MjNCMzg0MjEwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFODIzQjM4NDIxMDBGNjdENDMgLyogUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVDMkVCMjNCNEM3QTkwMEY2N0Q0MyAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MkQ1QzJFQzIzQjRDODIzMDBGNjdENDMgLyogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyRDVD
MkVEMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyRDVDMkVFMjNCNTZDODQwMEY2N0Q0MyAvKiBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlGMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlDOUUgLyog
V0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTY0MzksNiArNjQ2Myw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAogCQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywKKwkJCQk3
MkJCRTQwRTIzQUIwNDU4MDBBNjEyM0MgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcy
MTk4ODIzQjYxMjYxMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3NTJDRDkw
MEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQzQzMyMzc1
MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02NDU1LDYgKzY0
ODAsNyBAQAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJCQkJMkQ5
RkIyMDYyMzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlBM0RCMDA4
OEU2NUIgLyogbWVkaWEgKi8sCisJCQkJNzIxRjFFOTcyM0FEMkY1QzAwQkRBRkY3IC8qIFJlbmRl
cmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdlYnJ0YyAq
LywKIAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuaCAqLywKQEAgLTc4MzEsNiArNzg1Nyw1MiBAQAogCQkJbmFtZSA9IG1h
YzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyMDE3NTQ1MjNDOTQ1QjEw
MDQxODgxRiAvKiBjZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJNzIwMTc1NDYyM0M5NDVEODAwNDE4ODFGIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzIwMTc1NDcyM0M5NDVEODAwNDE4ODFGIC8qIElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBjZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyMUYxRTk3MjNBRDJG
NUMwMEJEQUZGNyAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjFGMUU5QTIzQUQyRkQ2MDBCREFGRjcgLyogUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8sCisJCQkJNzIxRjFFOTgyM0FEMkZENjAwQkRBRkY3IC8q
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjFGMUU5OTIzQUQyRkQ2MDBCREFG
RjcgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjM1Qzk2
NDIzQzFBMDQxMDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlclByb3h5LmggKi8s
CisJCQkJNzIxRjFFQTYyM0FENEYzMzAwQkRBRkY3IC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXJQcm94eS5oICovLAorCQkJCTcyRDVDMkVDMjNCNEM4MjMwMEY2N0Q0MyAvKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTcyRDVDMkVEMjNCNEM4MjMwMEY2N0Q0MyAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MkQ1QzJFQjIzQjRDN0E5
MDBGNjdENDMgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAor
CQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsKKwkJfTsKKwkJNzJCQkU0MEUyM0FCMDQ1ODAwQTYxMjNDIC8qIFJlbmRlcmluZ0JhY2tl
bmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyMDE3
NTQ1MjNDOTQ1QjEwMDQxODgxRiAvKiBjZyAqLywKKwkJCQk3MjAxNzU0NDIzQzkwMERBMDA0MTg4
MUYgLyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmggKi8sCisJCQkJNzIxRjFFQTkyM0FEN0JE
RjAwQkRBRkY3IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzIxRjFF
OUIyM0FEMzZEMDAwQkRBRkY3IC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcy
MDE3NTQxMjNDOEZFMDIwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQuY3BwICovLAorCQkJCTcyMDE3NTQyMjNDOEZFMDMwMDQxODgxRiAvKiBJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MjAxNzU0MzIzQzhGRTA0MDA0MTg4MUYg
LyogUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLywKKwkJCQk3MkJCRTQw
RjIzQUIwNDhCMDBBNjEyM0MgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAorCQkJCTcyQkJF
NDEwMjNBQjA0OEIwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyQkJF
NDE0MjNBQjBBRjEwMEE2MTIzQyAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiAqLywK
KwkJCQk3MjM1Qzk2MDIzQzE4Mjg3MDAyNjI2MzMgLyogUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZl
ci5oICovLAorCQkJCTcyQkJFNDExMjNBQjA3NjMwMEE2MTIzQyAvKiBSZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyLmggKi8sCisJCQkJNzJENUMyRTcyM0IzODQyMTAwRjY3RDQzIC8qIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyRDVDMkU4MjNCMzg0MjEwMEY2N0Q0MyAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8sCisJCQkJNzJENUMyRUUyM0I1NkM4NDAwRjY3RDQz
IC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJl
bmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QTg0
M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDE4ZTkzNmRlMzIzMDc3MGYyNDM2
MWI2YWJhYThlMTdlNGQyZTVhYzAuLjE4OGZhYzIwYTFlOTIzZGY2MmJiMWEzODA1NTBhYWE0Zjk0
ZDhlMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MCwyOSArNjAsMzUgQEAgdm9pZCBHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9pZCBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsKLX0KLQotdm9p
ZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCitib29sIEdQVVByb2Nlc3NDb25u
ZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6
OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFt
ZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFJl
bW90ZU1lZGlhUGxheWVyTWFuYWdlcj4oKS0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vz
cyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5t
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGNhcHR1cmVNYW5h
Z2VyID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxVc2VyTWVkaWFDYXB0dXJl
TWFuYWdlcj4oKSkKICAgICAgICAgICAgIGNhcHR1cmVNYW5hZ2VyLT5kaWRSZWNlaXZlTWVzc2Fn
ZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgogI2lmIFVTRShMSUJXRUJSVEMpICYm
IFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlkUmVjZWl2
ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1h
cCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKK30KKworYm9vbCBHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNv
bm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCku
ZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwor
fQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJl
bmNlKQorewogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaAppbmRleCBhOGFkNGZlZTg2
YjI2NTliNGFmZmI3YzQ4NGRhMTgxYzNiZWYyN2QwLi5lOGVlODVkYzMyZmU1NzhmMTc1MzhiYTNk
ODlmZDc0NjA3NDZiYTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlck1hcC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIH5HUFVQ
cm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
bigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2Vp
dmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1h
cDsgfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKICAgICB2b2lkIHNldEF1ZGl0VG9rZW4oT3B0
aW9uYWw8YXVkaXRfdG9rZW5fdD4gYXVkaXRUb2tlbikgeyBtX2F1ZGl0VG9rZW4gPSBhdWRpdFRv
a2VuOyB9CkBAIC01OCwxMSArNjAsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rp
b246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIG92ZXJy
aWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVm
ZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKIAorICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiYpOworCiAgICAgLy8gVGhlIGNvbm5lY3Rpb24gZnJvbSB0aGUgd2ViIHBy
b2Nlc3MgdG8gdGhlIEdQVSBwcm9jZXNzLgogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29u
bmVjdGlvbjsKLQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVy
TWFwOwogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4g
bV9hdWRpdFRva2VuOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgppbmRleCBkMzZm
OGEwOTVmNmE3N2JiYjZjYWM4ODNhNjUxZTg0Y2U5ZDY0YjMwLi41N2ZlY2RlOWRmMjdjNzM5YTZj
YmYwMjY5ODA2NTkyYjVlMjE3OWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KQEAgLTIy
LDcgKzIyLDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4gR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24geworbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gV2Fu
dHNEaXNwYXRjaE1lc3NhZ2UgewogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTk2MzA2OWY2NjE4MTgzZDA3OGE2NGMyZGVh
Y2MyZDgzYTRjZGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPHd0Zi9NYWNo
U2VuZFJpZ2h0Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSA9IFZhcmlhbnQ8CisjaWYgUExB
VEZPUk0oQ09DT0EpCisgICAgTWFjaFNlbmRSaWdodCwKKyNlbmRpZgorICAgIFNoYXJlYWJsZUJp
dG1hcDo6SGFuZGxlCis+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyY2YyNDVlMzQ1ZTFkZmVjNjJkYzFkN2EzZWNhZWZj
ZDlhYjVkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitlbnVtIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlm
aWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWExYmM5YWU4N2RjOGQ3MjQyOGEwYjgwOWNhZDBkODBhNGNkMWNi
OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51
bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVySWRlbnRp
ZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJZGVudGlmaWVyVHlwZT47CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hNWU3ZmI1NGI3MTRlOTIyYmY2ZmFmMzAzNTNjYTg2MGE4Zjhm
MmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dENHLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV1RGX01B
S0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gY2FsY3VsYXRlSW50
ZXJuYWxTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGludGVybmFsU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIFNoYXJlYWJsZUJp
dG1hcDo6Q29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uOworI2lmIFBMQVRGT1JNKENPQ09BKQor
ICAgIGNvbmZpZ3VyYXRpb24uY29sb3JTcGFjZSA9IHsgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9y
U3BhY2UpIH07CisjZW5kaWYKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3Jl
YXRlU2hhcmVhYmxlKGludGVybmFsU2l6ZSwgY29uZmlndXJhdGlvbik7CisgICAgaWYgKCFiaXRt
YXApCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gYml0bWFw
LT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQoc2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1v
dmUoYml0bWFwKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIGlmIChXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKFdURk1vdmUo
V1RGOjpnZXQ8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRsZSkpKTsKKyAgICBpZiAoIWJp
dG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQgPSBiaXRt
YXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIFdURk1vdmUoYml0bWFwKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiYmIGJpdG1hcCwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4
dD4mJiBjb250ZXh0KQorICAgIDogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQobG9naWNhbFNp
emUsIHBoeXNpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9i
aXRtYXAoV1RGTW92ZShiaXRtYXApKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkp
Cit7Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0Cit7Cisg
ICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIG1fYml0bWFwLT5jcmVhdGVI
YW5kbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKFdURk1v
dmUoaGFuZGxlKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0Cit7Cisj
aWYgVVNFKENHKQorICAgIHJldHVybiBtX2JpdG1hcC0+bWFrZUNHSW1hZ2VDb3B5KCk7CisjZWxp
ZiBVU0UoRElSRUNUMkQpCisgICAgcmV0dXJuIG51bGxwdHI7CisjZWxpZiBVU0UoQ0FJUk8pCisg
ICAgcmV0dXJuIG1fYml0bWFwLT5jcmVhdGVDYWlyb1N1cmZhY2UoKTsKKyNlbmRpZgorfQorCitS
ZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weUltYWdl
KEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9iaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEobV9iaXRtYXAtPmRhdGEoKSk7Cit9
CisKK1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEo
b3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX2JpdG1hcC0+ZGF0YSgp
KTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBVaW50OENsYW1w
ZWRBcnJheSYgYXJyYXksIGNvbnN0IEludFNpemUmIHNyY1NpemUsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRp
bmF0ZVN5c3RlbSkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1
dEZvcm1hdCwgYXJyYXksIHNyY1NpemUsIHNyY1JlY3QsIGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5
c3RlbSwgbV9iaXRtYXAtPmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0NzBlYzY5
OWJiM2VkNjlhZTAwYzY3NGYzNmQ1MjcyMjY4MjcwMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaD4KKyNpbmNsdWRlIDx3
dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWFibGVC
aXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCA6IHB1Ymxp
YyBXZWJDb3JlOjpQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNP
X0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CitwdWJs
aWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdl
YkNvcmU6Okhvc3RXaW5kb3cqKTsKKyAgICAKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0OworICAgIAorICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2NvbnRleHQ7
IH0KKworICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShXZWJDb3Jl
OjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3Zl
cnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFj
a2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNl
cnZlUmVzb2x1dGlvbiA9IFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92
ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldEltYWdlRGF0YShXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYsIFdlYkNvcmU6OkNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
cHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc3JjU2l6
ZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgc3JjUmVjdCwgY29uc3QgV2ViQ29yZTo6SW50UG9p
bnQmIGRlc3RQb2ludCwgV2ViQ29yZTo6Q29vcmRpbmF0ZVN5c3RlbSkgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKGNvbnN0IFdlYkNv
cmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBoeXNp
Y2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0PiYmKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQg
YmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6
OkJHUkE7IH0KKyNlbmRpZgorCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gbV9iaXRtYXA7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVy
U2hhcmVhYmxlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE3MTkzMTE1ZGUxMWYxNTIzZGMwOTBmMDEx
YzE0NjUxNDk0OTc1ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tl
bmQuaApAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9QbGF0Zm9ybUltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBQ
bGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ7CisKKyNpZiBVU0UoQ0cpICYmIChVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQg
PSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxh
dGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCA9IFBsYXRmb3JtVW5h
Y2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZDsKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRhNTFiNGNlODBmN2IxYTZl
Y2JjODJiZTQ2NWQ5YTgxZmQxZDM5ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCkBA
IC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5o
IgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIK
KyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgLy8gUmVn
aXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9jZXNzQ29ubmVj
dGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNz
YWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2Vp
dmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAvLyBDcmVh
dGUgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdN
b2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK1JlbW90ZUltYWdlQnVmZmVy
Ojp+UmVtb3RlSW1hZ2VCdWZmZXIoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBh
IE1lc3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJl
Y2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVt
b3ZlTWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIobV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJ
bWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVy
biAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2Vu
ZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLnRvVUludDY0KCk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5l
Y3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlv
bigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3Bh
dGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVJbWFnZUJ1
ZmZlckJhY2tlbmQ+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9w
dGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKworYm9vbCBS
ZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcigpCit7CisgICAgUmVmPElQ
Qzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3Vy
ZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0
aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VC
dWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcj4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywg
SVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMp
OworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2VuZCgpCit7
CisgICAgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOworICAgIGZv
ciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7ICFpc0JhY2tlbmRDcmVhdGVk
KCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoKTsKKworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7IGlz
UGVuZGluZ0ZsdXNoKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRTZXRGbHVzaElk
ZW50aWZpZXIoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlm
aWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBt
X3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyID0gZmx1c2hJZGVudGlmaWVyOworfQorCit2b2lkIFJl
bW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBtX3NlbnRGbHVzaElkZW50
aWZpZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBzZW5k
KE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpGbHVzaENvbnRleHQoZGlzcGxheUxp
c3QsIG1fc2VudEZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAg
ICBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGRkOTE5OTVmYWU1ZWE2ZTNmNDg3NGY3NmE0Y2MzODQ2NGNhYmIx
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1
ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBS
ZW1vdGVJbWFnZUJ1ZmZlcgorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAs
IHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIH5SZW1vdGVJbWFn
ZUJ1ZmZlcigpOworCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7
CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNz
YWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3Nh
Z2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBCbG9ja2Vy
cworICAgIGJvb2wgd2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworICAgIGJvb2wgd2Fp
dFNldEZsdXNoSWRlbnRpZmllcigpOworCisgICAgdm9pZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgp
OworICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElk
ZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQorCisgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lk
IHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7ICAgICAgICAK
KyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zNDFmZDI0ZjI5NjlhYTc3ZDJiYmVlNzI3MTViZjI2ZjNjOWJhZDI4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAg
dm9pZCBDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxT
aXplLCBXZWJDb3JlOjpJbnRTaXplIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFdlYktpdDo6SW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlIGhhbmRsZSkKKyAgICB2b2lkIFNldEZsdXNoSWRlbnRpZmllcihXZWJLaXQ6Oklt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJ
bWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRjZTAyNGM3YmI0YzA3NTg2NzVmNmIxMDdmZWQ4ZmQz
ZDdlM2VlYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJ
bWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
PgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+
CitjbGFzcyBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyIDogcHVibGljIERpc3BsYXlMaXN0SW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXIgeworICAgIHVz
aW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxC
YWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFj
a2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9k
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAg
ICAgICAgaWYgKEJhY2tlbmRUeXBlOjpjYWxjdWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1
dGlvblNjYWxlKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KG5ldyBSZW1v
dGVQaHlzaWNhbEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
cmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICBSZW1vdGVQaHlzaWNhbEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgICAgIDogQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIoc2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2Rl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUgaGFuZGxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2Jh
Y2tlbmQpOworICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxT
aXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZSho
YW5kbGUpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSog
ZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFj
a2VuZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlciY+
KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5k
LmdldCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
OjpkaXNwbGF5TGlzdCgpOworICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hD
b250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWJkMjAxNjM4MDRiMDI0ZDRm
MTQwMWQ0NDY2MzYyM2FkNTNhOTdhZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAi
UmVtb3RlUGh5c2ljYWxJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNp
bmcgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1hZ2VCdWZmZXI8
UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKK3VzaW5n
IFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IFJlbW90ZVBoeXNpY2FsSW1h
Z2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjBjNThhYWM3M2UyNWJjYTdkMGE5MzA5N2M3MzYxOTYzZmU0MGViZGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kPihuZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gQ3Jl
YXRlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
On5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6UmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciksIDApOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlv
bigpOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVy
RGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUm
IHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3
aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNj
ZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRl
ZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgYnJl
YWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9k
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpbWFnZUJ1ZmZl
ciA9IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01v
ZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgfQorICAg
IAorICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisK
KyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmJlOWRjYmQ2MGYzOTU4NzdmNDhlNTE3MTg1
MDlkOWQxZjQ0YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsx
LDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNzYWdl
UmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0JhY2tl
bmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQKKyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kCisgICAgLCBwcml2YXRl
IElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7
CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBj
cmVhdGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisKKyAgICAvLyBJUEM6
Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVj
dGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNrZW5kCisgICAg
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihj
b25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RX
aW5kb3cqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
KCk7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDIzNTQ3MGNjZmU3Yjc5YmI5MjQ1NzhhZmI0MTcwMzVjOTEzZGQwMgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBl
PjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MjQ2YzJkOTVkZGZiNWVl
MGUzYTVkMTc2M2JmMmEyMjFmNzYwNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2lmIFVTRShDRykgJiYgKFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpKQorCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV1RGX01BS0VfSVNPX0FMTE9D
QVRFRF9JTVBMKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBjYWxj
dWxhdGVJbnRlcm5hbFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoaW50ZXJu
YWxTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1
cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShpbnRlcm5hbFNpemUsIGludGVybmFsU2l6ZSwgY2Fj
aGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0
ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOworICAgIGlmICgh
Y2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENHQ29udGV4dENsZWFy
UmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGludGVy
bmFsU2l6ZSkpOworICAgIAorICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kKHNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgaWYgKCFXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1
dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChXVEZNb3ZlKFdURjo6
Z2V0PE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFj
ZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNp
emUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1
cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShtX3N1cmZhY2UtPmNy
ZWF0ZVNlbmRSaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBVU0UoQ0cpICYmIChVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSkKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZlNzAxMDg5NjJjNzI0MjkyOWRlZWE5
ZTM2ZGVlYmIyMGE2OTY3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorI2lmIFVTRShDRykgJiYgKFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBTaGFyZWFibGVCaXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlclNo
YXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7Cisg
ICAgCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKwor
ICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUoKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdXNpbmcgV2ViQ29yZTo6SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFVTRShDRykgJiYgKFVTRShJT1NVUkZB
Q0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpIHx8IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
KQorI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvQXVkaW9UcmFja1ByaXZhdGVSZW1vdGUuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvQXVkaW9UcmFja1ByaXZhdGVSZW1vdGUuaApp
bmRleCAzMGUxYTY3YjdjNTkyZjkxMjNhZjIwMzMxMDRlNDIzNDYyNGMwOTc3Li5kMjhjMDdlNDdk
OWY2MDMyNjQ5ZTAwNGU4YmViNmNlYTIwYTRlOGVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL21lZGlhL0F1ZGlvVHJhY2tQcml2YXRlUmVtb3RlLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9BdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZS5o
CkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1
ZGUgIlRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0F1
ZGlvVHJhY2tQcml2YXRlLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitjbGFzcyBNZWRpYVBs
YXllclByaXZhdGVSZW1vdGU7CiBzdHJ1Y3QgVHJhY2tQcml2YXRlUmVtb3RlQ29uZmlndXJhdGlv
bjsKIAogY2xhc3MgQXVkaW9UcmFja1ByaXZhdGVSZW1vdGUgZmluYWwgOiBwdWJsaWMgV2ViQ29y
ZTo6QXVkaW9UcmFja1ByaXZhdGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3
NWQ3YjhjYzEwZmZhMDA4MDNkNDgyMTczYmU1YTM1NThhLi43NzI2ZmU5NDhhMjI3OWJiZjkzOWYw
NjQ0ZjY0NTY4MmVkNmI3OTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtMTAyLDYgKzEw
MiwxMCBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTW9ja1dlYkF1dGhlbnRpY2F0aW9uQ29uZmlndXJh
dGlvbi5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwpAQCAtODgx
LDE1ICs4ODUsMjIgQEAgR3JhcGhpY3NMYXllckZhY3RvcnkqIFdlYkNocm9tZUNsaWVudDo6Z3Jh
cGhpY3NMYXllckZhY3RvcnkoKSBjb25zdAogfQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9O
X0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQogUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRvcj4g
V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKSBjb25zdAogewogICAgIGlmIChhdXRvKiBkcmF3aW5nQXJlYSA9IG1f
cGFnZS5kcmF3aW5nQXJlYSgpKQogICAgICAgICByZXR1cm4gZHJhd2luZ0FyZWEtPmNyZWF0ZURp
c3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQpOwogICAgIHJldHVybiBudWxscHRyOwogfQor
I2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJDaHJvbWVDbGll
bnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKyAgICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZWxz
ZQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKICNlbmRpZgorfQogCiB2
b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFw
aGljc0xheWVyKiBsYXllcikKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBmZGEzMzhlY2ZhNjg1
NWUxYzFkNjA4NTBlNDcxZjY3OTRlZDFjMmNkLi40ZGVkZmVlNzg0MTE2NWU1NzdkOTQwMzIzNTUx
YjRmNTNiMmQxZGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yMzEsNiArMjMxLDggQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IGZp
bmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6UmVuZGVyaW5nQmFj
a2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZpbmFsOworCiAgICAgQ29tcG9z
aXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25zdCBmaW5h
bAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbXBvc2l0aW5nVHJpZ2dlckZs
YWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggZWYwMzUwMzQyYmI4MjI0NmNk
MTlmMzU0ZDliY2MwMjkxZjI5MDQzZC4uMjQwN2YxMDY5YjU3ZmJmNjU5NDg4NzU0MTI4Y2U4ZmFi
MWVjYmJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTIwMiw3ICsyMDIsNyBA
QCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVu
dFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8g
VGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBzaG90LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFu
IHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBsaW5lIHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHJlY3Quc2l6ZSgpLCBVbmFjY2VsZXJhdGVkKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVmZmVyKQogICAgICAgICByZXR1
cm4gbmlsOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggZGQzNmQ5YmZhZmNlYTM1NzcxYTNiMWIyNmY2YTVlMTM2YjFkNGJj
MS4uMzQ3NzAwMjUwOGIwZDQwZGNmNDBjZjJkYTFlMWY2NWI1OWVlNzc1YiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE2IEBACisyMDIwLTAxLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGRpc3BsYXls
aXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgVGhlIGV4dHJh
IHJlY29yZGluZyBoYXBwZW5zIGJlY2F1c2UgQ2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIoKSB1
c2VkIHRvCisgICAgICAgIGlzc3VlIGl0cyBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgZGlyZWN0
bHkgdG8gdGhlIGJhY2tlbmQuIFdpdGggcGF0Y2gsCisgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIgZG9lcyBub3QgYWxsb3cgYWNjZXNzIHRvIHRoZSBiYWNrZW5kIGNvbnRleHQuIFNvCisg
ICAgICAgIGFsbCB0aGUgR3JhcGhpY3NDb250ZXh0IGNvbW1hbmRzIGhhcyB0byBiZSByZWNvcmRl
ZC4KKwogMjAyMC0wMS0xNCAgUnlhbiBIYWRkYWQgIDxyeWFuaGFkZGFkQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjU0NTA1LgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3Yjli
MDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAg
LTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRl
Ci0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5n
ZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xv
ciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QK
ICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6
ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389770</attachid>
            <date>2020-02-04 22:36:21 -0800</date>
            <delta_ts>2020-02-05 00:54:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200204223619.patch</filename>
            <type>text/plain</type>
            <size>546448</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmNmNGYxNTAyYjcxM2I5
ZWYyZTc0NjUyYmQ4MGFlOTI0Nzc3ODllNy4uMjQ1YzVkMDY3Y2YzNjBjOTg4M2UwZDVmOWE4ZTg2
MWY1NTc1MGEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0NiBAQAorMjAyMC0wMi0wNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVxdWVzdCB0aGUgcmVtb3RlIGRyYXdpbmcgZm9yIHRoZSBI
VE1MQ2FudmFzRWxlbWVudCB3aGVuIGl0IGlzIG5lZWRlZAorICAgICAgICBieSBzZXR0aW5nIHRo
ZSBzdWl0YWJsZSBSZW5kZXJpbmdNb2RlLgorCisgICAgICAgIFNpbmNlIHJlbW90ZSBkcmF3aW5n
IGNyZWF0ZXMgb25lIEltYWdlQnVmZmVyQmFja2VuZCBpbiB0aGUgR1BVUHJvY2VzcywgCisgICAg
ICAgIHRoZSBXZWJQcm9jZXNzIHJlbW90ZSBJbWFnZUJ1ZmZlciBoYXMgdG8gYmUgY3JlYXRlZCBp
bml0aWFsbHkgd2l0aCBubworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQgdGlsbC4gU28gQ29u
dGV4dHVhbEltYWdlQnVmZmVyIGhhcyB0byBlbnN1cmUgdGhlCisgICAgICAgIGJhY2tlbmQgaXMg
Y3JlYXRlZCBiZWZvcmUgZG9pbmcgYW55IG9wZXJhdGlvbi4KKworICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbElt
YWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmZs
dXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJh
c2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjps
b2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJh
Y2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6
bWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmNvcHlOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
OjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVh
bEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRleHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIHBsYXRmb3JtTGF5ZXIKKyAgICAgICAg
Y29weVRvUGxhdGZvcm1UZXh0dXJlCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorCisyMDIwLTAyLTA0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IEltYWdlQnVmZmVyIHNoYXJlYWJsZSBiYWNrZW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIHRoZSBiYXNlIEltYWdlQnVmZmVyQmFj
a2VuZCBmb3IgZWFjaCBwbGF0Zm9ybS4gCisgICAgICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZCBpbiBXZWJLaXQgbmVlZHMgdG8gaGF2ZSBhY2Nlc3MgdG8gYmFzaWMKKyAgICAg
ICAgSW1hZ2VCdWZmZXJCYWNrZW5kIGZ1bmN0aW9uYWxpdGllcyBzcGVjaWZpYyB0byB0aGUgcGxh
dGZvcm0uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKworMjAyMC0wMi0wNCAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0
aGUgcmVtb3RlIFJlbmRlcmluZ0JhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzE5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEV4dGVuZCBSZW5kZXJpbmdNb2RlIHRvIGluY2x1ZGUgbmV3IGVu
dW0gdmFsdWVzIGZvciBjcmVhdGluZyByZW1vdGUKKyAgICAgICAgSW1hZ2VCdWZmZXIgdHlwZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCisyMDIwLTAyLTAzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFJlbmRlcmluZ0JhY2tlbmQgYW5kIG1ha2UgaXQgdGhlIGNyZWF0b3Igb2YgSW1hZ2VCdWZmZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmlu
Z0JhY2tlbmQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIEltYWdlQnVmZmVy
LiBJbiBhCisgICAgICAgIGZvbGxvd2luZyBwYXRjaCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdp
bGwgYmUgaW50cm9kdWNlZC4gSXQnbGwgaW5oZXJpdAorICAgICAgICBSZW5kZXJpbmdCYWNrZW5k
IGFuZCBsaXZlIGluIFdlYktpdC4gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcK
KyAgICAgICAgdGhlIFJlbW90ZUltYWdlQnVmZmVyLiBUaGUgZ29hbCBmb3IgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBpcyB0byBpbnRlcmFjdCB3
aXRoIFJlbW90ZUltYWdlQnVmZmVyIHNlYW1sZXNzbHkgaW4gdGhlIGNhbGxlciBzaWRlLgorCisg
ICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9DaHJv
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
IGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21l
Q2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5oOiBBZGRlZC4KKworMjAyMC0wMi0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0eXBl
IGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgaW5oZXJpdHMgSW1h
Z2VCdWZmZXIgYW5kIERyYXdpbmdDb250ZXh0LiBUaGUgCisgICAgICAgIGRyYXdpbmcgY29udGV4
dCB3aWxsIGJlIHRoZSBjb250ZXh0IG9mIHRoZSBkaXNwbGF5IGxpc3QuIFRoZSBJbWFnZUJ1ZmZl
cgorICAgICAgICBvcGVyYXRpb25zIHdpbGwgZW5zdXJlIHRoZSByZWNvcmRlZCBkaXNwbGF5LWxp
c3QgaXMgcmVwbGF5ZWQgYmFjayBiZWZvcmUKKyAgICAgICAgZ2V0dGluZyB0aGUgcGl4ZWxzIG9m
IHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlz
cGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRl
eHR1YWxJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpj
b3B5TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpzaW5rSW50b05h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFn
ZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6On5EaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpE
cmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpzZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKworMjAyMC0wMS0zMSAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZlcmVu
dCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3RvcmVkIHRvIGRl
Y291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBiYWNrLWVuZCBk
ZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAgICAgIEEgY2xh
c3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRkZWQgdG8gYWxs
b3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBhY2NvcmRpbmcg
dG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWlscy4KKworICAg
ICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhlIHJlc3Qgb2Yg
dGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBiZSBjcmVhdGVk
LiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaAorICAgICAg
ICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdlIHRvIHRoZSBj
b25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgQmFzZWQgb24g
dGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB3
aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHJlbmRlcmlu
Z01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGluc3RlYWQgb2Yg
YW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVjaXNpb25zCisg
ICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJCYWNrZW5kLgor
CisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcgbmV3IHR5cGVz
IG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVmZmVyQmFja2Vu
ZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50CisgICAgICAg
IERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5kZXJpbmcuCisK
KyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fp
cm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKwor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
UmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250
ZXh0dWFsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFs
SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
dWFsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBBIGJyaWRnZSBj
bGFzcyB0byBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5VG9QbGF0
Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1l
bW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNm
b3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlIGFsbCB0aGUgYmFjay1lbmQgYW5k
IHBsYXRmb3JtcyBkZXRhaWxzLiBVbmlmeSB0aGUgaW50ZXJmYWNlIHN1Y2gKKyAgICAgICAgdGhh
dCBJbWFnZUJ1ZmZlciBkb2VzIG5vdCBpbmNsdWRlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBB
bGwgdGhlIAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpY3Mgd2lsbCBiZSBpbiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6SW1h
Z2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVs
dGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11
bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Zmx1c2hDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRp
b25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpi
YXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JhY2tlbmRDb29y
ZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Omxv
Z2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
YmFja2VuZFJlY3QgY29uc3QpOgorICAgICAgICBBIGJhc2UgY2xhc3Mgd2hpY2ggZGVmaW5lcyBz
b21lICBkZWZhdWx0IGJlaGF2aW9ycyBzbyBub3QgYWxsIHRoZSBwbGF0Zm9ybXMKKyAgICAgICAg
aGF2ZSB0byBpbXBsZW1lbnQgdGhlbS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dMYXllckJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhaXJvOjpmaWxsU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGVhclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2Fw
QnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQu
CisgICAgICAgIEFuIGFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICBBbiB1bmFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRp
dmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgQSBDYWlybyBzdXJmYWNlIGJhc2UgY2xhc3MgYmFjay1lbmQuCisKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBpeGVs
c0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
b3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBIGJhc2UgY2xhc3MgZm9yIGFs
bCBDRyBiYWNrLWVuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICBBbiB1bmFjY2VsZXJhdGVkIENHIGJhY2stZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOiBSZW1vdmVkLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0
ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5
Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFuIElPU3VyZmFjZSBhY2NlbGVyYXRlZCBD
RyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2Fj
aGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9T
dXJmYWNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VC
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRv
QkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIFJl
bW92ZSBEaXJlY3QyRCBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VCdWZmZXIuIEludHJvZHVjZSAK
KyAgICAgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgaW5zdGVhZC4KKworICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4
dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKKzIwMjAtMDEtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEltYWdlQnVmZmVyOjpnZXRJ
bWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkgcmV0dXJuIGFuZCB0YWtlIEltYWdlRGF0YQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NjIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLS0gQ29tYmlu
ZSBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKCkgYW5kIGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoKQorICAgICAgICAgICBpbiBvbmUgZnVuY3Rpb24gYW5kIG5hbWUgaXQg
Z2V0SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgLS0gTWFrZSBnZXRJbWFnZURhdGEoKSByZXR1cm5z
IGFuIFJlZlB0cjxJbWFnZURhdGE+IHNpbmNlIHRoZSBjYW52YXMgY29kZQorICAgICAgICAgICB1
c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXR1cm5lZCBVaW50OENsYW1wZWRBcnJheSBpbnRvIGFu
IEltYWdlRGF0YQorICAgICAgICAgICBhbmQgc2VuZCBpdCB0byBKYXZhU2NyaXB0Q29yZS4KKwor
ICAgICAgICAtLSBSZW5hbWUgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheSgpIHRvIEltYWdlQnVm
ZmVyOjpwdXRJbWFnZURhdGEoKSBhbmQKKyAgICAgICAgICAgbWFrZSBpdCB0YWtlIGFuIEltYWdl
RGF0YSBzaW5jZSB0aGUgYnl0ZSBhcnJheSBoYXMgdG8gYmUgYXNzb2NpYXRlZAorICAgICAgICAg
ICB3aXRoIGFuIEludFNpemUgYW5kIHNlcGFyYXRpbmcgdGhlbSBkb2VzIG5vdCBsb29rIGEgZ29v
ZCBkZXNpZ24uCisKKyAgICAgICAgLS0gUmVtb3ZlIHRoZSBlbnVtIEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtLiBBbGwgdGhlIGNhbGxlcnMgbmVlZCB0bworICAgICAgICAgICBwYXNzIHJl
Y3RhbmdsZXMgYW5kIHNpemVzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRoZSBJbWFnZURhdGEg
aGFzIHRvCisgICAgICAgICAgIGJlIHNjYWxlZCBhY2NvcmRpbmcgdG8gdGhlIEltZ2VCdWZmZXI6
OnJlc29sdXRpb25TY2FsZSgpLiAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJ
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZElt
YWdlQml0bWFwKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xl
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5z
aG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBJbWFnZUJ1ZmZlckNhaXJvLmNwcC4KKwor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFuZCBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFyZSBub3QgCisgICAgICAgIG92ZXJyaWRkZW4g
YnkgYW55IHBsYXRmb3JtLiBTbyBkZWxldGUgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2so
KSBhbmQKKyAgICAgICAgbW92ZSBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29u
c3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMgYW5kIHJlbW92ZSB0
aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAg
ICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5kIHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGluIGxvZ2lj
YWwgY29vcmRpbmF0ZXMuIFRvCisgICAgICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdl
IG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgVGhpcyB3YXMgdGhlIG9ubHkgcGxhY2Ugd2hpY2ggd2FzIHBhc3Np
bmcgYSByZWN0YW5nbGUgaW4gYSB0aGUgYmFjay1lbmQKKyAgICAgICAgY29vcmRpbmF0ZXMgYWxv
bmcgd2l0aCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLiBJbnN0ZWFkIHdlIGNhbiBwYXNz
CisgICAgICAgIHRoZSByZWN0YW5nbGUgaW4gbG9naWNhbCBjb29yZGluYXRlcyBhbmQgdGhlbiB1
c2UgSW1hZ2VEYXRhOjpzaXplKCkgc2luY2UKKyAgICAgICAgaXQgbXVzdCBiZSBzY2FsZWQgd2l0
aCByZXNvbHV0aW9uU2NhbGUoKSB3aGVuIHRoZSBJbWFnZURhdGEgaXMgY3JlYXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjAt
MDItMDMgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2gg
aW4gV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUluZGV4CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4
IGY4YzhjMzNhN2QzNGZhM2JmYmZkZTFmMzljZDg3YzE5YzViY2RjZWEuLjljN2JiZjE3MjM4NGZh
NDlkZWFmODQ4MGUwOTlmYTYzOWU2NjVkZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjk3IEBACisy
MDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJlbW90ZSByZW5kZXJpbmcg
aXMgcmVxdWlyZWQsIHR3byBvYmplY3RzIHdpbGwgYmUgY3JlYXRlZCB0byBzeW5jaHJvbml6ZQor
ICAgICAgICB0aGUgZHJhd2luZyBiZXR3ZWVuIHRoZSBXZWJQb3JjZXNzIGFuZCB0aGUgR1BVUG9y
Y2VzcyBhbmQgdG8gc2hhcmUgdGhlCisgICAgICAgIGJhY2tlbmQ6CisKKyAgICAgICAgKDEpIFJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgaXMgY3JlYXRlZCBpbiB0aGUgV2ViUHJvY2VzcyBhbmQg
aXQgYXNrcworICAgICAgICAgICAgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB0aGUg
c2Vjb25kIG9iamVjdC4KKyAgICAgICAgKDIpIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94
eSBpcyBjcmVhdGVkIHRoZSBHUFVQcm9jZXNzIGFuZCBhc3NvY2lhdGVkCisgICAgICAgICAgICB3
aXRoIHRoZSBmaXJzdCBvbmUgYnkgYW4gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLgorICAgICAgICAK
KyAgICAgICAgLS0gV2hlbiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkgaXMgY3JlYXRl
ZCwgaXQgc2VuZHMgYSBtZXNzYWdlIHRvCisgICAgICAgICAgIHNoYXJlIGl0cyBiYWNrZW5kIHdp
dGggUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci4KKworICAgICAgICAtLSBUbyBzeW5jaHJvbml6
ZSB0aGUgZHJhd2luZywgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlciBzZW5kcyB0aGUgbWVzc2Fn
ZQorICAgICAgICAgICAnRmx1c2hDb250ZXh0JyBvciB0aGUgbWVzc2FnZSAnRmx1c2hEcmF3aW5n
Q29udGV4dCcgdG8gCisgICAgICAgICAgIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS4g
VG8gZXhjaGFuZ2UgdGhlIG1lc3NhZ2VzIGFzeW5jaHJvbm91c2x5CisgICAgICAgICAgIFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSBzZW5kcyBiYWNrIHRoZSBtZXNzYWdlIFNldEZsdXNo
SWRlbnRpZmllcgorICAgICAgICAgICB0byBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyIHdoZW4g
dGhlIGZsdXNoaW5nIGlzIGRvbmUuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlQ29u
dGV4dHVhbEltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIENv
bnRleHR1YWxJbWFnZUJ1ZmZlciBhbmQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4gV2hlbgorICAg
ICAgICBpdCBpcyBjcmVhdGVkLCBpdHMgc2hhcmVzIGl0cyBiYWNrZW5kIHdpdGggUmVtb3RlQ29u
dGV4dHVhbEltYWdlQnVmZmVyIGJ5IAorICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIFJlbW90
ZUltYWdlQnVmZmVyOjpDcmVhdGVCYWNrZW5kLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVCYWNrZW5kKToKKyAgICAgICAg
U2VuZHMgdGhlIG1lc3NhZ2UgUmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUJhY2tlbmQuCisKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4
dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuaDoKKyAgICAgICAgSW1wbGVtZW50IG1lc3NhZ2UgaGFuZGxlcnMuIEFmdGVyIHRo
ZWlyIHdvcmsgaXMgZG9uZSB0aGV5IHNlbmQgdGhlCisgICAgICAgIG1lc3NhZ2UgJ1NldEZsdXNo
SWRlbnRpZmllcicgdG8gUmVtb3RlSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgKiBHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgQWRkIG1lc3NhZ2VzIGZvciBmbHVzaGluZyB0aGUgY29udGV4dCBhbmQgdGhlIERyYXdp
bmdDb250ZXh0LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lcyB0aGUg
cGxhdGZvcm0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB0eXBlLgorCisgICAgICAgICogR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VC
dWZmZXIpOgorICAgICAgICBDcmVhdGUgdGhlIHBsYXRmb3JtIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBX
ZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKworICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaDogQWRkZWQu
CisgICAgICAgIFRoaXMgaXMgdXNlZCB0byBzeW5jaHJvbml6ZSBmbHVzaGluZyB0aGUgY29udGV4
dCBhbmQgdGhlIERyYXdpbmdDb250ZXh0IAorICAgICAgICBvZiB0aGUgSW1hZ2VCdWZmZXJCYWNr
ZW5kIGJldHdlZW4gdGhlIEdQVVByb2Nlc3MgYW5kIHRoZSBXZWJQcm9jZXNzLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OlJlbW90ZUNvbnRleHR1YWxJbWFn
ZUJ1ZmZlcik6CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJpdHMgRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlciBhbmQgUmVtb3RlSW1hZ2VCdWZmZXIuIEl0IHJlcHJlc2VudHMKKyAgICAgICAgdGhlIFdl
YlByb2NzcyBwYXJ0IG9mIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRDcmVhdGVCYWNrZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgor
ICAgICAgICBCbG9ja2VycyB0aGF0IHdhaXQgZm9yIGNlcnRhaW4gbWVzc2FnZXMgdG8gYmUgcmVj
ZWl2ZWQuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0
ZWRCYWNrZW5kKToKKyAgICAgICAgRW5zdXJlcyB0aGUgYmFja2VuZCBpcyBjcmVhdGVkIGFuZCB0
aGUgRHJhd2luZ0NvbnRleHQgaXMgZmx1c2hlZCB0byB0aGUKKyAgICAgICAgYmFja2VuZC4KKwor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToK
KyAgICAgICAgQSBtZXNzYWdlIGhhbmRsZXIgdGhhdCBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRo
ZSBEcmF3aW5nQ29udGV4dCBpcworICAgICAgICBjb21taXR0ZWQgdG8gdGhlIGJhY2tlbmQgb3Ig
bm90LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENv
bnRleHQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hE
cmF3aW5nQ29udGV4dCk6CisgICAgICAgIEVuc3VyZXMgYWxsIHRoZSByZWNlbnQgZHJhd2luZyBp
cyBjb21taXR0ZWQgdG8gdGhlIGJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6aXNQZW5kaW5nRmx1c2ggY29uc3QpOgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNz
YWdlcy5pbjoKKyAgICAgICAgQWRkIG1lc3NhZ2VzIGZvciBjcmVhdGluZyB0aGUgYmFja2VuZCBh
bmQgZm9yIHNldHRpbmcgdGhlIEZsdXNoSWRlbnRpZmllci4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRl
ZC4KKyAgICAgICAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gUmVtb3RlSW1hZ2VCdWZmZXIgdHlwZS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgQ3JlYXRlIHRoZSBwbGF0Zm9ybSBSZW1vdGVJ
bWFnZUJ1ZmZlci4KKworMjAyMC0wMi0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxh
d2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBJbWFnZUJ1ZmZlciBzaGFyZWFibGUg
YmFja2VuZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzIzMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSByZW1vdGUgSW1hZ2VCdWZmZXIgcHJveHkgd2lsbCBjcmVhdGUgYSBzaGFyZWFibGUgYmFj
a2VuZCBpbiB0aGUKKyAgICAgICAgR1BVUHJvY2Vzcy4gVGhlbiBpdCB3aWxsIGdpdmUgYWNjZXNz
IHRvIHRoZSBiYWNrZW5kIHRvIHRoZSByZW1vdGUKKyAgICAgICAgSW1hZ2VCdWZmZXIgaW4gdGhl
IFdlYlByb2Nlc3MgYnkgc2VuZGluZyBhbiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuCisKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTb3VyY2VzLnR4
dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmg6IEFkZGVkLgorICAgICAgICBUaGlzIGlz
IHZhcmlhbnQgb2Ygc2hhcmVhYmxlIGhhbmRsZXMgdG8gdGhlIEltYWdlQnVmZmVyQmFja2VuZCBk
YXRhLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICBUaGUg
Zmlyc3QgY3JlYXRlIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB0byBjcmVhdGUgdGhlIHJlbW90ZSBJ
bWFnZUJ1ZmZlcgorICAgICAgICBwcm94eSBpbiB0aGUgR1BVUHJvY2Vzcy4gVGhlIHNlY29uZCBj
cmVhdGUgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHRvIGNyZWF0ZSB0aGUKKyAgICAgICAgcmVtb3Rl
IEltYWdlQnVmZmVyIGluIHRoZSBXZWJQcm9jZXNzLgorCisgICAgICAgIChXZWJLaXQ6OkltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3QpOgorICAgICAgICBDcmVh
dGVzIGFuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSB3aGljaCB3aWxsIGJlIHNlbnQgZnJvbSB0
aGUgR1BVUHJvY2VzcworICAgICAgICB0byB0aGUgV2ViUHJvY2Vzcy4KKworICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZSBj
b25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEgY29uc3QpOgorICAg
ICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdl
RGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDogQWRkZWQuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNr
ZW5kLmg6IEFkZGVkLgorICAgICAgICBEZWZpbmVzIHRoZSBwbGF0Zm9ybSBzaGFyZWFibGUgSW1h
Z2VCdWZmZXJCYWNrZW5kIHR5cGVzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNr
ZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjb25zdCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEJlY2F1c2UgSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlIGhhcyB0byBiZSBkZWZpbmVkIGluIFdlYktpdCwgc2hhcmluZworICAg
ICAgICB0aGUgSU9TdXJmYWNlIGJhY2tlbmQgaGFzIHRvIGJlIGltcGxlbWVudGVkIGluIFdlYktp
dC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXIuY3BwOgorCisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzIyMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW90ZUlt
YWdlQnVmZmVyIGFuZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHdpbGwgYmUgcmVzcG9uc2libGUg
Zm9yCisgICAgICAgIGhhbmRsaW5nIHRoZSBjb21tdW5pY2F0aW9ucyBvZiB0aGUgSW1hZ2VCdWZm
ZXIgcGFydHMgYmV0d2VlbiBXZWJQcm9jZXNzCisgICAgICAgIGFuZCBHUFVQcm9jZXNzLgorCisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJp
dmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
UHJveHk6OlJlbW90ZUltYWdlQnVmZmVyUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICAqIEdQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOiBB
ZGRlZC4KKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBTb3VyY2VzQ29jb2EudHh0
OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OlJlbW90ZUltYWdlQnVm
ZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVy
Q29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpt
ZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3Nh
Z2VzLmluOiBBZGRlZC4KKworMjAyMC0wMi0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0aGUgcmVtb3RlIFJlbmRlcmlu
Z0JhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNzE5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IC0tIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgd2lsbCBiZSBjcmVhdGVkIGJ5IFdlYkNocm9tZUNs
aWVudCBhbmQgb3duZWQgYnkKKyAgICAgICAgQ2hyb21lLiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlIHdp
bGwgaGF2ZSBhY2Nlc3MgdG8gaXQgdGhyb3VnaCB0aGUgSG9zdFdpbmRvdworICAgICAgICBhcmd1
bWVudC4gQWxsIHR5cGVzIG9mIEltYWdlQnVmZmVyIHdpbGwgYmUgY3JlYXRlZCBieQorICAgICAg
ICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcigpIG1ldGhvZC4gSW4t
cHJvY2VzcyBJbWFnZUJ1ZmZlcgorICAgICAgICB0eXBlcyB3aWxsIGJlIGNyZWF0ZWQgYnkgUmVu
ZGVyaW5nQmFja2VuZDo6IGNyZWF0ZUltYWdlQnVmZmVyKCkuCisKKyAgICAgICAgLS0gUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5IHdpbGwgYmUgY3JlYXRlZCBhbmQgb3duZWQgYnkKKyAgICAg
ICAgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy4KKworICAgICAgICAqIERlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmls
ZWxpc3Q6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKworICAgICAgICAqIEdQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAg
ICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFj
a2VuZCk6CisgICAgICAgIEFkZCBtZXRob2RzIGZvciBjcmVhdGluZyBhbmQgcmVsZWFzaW5nIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKworICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKToKKyAgICAgICAgKFdl
YktpdDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNl
aXZlU3luY01lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICBBZGQgYSBNZXNzYWdlUmVjZWl2
ZXJNYXAgdG8gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBzbyBtZXNzYWdlcyBjYW4gYmUKKyAg
ICAgICAgZGlzcGF0Y2hlZCB0byBpdHMgTWVzc2FnZVJlY2VpdmVycy4KKworICAgICAgICAqIEdQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKyAgICAgICAg
QWRkIHRoZSBhdHRyaWJ1dGUgJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJy4KKyAgICAgICAgQWRkIG1l
c3NhZ2VzIGZvciBjcmVhdGluZyBhbmQgcmVsZWFzaW5nIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk6CisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6flJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0
KToKKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0
ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICBBZGQgbWV0aG9kcyBmb3IgY3JlYXRp
bmcgYW5kIHJlbGVhc2luZyByZW1vdGUgSW1hZ2VCdWZmZXIgcHJveHkuCisKKyAgICAgICAgKiBH
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIGNvbnN0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluOiBB
ZGRlZC4KKyAgICAgICAgQWRkIG1lc3NhZ2VzIGZvciBjcmVhdGluZyBhbmQgcmVsZWFzaW5nIHJl
bW90ZSBJbWFnZUJ1ZmZlciBwcm94eS4KKworICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1Jl
bW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oOgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2Vi
cnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuY3BwOgorICAgICAgICAq
IEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIu
aDoKKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICBJZiB0
aGUgYXR0cmlidXRlIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBtZXNzYWdl
cy5pbiBmaWxlLAorICAgICAgICBhIGNhbGwgdG8gJ2Rpc3BhdGNoTWVzc2FnZSgpJyB3aWxsIGJl
IGFkZGVkIHRvIGRpZFJlY2VpdmVNZXNzYWdlKCkgYW5kCisgICAgICAgIGEgY2FsbCB0byAnZGlz
cGF0Y2hTeW5jTWVzc2FnZSgpJyB3aWxsIGJlIGFkZGVkIHRvIGRpc3BhdGNoU3luY01lc3NhZ2Uo
KQorICAgICAgICBldmVuIGlmIG5vIG1lc3NhZ2VzIGFyZSBkZWZpbmVkIGluIG1lc3NhZ2VzLmlu
LgorCisgICAgICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICBB
ZGQgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHN1cHBvcnQgZm9yIEFscGhhUHJlbXVsdGlwbGljYXRp
b24gYW5kIFJlbmRlcmluZ01vZGUuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBTb3VyY2VzQ29jb2EudHh0OgorICAgICAgICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
Y3BwOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNz
YWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpc3BhdGNoU3lu
Y01lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZUludmFsaWRNZXNzYWdlKToKKyAgICAgICAgKFdlYktpdDo6R1BVUHJvY2Vzc0Nvbm5lY3Rp
b246OmRpZFJlY2VpdmVNZXNzYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6bWVzc2FnZVJlY2VpdmVyTWFwKToKKyAgICAgICAgQWRkIGEgTWVzc2FnZVJlY2Vp
dmVyTWFwIHRvIEdQVVByb2Nlc3NDb25uZWN0aW9uIHNvIG1lc3NhZ2VzIGNhbiBiZQorICAgICAg
ICBkaXNwYXRjaGVkIHRvIGl0cyBNZXNzYWdlUmVjZWl2ZXJzLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW46CisgICAgICAgIEFkZCB0
aGUgYXR0cmlidXRlICdXYW50c0Rpc3BhdGNoTWVzc2FnZScuCisKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oOiBBZGRlZC4K
KyAgICAgICAgQWRkIGFuIE9iamVjdElkZW50aWZpZXIgZm9yIHJlbW90ZSBJbWFnZUJ1ZmZlci4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEIGNvbnN0KToKKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgIENyZWF0ZXMgYWxsIHR5cGVzIG9mIElt
YWdlQnVmZmVyLiBGb3Igbm93IGl0IG9ubHkgY3JlYXRlcyB0aGUgaW4gcHJvY2VzcworICAgICAg
ICBSZW5kZXJpbmdCYWNrZW5kLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaDog
QWRkZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVy
aW5nQmFja2VuZCBjb25zdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaDoKKyAgICAgICAgQ3JlYXRlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQg
d2hpY2ggd2lsbCBiZSBvd25lZCBieSB0aGUgQ2hyb21lLgorCisyMDIwLTAyLTAzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQWxsb3cgZGlm
ZmVyZW50IGJhY2stZW5kcyBmb3IgSW1hZ2VCdWZmZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzA0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBzaG90IGNv
bnN0KToKKwogMjAyMC0wMi0wMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXSzJdIFVzZSBwZXItVUlQcm9jZXNzIGRlZmF1bHQgY29va2llIHN0b3JhZ2UgZm9y
IE1hYyBDYXRhbHlzdCBhcHBzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNt
YWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCA1MmIzNjQxMDk4OTY1OGQ0
OWZjMjUwNjlkMjA4MzA5NDVmMDY4ZDJiLi4xYWU1MWM3OTJlNWQ1NTI4NjQ5ZGRkNTc1OTI2YjA3
NWZjODJmYTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTEwNDMsOCArMTA0MywxMCBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3JIYXNoLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvclNwYWNlLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db21wbGV4VGV4dENvbnRyb2xsZXIuaAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGFzaEFy
cmF5LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EZWNvZGluZ09wdGlvbnMuaAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVm
cmVzaE1vbml0b3JNYW5hZ2VyLmgKQEAgLTEwOTQsNyArMTA5Niw3IEBAIHNldChXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckRh
dGEuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VP
YnNlcnZlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5oCkBAIC0x
MTI3LDEyICsxMTI5LDE1IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoVXRpbGl0aWVzLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QYXR0ZXJuLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuaAor
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUxheWVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybU1lZGlh
UmVzb3VyY2VMb2FkZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGV4dFRyYWNr
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL1JlZ2lvbi5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVtb3RlVmlkZW9T
YW1wbGUuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1Jv
dW5kZWRSZWN0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZSBiL1NvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKaW5kZXggZjcxMjkyN2NjOTE4ZjNhYjBmZTcw
OGE4YWMwMTdiZDBmM2NmOTQwZC4uNWQxNzc0M2VkMzg0MzAxMWZhODZjZTUxMWJlOTI5MzMwOTky
OTJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCkBAIC04Myw4ICs4Myw3
IEBAIGlmICgke1VTRV9ESVJFQ1QyRH0pCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9H
cmFkaWVudERpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhp
Y3NDb250ZXh0RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFw
aGljc0xheWVyRGlyZWN0MkQuY3BwCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0lt
YWdlQnVmZmVyRGlyZWN0MkQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VEaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL05hdGl2ZUlt
YWdlRGlyZWN0MkQuY3BwCkBAIC0xMzIsOCArMTMxLDkgQEAgZWxzZSAoKQogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlclV0aWxpdGllc0NHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURl
Y29kZXJDRy5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VTb3VyY2VDR1dp
bi5jcHAKQEAgLTE3Niw3ICsxNzYsOSBAQCBlbHNlICgpCiAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JT1N1cmZhY2VQb29sLmgKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJEYXRhQ0cuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGls
aXRpZXNDRy5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
aAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9VVElSZWdpc3RyeS5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRlRXLmNtYWtlCmluZGV4IDlhYjQ2ODczOWVmMTFmZjYwOWI5NjI5Mjg4YmIwMWIxNmRhNzAy
YWEuLmY0YjliN2Y4ODY2YjEyNDFhODU1NzliMmU2MWY3YmFlNTQzZDg3NWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRlRXLmNtYWtlCkBAIC04NCw4ICs4NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0
MkQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldpbi5jcHAKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dp
bi9JbWFnZURlY29kZXJEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VXaW4uY3BwCkBA
IC0yMDEsNyArMjAwLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19I
RUFERVJTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyLmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVsbFNjcmVlbkNvbnRyb2xsZXJDbGllbnQuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHRJbXBsRGlyZWN0MkQuaAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmgKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29udGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxzY3JlZW5XaW5kb3cuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCBhZWMzMjA2N2QzZTZmMmY0OWQxOTNlMGIxYTY2YmIwOTU5MTE2MGM4
Li4xMjIxNWFiMWQxMGZiZGQ4YWVjYTI2N2Y3MDg0NjM3MzViZjVmZWQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMjkxLDggKzI5MSwxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURlY29kZXJDRy5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZVNvdXJjZUNHTWFjLm1tCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW50UG9pbnRDRy5jcHAKQEAgLTUyNyw3ICs1MjksOSBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0dyYXBoaWNzQ29udGV4dENHLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQ
b29sLmgKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1BERkRvY3VtZW50SW1hZ2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJlZ2lz
dHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKaW5kZXggNGYzMDcxNTliN2VkODA2ZWI4MTk1
MmJiYTQ1ZjVjMDdhOGRjOTNlYi4uOGFmNzAxYzc3N2ZlMTUyZTIzMTZjYTUwMDA0M2FkOTcxYWNi
ZjFhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKKysrIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTExOSw3ICsxMTksNiBAQCBsaXN0
KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRElCUGl4ZWxEYXRhLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVs
bFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVu
Q29udHJvbGxlckNsaWVudC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTG9jYWxXaW5kb3dzQ29u
dGV4dC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZUZ1bGxz
Y3JlZW5XaW5kb3cuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaGFyZWRHRElPYmplY3Qu
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dAppbmRleCAxMTZiMzg4ZDJkNWZkNWNkMmZkOWE0ZTYyNTBjMzg2YjQ1Yzcx
MjY1Li4zYTM1ZDZjMTMxNGU1MDA2ZWU1Nzk5NmY0YjgzNWY5ODIwYmUyMDZhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dApAQCAtMTg2NCw2ICsxODY0LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvSEVWQ1V0aWxpdGll
cy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VEZWNvZGVy
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmNwcApAQCAtMTg4Myw2ICsxODg0LDcgQEAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0dGVybi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGltZVJhbmdlcy5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL1JlZ2lvbi5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1JlbW90ZVZpZGVv
U2FtcGxlLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL1JvdW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1N0cmluZ1RydW5jYXRvci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
Q29jb2EudHh0CmluZGV4IDRkZTc1ZGY4ZGYwYjhmOTBlNWIyNTgxNTdlYWRhNGE2OWQzYjU5MTYu
Ljc2NjFlMmI5YWQyYjM5MThhNTNiMTY3ZTQ3YmMxNDUzYWU2ZmM5MWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
c0NvY29hLnR4dApAQCAtMjkxLDggKzI5MSw5IEBAIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYWRp
ZW50Q0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRHTENHLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDRy5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZURl
Y29kZXJDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
aiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBhZjA0NDEyNDE4ZTZkYmIwZjBiM2IxN2E2ZDlhOGNhNmJhODExNmI0Li5mOGFhOTc4NmY1Y2Vj
MjE3ODNjMjYwM2Y3NDI2MTNmNmQwMmQxNmU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02NDUsOCArNjQ1LDYgQEAKIAkJMjBE
NjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkw
QjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjVBMTZC
NTBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyNUExNkIzMEQ1QzExRTkwMDA5MDI5NSAvKiBX
ZWJFdmVudFJlZ2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBE
ODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkyMkJEOUY3RjEzNTM2MjVDMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMjJCRDlGODEx
MzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMkJEOUY4MDEzNTM2NEZFMDA5QkQxMDIgLyog
SW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaERl
ZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDI0RDkxMjkwMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICov
OyB9OwogCQkyNEQ5MTI5NjEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEQ5
MTI5NDEzQ0E5NTYxMDBEMjE5MTUgLyogSlNTVkdBbHRHbHlwaEl0ZW1FbGVtZW50LmggKi87IH07
CiAJCTI0RDkxMjlBMTNDQTk3MTQwMEQyMTkxNSAvKiBKU1NWR0dseXBoUmVmRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTkxM0NB
OTcxNDAwRDIxOTE1IC8qIEpTU1ZHR2x5cGhSZWZFbGVtZW50LmggKi87IH07CkBAIC04MzMsMTcg
KzgzMSwxNyBAQAogCQkyREFDQjlFOTIzNzU1RDAwMDBCNEMxODUgLyogR3JhcGhpY3NDb250ZXh0
SW1wbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
MDEyM0YxRkFEODdENjAwNTMxRDc2IC8qIEdyYXBoaWNzQ29udGV4dEltcGwuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyREFGMzQzRDFFQTdFMEYx
MDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRBRjM0M0IxRUE3RTBGMTAwMzgyQ0QzIC8qIENvbnN0
YW50UHJvcGVydHlNYXAuaCAqLzsgfTsKIAkJMkRENUE3MjcxRUJFRTQ3RDAwOUJBNTk3IC8qIENv
bXBvc2l0aW9uVW5kZXJsaW5lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyREQ1QTcyNjFFQkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxp
bmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQky
RERFMUNFMzFGNTc0QUU1MDBEMUEzNjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFMDFGNTc0QUQxMDBEMUEz
NjUgLyogSlNWUkZpZWxkT2ZWaWV3LmggKi87IH07Ci0JCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2
NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkRERTFDREUxRjU3NEFBQjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggKi87IH07
Ci0JCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUNhcGFiaWxpdGllcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRTYx
RjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggKi87IH07Ci0JCTJE
REUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFODFGNTc0QkZGMDBEMUEz
NjUgLyogSlNWUkRpc3BsYXlFdmVudC5oICovOyB9OwotCQkyRERFMUNGQzFGNTc0Q0VFMDBEMUEz
NjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUExRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJEaXNw
bGF5RXZlbnRSZWFzb24uaCAqLzsgfTsKLQkJMkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIEpT
VlJFeWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
REUxQ0VDMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRXllLmggKi87IH07Ci0JCTJEREUxRDAwMUY1
NzRDRjcwMEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUUxRjU3NEJGRjAwRDFBMzY1IC8qIEpT
VlJFeWVQYXJhbWV0ZXJzLmggKi87IH07Ci0JCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBK
U1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRERFMUNGMDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkZyYW1lRGF0YS5oICovOyB9Owot
CQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRjIxRjU3NEJGRjAwRDFB
MzY1IC8qIEpTVlJMYXllckluaXQuaCAqLzsgfTsKLQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1
IC8qIEpTVlJQb3NlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRERFMUNGNDFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUlBvc2UuaCAqLzsgfTsKLQkJMkRE
RTFEMDgxRjU3NEQwRTAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y2MUY1NzRCRkYwMEQx
QTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0ZXJzLmggKi87IH07CisJCTJEREUxQ0UzMUY1NzRBRTUw
MEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07
CisJCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0Y4MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVs
bCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZBMUY1
NzRDM0UwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IH07CisJCTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxQ0ZFMUY1NzRDRjMwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUx
RDAwMUY1NzRDRjcwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IH07CisJCTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA0MUY1NzREMDUwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CisJ
CTJEREUxRDA2MUY1NzREMEEwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IH07CisJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAvKiAobnVsbCkg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IH07CiAJCTJERTcwMDIzMTkyRkU4
MkEwMEIwOTc1QyAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERTcwMDIyMTkyRkU4MkEwMEIwOTc1QyAv
KiBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYWMuaCAqLzsgfTsKIAkJMkRGNTEyQ0UxRDg3M0U0NzAw
MUQ2NzgwIC8qIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRGNTEyQ0MxRDg3M0U0NzAwMUQ2NzgwIC8q
IFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oICovOyB9OwogCQkyREZBNDg4RjFEQjU0MUQw
MDAzNjJCOTkgLyogQnVmZmVyU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAyREZBNDg4RTFEQjU0MUMyMDAzNjJCOTkgLyogQnVmZmVyU291cmNl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIx
NDUsMTEgKzIxNDMsMTkgQEAKIAkJNzIxNDQzMzQyMjNFQzkxNjAwRjEyRkY3IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eU93bmVyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIyODNGMEUyMzBCMjY4
QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1h
Z2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MjJBODE1RDIzOEZEQUYwMDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVS
YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MjJB
ODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJhbWVSYXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzIzOTQwNjUyM0U4ODI4NjAw
RTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzk0MDY0MjNFODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdC
YWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNzI0RUQzMzIxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVEMzMwMUEzQThCMjMw
MEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi87IH07CiAJCTcyNEVFNTUwMURDODBEN0Yw
MEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MjRFRTU0RTFEQzdGMjVCMDBBOTFGRkIgLyogQWN0aXZpdHlTdGF0
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcy
NEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMy
MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJD
NjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlDNDUxQjIzRUE0QTI5MDBCMkIxQ0Ug
LyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbElt
YWdlQnVmZmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzI5QzQ1MUUyM0VBNTIzRDAwQjJCMUNFIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzk0MDVF
MjNFNUY1M0YwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI5QzQ1MUYyM0VBNTI4OTAw
QjJCMUNFIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyMzk0MDYwMjNFNUY1NjcwMEUzQjU0NSAvKiBE
aXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI5REQ0NDIyM0VBMjZBMDAwMDI2QjdCIC8qIFBsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3MjUwNkQ0NjIzRUEyMjJCMDAxRTZFMEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
ckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk3MjlERDQ0NDIzRUEyNzBBMDAwMjZCN0IgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0FEMjNF
MUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOURENDQ1MjNFQTI3OUIwMDAyNkI3
QiAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzU1M0NGRTgxMDhG
NDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU1M0NGRTYxMDhGNDczRjAwRUEyODFFIC8q
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oICovOyB9OwogCQk3NTc5M0U4NDBEMENFMEIzMDA3RkMw
QUMgLyogTWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3NTc5M0U4MTBEMENFMEIzMDA3RkMwQUMgLyogTWVzc2FnZUV2ZW50LmggKi87
IH07CiAJCTc1NzkzRUM5MEQwQ0U3MkQwMDdGQzBBQyAvKiBKU01lc3NhZ2VFdmVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzU3OTNFQzcwRDBDRTcy
RDAwN0ZDMEFDIC8qIEpTTWVzc2FnZUV2ZW50LmggKi87IH07CkBAIC0yNTgwLDcgKzI1ODYsNiBA
QAogCQk4QUY0RTU1QzExREM1QTYzMDAwRUQzREUgLyogUGVyZm9ybWFuY2VUaW1pbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhBRjRFNTU5MTFEQzVB
NjMwMDBFRDNERSAvKiBQZXJmb3JtYW5jZVRpbWluZy5oICovOyB9OwogCQk4QkQzN0E2ODIwMUJC
MzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEJEMzdBNjcyMDFCQjM5QzAwMTE3MzRBIC8qIFJl
YWRhYmxlU3RyZWFtQ2h1bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk4RTRDOTZERDFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4RTRDOTZE
OTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi87IH07Ci0JCThFNjIwRTgx
MjBFRTYwMjQwMDdCQzVFRiAvKiBWUlBsYXRmb3JtRGlzcGxheUNsaWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOEU2MjBFODAyMEVFNUZGQzAwN0JD
NUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEVDNkM5NjMyMDFBMjUxNjAwRkJGQTUzIC8qIEdh
cExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
OEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCThGNjc1NjFCMTI4OEIxN0IwMDQ3QUNB
MyAvKiBFdmVudFF1ZXVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTkwMDE3NzQxMTJFMDM0
NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MDAxNzczRTEyRTAzNDc4MDA2NDg0NjIgLyog
T0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oICovOyB9OwpAQCAtMzIwMiw3ICszMjA3LDcgQEAKIAkJ
QTc1RThCOEQwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3NUU4Qjg1MEUxREUyRDYw
MDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyLmggKi87IH07CiAJCUE3NUU4QjhGMEUxREUy
RDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTc1RThCODcwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRl
LmggKi87IH07CiAJCUE3NkU1RjdGMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERvY3VtZW50
TWFya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
NzZFNUY3RTEzNUUwRENGMDBBNjk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUE3Nzk3OTFBMEQ2
QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTE0MEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEu
aCAqLzsgfTsKKwkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3OTc5MTQwRDZCOUQw
QzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCUE3Nzk3OTI5MEQ2QjlFNjQwMDM4NTFCOSAvKiBKU0ltYWdlRGF0
YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3OTc5
MjUwRDZCOUU2NDAwMzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggKi87IH07CiAJCUE3N0I0MUEwMTJF
Njc1QTkwMDU0MzQzRCAvKiBUZXh0RXZlbnRJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3N0I0MTlGMTJFNjc1QTkwMDU0MzQzRCAvKiBU
ZXh0RXZlbnRJbnB1dFR5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlBNzdEMDAxMjEzM0IwQUVCMDBENjY1OEMgLyogVGV4dENoZWNraW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzdEMDAxMTEz
M0IwQUVCMDBENjY1OEMgLyogVGV4dENoZWNraW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTY1NTksOSArNjU2NCw2IEBACiAJCTIyNUExNkIz
MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyMjVBMTZCNDBENUMxMUU5MDAwOTAyOTUgLyogV2ViRXZlbnRSZWdpb24ubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJFdmVudFJlZ2lvbi5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNj
cmlwdFdyYXBwYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRX
cmFwcGFibGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjI5MkIyN0IxMzU2NjY5
NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyRGF0YUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckRhdGEuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMjJCRDlGODAxMzUzNjRGRTAwOUJEMTAyIC8qIElt
YWdlQnVmZmVyRGF0YUNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyRGF0YUNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5
NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI0RDkxMjhGMTNDQTk1MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVm
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RDkxMjkwMTNDQTk1
MUUwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtOTU4MCw2ICs5NTgyLDEwIEBACiAJCTcyMTQ0MzQ1MjI0MEM4QkEw
MEYxMkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZH
QW5pbWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcy
MTQ0MzQ2MjI0MENBRDIwMEYxMkZGNyAvKiBTVkdWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1ZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzIy
QTgxNUMyMzhGRDUwNTAwQzAwNTgzIC8qIEFuaW1hdGlvbkZyYW1lUmF0ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBBbmltYXRpb25GcmFtZVJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzIzOTQwNUUyM0U1RjUzRjAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM5NDA2MDIzRTVGNTY3MDBFM0I1NDUgLyog
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyMzk0MDYyMjNFODdENTMwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjM5NDA2NDIzRTg3RDU0MDBFM0I1NDUg
LyogUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzI5
MUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcyNEVEMzJBMUEzQTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRCbGVuZE1pbk1heC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRDMyQjFBM0E3RTU0MDBGNUYxM0MgLyogRVhU
QmxlbmRNaW5NYXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4Lmlk
bDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk1ODcsNiArOTU5Myw3IEBACiAJCTcy
NEVEMzMwMUEzQThCMjMwMEY1RjEzQyAvKiBKU0VYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUQmxlbmRNaW5NYXguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzI0RUU1NEUxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RjFEQzdGMjVCMDBBOTFGRkIgLyogQWN0
aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MjUwNkQ0NjIzRUEyMjJCMDAxRTZFMEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTMyMjQx
QkNFMjAwODMzOTc1IC8qIFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1Byb3BlcnR5QW5pbWF0b3JGYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyNjZGMDE0MjI0MUJGQjIwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFu
aW1hdG9ySW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
SW1wbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjY2RjAxNTIyNDFDMDk4MDA4
MzM5NzUgLyogU1ZHUHJpbWl0aXZlUHJvcGVydHlBbmltYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
VkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC05NjAyLDYgKzk2MDksMTYgQEAKIAkJNzI3QUZFRDMxQTJFQTZBMDAwMDQ0MkU4IC8qIEVY
VHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY2MjNENjg2QzYwMENDNjg4MyAv
KiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01vZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTQyM0UxNzMyNzAwOEQ3NDFDIC8qIEltYWdl
QnVmZmVyQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bWFnZUJ1ZmZlckJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJB
QzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUltYWdl
QnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E3MjNFMTczMjgw
MDhENzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29udGV4dHVhbEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyQkFDM0E4MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
QkFDM0E5MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUEyM0Ux
RTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FCMjNFMUU1NDQwMDhENzQxQyAvKiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0FEMjNFMUU1NDUw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MkMxOEEzRjIzMEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VQYWludGluZ09wdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJFNDE3NjExQTJFOEQyRjAwNEM1NjJBIC8qIEpTRVhUc1JHQi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0VYVHNSR0IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MjFBMkU4RDJGMDA0QzU2MkEgLyogSlNF
WFRzUkdCLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRVhUc1JHQi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA1NDQsOCArMTA1NjEsNiBAQAogCQk4RTMz
Q0Q5MzIwMUEyOUMxMDBFMzkwOTMgLyogR2FwTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdhcExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThFNEM5NkQ4MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGZXRjaFJlc3BvbnNlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDkxQUQ0NDgzNTAwMzY1QTUwIC8q
IEpTRmV0Y2hSZXNwb25zZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Zl
dGNoUmVzcG9uc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJOEU2MjBFN0UyMEVF
NUZFMjAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZSUGxhdGZvcm1EaXNwbGF5LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJOEU2MjBFODAyMEVFNUZGQzAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNw
bGF5Q2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZSUGxhdGZvcm1E
aXNwbGF5Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThFQzZDOTYxMjAx
QTI1MDEwMEZCRkE1MyAvKiBHYXBMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR2FwTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThGNjc1NjE5
MTI4OEIxN0IwMDQ3QUNBMyAvKiBFdmVudFF1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEV2ZW50UXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEY5
MzREODMxMTg5RjFFRTAwNTA4RDVEIC8qIEpTRXhlY1N0YXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRXhlY1N0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjY3NSw3ICsxMjY5MCw2IEBACiAJCUIyQTAxNTk0MEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc1R5cGVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBH
cmFwaGljc1R5cGVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMDE1OTUw
QUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQlCMkExMEI5MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAv
KiBTVkdGb250RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHRm9udEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMkEx
RjJBMjBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUIyQTFGMkEzMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVudC5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFNWR0ZvbnRFbGVtZW50LmlkbDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2Njg5LDYgKzE2NzAzLDcgQEAKIAkJCWNoaWxkcmVuID0gKAog
CQkJCTBGRTVGQkNBMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJ
MEZFNUZCQ0IxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzIzOTQw
NjAyM0U1RjU2NzAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKIAkJ
CQkwRkU1RkJDQzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5jcHAgKi8sCiAJ
CQkJMEZFNUZCQ0QxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCAqLywKIAkJ
CQkwRkU1RkJDRTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5jcHAgKi8s
CkBAIC0yNDg0MCw5ICsyNDg1NSwxMiBAQAogCQkJCTkzNDkwN0UzMTI1QkJCQzgwMDdGMjNBMCAv
KiBHcmFwaGljc0NvbnRleHRDRy5oICovLAogCQkJCTZFMjFDNkMxMTEyNjMzOTkwMEE3QkUwMiAv
KiBHcmFwaGljc0NvbnRleHRHTENHLmNwcCAqLywKIAkJCQlBODBENjcwNzBFOUU5REVCMDBFNDIw
RjAgLyogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlQ0cuaCAqLywKLQkJCQlCMkExMEI5
MzBCMzgxOEQ3MDAwOTlBQTQgLyogSW1hZ2VCdWZmZXJDRy5jcHAgKi8sCi0JCQkJMjI5MkIyN0Ix
MzU2NjY5NDAwQ0YxMUVGIC8qIEltYWdlQnVmZmVyRGF0YUNHLmNwcCAqLywKLQkJCQkyMkJEOUY4
MDEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLywKKwkJCQk3MkJBQzNB
QzIzRTFFNTQ1MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwICovLAorCQkJCTcy
QkFDM0FEMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oICovLAorCQkJ
CTcyQkFDM0E4MjNFMUU1NDMwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAgKi8sCisJCQkJNzJCQUMzQUEyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kLmggKi8sCisJCQkJNzJCQUMzQTkyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFD
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovLAogCQkJCUNENTg5NDkzMjE4NzQw
NjQwMDRGNDI0QSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmNwcCAqLywKIAkJCQlDRDNFMjFE
QjIxODMzRjUxMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oICovLAogCQkJCTU1
NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi8sCkBAIC0yNDkz
NCwxMiArMjQ5NTIsMTQgQEAKIAkJCQkwRkU2Qzc2QzFGQkZCN0E2MDAyNUMwNTMgLyogQ29sb3JV
dGlsaXRpZXMuaCAqLywKIAkJCQlDMkY0RTc4ODFFNDVBRURGMDA2RDcxMDUgLyogQ29tcGxleFRl
eHRDb250cm9sbGVyLmNwcCAqLywKIAkJCQlDMkY0RTc4OTFFNDVBRURGMDA2RDcxMDUgLyogQ29t
cGxleFRleHRDb250cm9sbGVyLmggKi8sCisJCQkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8q
IENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICovLAogCQkJCTJEMkZDMDU0MTQ2MENENkYwMDI2MzYz
MyAvKiBDcm9zc2ZhZGVHZW5lcmF0ZWRJbWFnZS5jcHAgKi8sCiAJCQkJMkQyRkMwNTUxNDYwQ0Q2
RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmggKi8sCiAJCQkJNEI3QUU0OTUy
MTc3QjYzRTAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2UuY3BwICovLAogCQkJCTRCN0FFNDky
MjE3N0I1NkYwMEM1OTk1OSAvKiBDdXN0b21QYWludEltYWdlLmggKi8sCiAJCQkJQThDQjQxMDIw
RTg1QjhBNTAwMzJDNEYwIC8qIERhc2hBcnJheS5oICovLAogCQkJCTU1NTEzMDAwMUU3Q0NDQ0Ew
MEE2OUUzOCAvKiBEZWNvZGluZ09wdGlvbnMuaCAqLywKKwkJCQk3MjM5NDA1RTIzRTVGNTNGMDBF
M0I1NDUgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTQ5RkM3QTRGMTQ0NEFG
NUYwMEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovLAogCQkJCTQ5QUYyRDY4
MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLywKIAkJCQkyRDI5
RUNDMTE5MkVDQzgzMDA5ODRCNzggLyogRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCAq
LywKQEAgLTI1MDMxLDcgKzI1MDUxLDggQEAKIAkJCQk1NUEzMzZGODFEODIxRTNDMDAyMkM0Qzcg
LyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCQk0M0QyNTk3NjEzQzgxNkY0MDA2MDg1NTkg
LyogSW1hZ2VCdWZmZXIuY3BwICovLAogCQkJCUIyQTEwQjkxMEIzODE4QkQwMDA5OUFBNCAvKiBJ
bWFnZUJ1ZmZlci5oICovLAotCQkJCTIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1
ZmZlckRhdGEuaCAqLywKKwkJCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBNTIzRTE3MzI4MDA4RDc0MUMgLyogSW1hZ2VC
dWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJQ0QxOUZFQTcxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdl
RGVjb2Rlci5jcHAgKi8sCiAJCQkJQ0QxOUZFQTYxRjU3Mzk3MjAwMEM0MkZCIC8qIEltYWdlRGVj
b2Rlci5oICovLAogCQkJCTU1NzZBNTYyMUQ4OEE3MDgwMENDQzA0QyAvKiBJbWFnZUZyYW1lLmNw
cCAqLywKQEAgLTI1MDg4LDYgKzI1MTA5LDggQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFB
RjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAv
KiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVy
bi5oICovLAorCQkJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVm
ZmVyLmggKi8sCisJCQkJNzI1MDZENDYyM0VBMjIyQjAwMUU2RTBEIC8qIFBsYXRmb3JtSW1hZ2VC
dWZmZXJCYWNrZW5kLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRm
b3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1N
ZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8q
IFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNTA5Nyw2ICsyNTEyMCw4IEBACiAJCQkJQkNB
QjQxODAxM0UzNTZFODAwRDhBQUYzIC8qIFJlZ2lvbi5oICovLAogCQkJCTA3M0ExNTUxMjE3N0Ez
OTgwMEVBMDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5jcHAgKi8sCiAJCQkJMDczQTE1NTMyMTc3
QTM5QTAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmggKi8sCisJCQkJNzIzOTQwNjIyM0U4
N0Q1MzAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovLAorCQkJCTcyMzk0MDY0MjNF
ODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8sCiAJCQkJNzI5OUJDNjYyM0Q2
ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLywKIAkJCQlBNzNGOTVGQzEyQzk3QkZF
MDAzMUFBRjkgLyogUm91bmRlZFJlY3QuY3BwICovLAogCQkJCUE3M0Y5NUZEMTJDOTdCRkUwMDMx
QUFGOSAvKiBSb3VuZGVkUmVjdC5oICovLApAQCAtMjU4MjMsNyArMjU4NDgsNiBAQAogCQkJCTY1
NkI4NEQ3MEFFQTFDRTkwMEEwOTVCNCAvKiBuZXR3b3JrICovLAogCQkJCTFBMkU2RTU2MENDNTUx
RTAwMDRBMjA2MiAvKiBzcWwgKi8sCiAJCQkJQjJDM0Q5RUMwRDAwNkMxRDAwRUY2RjI2IC8qIHRl
eHQgKi8sCi0JCQkJRTE4ODIzNUYyMDMxRjUwRjAwQjQyREYzIC8qIHZyICovLAogCQkJCURGREI5
MTJDRjhFODhBNkRBMUFEMjY0RiAvKiBBYm9ydGFibGVUYXNrUXVldWUuaCAqLywKIAkJCQk0OUFF
MkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCiAJCQkJNDlB
RTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCAqLywKQEAgLTI4OTA0
LDYgKzI4OTI4LDE3IEBACiAJCQlmaWxlcyA9ICgKIAkJCQk3MjE0NDMzMjIyM0VDODVGMDBGMTJG
RjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCiAJCQkJNzIxNDQzMzEyMjNFQzg1NDAwRjEyRkY3
IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0U0MUY1NzRBRTkwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGODFGNTc0QzM5MDBEMUEzNjUgLyog
KG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1IC8qIChu
dWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiAobnVs
bCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGRTFGNTc0Q0YzMDBEMUEzNjUgLyogKG51bGwp
IGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIChudWxsKSBp
biBIZWFkZXJzICovLAorCQkJCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiAobnVsbCkgaW4g
SGVhZGVycyAqLywKKwkJCQkyRERFMUQwMjFGNTc0RDAwMDBEMUEzNjUgLyogKG51bGwpIGluIEhl
YWRlcnMgKi8sCisJCQkJMkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovLAorCQkJCTJEREUxRDA2MUY1NzREMEEwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVy
cyAqLywKKwkJCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMg
Ki8sCiAJCQkJN0NEMEUyQjgxRjgwQTQ4MjAwMTZBNENFIC8qIEFib3J0Q29udHJvbGxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJN0NEMEUyQkYxRjgwQTU2RTAwMTZBNENFIC8qIEFib3J0U2lnbmFs
LmggaW4gSGVhZGVycyAqLywKIAkJCQk0NkI5NTE5NTIwN0Q2MzM0MDBBN0QyREQgLyogQWJzdHJh
Y3RET01XaW5kb3cuaCBpbiBIZWFkZXJzICovLApAQCAtMjkzNDIsNiArMjkzNzcsNyBAQAogCQkJ
CTA2NUFENEY3MEIwQzJFREEwMDVBMkIxRCAvKiBDb250ZXh0TWVudUNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTA2MDI3Q0FEMEIxQ0JGQzAwMDg4NEIyRCAvKiBDb250ZXh0TWVudUl0
ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdBREU3MjI2MTBDQkJCOUIwMDZCM0IzQSAvKiBDb250
ZXh0TWVudVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjlDNDUxQjIzRUE0QTI5MDBC
MkIxQ0UgLyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3NTlD
QjgzNzE5MkRBOTE5MDAxMkJDNjQgLyogQ29udHJvbFN0YXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkQzMTYwMjkxMkIwMjY3NjAwQzFBMzU5IC8qIENvbnZvbHZlck5vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUQ4QjYxNTJGMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjk2NDgsNiArMjk2ODQsOCBAQAogCQkJCTExMkZCMzUyMjM5QzIzQzQwMDg3MDU0
QSAvKiBEaXNwbGF5SW5saW5lUmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCNDdFNjMyMjc3
NDI1QTAwQzdCQ0IwIC8qIERpc3BsYXlMaW5lQm94LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1
RkJEMzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3QuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyOUM0NTFGMjNFQTUyODkwMEIyQjFDRSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MjlDNDUxRTIzRUE1MjNEMDBCMkIxQ0UgLyogRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDUxQzNERDUxRTAwMDdB
MkNBIC8qIERpc3BsYXlMaXN0SXRlbXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ3MUMz
REQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkU1RkJEOTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZXBsYXllci5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDI1OSw4ICszMDI5Nyw5IEBACiAJCQkJN0M3OTAzQjMxRjg2Rjk1QzAw
NDYzQTcwIC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE4RUFENEQxRkE5MTM4MDAwOENFRjg2IC8qIEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4
dFNldHRpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkExMEI5MjBCMzgxOEJEMDAwOTlBQTQg
LyogSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjdGMTM1MzYyNUMwMDlC
RDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTIyQkQ5RjgxMTM1
MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NzJCQUMzQUUyM0UxRjBCMDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNzI5REQ0NDQyM0VBMjcwQTAwMDI2QjdCIC8qIEltYWdlQnVmZmVyQ0dCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjlERDQ0NTIzRUEyNzlCMDAwMjZCN0IgLyogSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDNFMjFERDIx
ODM0NDRBMDBFNjZGNTUgLyogSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQyNTM5NjMxOENFN0Y2MjAwMjcwMjIyIC8qIEltYWdlQ29udHJvbHNCdXR0b25FbGVt
ZW50TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTAxOTJENjE4QjZCOUI3MDA3RkM3QTEgLyog
SW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMxMTY1LDE3ICsz
MTIwNCw2IEBACiAJCQkJQkU4RUYwNEQxNzFDOTAxNDAwOUI0OEMzIC8qIEpTVmlkZW9UcmFja0xp
c3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2RTc5MTQ5MUY5N0UwMUEwMDE5OTczOSAvKiBKU1Zp
c2liaWxpdHlTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzc3OUJEOTYxRjMyMjQ2QTAwQzIx
NDE3IC8qIEpTVmlzdWFsVmlld3BvcnQuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0U0MUY1
NzRBRTkwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFD
RjgxRjU3NEMzOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkyRERFMUNGQTFGNTc0QzNFMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudC5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8qIEpTVlJEaXNw
bGF5RXZlbnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0ZFMUY1NzRDRjMwMEQx
QTM2NSAvKiBKU1ZSRXllLmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwMDFGNTc0Q0Y3MDBE
MUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0Uz
MUY1NzRBRTUwMEQxQTM2NSAvKiBKU1ZSRmllbGRPZlZpZXcuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTJEREUxRDAyMUY1NzREMDAwMEQxQTM2NSAvKiBKU1ZSRnJhbWVEYXRhLmggaW4gSGVhZGVycyAq
LywKLQkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIEpTVlJQb3NlLmggaW4g
SGVhZGVycyAqLywKLQkJCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFy
YW1ldGVycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkUyMDUwODIxOEE0NjBDMzAwODA2NDdFIC8q
IEpTVlRUQ3VlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QUY5QjIwRDE4Q0ZCNUY0MDBDNjRCRUYg
LyogSlNWVFRSZWdpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRjlCMjBGMThDRkI1RjQwMEM2
NEJFRiAvKiBKU1ZUVFJlZ2lvbkxpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3NTUsNiArMzE3
ODMsNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2ZW50RmFj
dG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2REJFIC8q
IFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5NTFENTRG
NUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjlE
RDQ0MjIzRUEyNkEwMDAwMjZCN0IgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMxQ0ExNiAv
KiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZCMkE4MDBB
RjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5MzMsNiArMzE5
NjIsNyBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRlckltYWdl
UmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAv
KiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzIz
OTQwNjUyM0U4ODI4NjAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5nVXBkYXRl
U2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg3ODA5N0Q5MzAyMDA5NEM5RTQg
LyogUmVuZGVySW5saW5lLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IGM0YzdlMjg4Mjc3
MjY2ZGRlYzc1MjA0MTIxMmI1ZTJiYzVmYWEzNTguLjI1ZDY5Zjk0YTY3ZmI5MWJjYzQ4YmM3ZTg1
OTZkNzU4ZjZmNWUyN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtOTQzLDEzICs5NDMsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogCiAgICAgICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplID0gYnVmZmVy
LT5sb2dpY2FsU2l6ZSgpOwotICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGJ1ZmZlci0+Z2V0UHJl
bXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KDAsIDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxv
Z2ljYWxTaXplLmhlaWdodCgpKSk7CisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQ
b2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsK
ICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVy
cm9yOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEFy
cmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+cG9zc2libHlTaGFyZWRCdWZmZXIo
KTsKKyAgICAgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlciA9IGltYWdlRGF0YS0+
ZGF0YSgpLT5wb3NzaWJseVNoYXJlZEJ1ZmZlcigpOwogICAgICAgICBpZiAoIWFycmF5QnVmZmVy
KSB7CiAgICAgICAgICAgICBjb2RlID0gU2VyaWFsaXphdGlvblJldHVybkNvZGU6OlZhbGlkYXRp
b25FcnJvcjsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI4NjUsMTkgKzI4NjUsMjUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBhdXRvIGltYWdlRGF0YSA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGUoV1RGTW92ZShh
cnJheUJ1ZmZlciksIDAsIGFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkpOwotICAgICAgICBpZiAo
IWltYWdlRGF0YSkgeworICAgICAgICBhdXRvIGFycmF5ID0gVWludDhDbGFtcGVkQXJyYXk6OnRy
eUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KSk7CisgICAgICAgIGlmICghYXJyYXkpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAorICAgICAgICBhdXRvIGltYWdlRGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKEludFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0
KSwgYXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmICghaW1hZ2VEYXRhKSB7Cisg
ICAgICAgICAgICBmYWlsKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICB9CisgICAgICAgIAogICAgICAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
RmxvYXRTaXplKGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIFJlbmRlcmluZ01vZGU6OlVu
YWNjZWxlcmF0ZWQsIHJlc29sdXRpb25TY2FsZSk7CiAgICAgICAgIGlmICghYnVmZmVyKSB7CiAg
ICAgICAgICAgICBmYWlsKCk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgYnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YSwgQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgSW50U2l6ZShsb2dpY2FsV2lkdGgsIGxvZ2lj
YWxIZWlnaHQpLCBJbnRSZWN0KDAsIDAsIGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIElu
dFBvaW50KCkpOworICAgICAgICBidWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCB7IEludFBvaW50Ojp6ZXJvKCksIGlt
YWdlRGF0YS0+c2l6ZSgpIH0pOwogCiAgICAgICAgIGF1dG8gYml0bWFwID0gSW1hZ2VCaXRtYXA6
OmNyZWF0ZSh7IFdURk1vdmUoYnVmZmVyKSwgc3RhdGljX2Nhc3Q8Ym9vbD4ob3JpZ2luQ2xlYW4p
IH0pOwogICAgICAgICByZXR1cm4gZ2V0SlNWYWx1ZShiaXRtYXApOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2Fu
dmFzQmFzZS5jcHAKaW5kZXggZDJhZDQxZTg3MWFjNWEwYmNiNGQ2OWMxNTI1MzQ2MzlhNzM2MTQ1
ZC4uMTYyYjI5NDJmNjY2YTkzMjQ2MGIwNmU3NmQwODM2ZTQzYzAxNzE3MCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0NhbnZhc0Jhc2UuY3BwCkBAIC0xOTEsOCArMTkxLDggQEAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWYKICAgICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVy
LCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1f
c2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKLSAgICAgICAgbV9zaXplID0g
bV9pbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgaWYgKG1faW1hZ2VCdWZmZXIgJiYg
bV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCisgICAgICAgIG1fc2l6ZSA9
IG1faW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAKICAgICBzaXplX3QgcHJldmlvdXNNZW1v
cnlDb3N0ID0gbV9pbWFnZUJ1ZmZlckNvc3Q7CiAgICAgbV9pbWFnZUJ1ZmZlckNvc3QgPSBtZW1v
cnlDb3N0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4
IGY1ZTc2NTAwNjlhNmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEuLjFmYmMxYTFmODhkMjg1
ZGZlYzZlYWViMTdhN2Q4NzlhOWQ4ODk1MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENh
bnZhc0VsZW1lbnQuY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGll
bnQuaCIKICNpbmNsdWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFt
ZUxvYWRlckNsaWVudC5oIgpAQCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCogSFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5
cGUpCiAKICAgICBtX2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgq
dGhpcywgZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmco
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tz
RGlzcGxheUxpc3RSZXBsYXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1h
a2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBm
b3IgdGhlIENhbnZhcy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7
CkBAIC04MjIsMzkgKzgyMCwyNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2Nl
bGVyYXRlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1l
bnQ6OnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5n
KQogewotICAgIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0
RHJhd2luZykKLSAgICAgICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJh
d2luZyA9IHVzZXNEaXNwbGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmco
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6
c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkK
IHsKLSAgICBpZiAodHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlz
dFJlcGxheSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSA9IHRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheSht
X3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5z
ZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0K
IAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlz
dDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxh
Z3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQor
ICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCku
YXNUZXh0KGZsYWdzKTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2Fu
dmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZs
YWdzIGZsYWdzKSBjb25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KG1fY29udGV4dC5nZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsK
LQorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZm
ZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0
dXJuIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1Rl
eHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg5LDExICs4NzUsMjcg
QEAgdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAg
IGlmICghd2lkdGgoKSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRl
cmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLQog
ICAgIGF1dG8gaG9zdFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZp
ZXcoKS0+cm9vdCgpKSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6
IG51bGxwdHI7CisKKyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlM
aXN0IGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9
IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5k
aXNwbGF5TGlzdERyYXdpbmdFbmFibGVkKCkpOworCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBz
ZXR0aW5nIGZvciByZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3Rl
RHJhd2luZyA9IGZhbHNlOworCisgICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlOworICAg
IGlmICh1c2VzUmVtb3RlRHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFj
Y2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIDogUmVu
ZGVyaW5nTW9kZTo6UmVtb3RlOworICAgIGVsc2UgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcp
CisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5k
ZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6RGlzcGxh
eUxpc3Q7CisgICAgZWxzZQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0
ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOworCiAgICAgc2V0SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplKCksIHJlbmRlcmluZ01vZGUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGhvc3RXaW5kb3cpKTsK
IAorICAgIGlmIChidWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAg
ICAgYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5
KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNf
QkFDS0lOR19TVE9SRSkgfHwgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBpZiAo
bV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMyZCgpKSB7CiAgICAgICAgIC8vIFJlY2FsY3VsYXRl
IGNvbXBvc2l0aW5nIHJlcXVpcmVtZW50cyBpZiBhY2NlbGVyYXRpb24gc3RhdGUgY2hhbmdlZC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAppbmRleCBiNTI4NjQ1YzY1ODc0
Y2QwY2EwOTM0NDQ2MWI0NTRkNTYwNTA2MzI2Li40MjEzNGExMjI5NDE0OTZiZjMxYmNkZDc5YzZi
YzVjMzkxYTc4YTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCkBA
IC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9pZ25vcmVSZXNldCB7IGZh
bHNlIH07CiAKLSAgICBib29sIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyB7IGZhbHNlIH07Cisg
ICAgT3B0aW9uYWw8Ym9vbD4gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nOwogICAgIGJvb2wgbV90
cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gbV9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApp
bmRleCBkNDk0NzEyMDgzMjMxMGM3YzBkN2JlZjFjODc5ZGEzZmZiMjkzZjBhLi5kMmI4ZGI4MTRk
MzEzNDE4NjQxMmZhNWQ4YWVhZjdhMjM4MGIxMjg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmNwcApA
QCAtMjE1OCwxMSArMjE1OCw2IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpjcmVhdGVJbWFnZURhdGEoZmxvCiB9CiAKIEV4Y2Vw
dGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpn
ZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGdldEltYWdlRGF0YShJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0sIHN4LCBzeSwgc3csIHNoKTsKLX0KLQotRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdl
RGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShJbWFnZUJ1
ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQg
c3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3QKIHsKICAgICBpZiAoIWNhbnZhc0Jhc2UoKS5v
cmlnaW5DbGVhbigpKSB7CiAgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGNv
bnNvbGVNZXNzYWdlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJVbmFibGUgdG8gZ2V0IGltYWdl
IGRhdGEgZnJvbSBjYW52YXMgYmVjYXVzZSB0aGUgY2FudmFzIGhhcyBiZWVuIHRhaW50ZWQgYnkg
Y3Jvc3Mtb3JpZ2luIGRhdGEuIikpOwpAQCAtMjE5Niw4ICsyMTkxLDggQEAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdl
RGF0YShJbWFnZUIKICAgICBpZiAoIWJ1ZmZlcikKICAgICAgICAgcmV0dXJuIGNyZWF0ZUVtcHR5
SW1hZ2VEYXRhKGltYWdlRGF0YVJlY3Quc2l6ZSgpKTsKIAotICAgIGF1dG8gYnl0ZUFycmF5ID0g
YnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdCwgbnVsbHB0ciwg
Y29vcmRpbmF0ZVN5c3RlbSk7Ci0gICAgaWYgKCFieXRlQXJyYXkpIHsKKyAgICBhdXRvIGltYWdl
RGF0YSA9IGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJl
bXVsdGlwbGllZCwgaW1hZ2VEYXRhUmVjdCk7CisgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAg
ICAgU3RyaW5nQnVpbGRlciBjb25zb2xlTWVzc2FnZTsKICAgICAgICAgY29uc29sZU1lc3NhZ2Uu
YXBwZW5kTGl0ZXJhbCgiVW5hYmxlIHRvIGdldCBpbWFnZSBkYXRhIGZyb20gY2FudmFzLiBSZXF1
ZXN0ZWQgc2l6ZSB3YXMgIik7CiAgICAgICAgIGNvbnNvbGVNZXNzYWdlLmFwcGVuZE51bWJlcihp
bWFnZURhdGFSZWN0LndpZHRoKCkpOwpAQCAtMjIwOCw3ICsyMjAzLDcgQEAgRXhjZXB0aW9uT3I8
UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdl
RGF0YShJbWFnZUIKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9y
IH07CiAgICAgfQogCi0gICAgcmV0dXJuIEltYWdlRGF0YTo6Y3JlYXRlKGltYWdlRGF0YVJlY3Qu
c2l6ZSgpLCBieXRlQXJyYXkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgcmV0dXJuIGltYWdlRGF0
YTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQgZHkpCkBAIC0yMjE3LDExICsyMjEyLDYg
QEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VE
YXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBk
aXJ0eUhlaWdodCkKLXsKLSAgICBwdXRJbWFnZURhdGEoZGF0YSwgSW1hZ2VCdWZmZXI6OkxvZ2lj
YWxDb29yZGluYXRlU3lzdGVtLCBkeCwgZHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBk
aXJ0eUhlaWdodCk7Ci19Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0
IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxvYXQgZGlydHlIZWlnaHQpCiB7CiAgICAgSW1h
Z2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhc0Jhc2UoKS5idWZmZXIoKTsKICAgICBpZiAoIWJ1ZmZl
cikKQEAgLTIyNDUsNyArMjIzNSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNvCiAgICAgSW50
U2l6ZSBkZXN0T2Zmc2V0KHN0YXRpY19jYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5
KSk7CiAgICAgSW50UmVjdCBkZXN0UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOwog
ICAgIGRlc3RSZWN0Lm1vdmUoZGVzdE9mZnNldCk7Ci0gICAgZGVzdFJlY3QuaW50ZXJzZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgY29vcmRpbmF0ZVN5c3RlbSA9PSBJbWFnZUJ1ZmZlcjo6TG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0gPyBidWZmZXItPmxvZ2ljYWxTaXplKCkgOiBidWZmZXItPmludGVy
bmFsU2l6ZSgpKSk7CisgICAgZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQoKSwg
YnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSk7CiAgICAgaWYgKGRlc3RSZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogICAgIEludFJlY3Qgc291cmNlUmVjdChkZXN0UmVjdCk7CkBAIC0yMjUz
LDcgKzIyNDMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdl
RGF0YShJbWFnZURhdGEmIGRhdGEsIEltYWdlQnVmZmVyOjpDbwogICAgIHNvdXJjZVJlY3QuaW50
ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS53aWR0aCgpLCBkYXRhLmhlaWdodCgpKSk7CiAKICAg
ICBpZiAoIXNvdXJjZVJlY3QuaXNFbXB0eSgpKQotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJh
eSgqZGF0YS5kYXRhKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
SW50U2l6ZShkYXRhLndpZHRoKCksIGRhdGEuaGVpZ2h0KCkpLCBzb3VyY2VSZWN0LCBJbnRQb2lu
dChkZXN0T2Zmc2V0KSwgY29vcmRpbmF0ZVN5c3RlbSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgZGF0YSwgc291
cmNlUmVjdCwgSW50UG9pbnQoZGVzdE9mZnNldCkpOwogCiAgICAgZGlkRHJhdyhkZXN0UmVjdCwg
Q2FudmFzRGlkRHJhd0FwcGx5Tm9uZSk7IC8vIGlnbm9yZSB0cmFuc2Zvcm0sIHNoYWRvdyBhbmQg
Y2xpcAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCmluZGV4IDNkZmM5YzlmY2U1MmJlODg5MmJmNDk4YWU2
NzIyMTg3ZjFiZWU5MWQuLmRiM2ZhYzhiMDhiNzAzYmQ1NDFmYzcyZjRkMzFiZDUxNzczNTA0ZDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRCYXNlLmgKQEAgLTM3MSw5ICszNzEsNiBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBUPiB2b2lkIGZ1bGxDYW52YXNDb21wb3NpdGVkRHJhd0ltYWdlKFQm
LCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmLCBDb21wb3NpdGVPcGVyYXRvcik7
CiAKLSAgICBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gZ2V0SW1hZ2VEYXRhKEltYWdl
QnVmZmVyOjpDb29yZGluYXRlU3lzdGVtLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBm
bG9hdCBzaCkgY29uc3Q7Ci0gICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiwgSW1hZ2VC
dWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlY
LCBmbG9hdCBkaXJ0eVksIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KTsKLQog
ICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBoYXNJ
bnZlcnRpYmxlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gc3RhdGUoKS5oYXNJ
bnZlcnRpYmxlVHJhbnNmb3JtOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3
OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uNjM3ZTc3YzVmZWRhYjMzYzViZGI4MGM2
ZmQwZTExYWI3ZjRhODIxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDk0LDYgKzQ5NCwx
MyBAQCB2b2lkIENocm9tZTo6c2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGJvb2wgaGlk
ZGVuVW50aWxNb3VzZU1vdmVzKQogICAgIG1fY2xpZW50LnNldEN1cnNvckhpZGRlblVudGlsTW91
c2VNb3ZlcyhoaWRkZW5VbnRpbE1vdXNlTW92ZXMpOwogfQogCitSZW5kZXJpbmdCYWNrZW5kKiBD
aHJvbWU6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworICAgIGlmICghbV9yZW5k
ZXJpbmdCYWNrZW5kKQorICAgICAgICBtX3JlbmRlcmluZ0JhY2tlbmQgPSBtX2NsaWVudC5jcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZC5nZXQo
KTsKK30KKwogUGxhdGZvcm1EaXNwbGF5SUQgQ2hyb21lOjpkaXNwbGF5SUQoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2Rpc3BsYXlJRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q2hyb21lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCmluZGV4IDY2MmJlMDBmYTBh
YmFlOGI3YmE3ZDY2OGQ0NDcwZWM1MTM2MWFmNDkuLjZjZmNhZWNhMjg1YzRlYmM1ZTIyNDRlOGVi
ZDY0YmFjOWE3NjJlMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaApAQCAtODMsNiArODMsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCkgb3ZlcnJpZGU7CiAKKyAgICBS
ZW5kZXJpbmdCYWNrZW5kKiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3Qgb3ZlcnJpZGU7
CisKICAgICB2b2lkIHNjaGVkdWxlQW5pbWF0aW9uKCkgb3ZlcnJpZGUgeyB9CiAKICAgICBQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBjb25zdCBvdmVycmlkZTsKQEAgLTE5NSw2ICsxOTcs
NyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgYm9vbCBtX2lzRGlz
cGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2VTdXBwcmVzc2VkIHsgZmFsc2UgfTsKICNlbmRpZgor
ICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IG1fcmVuZGVyaW5n
QmFja2VuZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCmluZGV4IDk4OWJhZjRhN2Q3ZjMzNTQ1OTMyYmQ5MzA0M2VmNDNiYTdhYTUxMmEu
LmI1OWNlMTNkOWVjMzMwMTkzZDgwMzQ3YzBjZjg3MWQ5MjU4Y2E1ZWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9DaHJvbWVDbGllbnQuaApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIlBvcHVwTWVudUNs
aWVudC5oIgogI2luY2x1ZGUgIlJlZ2lzdHJhYmxlRG9tYWluLmgiCiAjaW5jbHVkZSAiUmVuZGVy
RW1iZWRkZWRPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2lu
Y2x1ZGUgIlNlYXJjaFBvcHVwTWVudS5oIgpAQCAtMzA1LDYgKzMwNiw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQog
I2VuZGlmCiAKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBj
cmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorCiAgICAg
Ly8gUGFzcyBudWxscHRyIGFzIHRoZSBHcmFwaGljc0xheWVyIHRvIGRldGF0Y2ggdGhlIHJvb3Qg
bGF5ZXIuCiAgICAgdmlydHVhbCB2b2lkIGF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwg
R3JhcGhpY3NMYXllciopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoVmlld092ZXJsYXlH
cmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXIqKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZUNvbnNvbGVDbGllbnQuY3BwCmluZGV4IDRjMzUzMzA5MTYxOWRjNjQzZjg3MjkwOWNiNzFmNzgy
OGVmODViYmMuLmU2MGNkZTE0ZDFhN2M2YzMwNDI4OTA3NTA3YzYxMGJlNTVkZTFhMjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwCkBAIC0zNzYsNyArMzc2LDcg
QEAgdm9pZCBQYWdlQ29uc29sZUNsaWVudDo6c2NyZWVuc2hvdChKU0M6OkpTR2xvYmFsT2JqZWN0
KiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBSZWYKICAgICAgICAgICAgICAgICBhdXRvIHNvdXJjZVNp
emUgPSBpbWFnZURhdGEtPnNpemUoKTsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbWFnZUJ1
ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc291cmNlU2l6ZSwgUmVuZGVyaW5nTW9kZTo6VW5h
Y2NlbGVyYXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgSW50UmVjdCBzb3VyY2VSZWN0KElu
dFBvaW50KCksIHNvdXJjZVNpemUpOwotICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+
cHV0Qnl0ZUFycmF5KCppbWFnZURhdGEtPmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBJbnRQb2ludCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNvdXJjZVJlY3QpOwogICAg
ICAgICAgICAgICAgICAgICBkYXRhVVJMID0gaW1hZ2VCdWZmZXItPnRvRGF0YVVSTCgiaW1hZ2Uv
cG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlCmlu
ZGV4IDlhM2E4YmY5NDNhZDY1ODZkYTQzY2VkMGRhN2U2M2YwNTVhYjlhNWQuLjEyYTJkNzRmZmJl
OGZjYzczZjA2OGJiZmNiYTAwNTQwNzc1NzE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0NhaXJvLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJv
LmNtYWtlCkBAIC0xMyw3ICsxMywxMCBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmgKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uaAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
LmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJv
LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5oCiApCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9Ib3N0V2luZG93LmgKaW5kZXggMmNmZWNhZGMyNGQ5ODJhODYxNjM3NGI3NmEw
ZTRmYjBmZmY3YTlkNC4uODk4NjUzNDZjZjQ4MGY4MDZjNWMwY2U5MzUyMWRlNjkyMDgxODA0YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOC0yMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIzLDE0ICsyMywxNCBAQAogICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBIb3N0V2luZG93X2gKLSNkZWZpbmUgSG9zdFdp
bmRvd19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIldpZGdldC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEN1cnNvcjsKK2NsYXNzIFJlbmRlcmluZ0JhY2tlbmQ7CiAKIGNs
YXNzIEhvc3RXaW5kb3cgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEhvc3RXaW5kb3cpOyBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY0LDYgKzY0LDggQEAgcHVibGljOgogCiAgICAg
dmlydHVhbCB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSA9IDA7CiAK
KyAgICB2aXJ0dWFsIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBj
b25zdCA9IDA7CisKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSA9IDA7CiAK
ICAgICB2aXJ0dWFsIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0ID0gMDsKQEAg
LTc1LDUgKzc3LDMgQEAgcHVibGljOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gSG9zdFdpbmRvd19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Tb3VyY2VzQ2Fpcm8udHh0IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJv
LnR4dAppbmRleCBmOTBkMjQ2ZWM1OWI0ZjhhOGUxMzhiNzIyNDBjZjIwMjU4MzE5MmM0Li42ZmE0
ZmZlMTQ2MGVhNzEzODIxYmNhMzYyMjZkMjZhOTdlNWQ5OTg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1NvdXJjZXNDYWlyby50eHQKQEAgLTMwLDcgKzMwLDEwIEBAIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRHTENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJ
bXBsQ2Fpcm8uY3BwCi1wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuY3BwCitw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5j
cHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJVdGlsaXRp
ZXNDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ludFJlY3RDYWlyby5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL05hdGl2ZUltYWdlQ2Fpcm8uY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggNDgyMjQ0YTRm
MmJkY2VkZTdjODc0Y2QxYjUwZWE5MTRiMTQ5OWEyMi4uZGRkNWM2YzczNDVhMmMwZDhiZDlhOGU0
ZWZiNGUzY2I5OTU4N2M2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcApAQCAtMTY1LDEyICsxNjUsNyBAQCBOYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWVSZXNwZWN0aW5nT3JpZW50YXRp
b24oY29ucwogICAgICAgICByZXR1cm4gaW1hZ2U7CiAKICAgICBidWZmZXItPmNvbnRleHQoKS5k
cmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIHJlY3Quc2l6ZSgpLCByZWN0LCByZWN0LCB7IG9yaWVudGF0
aW9uIH0pOwotCi0jaWYgVVNFKENHKSB8fCBVU0UoRElSRUNUMkQpCiAgICAgcmV0dXJuIEltYWdl
QnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKFdURk1vdmUoYnVmZmVyKSk7Ci0jZWxpZiBVU0Uo
Q0FJUk8pCi0gICAgcmV0dXJuIGJ1ZmZlci0+bmF0aXZlSW1hZ2UoKTsKLSNlbmRpZgogfQogCiAj
aWYgVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29udGV4dHVhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Y2VhNDhjYjNkMjk3YWRmODEx
Zjg4OTdhNDg1YmJiZWM1MGFkMjNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSwyMjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBl
PgorY2xhc3MgQ29udGV4dHVhbEltYWdlQnVmZmVyIDogcHVibGljIEltYWdlQnVmZmVyIHsKK3B1
YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1ZmZlclR5cGUgPSBDb250ZXh0dWFs
SW1hZ2VCdWZmZXIsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdywgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXV0
byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlclR5cGU+KG5ldyBJbWFnZUJ1ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3
YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlciwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgYXV0byBiYWNrZW5k
ID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgaWYgKCFiYWNr
ZW5kKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBlKFdURk1vdmUoYmFj
a2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICBDb250ZXh0dWFsSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEJh
Y2tlbmRUeXBlPiYmIGJhY2tlbmQpCisgICAgICAgIDogbV9iYWNrZW5kKFdURk1vdmUoYmFja2Vu
ZCkpCisgICAgeworICAgIH0KKworICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZlcigpID0gZGVmYXVs
dDsKKworICAgIHZpcnR1YWwgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQobV9iYWNrZW5kKTsKKyAgICAg
ICAgcmV0dXJuIG1fYmFja2VuZC0+Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hD
b250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5z
dXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAg
ICAgICAgICBiYWNrZW5kLT5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYXNlVHJhbnNmb3JtKCkgOiBBZmZp
bmVUcmFuc2Zvcm0oKTsgfQorICAgIEludFNpemUgbG9naWNhbFNpemUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmxvZ2ljYWxTaXpl
KCkgOiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5iYWNrZW5kU2l6
ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5yZXNvbHV0
aW9uU2NhbGUoKSA6IDE7IH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5tZW1vcnlDb3N0
KCkgOiAwOyB9CisgICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+ZXh0ZXJuYWxNZW1v
cnlDb3N0KCkgOiAwOyB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMp
LmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5
TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5SW1h
Z2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAg
ICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRy
YXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
KyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAg
ICAgICB9CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1h
Z2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1
dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2so
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xv
clNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+
dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZl
UmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1
YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKworICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNv
bnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250
ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4o
KnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldElt
YWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsK
KyAgICAgICAgICAgIGZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmIGNvbnRleHQsIEdDR0xlbnVtIHRhcmdldCwgUGxh
dGZvcm1HTE9iamVjdCBkZXN0aW5hdGlvblRleHR1cmUsIEdDR0xlbnVtIGludGVybmFsZm9ybWF0
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgZmxpcFkpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGFyZ2V0
LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBm
bGlwWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jODk5ZjgyNmU4ODU4NzA1NDYwYThhNzg4NDFi
MTAxMzQ1N2UwNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyIDogcHVibGlj
IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4gLCBwdWJsaWMgRGlzcGxheUxpc3Q6
OkRyYXdpbmdDb250ZXh0IHsKKyAgICB1c2luZyBCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVyID0g
Q29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb250ZXh0
dWFsSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3csIHNpemUpOworICAg
IH0KKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKKyAgICB7
CisgICAgICAgIHJldHVybiBCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVh
dGU8RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcj4oc2l6ZSwgY29udGV4dCwgc2l6ZSk7CisgICAgfQor
CisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+
JiYgZGF0YUJhY2tlbmQsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBCYXNlQ29u
dGV4dHVhbEltYWdlQnVmZmVyKFdURk1vdmUoZGF0YUJhY2tlbmQpKQorICAgICAgICAsIERpc3Bs
YXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQoc2l6ZSkKKyAgICB7CisgICAgfQorCisgICAgfkRpc3BsYXlM
aXN0SW1hZ2VCdWZmZXIoKQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwor
ICAgIH0KKworICAgIERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dCogZHJhd2luZ0NvbnRleHQo
KSBvdmVycmlkZSB7IHJldHVybiB0aGlzOyB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIERpc3BsYXlMaXN0OjpE
cmF3aW5nQ29udGV4dDo6Y29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3aW5n
Q29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCmluZGV4IDIwYjk4MTBj
MjkxNDFlNDczZTZhODg4YmM4MGMxNDE3YWVhYzJmYWYuLmFmYThiNWE1ZDA4ZTU2YTg2M2Q0MGE5
ZGRlODE1OTUwZDI4MmRjNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5jcHAKQEAgLTEsNyArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw0NCArMjgsNjcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogCi0jaW5jbHVkZSAi
Q29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJJbnRSZWN0LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLSNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3Rh
dGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRMZW5ndGggPSA0MDk2Owogc3RhdGljIGNvbnN0IGZs
b2F0IE1heENsYW1wZWRBcmVhID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7
CiAKLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlcik7Ci0KIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUm
IHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7
Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykpOwotICAgIGlmICghc3Vj
Y2VzcykKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2Vu
ZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJuIFJlbmRlcmlu
Z0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXpl
LCBjb250ZXh0KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZl
cjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNj
YWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4
dCk7CisKKyAgICBhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzY2FsZWRT
aXplLCBjb250ZXh0KTsKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRo
ZSBncmFwaGljcyBjb250ZXh0LgorICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2Nh
bGVkU2l6ZSAvIHNpemUpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKKwogfQogCi0jaWYgVVNF
KERJUkVDVDJEKQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBj
b25zdCBHcmFwaGljc0NvbnRleHQqIHRhcmdldENvbnRleHQsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQor
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZl
cihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIGhvc3RX
aW5kb3csIHRhcmdldENvbnRleHQsIHN1Y2Nlc3MpKTsKLSAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
aWYgKHNpemUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4g
YnVmZmVyOworCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGli
bGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOworCisgICAgYXV0byBpbWFnZUJ1ZmZlciA9IElt
YWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3Bh
Y2UsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhl
IGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2Fs
ZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVmZmVyOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKTsKIH0KLSNlbmRpZgogCiBib29sIEltYWdlQnVmZmVyOjpz
aXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7CiAgICAgaWYgKHNpemUu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICByZXR1cm4gZmxvb3JmKHNp
emUuaGVpZ2h0KCkpICogZmxvb3JmKHNpemUud2lkdGgoKSkgPiBNYXhDbGFtcGVkQXJlYTsKIH0K
IApAQCAtMTA1LDkxICsxMjgsMTIgQEAgRmxvYXRSZWN0IEltYWdlQnVmZmVyOjpjbGFtcGVkUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyZWN0LmxvY2F0
aW9uKCksIGNsYW1wZWRTaXplKHJlY3Quc2l6ZSgpKSk7CiB9CiAKLSNpZiAhVVNFKENHKSAmJiAh
VVNFKENBSVJPKQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29u
c3QKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMgZm9yIG90aGVyIGJhY2tlbmRzLgot
ICAgIHJldHVybiB7IH07Ci19Ci0jZW5kaWYKLQotI2lmICEoVVNFKENHKSB8fCBVU0UoRElSRUNU
MkQpKQotdm9pZCBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNy
Y0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKLXsKLSAgICBpZiAoc3JjQ29s
b3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBvbmx5
IHNSR0IgPC0+IGxpbmVhclJHQiBhcmUgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnQKLSAgICBpZiAo
KHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCICYmIHNyY0NvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6U1JHQikKLSAgICAgICAgfHwgKGRzdENvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZTo6TGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6U1JHQikpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6Okxp
bmVhclJHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+
IGxpbmVhclJnYkxVVCA9IFtdIHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2
PiBhcnJheTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykg
ewotICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAg
ICAgICBjb2xvciA9IHNSR0JUb0xpbmVhckNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAg
ICAgICAgICBhcnJheVtpXSA9IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1
KSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0o
KTsKLSAgICAgICAgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGxpbmVhclJnYkxVVCk7Ci0g
ICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKLSAgICAg
ICAgc3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtd
IHsKLSAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewotICAgICAgICAgICAgICAg
IGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKLSAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVh
clRvU1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKLSAgICAgICAgICAgICAgICBhcnJheVtpXSA9
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgICAgIH0oKTsKLSAgICAgICAgcGxhdGZv
cm1UcmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7Ci0gICAgfQotfQotCi0jZW5kaWYg
Ly8gVVNFKENHKQotCi1pbmxpbmUgdm9pZCBJbWFnZUJ1ZmZlcjo6Z2VuZXJpY0NvbnZlcnRUb0x1
bWluYW5jZU1hc2soKQotewotICAgIEludFJlY3QgbHVtaW5hbmNlUmVjdChJbnRQb2ludCgpLCBp
bnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gZ2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGx1bWluYW5jZVJlY3QpOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBzcmNQaXhl
bEFycmF5LT5sZW5ndGgoKTsKLSAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0gMDsgcGl4
ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Ci0gICAgICAg
IHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsKLSAgICAg
ICAgaWYgKCFhKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHVpbnQ4X3QgciA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOwotICAgICAgICB1aW50OF90IGcgPSBzcmNQ
aXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7Ci0gICAgICAgIHVpbnQ4X3QgYiA9IHNy
Y1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKLSAgICAgICAgCi0gICAgICAgIGRv
dWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsgYiAqIDAuMDcyMSkgKiAoKGRv
dWJsZSlhIC8gMjU1LjApOwotICAgICAgICBzcmNQaXhlbEFycmF5LT5zZXQocGl4ZWxPZmZzZXQg
KyAzLCBsdW1hKTsKLSAgICB9Ci0gICAgcHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGx1bWluYW5jZVJlY3Quc2l6ZSgp
LCBsdW1pbmFuY2VSZWN0LCBJbnRQb2ludCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Y29u
dmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGZ1
bmN0aW9ucyB3aXRoIHBsYXRmb3JtQ29udmVydFRvTHVtaW5hbmNlTWFzayBoZXJlIGxhdGVyLgot
ICAgIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci19Ci0KLSNpZiAhVVNFKENBSVJP
KQotUGxhdGZvcm1MYXllciogSW1hZ2VCdWZmZXI6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewot
ICAgIHJldHVybiAwOwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwg
R0NHTGVudW0sIGJvb2wsIGJvb2wpCitJbnRTaXplIEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNp
emUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zvcm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEg
aGlnaGVyCisgICAgLy8gcmVzb2x1dGlvbiB0aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KKyAgICBy
ZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUgKiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOwogfQot
I2VuZGlmCiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlS
ZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKQEAgLTIwNiw1MCArMTUwLDE5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNvcHlSZWN0VG9CdWZm
ZXIoY29uc3QgRmxvYXRSZWN0JiByZWN0CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0KIAotc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikK
IHsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXpl
KHNpemUsIGNvbnRleHQpOwotCi0gICAgYXV0byBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
Q29tcGF0aWJsZUJ1ZmZlcihzY2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLCBjb250ZXh0KTsKLSAg
ICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAg
YSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAg
ICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJu
IGJ1ZmZlcjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQpCi17Ci0jaWYgVVNFKERJUkVDVDJEKQotICAgIHJldHVybiBjcmVhdGUoc2l6ZSwg
Y29udGV4dC5yZW5kZXJpbmdNb2RlKCksICZjb250ZXh0LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlKHNpemUsIGNvbnRleHQucmVuZGVyaW5n
TW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwotI2VuZGlmCisgICAgcmV0dXJu
IGltYWdlQnVmZmVyLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CiB9CiAKLUludFNpemUgSW1hZ2VC
dWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVz
ZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQogewotICAgIC8vIEVubGFyZ2UgdGhl
IGJ1ZmZlciBzaXplIGlmIHRoZSBjb250ZXh0J3MgdHJhbnNmb3JtIGlzIHNjYWxpbmcgaXQgc28g
d2UgbmVlZCBhIGhpZ2hlcgotICAgIC8vIHJlc29sdXRpb24gdGhhbiBvbmUgcGl4ZWwgcGVyIHVu
aXQuCi0gICAgcmV0dXJuIGV4cGFuZGVkSW50U2l6ZShzaXplICogY29udGV4dC5zY2FsZUZhY3Rv
cigpKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNv
bHV0aW9uKTsKIH0KIAotI2lmICFVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
c2l6ZV90IEltYWdlQnVmZmVyOjptZW1vcnlDb3N0KCkgY29uc3QKK3ZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25z
KQogewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJv
bSBhIEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEg
d2UgYWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVy
bmFsU2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAg
IHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdo
dCgpOworICAgIGltYWdlQnVmZmVyLT5kcmF3Q29uc3VtaW5nKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0LCBvcHRpb25zKTsKIH0KIAotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdAotewotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLX0KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCmluZGV4IDdiNzcyYTJmMmQ4ZjZlNzU3N2VhZmM2ZGIyMjkzMDZiN2NmZWRmOWIu
LjM1NTFmNDVmODJiZWJhMzdmMjk3MWEwOTUwN2QyYjVmMmY1MmQ1OWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtMSw2ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5u
QGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlq
aW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAt
MjcsMTYwICsyNyw4MyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgotI2luY2x1ZGUgIkFscGhhUHJlbXVsdGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJD
b2xvclNwYWNlLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzVHlwZXNHTC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotI2luY2x1ZGUgIklt
YWdlUGFpbnRpbmdPcHRpb25zLmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBs
YXRmb3JtTGF5ZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKICNpbmNsdWRl
ICJSZW5kZXJpbmdNb2RlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVk
QXJyYXkuaD4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNp
bmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGbG9hdFJl
Y3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5H
TDsKLWNsYXNzIEltYWdlOwotY2xhc3MgSW1hZ2VEYXRhOwotY2xhc3MgSW50UG9pbnQ7Ci1jbGFz
cyBJbnRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLQotZW51bSBCYWNraW5nU3RvcmVDb3B5IHsK
LSAgICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24n
dCBhZmZlY3QgdGhlIGNvcHkuCi0gICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVu
dCBkcmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgotfTsKLQotZW51bSBjbGFzcyBQcmVzZXJ2ZVJl
c29sdXRpb24gewotICAgIE5vLAotICAgIFllcywKLX07CituYW1lc3BhY2UgRGlzcGxheUxpc3Qg
eworY2xhc3MgRHJhd2luZ0NvbnRleHQ7Cit9CiAKIGNsYXNzIEltYWdlQnVmZmVyIHsKLSAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEX0VYUE9SVChJbWFnZUJ1ZmZlciwgV0VCQ09SRV9FWFBPUlQp
OwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyKTsKLSAgICBmcmllbmQgY2xh
c3MgSU9TdXJmYWNlOwogcHVibGljOgotICAgIC8vIFdpbGwgcmV0dXJuIGEgbnVsbCBwb2ludGVy
IG9uIGFsbG9jYXRpb24gZmFpbHVyZS4KICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlID0gMSwgQ29sb3JTcGFjZSA9IENvbG9yU3BhY2U6
OlNSR0IsIGNvbnN0IEhvc3RXaW5kb3cqID0gbnVsbHB0cik7Ci0jaWYgVVNFKERJUkVDVDJEKQot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBHcmFwaGljc0NvbnRl
eHQqLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xvclNwYWNlID0gQ29sb3JTcGFjZTo6
U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsKLSNlbmRpZgotCi0gICAgLy8gQ3Jl
YXRlIGFuIGltYWdlIGJ1ZmZlciBjb21wYXRpYmxlIHdpdGggdGhlIGNvbnRleHQgYW5kIGNvcHkg
cmVjdCBmcm9tIHRoaXMgYnVmZmVyIGludG8gdGhpcyBuZXcgb25lLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBDb2xv
clNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0Jik7CiAKICAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0
aCB0aGUgY29udGV4dCwgd2l0aCBzdWl0YWJsZSByZXNvbHV0aW9uIGZvciBkcmF3aW5nIGludG8g
dGhlIGJ1ZmZlciBhbmQgdGhlbiBpbnRvIHRoaXMgY29udGV4dC4KICAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwg
Q29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNp
emUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYpOwogCi0gICAgc3RhdGljIEludFNpemUgY29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3Qg
RmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgLy8gVGhlc2UgZnVuY3Rp
b25zIGFyZSB1c2VkIHdoZW4gY2xhbXBpbmcgdGhlIEltYWdlQnVmZmVyIHdoaWNoIGlzIGNyZWF0
ZWQgZm9yIGZpbHRlciwgbWFza2VyIG9yIGNsaXBwZXIuCisgICAgc3RhdGljIGJvb2wgc2l6ZU5l
ZWRzQ2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJik7CisgICAgc3RhdGljIGJvb2wgc2l6ZU5lZWRz
Q2xhbXBpbmcoY29uc3QgRmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGlj
IEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmKTsKKyAgICBzdGF0aWMgRmxv
YXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwor
ICAgIHN0YXRpYyBGbG9hdFJlY3QgY2xhbXBlZFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB+SW1hZ2VCdWZmZXIoKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb21w
YXRpYmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKKyAgICAKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlcigpID0gZGVm
YXVsdDsKIAotICAgIC8vIFRoZSBhY3R1YWwgcmVzb2x1dGlvbiBvZiB0aGUgYmFja2luZyBzdG9y
ZQotICAgIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQotICAgIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9s
b2dpY2FsU2l6ZTsgfQotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAot
ICAgIFdFQkNPUkVfRVhQT1JUIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0OworICAg
IHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsg
cmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgp
IHsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNl
cnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQ
dHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJl
c2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgdmlydHVhbCBB
ZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIElu
dFNpemUgbG9naWNhbFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIGJhY2tl
bmRTaXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkg
Y29uc3QgPSAwOworICAgIAorICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgPSAwOwog
Ci0gICAgZW51bSBDb29yZGluYXRlU3lzdGVtIHsgTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIEJh
Y2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0gfTsKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVz
b2x1dGlvbjo6Tm8pIGNvbnN0ID0gMDsKIAotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFy
cmF5RGltZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRp
bmF0ZVN5c3RlbSkgY29uc3Q7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRQcmVt
dWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmLCBJbnRTaXplKiBwaXhlbEFycmF5RGlt
ZW5zaW9ucyA9IG51bGxwdHIsIENvb3JkaW5hdGVTeXN0ZW0gPSBMb2dpY2FsQ29vcmRpbmF0ZVN5
c3RlbSkgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRv
QnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOwogCi0gICAgdm9pZCBwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIGJ1ZmZlckZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgQ29vcmRpbmF0ZVN5c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKTsKLSAgICAKLSAg
ICB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdyhH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGlu
Z09wdGlvbnMmID0geyB9KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0
LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdDsKLSAg
ICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Q7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdDsKKyAgICBzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgc2lua0lu
dG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+KTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4sIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6
Tm8pOworICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSBjb25zdDsKLSNlbmRpZgorICAgIHZpcnR1YWwgdm9pZCBj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2Zvcm1D
b2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNw
YWNlKSA9IDA7CiAKLSNpZiAhVVNFKENHKQotICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNm
b3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7IH0KLSAgICB2b2lkIHRyYW5z
Zm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENv
bG9yU3BhY2UpOwotICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0
ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYpOwotI2Vsc2UKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFz
ZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwg
MCwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOyB9Ci0jZW5kaWYKLSAgICBQbGF0
Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSA9
IFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3QgPSAwOwogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdDsKLSAgICBzaXplX3QgZXh0
ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Q7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pID0g
MDsKIAogICAgIC8vIEZJWE1FOiBjdXJyZW50IGltcGxlbWVudGF0aW9ucyBvZiB0aGlzIG1ldGhv
ZCBoYXZlIHRoZSByZXN0cmljdGlvbiB0aGF0IHRoZXkgb25seSB3b3JrCiAgICAgLy8gd2l0aCB0
ZXh0dXJlcyB0aGF0IGFyZSBSR0Igb3IgUkdCQSBmb3JtYXQsIGFuZCBVTlNJR05FRF9CWVRFIHR5
cGUuCi0gICAgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVu
R0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpOwor
ICAgIHZpcnR1YWwgYm9vbCBjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xP
cGVuR0wmLCBHQ0dMZW51bSwgUGxhdGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBj
b25zdCA9IDA7CiAKLSAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGlu
ZyB0aGUgSW1hZ2VCdWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3Ig
Y2xpcHBlci4KLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNp
emUmKTsKLSAgICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUm
LCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNv
bnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3Qg
RmxvYXRTaXplJiwgRmxvYXRTaXplJiBzY2FsZSk7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBjbGFt
cGVkUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLQotcHJpdmF0ZToKLSNpZiBVU0UoQ0cpCi0gICAg
Ly8gVGhlIHJldHVybmVkIGltYWdlIG1pZ2h0IGJlIGxhcmdlciB0aGFuIHRoZSBpbnRlcm5hbFNp
emUoKS4gSWYgeW91IHdhbnQgdGhlIHNtYWxsZXIKLSAgICAvLyBpbWFnZSwgY3JvcCB0aGUgcmVz
dWx0LgotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0YXRpYyBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gc2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+KTsKLSAgICB2b2lkIGZsdXNoQ29udGV4dCgpIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJE
KQotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdDsKLSAgICBzdGF0aWMgQ09NUHRyPElEMkQxQml0
bWFwPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwot
ICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7Ci0jZW5kaWYKK3Byb3RlY3RlZDoKKyAgICBJ
bWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKICAgICAKLSAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250
ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9
IHsgfSk7Ci0gICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsK
LQotICAgIHN0YXRpYyB2b2lkIGRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0ID0gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSksIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiA9IHsgfSk7Ci0KLSAgICBpbmxpbmUgdm9pZCBnZW5lcmljQ29udmVy
dFRvTHVtaW5hbmNlTWFzaygpOwotCi0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
LSAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIENyb3Nz
ZmFkZUdlbmVyYXRlZEltYWdlOwotICAgIGZyaWVuZCBjbGFzcyBOYW1lZEltYWdlR2VuZXJhdGVk
SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEdyYWRpZW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IEN1c3RvbVBhaW50SW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwotCi1wcml2
YXRlOgotICAgIEltYWdlQnVmZmVyRGF0YSBtX2RhdGE7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0g
ICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwotICAgIGZsb2F0IG1fcmVzb2x1dGlvblNjYWxlOwot
Ci0gICAgLy8gVGhpcyBjb25zdHJ1Y3RvciB3aWxsIHBsYWNlIGl0cyBzdWNjZXNzIGludG8gdGhl
IGdpdmVuIG91dC12YXJpYWJsZQotICAgIC8vIHNvIHRoYXQgY3JlYXRlKCkga25vd3Mgd2hlbiBp
dCBzaG91bGQgcmV0dXJuIGZhaWx1cmUuCi0gICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZW5k
ZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jaWYgVVNFKENH
KQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgQ0dDb2xvclNwYWNlUmVmLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9v
bCYgc3VjY2Vzcyk7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRp
b24pIGNvbnN0OwotI2VsaWYgVVNFKERJUkVDVDJEKQotICAgIEltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGJvb2wmIHN1Y2Nl
c3MpOwotI2VuZGlmCisgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUlt
YWdlKCkgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNl
cnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNDYzYWE1ZGE2MjYyNTNiNTFkOTJmZWQ4MWFiY2FiZDI3NDNkZWU4NgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwyNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QnVmZmVyQmFja2VuZC5oIgorCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdl
QnVmZmVyQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXpl
JiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCisgICAgOiBtX2xvZ2ljYWxTaXplKGxvZ2ljYWxTaXplKQorICAgICwgbV9iYWNrZW5kU2l6
ZShiYWNrZW5kU2l6ZSkKKyAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkK
KyAgICAsIG1fY29sb3JTcGFjZShjb2xvclNwYWNlKQoreworfQorCitJbnRTaXplIEltYWdlQnVm
ZmVyQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCit7CisgICAgRmxvYXRTaXplIHNjYWxlZFNpemUgPSB7IGNl
aWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSksIGNlaWxmKHJlc29sdXRpb25TY2Fs
ZSAqIHNpemUuaGVpZ2h0KCkpIH07CisgICAgaWYgKHNjYWxlZFNpemUuaXNFbXB0eSgpIHx8ICFz
Y2FsZWRTaXplLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBJbnRTaXplKHNjYWxlZFNpemUpOworCisgICAg
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93ID0gNCAqIENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS53aWR0aCgpKTsKKyAgICBp
ZiAoYnl0ZXNQZXJSb3cuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5z
aWduZWQsIFJlY29yZE92ZXJmbG93PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkgKiBieXRlc1BlclJv
dzsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgcmV0dXJuIGJhY2tlbmRTaXplOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBjb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdl
QnVmZmVyQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpkcmF3
Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09w
dGlvbnMmIG9wdGlvbnMpCit7CisgICAgZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1Jl
Y3QsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVt
aW5hbmNlTWFzaygpCit7CisgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICBp
ZiAoIWltYWdlRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byogc3JjUGl4ZWxBcnJh
eSA9IGltYWdlRGF0YS0+ZGF0YSgpOworICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBz
cmNQaXhlbEFycmF5LT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIHBpeGVsT2Zmc2V0ID0g
MDsgcGl4ZWxPZmZzZXQgPCBwaXhlbEFycmF5TGVuZ3RoOyBwaXhlbE9mZnNldCArPSA0KSB7Cisg
ICAgICAgIHVpbnQ4X3QgYSA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAzKTsK
KyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVpbnQ4X3Qg
ciA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQpOworICAgICAgICB1aW50OF90IGcg
PSBzcmNQaXhlbEFycmF5LT5pdGVtKHBpeGVsT2Zmc2V0ICsgMSk7CisgICAgICAgIHVpbnQ4X3Qg
YiA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAyKTsKKworICAgICAgICBkb3Vi
bGUgbHVtYSA9IChyICogMC4yMTI1ICsgZyAqIDAuNzE1NCArIGIgKiAwLjA3MjEpICogKChkb3Vi
bGUpYSAvIDI1NS4wKTsKKyAgICAgICAgc3JjUGl4ZWxBcnJheS0+c2V0KHBpeGVsT2Zmc2V0ICsg
MywgbHVtYSk7CisgICAgfQorCisgICAgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0YSwgbG9naWNhbFJlY3QoKSwgSW50UG9pbnQ6
Onplcm8oKSk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdS
QURhdGEodm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQg
KiBtX2xvZ2ljYWxTaXplLmFyZWEoKS51bnNhZmVHZXQoKSk7CisgICAgc2l6ZV90IGRlc3RCeXRl
c1BlclJvdyA9IG1fbG9naWNhbFNpemUud2lkdGgoKSAqIDQ7CisgICAgc2l6ZV90IHNyY0J5dGVz
UGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKTsKKworICAgIGNvcHlJbWFnZVBpeGVscygKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFja2VuZENvbG9yRm9y
bWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIENvbG9yRm9ybWF0OjpCR1JBLCBkZXN0Qnl0ZXNQZXJS
b3csIHJlc3VsdC5kYXRhKCksIG1fbG9naWNhbFNpemUpOworCisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVk
KENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1aW50OF90KiBzcmNQaXhlbCwgQ29s
b3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBkZXN0UGl4ZWwpCit7CisgICAgdWlu
dDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICghYWxwaGEpIHsKKyAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RQaXhlbClbMF0gPSAwOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkg
eworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVswXSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNQaXhlbClbMF07CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEu
CisgICAgZGVzdFBpeGVsWzBdID0gc3JjUGl4ZWxbMl07CisgICAgZGVzdFBpeGVsWzFdID0gc3Jj
UGl4ZWxbMV07CisgICAgZGVzdFBpeGVsWzJdID0gc3JjUGl4ZWxbMF07CisgICAgZGVzdFBpeGVs
WzNdID0gc3JjUGl4ZWxbM107Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5UHJlbXVsdGlw
bGllZFRvVW5wcmVtdWx0aXBsaWVkKENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCBjb25zdCB1
aW50OF90KiBzcmNQaXhlbCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1aW50OF90KiBk
ZXN0UGl4ZWwpCit7CisgICAgdWludDhfdCBhbHBoYSA9IHNyY1BpeGVsWzNdOworICAgIGlmICgh
YWxwaGEgfHwgYWxwaGEgPT0gMjU1KSB7CisgICAgICAgIGNvcHlQcmVtdWx0aXBsaWVkVG9QcmVt
dWx0aXBsaWVkKHNyY0NvbG9yRm9ybWF0LCBzcmNQaXhlbCwgZGVzdENvbG9yRm9ybWF0LCBkZXN0
UGl4ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHNyY0NvbG9yRm9ybWF0
ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxb
MF0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAq
IDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzJdICogMjU1
KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAg
ICBkZXN0UGl4ZWxbMF0gPSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgZGVzdFBp
eGVsWzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgIGRlc3RQaXhlbFsyXSA9
IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbM10gPSBhbHBoYTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxp
ZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBD
b2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1
aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAy
NTUpIHsKKyAgICAgICAgY29weVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JG
b3JtYXQsIHNyY1BpeGVsLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0
KSB7CisgICAgICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFswXSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzFdID0gKHNyY1BpeGVsWzFdICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMl0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFscGhhOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAg
IGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICBk
ZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgZGVz
dFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgIGRlc3RQ
aXhlbFszXSA9IGFscGhhOworfQorCit0ZW1wbGF0ZTx2b2lkICgqY29weUZ1bmN0b3IpKENvbG9y
Rm9ybWF0LCBjb25zdCB1aW50OF90KiwgQ29sb3JGb3JtYXQsIHVpbnQ4X3QqKT4KK3N0YXRpYyBp
bmxpbmUgdm9pZCBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkKAorICAgIENvbG9yRm9ybWF0
IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93
cywKKyAgICBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1Bl
clJvdywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgc2l6
ZV90IGJ5dGVzUGVyUm93ID0gc2l6ZS53aWR0aCgpICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsg
eSA8IHNpemUuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8
IGJ5dGVzUGVyUm93OyB4ICs9IDQpCisgICAgICAgICAgICBjb3B5RnVuY3RvcihzcmNDb2xvckZv
cm1hdCwgJnNyY1Jvd3NbeF0sIGRlc3RDb2xvckZvcm1hdCwgJmRlc3RSb3dzW3hdKTsKKyAgICAg
ICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OworICAgIH0KK30KKwordm9pZCBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3Qq
IHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENv
bG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50
OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3Jj
QWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNBbHBo
YUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkICYmIGRlc3RB
bHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKyAg
ICAgICAgY29weUltYWdlUGl4ZWxzVW5hY2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0
Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNpemUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGRlc3RBbHBoYUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgY29weUltYWdlUGl4ZWxzVW5h
Y2NlbGVyYXRlZDxjb3B5UHJlbXVsdGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkPihzcmNDb2xvckZv
cm1hdCwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVz
UGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBj
b3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlVbnByZW11bHRpcGxpZWRUb1ByZW11bHRp
cGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENvbG9y
Rm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKK30KKworUmVmUHRyPElt
YWdlRGF0YT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEp
IGNvbnN0Cit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0
ZXMoc3JjUmVjdCk7CisKKyAgICBhdXRvIGltYWdlRGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNy
Y1JlY3RTY2FsZWQuc2l6ZSgpKTsKKyAgICBpZiAoIWltYWdlRGF0YSB8fCAhaW1hZ2VEYXRhLT5k
YXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgSW50UmVjdCBzcmNSZWN0Q2xp
cHBlZCA9ICBpbnRlcnNlY3Rpb24oYmFja2VuZFJlY3QoKSwgc3JjUmVjdFNjYWxlZCk7CisgICAg
SW50UmVjdCBkZXN0UmVjdCA9IHsgSW50UG9pbnQ6Onplcm8oKSwgc3JjUmVjdENsaXBwZWQuc2l6
ZSgpIH07CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC54KCkgPCAwKQorICAgICAgICBkZXN0UmVj
dC5zZXRYKC1zcmNSZWN0U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3JjUmVjdFNjYWxlZC55KCkg
PCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKC1zcmNSZWN0U2NhbGVkLnkoKSk7CisKKyAgICBp
ZiAoZGVzdFJlY3Quc2l6ZSgpICE9IHNyY1JlY3RTY2FsZWQuc2l6ZSgpKQorICAgICAgICBpbWFn
ZURhdGEtPmRhdGEoKS0+emVyb0ZpbGwoKTsKKworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dyA9IDQgKiBzcmNSZWN0U2NhbGVkLndpZHRoKCk7CisgICAgdWludDhfdCogZGVzdFJvd3MgPSBp
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gYnl0
ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oZGF0YSkgKyBzcmNSZWN0Q2xpcHBlZC55KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1Jl
Y3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBz
cmNCeXRlc1BlclJvdywgc3JjUm93cywKKyAgICAgICAgb3V0cHV0Rm9ybWF0LCBDb2xvckZvcm1h
dDo6UkdCQSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgpKTsKKwor
ICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VE
YXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIHZvaWQqIGRhdGEpCit7CisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9C
YWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVk
ID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKworICAgIEludFJlY3Qgc3JjUmVj
dENsaXBwZWQgPSBpbnRlcnNlY3Rpb24oeyBJbnRQb2ludDo6emVybygpLCBpbWFnZURhdGEuc2l6
ZSgpIH0sIHNyY1JlY3RTY2FsZWQpOworICAgIEludFJlY3QgZGVzdFJlY3QgPSBzcmNSZWN0Q2xp
cHBlZDsKKyAgICBkZXN0UmVjdC5tb3ZlQnkoZGVzdFBvaW50U2NhbGVkKTsKKworICAgIGlmIChz
cmNSZWN0U2NhbGVkLngoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoZGVzdFJlY3QueCgp
IC0gc3JjUmVjdFNjYWxlZC54KCkpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueSgpIDwgMCkK
KyAgICAgICAgZGVzdFJlY3Quc2V0WShkZXN0UmVjdC55KCkgLSBzcmNSZWN0U2NhbGVkLnkoKSk7
CisKKyAgICBkZXN0UmVjdC5pbnRlcnNlY3QoYmFja2VuZFJlY3QoKSk7CisgICAgc3JjUmVjdENs
aXBwZWQuc2V0U2l6ZShkZXN0UmVjdC5zaXplKCkpOworCisgICAgdW5zaWduZWQgZGVzdEJ5dGVz
UGVyUm93ID0gYnl0ZXNQZXJSb3coKTsKKyAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgZGVzdFJlY3QueSgpICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdFJlY3QueCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAq
IGltYWdlRGF0YS5zaXplKCkud2lkdGgoKTsKKyAgICB1aW50OF90KiBzcmNSb3dzID0gaW1hZ2VE
YXRhLmRhdGEoKS0+ZGF0YSgpICsgc3JjUmVjdENsaXBwZWQueSgpICogc3JjQnl0ZXNQZXJSb3cg
KyBzcmNSZWN0Q2xpcHBlZC54KCkgKiA0OworCisgICAgY29weUltYWdlUGl4ZWxzKAorICAgICAg
ICBpbnB1dEZvcm1hdCwgQ29sb3JGb3JtYXQ6OlJHQkEsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dz
LAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBiYWNrZW5k
Q29sb3JGb3JtYXQoKSwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgZGVzdFJlY3Quc2l6ZSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTNi
NjNjZGY3MTc4YWJiMWI1YTM4ODI5YzU1ZTEyOGVkYjdhMjRhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAg
LTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgi
CisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzVHlwZXNHTC5oIgorI2luY2x1ZGUgIkltYWdlUGFpbnRpbmdPcHRpb25zLmgi
CisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w7CitjbGFzcyBIb3N0V2luZG93OworY2xhc3MgSW1hZ2U7CitjbGFzcyBJbWFn
ZURhdGE7CisKK2VudW0gQmFja2luZ1N0b3JlQ29weSB7CisgICAgQ29weUJhY2tpbmdTdG9yZSwg
Ly8gR3VhcmFudGVlIHN1YnNlcXVlbnQgZHJhd3MgZG9uJ3QgYWZmZWN0IHRoZSBjb3B5LgorICAg
IERvbnRDb3B5QmFja2luZ1N0b3JlIC8vIFN1YnNlcXVlbnQgZHJhd3MgbWF5IGFmZmVjdCB0aGUg
Y29weS4KK307CisKK2VudW0gY2xhc3MgUHJlc2VydmVSZXNvbHV0aW9uIDogdWludDhfdCB7Cisg
ICAgTm8sCisgICAgWWVzLAorfTsKKworZW51bSBjbGFzcyBDb2xvckZvcm1hdCA6IHVpbnQ4X3Qg
eworICAgIFJHQkEsCisgICAgQkdSQQorfTsKKworY2xhc3MgSW1hZ2VCdWZmZXJCYWNrZW5kIHsK
K3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckJhY2tlbmQo
KSA9IGRlZmF1bHQ7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgSW50U2l6ZSBjYWxjdWxh
dGVCYWNrZW5kU2l6ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOwor
CisgICAgdmlydHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGZsdXNoQ29udGV4dCgpIHsgfQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbG9naWNhbFNpemU7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZW5kU2l6ZTsgfQorICAgIGZsb2F0IHJlc29sdXRp
b25TY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVzb2x1dGlvblNjYWxlOyB9CisgICAgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9jb2xvclNwYWNlOyB9CisKKyAgICB2
aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZm
aW5lVHJhbnNmb3JtKCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qg
eyByZXR1cm4gNCAqIG1fYmFja2VuZFNpemUuYXJlYSgpLnVuc2FmZUdldCgpOyB9CisgICAgdmly
dHVhbCBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QgeyByZXR1cm4gMDsgfQorCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29w
eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2lu
Z1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7CisKKyAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJikgPSAwOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3UGF0
dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRp
b24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBo
aWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKTsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgIHZpcnR1
YWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpIHsgfQor
CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCA9IDA7Cisg
ICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9y
PHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIFJlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpID0gMDsK
KworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0
dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0sIFBsYXRmb3JtR0xPYmplY3QsIEdDR0xl
bnVtLCBib29sLCBib29sKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgV0VCQ09SRV9FWFBPUlQgSW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UpOworCisgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNv
bnN0IHsgcmV0dXJuIDQgKiBtX2JhY2tlbmRTaXplLndpZHRoKCk7IH0KKyAgICB2aXJ0dWFsIENv
bG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IHsgcmV0dXJuIENvbG9yRm9ybWF0
OjpSR0JBOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgdG9CYWNrZW5kQ29v
cmRpbmF0ZXMoVCB0KSBjb25zdAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChzdGQ6Omlz
X3NhbWU8VCwgSW50UG9pbnQ+Ojp2YWx1ZSB8fCBzdGQ6OmlzX3NhbWU8VCwgSW50U2l6ZT46OnZh
bHVlIHx8IHN0ZDo6aXNfc2FtZTxULCBJbnRSZWN0Pjo6dmFsdWUpOworICAgICAgICBpZiAobV9y
ZXNvbHV0aW9uU2NhbGUgIT0gMSkKKyAgICAgICAgICAgIHQuc2NhbGUobV9yZXNvbHV0aW9uU2Nh
bGUpOworICAgICAgICByZXR1cm4gdDsKKyAgICB9CisKKyAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0
KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJbnRQb2ludDo6emVybygpLCBtX2xvZ2ljYWxTaXpl
KTsgfTsKKyAgICBJbnRSZWN0IGJhY2tlbmRSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBtX2JhY2tlbmRTaXplKTsgfTsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZpcnR1YWwgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6
ZSYpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEodm9pZCogZGF0YSkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1hZ2VE
YXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIHZvaWQqIGRhdGEpIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50
JiBkZXN0UG9pbnQsIHZvaWQqIGRhdGEpOworCisgICAgSW50U2l6ZSBtX2xvZ2ljYWxTaXplOwor
ICAgIEludFNpemUgbV9iYWNrZW5kU2l6ZTsKKyAgICBmbG9hdCBtX3Jlc29sdXRpb25TY2FsZTsK
KyAgICBDb2xvclNwYWNlIG1fY29sb3JTcGFjZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJE
YXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmE1Yzg4NWU1YzEwMjQ0N2M3
M2ExMmYxZDZmYjMyYjVkMzk5MDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJE
YXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBVU0Uo
Q0cpCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKLSNlbGlmIFVTRShESVJFQ1QyRCkK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIgotI2VsaWYgVVNFKENBSVJPKQot
I2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YUNhaXJvLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iNDNhODcxOWNlNDlkMTc3NmI5NzUzZDVkNzI2MDg3N2YwNTE0MzYwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb250ZXh0dWFsSW1h
Z2VCdWZmZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgiCisKKyNpZiBV
U0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKyNlbGlmIFVT
RShESVJFQ1QyRCkKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2Vs
aWYgVVNFKENBSVJPKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNr
ZW5kLmgiCisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorI2luY2x1ZGUgIkltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNp
bmcgUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBQbGF0Zm9ybVVuYWNj
ZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDsK
KyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVy
QmFja2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOworI2VuZGlmCisK
KyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZl
ckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7CisjZWxpZiBVU0UoQ0FJUk8p
ICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ7
CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IFBs
YXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZDsKKyNlbmRpZgorCit1c2luZyBQ
bGF0Zm9ybUltYWdlQnVmZmVyID0gQ29udGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyQmFja2VuZD47Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBE
aXNwbGF5TGlzdEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFj
a2VuZD47Cit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9
IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFj
a2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmQ4MTE4YWVhZWQwZGQwNTViY2E2M2Y3ZTUzMGYxZTk5ODZlZWJlYTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUltYWdlQnVmZmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cp
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCIKKyNlbGlmIFVTRShESVJFQ1QyRCkK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgorI2VsaWYgVVNFKENBSVJP
KQorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisjaWYgVVNFKENHKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJh
Y2tlbmQgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkKK3VzaW5n
IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7
CisjZWxpZiBVU0UoQ0FJUk8pCit1c2luZyBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IElt
YWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0Jh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMDNjYjZiMjQxYWE1ZDEwNWYzY2FjOGVkYzIzOWQwZjUxZmJh
OTMzYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRl
ICJDaHJvbWVDbGllbnQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4obmV3IFJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1JlbmRlcmluZ0JhY2tlbmQm
IFJlbmRlcmluZ0JhY2tlbmQ6OnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRv
dyogaG9zdFdpbmRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8c3RkOjp1bmlxdWVf
cHRyPFJlbmRlcmluZ0JhY2tlbmQ+PiBzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIHsgUmVuZGVyaW5n
QmFja2VuZDo6Y3JlYXRlKCkgfTsKKyAgICByZXR1cm4gaG9zdFdpbmRvdyAmJiBob3N0V2luZG93
LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgPyAqaG9zdFdpbmRvdy0+c2hhcmVkUmVuZGVyaW5n
QmFja2VuZCgpIDogKnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQuZ2V0KCk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93
KiBob3N0V2luZG93KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VC
dWZmZXI7CisKKyAgICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmlu
Z01vZGU6OkFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxl
cmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93
KTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2Vs
ZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWlt
YWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsK
KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNj
ZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmlu
Z01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRj
aCAoY29udGV4dC5yZW5kZXJpbmdNb2RlKCkpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkOgorICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6Cisg
ICAgICAgIGltYWdlQnVmZmVyID0gUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVh
dGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToK
KyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUGxh
dGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNl
IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQor
ICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6
OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0
dXJuIGltYWdlQnVmZmVyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZhYzczMDY4NTc1ZDIwMWUxYzAxZjdjMDBhMzgwY2Y2MWFlNTI4MzkKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdC
YWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgor
I2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBIb3N0V2lu
ZG93OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBXRUJDT1JF
X0VYUE9SVCBSZW5kZXJpbmdCYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgc3RhdGljIFJlbmRlcmlu
Z0JhY2tlbmQmIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoY29uc3QgSG9zdFdpbmRvdyogPSBudWxs
cHRyKTsKKworICAgIHZpcnR1YWwgflJlbmRlcmluZ0JhY2tlbmQoKSA9IGRlZmF1bHQ7CisgICAg
dmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBjb25zdCBH
cmFwaGljc0NvbnRleHQmKTsKKworcHJvdGVjdGVkOgorICAgIFJlbmRlcmluZ0JhY2tlbmQoKSA9
IGRlZmF1bHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKaW5kZXggNjlkOGFlODFjODQ4
YjEwZTZmMmQwN2E3ODliMTZjMzMzZGMyM2NiNC4uYWE0ODM1ZGJmYWFhYTk3NDJmMzRhY2MzOGY4
YTFlMGUyNzBjMjRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUmVuZGVyaW5nTW9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ01vZGUuaApAQCAtMzAsNiArMzAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBjbGFzcyBSZW5kZXJpbmdNb2RlIDogdWludDhfdCB7CiAgICAgQWNjZWxlcmF0ZWQsCiAg
ICAgVW5hY2NlbGVyYXRlZCwKKyAgICBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIERpc3Bs
YXlMaXN0LAorICAgIFJlbW90ZUFjY2VsZXJhdGVkLAorICAgIFJlbW90ZQogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aGFkb3dCbHVyLmNwcAppbmRleCA2ODFhYjU2ZWViMzQxOTQ2MmIyMzQ0NTBkMDBmNDFmOTMzNjc0
ZDE4Li4zY2ZjZTcyOTU0MjA5ZDMwM2E5ZjcyNDMyZmJiNGI2MzlkNGI0MjEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMzQsNiAr
MzQsNyBAQAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDQ5LDcgKzQ1MCw3IEBAIHZvaWQgU2hhZG93Qmx1
cjo6ZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGljc0NvbnRleHQmIGdyYXBoaWNzQ29udGV4dCwgSW1h
Z2VCdWZmZXImCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdy
YXBoaWNzQ29udGV4dCk7CiAKLSAgICBJbnRTaXplIGJ1ZmZlclNpemUgPSBsYXllckltYWdlLmlu
dGVybmFsU2l6ZSgpOworICAgIEludFNpemUgYnVmZmVyU2l6ZSA9IGxheWVySW1hZ2UuYmFja2Vu
ZFNpemUoKTsKICAgICBpZiAoYnVmZmVyU2l6ZSAhPSBsYXllclNpemUpIHsKICAgICAgICAgLy8g
VGhlIHJlY3QgcGFzc2VkIHRvIGNsaXBUb0ltYWdlQnVmZmVyKCkgaGFzIHRvIGJlIHRoZSBzaXpl
IG9mIHRoZSBlbnRpcmUgYnVmZmVyLAogICAgICAgICAvLyBidXQgd2UgbWF5IG5vdCBoYXZlIGNs
ZWFyZWQgaXQgYWxsLCBzbyBjbGlwIHRvIHRoZSBmaWxsZWQgcGFydCBmaXJzdC4KQEAgLTg4NCwx
MiArODg1LDEzIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1clNoYWRvd0J1ZmZlcihJbWFnZUJ1ZmZl
ciYgbGF5ZXJJbWFnZSwgY29uc3QgSW50U2l6ZSYgdGVtcGxhCiAgICAgICAgIHJldHVybjsKIAog
ICAgIEludFJlY3QgYmx1clJlY3QoSW50UG9pbnQoKSwgdGVtcGxhdGVTaXplKTsKLSAgICBhdXRv
IGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGJsdXJSZWN0
KTsKKyAgICBhdXRvIGxheWVyRGF0YSA9IGxheWVySW1hZ2UuZ2V0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgYmx1clJlY3QpOwogICAgIGlmICghbGF5
ZXJEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBibHVyTGF5ZXJJbWFnZShsYXllckRhdGEt
PmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0aCgpICogNCk7Ci0gICAgbGF5
ZXJJbWFnZS5wdXRCeXRlQXJyYXkoKmxheWVyRGF0YSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0LCB7IH0pOworICAgIGF1
dG8qIGJsdXJQaXhlbEFycmF5ID0gbGF5ZXJEYXRhLT5kYXRhKCk7CisgICAgYmx1ckxheWVySW1h
Z2UoYmx1clBpeGVsQXJyYXktPmRhdGEoKSwgYmx1clJlY3Quc2l6ZSgpLCBibHVyUmVjdC53aWR0
aCgpICogNCk7CisgICAgbGF5ZXJJbWFnZS5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbGF5ZXJEYXRhLCBibHVyUmVjdCk7CiB9CiAKIHZvaWQg
U2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllcklt
YWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9PcGVyYXRpb25zLmNwcAppbmRl
eCA2ODk4NGQ1NjRhOTI5MjdkNDI4ZmNlYmI4MGUxNGFhY2Y5YWZhNGVmLi5jZDhmMWRiMzU5ZTI2
YTAxYTJjODViYmQyMmVhMzY4ZTZhYzg4OTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5jcHAKQEAgLTE3
NSw3ICsxNzUsNyBAQCBlbnVtIFBhdGhEcmF3aW5nU3R5bGUgewogCiBzdGF0aWMgdm9pZCBkcmF3
U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwg
SW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGxheWVyT3JpZ2luLCBj
b25zdCBGbG9hdFNpemUmIGxheWVyU2l6ZSwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRl
KQogewotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLm5hdGl2ZUltYWdlKCkpIHsK
KyAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKSB7CiAgICAgICAgIGRyYXdOYXRpdmVJbWFnZShwbGF0Zm9ybUNvbnRl
eHQsIHN1cmZhY2UuZ2V0KCksIEZsb2F0UmVjdChyb3VuZGVkSW50UG9pbnQobGF5ZXJPcmlnaW4p
LCBsYXllclNpemUpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBsYXllclNpemUpLCB7IHNoYWRv
d1N0YXRlLmdsb2JhbENvbXBvc2l0ZU9wZXJhdG9yIH0sIHNoYWRvd1N0YXRlLmdsb2JhbEFscGhh
LCBTaGFkb3dTdGF0ZSgpKTsKICAgICB9CiB9CkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZv
aWQgZHJhd1NoYWRvd0xheWVyQnVmZmVyKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNv
bnRleHQsIEltYWdlQnUKIC8vIEZJWE1FOiBUaGlzIGlzIG1vc3RseSBzYW1lIGFzIGRyYXdTaGFk
b3dMYXllckJ1ZmZlciwgc28gd2Ugc2hvdWxkIG1lcmdlIHR3by4KIHN0YXRpYyB2b2lkIGRyYXdT
aGFkb3dJbWFnZShQbGF0Zm9ybUNvbnRleHRDYWlybyYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1
ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRv
IHN1cmZhY2UgPSBsYXllckltYWdlLmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9y
ZSkpIHsKICAgICAgICAgZHJhd05hdGl2ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5n
ZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3Bl
cmF0b3IgfSwgc2hhZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0K
IH0KQEAgLTE5Miw3ICsxOTIsNyBAQCBzdGF0aWMgdm9pZCBmaWxsU2hhZG93QnVmZmVyKFBsYXRm
b3JtQ29udGV4dENhaXJvJiBwbGF0Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJgogewogICAgIHNh
dmUocGxhdGZvcm1Db250ZXh0KTsKIAotICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdl
Lm5hdGl2ZUltYWdlKCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgY2xpcFRvSW1hZ2VCdWZm
ZXIocGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBGbG9hdFJlY3QobGF5ZXJPcmlnaW4s
IGV4cGFuZGVkSW50U2l6ZShsYXllclNpemUpKSk7CiAKICAgICBGaWxsU291cmNlIGZpbGxTb3Vy
Y2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggOWIwMjVlMTQ3NjczNTJlMTRh
ZDQ4Zjg2N2IwNDU4NWVlODAzNDEzNC4uNGUxYmYyYjQzNjdmMzQzNTlkODU0ZWI3OGMyMjAyZGY1
N2IyNzQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtMjY4LDcgKzI2OCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYg
YnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIGRlCiAgICAgfQogCiAgICAgQVNTRVJUKGhhc1BsYXRm
b3JtQ29udGV4dCgpKTsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdl
KCkpCisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIoKnBsYXRm
b3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dElt
cGxDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwCmluZGV4IGJjYTI5ZGZiNjk0OTg2ZTg3NzQ2NmI4ZjA3
Nzg2ZmJkMWJmMzk0NTYuLmNkODY1YWFhMjYwMTlmZmM3NWFlZWU5MjYyMDJjZjExMjU5NWJjODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcApAQCAtNDE0LDcgKzQxNCw3
IEBAIEludFJlY3QgR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwQm91bmRzKCkKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVy
JiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCiB7Ci0gICAgaWYgKGF1dG8gc3Vy
ZmFjZSA9IGJ1ZmZlci5uYXRpdmVJbWFnZSgpKQorICAgIGlmIChhdXRvIHN1cmZhY2UgPSBidWZm
ZXIuY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKSkKICAgICAgICAgQ2Fpcm86
OmNsaXBUb0ltYWdlQnVmZmVyKG1fcGxhdGZvcm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0
UmVjdCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGJiYjVjNjQ4MmI2ZTFkM2YyOGFjNDc5ZWE3YzVkMzFiMWQzMzc5MDIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw3NTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIg
SGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKLQotI2lmIFVTRShDQUlSTykK
LQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgi
Ci0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWly
by5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKLSNpbmNsdWRlICJN
SU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRl
ICJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKLSNpbmNsdWRl
ICJSZWZQdHJDYWlyby5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4K
LSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUg
PGNhaXJvLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgRU5BQkxFKEFD
Q0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJHTENvbnRleHQuaCIKLSNpbmNsdWRlICJU
ZXh0dXJlTWFwcGVyR0wuaCIKLQotI2lmIFVTRShFR0wpCi0jaWYgVVNFKExJQkVQT1hZKQotI2lu
Y2x1ZGUgIkVwb3h5RUdMLmgiCi0jZWxzZQotI2luY2x1ZGUgPEVHTC9lZ2wuaD4KLSNlbmRpZgot
I2VuZGlmCi0jaW5jbHVkZSA8Y2Fpcm8tZ2wuaD4KLQotI2lmIFVTRShMSUJFUE9YWSkKLSNpbmNs
dWRlIDxlcG94eS9nbC5oPgotI2VsaWYgVVNFKE9QRU5HTF9FUykKLSNpbmNsdWRlIDxHTEVTMi9n
bDIuaD4KLSNlbHNlCi0jaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNlbmRpZgotCi0jaWYgVVNF
KENPT1JESU5BVEVEX0dSQVBISUNTKQotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxh
eWVyQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eS5o
IgotI2VuZGlmCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbWFnZUJ1ZmZlckRh
dGE6OkltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUpCi0gICAgOiBtX3BsYXRmb3JtQ29udGV4dCgwKQotICAgICwgbV9zaXplKHNp
emUpCi0gICAgLCBtX3JlbmRlcmluZ01vZGUocmVuZGVyaW5nTW9kZSkKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICAs
IG1fY29tcG9zaXRvclRleHR1cmUoMCkKLSNlbmRpZgotICAgICwgbV90ZXh0dXJlKDApCi0jZW5k
aWYKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQ09PUkRJTkFU
RURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpB
Y2NlbGVyYXRlZCkgewotI2lmIFVTRShOSUNPU0lBKQotICAgICAgICBtX25pY29zaWFMYXllciA9
IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3JlYXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1
cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5KCp0aGlzKSk7Ci0jZWxzZQotICAgICAgICBtX3Bs
YXRmb3JtTGF5ZXJQcm94eSA9IGFkb3B0UmVmKG5ldyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXll
clByb3h5KTsKLSNlbmRpZgotICAgIH0KLSNlbmRpZgotfQotCi1JbWFnZUJ1ZmZlckRhdGE6On5J
bWFnZUJ1ZmZlckRhdGEoKQotewotICAgIGlmIChtX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklD
T1NJQSkKLSAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOwotI2VuZGlmCi0K
LSAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOwotICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGlmIChtX3Rl
eHR1cmUpCi0gICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0KLSNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0gICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCi0g
ICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOwotI2VuZGlm
Ci0KLSAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQotICAgICAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCi19Ci0KLSNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLXZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCkKLXsKLSAgICBhdXRv
KiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmco
KS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSAgICBnbEdlblRleHR1cmVzKDEsICZtX2NvbXBvc2l0b3JUZXh0dXJlKTsKLSAgICBnbEJp
bmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fY29tcG9zaXRvclRleHR1cmUpOwotICAgIGdsVGV4
UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9f
RURHRSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JB
UF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAg
Z2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICBnbFRleEltYWdlMkQo
R0xfVEVYVFVSRV8yRCwgMCAsIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCksIDAsIEdMX1JHQkEsIEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgbV9jb21wb3NpdG9y
U3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNv
bnRleHQtPmNhaXJvRGV2aWNlKCksIENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9z
aXRvclRleHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBtX2Nv
bXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShtX2NvbXBvc2l0b3JTdXJmYWNlLmdl
dCgpKSk7Ci0gICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJ
Uk9fQU5USUFMSUFTX05PTkUpOwotfQotCi0jaWYgIVVTRShOSUNPU0lBKQotUmVmUHRyPFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IEltYWdlQnVmZmVyRGF0YTo6cHJveHkoKSBjb25z
dAotewotICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXJQcm94eS5jb3B5UmVmKCk7Ci19Ci0jZW5k
aWYKLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQotewotICAg
IEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7
Ci0KLSAgICBpZiAoIW1fY29tcG9zaXRvclRleHR1cmUpIHsKLSAgICAgICAgY3JlYXRlQ29tcG9z
aXRvckJ1ZmZlcigpOwotCi0gICAgICAgIGF1dG8gcHJveHlPcGVyYXRpb24gPQotICAgICAgICAg
ICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkmIHByb3h5KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIExvY2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7
Ci0gICAgICAgICAgICAgICAgcHJveHkucHVzaE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJl
TWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4obV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLCBU
ZXh0dXJlTWFwcGVyR0w6OlNob3VsZEJsZW5kLCBHTF9SR0JBKSk7Ci0gICAgICAgICAgICB9Owot
I2lmIFVTRShOSUNPU0lBKQotICAgICAgICBwcm94eU9wZXJhdGlvbihkb3duY2FzdDxOaWNvc2lh
OjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSku
cHJveHkoKSk7Ci0jZWxzZQotICAgICAgICBwcm94eU9wZXJhdGlvbigqbV9wbGF0Zm9ybUxheWVy
UHJveHkpOwotI2VuZGlmCi0gICAgfQotCi0gICAgLy8gSXQgd291bGQgYmUgZ3JlYXQgaWYgd2Ug
Y291bGQganVzdCBzd2FwIHRoZSBidWZmZXJzIGhlcmUgYXMgd2UgZG8gd2l0aCB3ZWJnbCwgYnV0
IHRoYXQgYnJlYWtzIHRoZSBjYXNlcwotICAgIC8vIHdoZXJlIG9uZSBmcmFtZSB1c2VzIHRoZSBj
b250ZW50IGFscmVhZHkgcmVuZGVyZWQgaW4gdGhlIHByZXZpb3VzIGZyYW1lLiBTbyB3ZSBqdXN0
IGNvcHkgdGhlIGNvbnRlbnQKLSAgICAvLyBpbnRvIHRoZSBjb21wb3NpdG9yIGJ1ZmZlci4KLSAg
ICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UobV9jb21wb3NpdG9yQ3IuZ2V0KCksIG1fc3VyZmFj
ZS5nZXQoKSwgMCwgMCk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fY29tcG9zaXRvckNyLmdl
dCgpLCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3BhaW50KG1fY29tcG9zaXRv
ckNyLmdldCgpKTsKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0gICAgICAgIHBy
ZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBjbGVhclN1cmZhY2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChj
YWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9f
Y3JlYXRlKHN1cmZhY2UpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJP
X09QRVJBVE9SX0NMRUFSKTsKLSAgICBjYWlyb19wYWludChjci5nZXQoKSk7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXJEYXRhOjpjcmVhdGVDYWlyb0dMU3VyZmFjZSgpCi17Ci0gICAgYXV0byogY29u
dGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hh
cmluZ0dMQ29udGV4dCgpOwotICAgIGNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0g
ICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJzZWx2ZXMsIGJlY2F1c2UgdGhl
cmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0Ci0gICAgLy8gZnJvbSBhIHByZS1l
eGlzdGluZyBzdXJmYWNlLgotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAg
Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOwotICAgIGdsVGV4UGFyYW1l
dGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7
Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBH
TF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xf
VEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIGdsVGV4UGFyYW1ldGVyaShHTF9U
RVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0KLSAgICBnbFBp
eGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOwotCi0gICAgZ2xUZXhJbWFnZTJEKEdM
X1RFWFRVUkVfMkQsIDAgLyogbGV2ZWwgKi8sIEdMX1JHQkEsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCksIDAgLyogYm9yZGVyICovLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAw
KTsKLQotICAgIGNhaXJvX2RldmljZV90KiBkZXZpY2UgPSBjb250ZXh0LT5jYWlyb0RldmljZSgp
OwotCi0gICAgLy8gVGhyZWFkLWF3YXJlbmVzcyBpcyBhIGh1Z2UgcGVyZm9ybWFuY2UgaGl0IG9u
IG5vbi1JbnRlbCBkcml2ZXJzLgotICAgIGNhaXJvX2dsX2RldmljZV9zZXRfdGhyZWFkX2F3YXJl
KGRldmljZSwgRkFMU0UpOwotCi0gICAgbV9zdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3Vy
ZmFjZV9jcmVhdGVfZm9yX3RleHR1cmUoZGV2aWNlLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhB
LCBtX3RleHR1cmUsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpKTsKLSAgICBjbGVh
clN1cmZhY2UobV9zdXJmYWNlLmdldCgpKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvcHkoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNl
KQotewotICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
KENBSVJPX0ZPUk1BVF9BUkdCMzIsCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dp
ZHRoKHN1cmZhY2UpLAotICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3Vy
ZmFjZSkpKTsKLQotICAgIGF1dG8gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQo
KSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09V
UkNFKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IuZ2V0KCksIHN1cmZhY2UsIDAs
IDApOwotICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKLQotICAgIHJldHVybiBjb3B5OwotfQot
Ci1zdGF0aWMgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4KLWNhaXJvU3VyZmFjZUNvZXJjZVRvSW1h
Z2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQotewotICAgIGlmIChjYWlyb19zdXJmYWNlX2dl
dF90eXBlKHN1cmZhY2UpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRQotICAgICAgICAmJiBj
YWlyb19zdXJmYWNlX2dldF9jb250ZW50KHN1cmZhY2UpID09IENBSVJPX0NPTlRFTlRfQ09MT1Jf
QUxQSEEpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwotCi0gICAgcmV0dXJuIGNhaXJvU3VyZmFj
ZUNvcHkoc3VyZmFjZSk7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9CR1JB
RGF0YSgpIGNvbnN0Ci17Ci0gICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9J
bWFnZShtX2RhdGEubV9zdXJmYWNlLmdldCgpKTsKLSAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKHN1
cmZhY2UuZ2V0KCkpOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0YTsKLSAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBpbWFn
ZURhdGE7Ci0KLSAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
c3VyZmFjZS5nZXQoKSk7Ci0gICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMsIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCi0gICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7Ci0KLSAgICByZXR1cm4gaW1hZ2VE
YXRhOwotfQotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcjo6bmF0aXZlSW1hZ2UoKSBjb25z
dAotewotICAgIHJldHVybiBtX2RhdGEubV9zdXJmYWNlLmdldCgpOwotfQotCi1JbWFnZUJ1ZmZl
cjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyosIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBtX2RhdGEoSW50U2l6ZShzaXplKSwgcmVuZGVy
aW5nTW9kZSkKLSAgICAsIG1fbG9naWNhbFNpemUoc2l6ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNj
YWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNjZXNzID0gZmFsc2U7ICAvLyBNYWtlIGVh
cmx5IHJldHVybiBtZWFuIGVycm9yLgotCi0gICAgZmxvYXQgc2NhbGVkV2lkdGggPSBjZWlsZiht
X3Jlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0
ID0gY2VpbGYobV9yZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJ
WE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAg
IGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVB
c0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2Fs
ZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEubV9zaXplID0gbV9zaXplOwotCi0g
ICAgaWYgKG1fc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPT0g
UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQpIHsKLSAgICAgICAgbV9kYXRhLmNyZWF0ZUNhaXJv
R0xTdXJmYWNlKCk7Ci0gICAgICAgIGlmICghbV9kYXRhLm1fc3VyZmFjZSB8fCBjYWlyb19zdXJm
YWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VT
UykKLSAgICAgICAgICAgIG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgPSBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOyAvLyBJZiBhbGxvY2F0aW9uIGZhaWxzLCBmYWxsIGJhY2sgdG8gbm9uLWFj
Y2VsZXJhdGVkIHBhdGguCi0gICAgfQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09
IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpCi0jZWxzZQotICAgIEFTU0VSVChtX2RhdGEu
bV9yZW5kZXJpbmdNb2RlICE9IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKTsKLSNlbmRpZgot
ICAgIHsKLSAgICAgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRh
S2V5OwotCi0gICAgICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0
aChDQUlST19GT1JNQVRfQVJHQjMyLCBtX3NpemUud2lkdGgoKSk7Ci0gICAgICAgIHZvaWQqIHN1
cmZhY2VEYXRhOwotICAgICAgICBpZiAoIXRyeUZhc3RaZXJvZWRNYWxsb2MobV9zaXplLmhlaWdo
dCgpICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgbV9kYXRhLm1fc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0
YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCks
IHN0cmlkZSkpOwotICAgICAgICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEobV9kYXRhLm1f
c3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURhdGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBk
YXRhKSB7IGZhc3RGcmVlKGRhdGEpOyB9KTsKLSAgICB9Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFj
ZV9zdGF0dXMobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
Ci0gICAgICAgIHJldHVybjsgIC8vIGNyZWF0ZSB3aWxsIG5vdGljZSB3ZSBkaWRuJ3Qgc2V0IG1f
aW5pdGlhbGl6ZWQgYW5kIGZhaWwuCi0KLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZSht
X2RhdGEubV9zdXJmYWNlLmdldCgpLCBtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2Nh
bGUpOwotCi0gICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1f
ZGF0YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0
Q3IoY3IuZ2V0KCkpOwotICAgIG1fZGF0YS5tX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNz
Q29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1fZGF0YS5t
X3BsYXRmb3JtQ29udGV4dCkpOwotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZl
cjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIHJldHVybiBjcmVh
dGVDb21wYXRpYmxlQnVmZmVyKHNpemUsIENvbG9yU3BhY2U6OlNSR0IsIGNvbnRleHQpOwotfQot
Ci1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gKm1fZGF0YS5tX2NvbnRleHQ7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6
OnNpbmtJbnRvSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICByZXR1cm4gaW1h
Z2VCdWZmZXItPmNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0
aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAg
Ly8gY29weUNhaXJvSW1hZ2VTdXJmYWNlIGluaGVyaXRzIHN1cmZhY2UncyBkZXZpY2Ugc2NhbGUg
ZmFjdG9yLgotICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSkKLSAgICAg
ICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoY29weUNhaXJvSW1hZ2VTdXJmYWNlKG1fZGF0
YS5tX3N1cmZhY2UuZ2V0KCkpKTsKLQotICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0
aGUgcGFzc2VkIGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KLSAgICByZXR1cm4gQml0bWFwSW1h
Z2U6OmNyZWF0ZShSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PihtX2RhdGEubV9zdXJmYWNlKSk7Ci19
Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFn
ZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdGluYXRpb25Db250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsICBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBpZiAoZGVzdGluYXRpb25Db250ZXh0LnBh
aW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFj
ZSA9IG5hdGl2ZUltYWdlKCkpIHsKLSAgICAgICAgaWYgKCZkZXN0aW5hdGlvbkNvbnRleHQgPT0g
JmNvbnRleHQoKSkKLSAgICAgICAgICAgIHN1cmZhY2UgPSBjYWlyb1N1cmZhY2VDb3B5KHN1cmZh
Y2UuZ2V0KCkpOwotCi0gICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRl
cnBvbGF0aW9uUXVhbGl0eUZvclRoaXNTY29wZShkZXN0aW5hdGlvbkNvbnRleHQsIG9wdGlvbnMu
aW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGRlc3RpbmF0aW9u
Q29udGV4dFN0YXRlID0gZGVzdGluYXRpb25Db250ZXh0LnN0YXRlKCk7Ci0gICAgICAgIGRyYXdO
YXRpdmVJbWFnZSgqZGVzdGluYXRpb25Db250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNl
LmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlvbkNvbnRleHRT
dGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29udGV4dFN0YXRl
LmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25Db250ZXh0U3Rh
dGUpKTsKLSAgICB9Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0g
ICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChjb250ZXh0LnBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IG5hdGl2
ZUltYWdlKCkpCi0gICAgICAgIENhaXJvOjpkcmF3UGF0dGVybigqY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgc3VyZmFjZS5nZXQoKSwgbV9zaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwbGF0
Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBs
b29rVXBUYWJsZSkKLXsKLSAgICAvLyBGSVhNRTogRW5hYmxlIGNvbG9yIHNwYWNlIGNvbnZlcnNp
b25zIG9uIGFjY2VsZXJhdGVkIGNhbnZhc2VzLgotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90
eXBlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgaW50IHN0
cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShtX2RhdGEubV9zdXJmYWNlLmdl
dCgpKTsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fc2l6ZS5oZWlnaHQoKTsgKyt5KSB7Ci0g
ICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRh
dGFTcmMgKyBzdHJpZGUgKiB5KTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX3NpemUu
d2lkdGgoKTsgeCsrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4Owot
ICAgICAgICAgICAgQ29sb3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdC
KCpwaXhlbCk7Ci0gICAgICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4
ZWxDb2xvci5yZWQoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va1VwVGFi
bGVbcGl4ZWxDb2xvci5ncmVlbigpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
b29rVXBUYWJsZVtwaXhlbENvbG9yLmJsdWUoKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGl4ZWxDb2xvci5hbHBoYSgpKTsKLSAgICAgICAgICAgICpwaXhlbCA9IHByZW11bHRp
cGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOwotICAgICAgICB9Ci0gICAgfQotICAgIGNh
aXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwg
MCwgMCwgbV9sb2dpY2FsU2l6ZS53aWR0aCgpLCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpKTsKLX0K
LQotUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gY29weVN1cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVj
dChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UsIEludFJlY3QmIHJlY3QpCi17Ci0gICAgY2Fpcm9f
c3VyZmFjZV90eXBlX3Qgc3VyZmFjZVR5cGUgPSBjYWlyb19zdXJmYWNlX2dldF90eXBlKHN1cmZh
Y2UpOwotCi0gICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGFuIGltYWdlLCB3ZSB3cml0ZSBkaXJl
Y3RseSB0byB0aGUgdW5kZXJseWluZyBkYXRhOwotICAgIC8vIG90aGVyd2lzZSB3ZSBjcmVhdGUg
YSB0ZW1wb3Jhcnkgc3VyZmFjZSBpbWFnZQotICAgIGlmIChzdXJmYWNlVHlwZSA9PSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBzdXJmYWNlOwotICAgIAotICAgIHJl
Y3Quc2V0WCgwKTsKLSAgICByZWN0LnNldFkoMCk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJv
X2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSkpOwotfQotCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBw
cmVtdWx0aXBsaWVkPgotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRJbWFnZURhdGEoY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYgbG9naWNhbFJlY3QsIGNvbnN0IEltYWdl
QnVmZmVyRGF0YSYgZGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgY29uc3QgSW50U2l6ZSYgbG9n
aWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICAvLyBUaGUgYXJlYSBjYW4g
b3ZlcmZsb3cgaWYgdGhlIHJlY3QgaXMgdG9vIGJpZy4KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gYXJlYSA9IDQ7Ci0gICAgYXJlYSAqPSByZWN0LndpZHRoKCk7Ci0gICAg
YXJlYSAqPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChhcmVhLmhhc092ZXJmbG93ZWQoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFy
cmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGFyZWEudW5zYWZlR2V0KCkpOwotICAgIGlmICgh
cmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywg
YXMgd2UgYXJlIGFkZGluZyAyIGludHMuCi0gICAgaW50IGVuZHggPSAwOwotICAgIGlmICghV1RG
OjpzYWZlQWRkKHJlY3QueCgpLCByZWN0LndpZHRoKCksIGVuZHgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIENhbiBvdmVyZmxvdywgYXMgd2UgYXJlIGFkZGluZyAyIGludHMu
Ci0gICAgaW50IGVuZHkgPSAwOwotICAgIGlmICghV1RGOjpzYWZlQWRkKHJlY3QueSgpLCByZWN0
LmhlaWdodCgpLCBlbmR5KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAocmVj
dC54KCkgPCAwIHx8IHJlY3QueSgpIDwgMCB8fCBlbmR4ID4gc2l6ZS53aWR0aCgpIHx8IGVuZHkg
PiBzaXplLmhlaWdodCgpKQotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0KLSAgICBpbnQg
b3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0gICAgaWYgKG9yaWdpbngg
PCAwKSB7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwot
ICAgIH0KLQotICAgIGlmIChlbmR4ID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6
ZS53aWR0aCgpOwotICAgIGludCBudW1Db2x1bW5zID0gZW5keCAtIG9yaWdpbng7Ci0KLSAgICBp
bnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgaWYgKG9yaWdp
bnkgPCAwKSB7Ci0gICAgICAgIGRlc3R5ID0gLW9yaWdpbnk7Ci0gICAgICAgIG9yaWdpbnkgPSAw
OwotICAgIH0KLQotICAgIGlmIChlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9
IHNpemUuaGVpZ2h0KCk7Ci0gICAgaW50IG51bVJvd3MgPSBlbmR5IC0gb3JpZ2lueTsKLQotICAg
IC8vIE5vdGhpbmcgd2lsbCBiZSBjb3BpZWQsIHNvIGp1c3QgcmV0dXJuIHRoZSByZXN1bHQuCi0g
ICAgaWYgKG51bUNvbHVtbnMgPD0gMCB8fCBudW1Sb3dzIDw9IDApCi0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0KLSAgICAvLyBUaGUgc2l6ZSBvZiB0aGUgZGVyaXZlZCBzdXJmYWNlIGlzIGluIEJh
Y2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0uCi0gICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIGRl
dmljZSBzY2FsZSBmb3IgdGhlIGRlcml2ZWQgc3VyZmFjZSBmcm9tIHRoaXMgSW1hZ2VCdWZmZXIu
Ci0gICAgSW50UmVjdCBpbWFnZVJlY3Qob3JpZ2lueCwgb3JpZ2lueSwgbnVtQ29sdW1ucywgbnVt
Um93cyk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1
cmZhY2VUb0ltYWdlQW5kQWRqdXN0UmVjdChkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VSZWN0
KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShpbWFnZVN1cmZhY2UuZ2V0KCksIHJl
c29sdXRpb25TY2FsZSwgcmVzb2x1dGlvblNjYWxlKTsKLSAgICBvcmlnaW54ID0gaW1hZ2VSZWN0
LngoKTsKLSAgICBvcmlnaW55ID0gaW1hZ2VSZWN0LnkoKTsKLSAgICBpZiAoaW1hZ2VTdXJmYWNl
ICE9IGRhdGEubV9zdXJmYWNlLmdldCgpKSB7Ci0gICAgICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFj
ZSBvcGVyYXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAgICAg
SW50UmVjdCBsb2dpY2FsQXJlYSA9IGludGVyc2VjdGlvbihsb2dpY2FsUmVjdCwgSW50UmVjdCgw
LCAwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSkpOwotICAgICAg
ICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGRhdGEubV9zdXJmYWNlLmdldCgpLCBp
bWFnZVN1cmZhY2UuZ2V0KCksIEludFNpemUoLWxvZ2ljYWxBcmVhLngoKSwgLWxvZ2ljYWxBcmVh
LnkoKSksIEludFJlY3QoSW50UG9pbnQoKSwgbG9naWNhbEFyZWEuc2l6ZSgpKSwgSW50U2l6ZSgp
KTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotICAgIHVuc2lnbmVkIGNoYXIqIGRh
dGFEc3QgPSByZXN1bHQtPmRhdGEoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0gICAgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLQotICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RS
b3dzID0gZGF0YURzdCArIGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0OwotICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0gICAgICAgIHVuc2lnbmVkKiBy
b3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KGRhdGFTcmMgKyBzdHJpZGUgKiAo
eSArIG9yaWdpbnkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4
KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgdW5zaWdu
ZWQqIHBpeGVsID0gcm93ICsgeCArIG9yaWdpbng7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNh
bGxpbmcgQ29sb3I6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCkgYmVjYXVzZSBvbmUKLSAg
ICAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0g
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9ICgqcGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9ICgqcGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gKCpwaXhlbCAmIDB4MDAwMEZGMDApID4+IDg7
Ci0gICAgICAgICAgICB1bnNpZ25lZCBibHVlID0gKCpwaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0g
ICAgICAgICAgICBpZiAocHJlbXVsdGlwbGllZCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpV
bnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0g
MjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAg
ICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gICAgID0gcmVkOwot
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93
OwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVu
aXQ+Ci1pbmxpbmUgVW5pdCBsb2dpY2FsVW5pdChjb25zdCBVbml0JiB2YWx1ZSwgSW1hZ2VCdWZm
ZXI6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSkKLXsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbU9mVmFsdWUgPT0gSW1hZ2VC
dWZmZXI6OkxvZ2ljYWxDb29yZGluYXRlU3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjAp
Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVz
dWx0LnNjYWxlKDEuMCAvIHJlc29sdXRpb25TY2FsZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotdGVtcGxhdGU8dHlwZW5hbWUgVW5pdD4KLWlubGluZSBVbml0IGJhY2tpbmdTdG9yZVVuaXQo
Y29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3Jk
aW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpCYWNraW5nU3RvcmVDb29yZGluYXRl
U3lzdGVtIHx8IHJlc29sdXRpb25TY2FsZSA9PSAxLjApCi0gICAgICAgIHJldHVybiB2YWx1ZTsK
LSAgICBVbml0IHJlc3VsdCh2YWx1ZSk7Ci0gICAgcmVzdWx0LnNjYWxlKHJlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJ
bWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgSW50UmVjdCBsb2dpY2FsUmVjdCA9IGxvZ2ljYWxVbml0
KHJlY3QsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0
IGJhY2tpbmdTdG9yZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHJlY3QsIGNvb3JkaW5hdGVTeXN0
ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0g
ICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IGJhY2tpbmdTdG9yZVJlY3Quc2l6ZSgpOwot
ICAgIHJldHVybiBnZXRJbWFnZURhdGE8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0
aXBsaWVkPihiYWNraW5nU3RvcmVSZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1f
bG9naWNhbFNpemUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRS
ZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3Rl
bSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJlY3QgbG9naWNhbFJlY3QgPSBs
b2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0g
ICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0b3JlVW5pdChyZWN0LCBjb29y
ZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKHBpeGVsQXJyYXlEaW1l
bnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBiYWNraW5nU3RvcmVSZWN0
LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQ+KGJhY2tpbmdTdG9yZVJlY3QsIGxvZ2ljYWxSZWN0LCBtX2RhdGEsIG1f
c2l6ZSwgbV9sb2dpY2FsU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNp
emUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQs
IENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBJbnRSZWN0IHNjYWxl
ZFNvdXJjZVJlY3QgPSBiYWNraW5nU3RvcmVVbml0KHNvdXJjZVJlY3QsIGNvb3JkaW5hdGVTeXN0
ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBi
YWNraW5nU3RvcmVVbml0KHNvdXJjZVNpemUsIGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlv
blNjYWxlKTsKLSAgICBJbnRQb2ludCBzY2FsZWREZXN0UG9pbnQgPSBiYWNraW5nU3RvcmVVbml0
KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIElu
dFJlY3QgbG9naWNhbFNvdXJjZVJlY3QgPSBsb2dpY2FsVW5pdChzb3VyY2VSZWN0LCBjb29yZGlu
YXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgbG9naWNhbERlc3RQ
b2ludCA9IGxvZ2ljYWxVbml0KGRlc3RQb2ludCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0
aW9uU2NhbGUpOwotCi0gICAgQVNTRVJUKHNjYWxlZFNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwot
ICAgIEFTU0VSVChzY2FsZWRTb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBpbnQgb3Jp
Z2lueCA9IHNjYWxlZFNvdXJjZVJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IHNjYWxlZERlc3RQ
b2ludC54KCkgKyBzY2FsZWRTb3VyY2VSZWN0LngoKTsKLSAgICBpbnQgbG9naWNhbERlc3R4ID0g
bG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCk7Ci0gICAgQVNTRVJU
KGRlc3R4ID49IDApOwotICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKLSAgICBB
U1NFUlQob3JpZ2lueCA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueCA8PSBzY2FsZWRTb3VyY2VS
ZWN0Lm1heFgoKSk7Ci0KLSAgICBpbnQgZW5keCA9IHNjYWxlZERlc3RQb2ludC54KCkgKyBzY2Fs
ZWRTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBpbnQgbG9naWNhbEVuZHggPSBsb2dpY2FsRGVzdFBv
aW50LngoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFgoKTsKLSAgICBBU1NFUlQoZW5keCA8PSBt
X3NpemUud2lkdGgoKSk7Ci0KLSAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKLSAg
ICBpbnQgbG9naWNhbE51bUNvbHVtbnMgPSBsb2dpY2FsRW5keCAtIGxvZ2ljYWxEZXN0eDsKLQot
ICAgIGludCBvcmlnaW55ID0gc2NhbGVkU291cmNlUmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0g
c2NhbGVkRGVzdFBvaW50LnkoKSArIHNjYWxlZFNvdXJjZVJlY3QueSgpOwotICAgIGludCBsb2dp
Y2FsRGVzdHkgPSBsb2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0LnkoKTsK
LSAgICBBU1NFUlQoZGVzdHkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R5IDwgbV9zaXplLmhlaWdo
dCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueSA8PSBz
Y2FsZWRTb3VyY2VSZWN0Lm1heFkoKSk7Ci0KLSAgICBpbnQgZW5keSA9IHNjYWxlZERlc3RQb2lu
dC55KCkgKyBzY2FsZWRTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBpbnQgbG9naWNhbEVuZHkgPSBs
b2dpY2FsRGVzdFBvaW50LnkoKSArIGxvZ2ljYWxTb3VyY2VSZWN0Lm1heFkoKTsKLSAgICBBU1NF
UlQoZW5keSA8PSBtX3NpemUuaGVpZ2h0KCkpOwotICAgIGludCBudW1Sb3dzID0gZW5keSAtIGRl
c3R5OwotICAgIGludCBsb2dpY2FsTnVtUm93cyA9IGxvZ2ljYWxFbmR5IC0gbG9naWNhbERlc3R5
OwotCi0gICAgLy8gVGhlIHNpemUgb2YgdGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5n
U3RvcmVDb29yZGluYXRlU3lzdGVtLgotICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ug
c2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAg
IEludFJlY3QgaW1hZ2VSZWN0KGRlc3R4LCBkZXN0eSwgbnVtQ29sdW1ucywgbnVtUm93cyk7Ci0g
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2VTdXJmYWNlID0gY29weVN1cmZhY2VUb0lt
YWdlQW5kQWRqdXN0UmVjdChtX2RhdGEubV9zdXJmYWNlLmdldCgpLCBpbWFnZVJlY3QpOwotICAg
IGNhaXJvU3VyZmFjZVNldERldmljZVNjYWxlKGltYWdlU3VyZmFjZS5nZXQoKSwgbV9yZXNvbHV0
aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0eCA9IGltYWdlUmVjdC54KCk7
Ci0gICAgZGVzdHkgPSBpbWFnZVJlY3QueSgpOwotCi0gICAgdWludDhfdCogcGl4ZWxEYXRhID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZVN1cmZhY2UuZ2V0KCkpOwotCi0gICAg
dW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc2NhbGVkU291cmNlU2l6ZS53aWR0aCgpOwot
ICAgIGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2VTdXJm
YWNlLmdldCgpKTsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UuZGF0YSgp
ICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0gICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4ocGl4ZWxEYXRhICsgc3RyaWRlICogKHkgKyBkZXN0
eSkpOwotICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgewotICAg
ICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwg
PSByb3cgKyB4ICsgZGVzdHg7Ci0KLSAgICAgICAgICAgIC8vIEF2b2lkIGNhbGxpbmcgQ29sb3I6
OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgYmVjYXVzZSBvbmUKLSAgICAgICAgICAgIC8v
IGZ1bmN0aW9uIGNhbGwgcGVyIHBpeGVsIGlzIHRvbyBleHBlbnNpdmUuCi0gICAgICAgICAgICB1
bnNpZ25lZCByZWQgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVu
ID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jv
d3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93c1tiYXNl
eCArIDNdOwotCi0gICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgICAgIGlmIChhbHBoYSAh
PSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkg
LyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICpw
aXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwot
ICAgICAgICB9Ci0gICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0g
ICAgLy8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtLgotICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUoaW1h
Z2VTdXJmYWNlLmdldCgpLCBsb2dpY2FsRGVzdHgsIGxvZ2ljYWxEZXN0eSwgbG9naWNhbE51bUNv
bHVtbnMsIGxvZ2ljYWxOdW1Sb3dzKTsKLQotICAgIGlmIChpbWFnZVN1cmZhY2UgIT0gbV9kYXRh
Lm1fc3VyZmFjZS5nZXQoKSkgewotICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0
aW9uIGlzIGRvbmUgaW4gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIGNvcHlSZWN0
RnJvbU9uZVN1cmZhY2VUb0Fub3RoZXIoaW1hZ2VTdXJmYWNlLmdldCgpLCBtX2RhdGEubV9zdXJm
YWNlLmdldCgpLCBJbnRTaXplKCksIEludFJlY3QoMCwgMCwgbG9naWNhbE51bUNvbHVtbnMsIGxv
Z2ljYWxOdW1Sb3dzKSwgSW50U2l6ZShsb2dpY2FsRGVzdFBvaW50LngoKSArIGxvZ2ljYWxTb3Vy
Y2VSZWN0LngoKSwgbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCkp
KTsKLSAgICB9Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1hZ2UgPSB0b0RhdGEobWlt
ZVR5cGUsIHF1YWxpdHkpOwotICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gImRhdGE6LCI7Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0YTsKLSAgICBi
YXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZEltYWdlLnNpemUoKSwgYmFz
ZTY0RGF0YSk7Ci0KLSAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBlICsgIjtiYXNlNjQsIiAr
IGJhc2U2NERhdGE7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsK
LSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9y
RW5jb2RpbmcobWltZVR5cGUpKTsKLSAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9f
Z2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCkpOwotICAgIHJldHVy
biBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0eSk7Ci19Ci0KLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiAhVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFn
ZUJ1ZmZlckRhdGE6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1cmVN
YXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKLXsKLSAgICBBU1NFUlQobV90ZXh0dXJlKTsK
LQotICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBtYWtl
IHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCi0gICAgR0xDb250ZXh0KiBw
cmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKLSAgICBjYWlyb19z
dXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7Ci0gICAgcHJldmlvdXNBY3RpdmVDb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJH
TCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBlckdM
OjpTaG91bGRCbGVuZCwgbV9zaXplLCB0YXJnZXRSZWN0LCBtYXRyaXgsIG9wYWNpdHkpOwotfQot
I2VuZGlmCi0KLVBsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lB
KQotICAgIGlmIChtX2RhdGEubV9yZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2Vs
ZXJhdGVkKQotICAgICAgICByZXR1cm4gbV9kYXRhLm1fbmljb3NpYUxheWVyLmdldCgpOwotI2Vs
c2UKLSAgICBpZiAobV9kYXRhLm1fdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
SW1hZ2VCdWZmZXJEYXRhKj4oJm1fZGF0YSk7Ci0jZW5kaWYKLSNlbmRpZgotICAgIHJldHVybiAw
OwotfQotCi1ib29sIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3ND
b250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGlu
YXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhLCBib29sIGZsaXBZKQotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0g
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX3Jlc29sdXRpb25TY2FsZSA9PSAxLjAsICJTaW5jZSB0
aGUgSGlEUEkgQ2FudmFzIGZlYXR1cmUgaXMgcmVtb3ZlZCwgdGhlIHJlc29sdXRpb24gZmFjdG9y
IGhlcmUgaXMgYWx3YXlzIDEuIik7Ci0gICAgaWYgKHByZW11bHRpcGx5QWxwaGEgfHwgZmxpcFkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9kYXRhLm1fdGV4dHVyZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgR0NHTGVudW0gYmluZFRleHR1cmVUYXJnZXQ7Ci0g
ICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgIGJp
bmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV8yRDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBH
TF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHTF9URVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9D
VUJFX01BUDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIH0KLQotICAgIGNhaXJvX3N1cmZhY2VfZmx1c2gobV9kYXRhLm1fc3VyZmFjZS5n
ZXQoKSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250
ZXh0OjpjcmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3Bs
YXlGb3JDb21wb3NpdGluZygpKTsKLSAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsK
LSAgICB1aW50MzJfdCBmYm87Ci0gICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7Ci0gICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7Ci0gICAgZ2xGcmFtZWJ1ZmZl
clRleHR1cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRV
UkVfMkQsIG1fZGF0YS5tX3RleHR1cmUsIDApOwotICAgIGdsQmluZFRleHR1cmUoYmluZFRleHR1
cmVUYXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgZ2xDb3B5VGV4SW1hZ2UyRCh0YXJn
ZXQsIDAsIGludGVybmFsZm9ybWF0LCAwLCAwLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpLCAwKTsKLSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKLSAgICBn
bEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgZ2xGbHVzaCgpOwotICAg
IGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIHJldHVybiB0cnVlOwotI2Vsc2UK
LSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0oZGVzdGluYXRpb25U
ZXh0dXJlKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9Q
QVJBTShwcmVtdWx0aXBseUFscGhhKTsKLSAgICBVTlVTRURfUEFSQU0oZmxpcFkpOwotICAgIHJl
dHVybiBmYWxzZTsKLSNlbmRpZgotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMDc2YWY0MDg5NmJhYWNkODBkOWYxYzVlZmFhNzkwYTE0OWI4ZGQ3ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9CYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNh
aXJvQmFja2VuZC5oIgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWly
b09wZXJhdGlvbnMuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0SW1wbENhaXJvLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDYWlyby5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0
Lmg+CisKKyNpZiBVU0UoQ0FJUk8pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPElt
YWdlPiBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgLy8gQml0bWFw
SW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgor
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZp
b3IpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEludGVycG9sYXRpb25RdWFsaXR5TWFpbnRhaW5lciBpbnRlcnBvbGF0aW9uUXVhbGl0eUZv
clRoaXNTY29wZShkZXN0Q29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsK
KyAgICBjb25zdCBhdXRvJiBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSA9IGRlc3RDb250ZXh0LnN0
YXRlKCk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRl
eHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9y
ZSkpCisgICAgICAgIGRyYXdOYXRpdmVJbWFnZSgqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0
KCksIGltYWdlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBvcHRpb25zLCBkZXN0aW5hdGlv
bkNvbnRleHRTdGF0ZS5pbWFnZUludGVycG9sYXRpb25RdWFsaXR5IH0sIGRlc3RpbmF0aW9uQ29u
dGV4dFN0YXRlLmFscGhhLCBXZWJDb3JlOjpDYWlybzo6U2hhZG93U3RhdGUoZGVzdGluYXRpb25D
b250ZXh0U3RhdGUpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBh
dHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUm
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBpZiAoYXV0byBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlC
YWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIENhaXJvOjpkcmF3
UGF0dGVybigqZGVzdENvbnRleHQucGxhdGZvcm1Db250ZXh0KCksIGltYWdlLmdldCgpLCBtX2xv
Z2ljYWxTaXplLCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFj
ZSkKK3sKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkZXN0Q29sb3JTcGFjZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gb25seSBzUkdCIDwtPiBsaW5lYXJSR0IgYXJlIHN1cHBvcnRlZCBh
dCB0aGUgbW9tZW50CisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OkxpbmVh
clJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpCisgICAgICAgIHx8IChk
ZXN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZGVzdENvbG9yU3BhY2Ug
IT0gQ29sb3JTcGFjZTo6U1JHQikpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkZXN0Q29s
b3JTcGFjZSA9PSBDb2xvclNwYWNlOjpMaW5lYXJSR0IpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0
IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBsaW5lYXJSZ2JMVVQgPSBbXSB7CisgICAgICAgICAg
ICBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gYXJyYXk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9
IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzUkdCVG9MaW5lYXJDb2xvckNv
bXBvbmVudChjb2xvcik7CisgICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBzdGF0aWNfY2FzdDx1
aW50OF90Pihyb3VuZChjb2xvciAqIDI1NSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIGFycmF5OworICAgICAgICB9KCk7CisgICAgICAgIHBsYXRmb3JtVHJhbnNmb3JtQ29s
b3JTcGFjZShsaW5lYXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZGVzdENvbG9yU3BhY2UgPT0g
Q29sb3JTcGFjZTo6U1JHQikgeworICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+IGRldmljZVJnYkxVVD0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50
OF90LCAyNTY+IGFycmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1
NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAg
ICAgICAgICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwor
ICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29s
b3IgKiAyNTUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAg
ICAgICAgfSgpOworICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdi
TFVUKTsKKyAgICB9Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90PiBlbmNvZGVkSW1h
Z2UgPSB0b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgIGlmIChlbmNvZGVkSW1hZ2UuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gImRhdGE6LCI7CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFz
ZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoZW5jb2RlZEltYWdlLmRhdGEoKSwgZW5jb2RlZElt
YWdlLnNpemUoKSwgYmFzZTY0RGF0YSk7CisKKyAgICByZXR1cm4gImRhdGE6IiArIG1pbWVUeXBl
ICsgIjtiYXNlNjQsIiArIGJhc2U2NERhdGE7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1
ZmZlckNhaXJvQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKyAgICBjYWly
b19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9fZ2V0X3RhcmdldChjb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPmNyKCkpOworICAgIHJldHVybiBkYXRhKGltYWdlLCBtaW1lVHlwZSwgcXVhbGl0
eSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzYjkxOWFkNTIyZWEx
NzhiMzJjMDA5ZjVkODhkNWQ3MTZkZWYzYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kIDog
cHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CitwdWJsaWM6CisgICAgUmVmUHRyPEltYWdlPiBj
b3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVz
b2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAg
dm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3Qg
RmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRl
OworCisgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4g
dG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkg
Y29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tl
bmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZv
cm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFycmF5
PHVpbnQ4X3QsIDI1Nj4mKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZh
Y2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzYzNzJmOTE5ZTdlY2U4Y2JjNmEyNjNjNDg5Yzk5
ZTBlODc2MjQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAg
KzEsMjY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwg
MjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgiCisKKyNp
ZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHR1cmVN
YXBwZXJHTC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKKyNpZiBVU0Uo
RUdMKQorI2lmIFVTRShMSUJFUE9YWSkKKyNpbmNsdWRlICJFcG94eUVHTC5oIgorI2Vsc2UKKyNp
bmNsdWRlIDxFR0wvZWdsLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGNhaXJvLWdsLmg+
CisKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5jbHVkZSA8ZXBveHkvZ2wuaD4KKyNlbGlmIFVTRShP
UEVOR0xfRVMpCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjZWxzZQorI2luY2x1ZGUgIk9wZW5H
TFNoaW1zLmgiCisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpbmNs
dWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlci5oIgorI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkuaCIKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxM
T0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworCitzdGF0aWMg
aW5saW5lIHZvaWQgY2xlYXJTdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAg
ICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOwor
ICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwor
ICAgIGNhaXJvX3BhaW50KGNyLmdldCgpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUg
YmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUp
OworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZv
ckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQtPm1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgLy8gV2UgbXVzdCBnZW5lcmF0ZSB0aGUgdGV4dHVyZSBvdXJz
ZWx2ZXMsIGJlY2F1c2UgdGhlcmUgaXMgbm8gQ2Fpcm8gQVBJIGZvciBleHRyYWN0aW5nIGl0Cisg
ICAgLy8gZnJvbSBhIHByZS1leGlzdGluZyBzdXJmYWNlLgorICAgIHVpbnQzMl90IHRleHR1cmUK
KyAgICBnbEdlblRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKKyAgICBnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBH
TF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJm
KEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKKyAg
ICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9MSU5FQVIpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X01BR19GSUxURVIsIEdMX0xJTkVBUik7CisKKyAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19B
TElHTk1FTlQsIDEpOworCisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLyogbGV2
ZWwgKi8sIEdMX1JHQkEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgp
LCAwIC8qIGJvcmRlciAqLywgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7CisKKyAgICBj
YWlyb19kZXZpY2VfdCogZGV2aWNlID0gY29udGV4dC0+Y2Fpcm9EZXZpY2UoKTsKKworICAgIC8v
IFRocmVhZC1hd2FyZW5lc3MgaXMgYSBodWdlIHBlcmZvcm1hbmNlIGhpdCBvbiBub24tSW50ZWwg
ZHJpdmVycy4KKyAgICBjYWlyb19nbF9kZXZpY2Vfc2V0X3RocmVhZF9hd2FyZShkZXZpY2UsIEZB
TFNFKTsKKworICAgIGF1dG8gc3VyZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2dsX3N1cmZhY2VfY3Jl
YXRlX2Zvcl90ZXh0dXJlKGRldmljZSwgQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSwgdGV4dHVy
ZSwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKTsKKyAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY2xlYXJTdXJmYWNlKHN1cmZhY2UuZ2V0KCkp
OworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKHNpemUsIGJhY2tl
bmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSksIHRl
eHR1cmUpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6
OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNl
LCB1aW50MzJfdCB0ZXh0dXJlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
KGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBX
VEZNb3ZlKHN1cmZhY2UpKQorICAgICwgbV90ZXh0dXJlKHRleHR1cmUpCit7CisjaWYgVVNFKENP
T1JESU5BVEVEX0dSQVBISUNTKQorI2lmIFVTRShOSUNPU0lBKQorICAgIG1fbmljb3NpYUxheWVy
ID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3NpYTo6Q29udGVudExheWVyVGV4
dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsKKyNlbHNlCisgICAgbV9wbGF0
Zm9ybUxheWVyUHJveHkgPSBhZG9wdFJlZihuZXcgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSk7CisjZW5kaWYKKyNlbmRpZgorfQorCitJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZDo6fkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCkKK3sKKyNpZiBVU0UoQ09P
UkRJTkFURURfR1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQorICAgIGRvd25jYXN0PE5pY29zaWE6
OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5p
bnZhbGlkYXRlQ2xpZW50KCk7CisjZW5kaWYKKworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3Rp
dmVDb250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisgICAgUGxhdGZvcm1EaXNwbGF5Ojpz
aGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250
ZXh0Q3VycmVudCgpOworCisgICAgaWYgKG1fdGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0
dXJlcygxLCAmbV90ZXh0dXJlKTsKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyAg
ICBpZiAobV9jb21wb3NpdG9yVGV4dHVyZSkKKyAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAm
bV9jb21wb3NpdG9yVGV4dHVyZSk7CisjZW5kaWYKKworICAgIGlmIChwcmV2aW91c0FjdGl2ZUNv
bnRleHQpCisgICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Cit9CisKK1BsYXRmb3JtTGF5ZXIqIEltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKK3sKKyNpZiBVU0UoTklDT1NJQSkKKyAgICByZXR1cm4gbV9uaWNvc2lhTGF5ZXIuZ2V0KCk7
CisjZWxzZQorICAgIGlmIChtX3RleHR1cmUpCisgICAgICAgIHJldHVybiB0aGlzOworI2VuZGlm
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQ6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UobV9yZXNvbHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0
dXJlIGlzIHJlbW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIp
OworICAgIGlmIChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAoIW1fdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
R0MzRGVudW0gYmluZFRleHR1cmVUYXJnZXQ7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBj
YXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgIGJpbmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVS
RV8yRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1g6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2Fz
ZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1o6CisgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGJp
bmRUZXh0dXJlVGFyZ2V0ID0gR0xfVEVYVFVSRV9DVUJFX01BUDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNhaXJvX3N1
cmZhY2VfZmx1c2gobV9zdXJmYWNlLmdldCgpKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHTENv
bnRleHQ+IGNvbnRleHQgPSBHTENvbnRleHQ6OmNyZWF0ZU9mZnNjcmVlbkNvbnRleHQoJlBsYXRm
b3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCkpOworICAgIGNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHVpbnQzMl90IGZibzsKKyAgICBnbEdlbkZyYW1l
YnVmZmVycygxLCAmZmJvKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwg
ZmJvKTsKKyAgICBnbEZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMX0ZSQU1FQlVGRkVSLCBHTF9DT0xP
Ul9BVFRBQ0hNRU5UMCwgR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlLCAwKTsKKyAgICBnbEJpbmRU
ZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUpOworICAgIGdsQ29w
eVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwgbV9iYWNrZW5kU2l6
ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCAwKTsKKyAgICBnbEJpbmRUZXh0dXJl
KGJpbmRUZXh0dXJlVGFyZ2V0LCAwKTsKKyAgICBnbEJpbmRGcmFtZWJ1ZmZlcihHTF9GUkFNRUJV
RkZFUiwgMCk7CisgICAgZ2xGbHVzaCgpOworICAgIGdsRGVsZXRlRnJhbWVidWZmZXJzKDEsICZm
Ym8pOworICAgIHJldHVybiB0cnVlOworfQorCisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
KQordm9pZCBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZDo6Y3JlYXRlQ29tcG9zaXRv
ckJ1ZmZlcigpCit7CisgICAgYXV0byogY29udGV4dCA9IFBsYXRmb3JtRGlzcGxheTo6c2hhcmVk
RGlzcGxheUZvckNvbXBvc2l0aW5nKCkuc2hhcmluZ0dMQ29udGV4dCgpOworICAgIGNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX2NvbXBvc2l0
b3JUZXh0dXJlKTsKKyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhU
VVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KTsKKyAgICBnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklM
VEVSLCBHTF9MSU5FQVIpOworICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwg
MSk7CisgICAgZ2xUZXhJbWFnZTJEKEdMX1RFWFRVUkVfMkQsIDAgLCBHTF9SR0JBLCBtX2JhY2tl
bmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDAsIEdMX1JHQkEsIEdMX1VO
U0lHTkVEX0JZVEUsIDApOworCisgICAgbV9jb21wb3NpdG9yU3VyZmFjZSA9IGFkb3B0UmVmKGNh
aXJvX2dsX3N1cmZhY2VfY3JlYXRlX2Zvcl90ZXh0dXJlKGNvbnRleHQtPmNhaXJvRGV2aWNlKCks
IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2Vu
ZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWlnaHQoKSkpOworICAgIG1fY29tcG9zaXRv
ckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fY29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsK
KyAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29tcG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJ
QUxJQVNfTk9ORSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6
OnN3YXBCdWZmZXJzSWZOZWVkZWQoKQoreworICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVD
b250ZXh0ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7CisKKyAgICBpZiAoIW1fY29tcG9zaXRvclRl
eHR1cmUpIHsKKyAgICAgICAgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOworCisgICAgICAgIGF1
dG8gcHJveHlPcGVyYXRpb24gPQorICAgICAgICAgICAgW3RoaXNdKFRleHR1cmVNYXBwZXJQbGF0
Zm9ybUxheWVyUHJveHkmIHByb3h5KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIExv
Y2tIb2xkZXIgaG9sZGVyKHByb3h5LmxvY2soKSk7CisgICAgICAgICAgICAgICAgcHJveHkucHVz
aE5leHRCdWZmZXIobWFrZVVuaXF1ZTxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllckJ1ZmZlcj4o
bV9jb21wb3NpdG9yVGV4dHVyZSwgbV9iYWNrZW5kU2l6ZSwgVGV4dHVyZU1hcHBlckdMOjpTaG91
bGRCbGVuZCwgR0xfUkdCQSkpOworICAgICAgICAgICAgfTsKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICAgICAgcHJveHlPcGVyYXRpb24oZG93bmNhc3Q8Tmljb3NpYTo6Q29udGVudExheWVyVGV4dHVy
ZU1hcHBlckltcGw+KG1fbmljb3NpYUxheWVyLT5pbXBsKCkpLnByb3h5KCkpOworI2Vsc2UKKyAg
ICAgICAgcHJveHlPcGVyYXRpb24oKm1fcGxhdGZvcm1MYXllclByb3h5KTsKKyNlbmRpZgorICAg
IH0KKworICAgIC8vIEl0IHdvdWxkIGJlIGdyZWF0IGlmIHdlIGNvdWxkIGp1c3Qgc3dhcCB0aGUg
YnVmZmVycyBoZXJlIGFzIHdlIGRvIHdpdGggd2ViZ2wsIGJ1dCB0aGF0IGJyZWFrcyB0aGUgY2Fz
ZXMKKyAgICAvLyB3aGVyZSBvbmUgZnJhbWUgdXNlcyB0aGUgY29udGVudCBhbHJlYWR5IHJlbmRl
cmVkIGluIHRoZSBwcmV2aW91cyBmcmFtZS4gU28gd2UganVzdCBjb3B5IHRoZSBjb250ZW50Cisg
ICAgLy8gaW50byB0aGUgY29tcG9zaXRvciBidWZmZXIuCisgICAgY2Fpcm9fc2V0X3NvdXJjZV9z
dXJmYWNlKG1fY29tcG9zaXRvckNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAg
IGNhaXJvX3NldF9vcGVyYXRvcihtX2NvbXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1Jf
U09VUkNFKTsKKyAgICBjYWlyb19wYWludChtX2NvbXBvc2l0b3JDci5nZXQoKSk7CisKKyAgICBp
ZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2ZUNvbnRleHQt
Pm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorI2Vsc2UKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dM
U3VyZmFjZUJhY2tlbmQ6OnBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgb3BhY2l0eSkKK3sKKyAgICBBU1NFUlQobV90ZXh0dXJl
KTsKKworICAgIC8vIENhaXJvIG1heSBjaGFuZ2UgdGhlIGFjdGl2ZSBjb250ZXh0LCBzbyB3ZSBt
YWtlIHN1cmUgdG8gY2hhbmdlIGl0IGJhY2sgYWZ0ZXIgZmx1c2hpbmcuCisgICAgR0xDb250ZXh0
KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBHTENvbnRleHQ6OmN1cnJlbnQoKTsKKyAgICBjYWly
b19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgcHJldmlvdXNBY3RpdmVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIHN0YXRpY19jYXN0PFRleHR1cmVNYXBw
ZXJHTCY+KHRleHR1cmVNYXBwZXIpLmRyYXdUZXh0dXJlKG1fdGV4dHVyZSwgVGV4dHVyZU1hcHBl
ckdMOjpTaG91bGRCbGVuZCwgbV9iYWNrZW5kU2l6ZSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFj
aXR5KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xT
dXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZGYwZmFlN2Uy
YzM0OWUyMTY0MTk4NDU1ZDQxOGMzY2FiNjc0N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE5p
a29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIK
KyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKKyNpZiBVU0UoTklDT1NJQSkKKyNpbmNsdWRl
ICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKKyNlbHNlCisjaW5jbHVk
ZSAiUGxhdGZvcm1MYXllci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQKKyNpZiBVU0UoTklDT1NJQSkKKyAg
ICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1wbDo6Q2xpZW50
CisjZWxzZQorICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKKyNlbmRpZgorICAgICwgcHVibGlj
IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9D
QVRFRChJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+
IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29u
c3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICB+SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJh
Y2tlbmQoKTsKKworICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHQ0dMZW51bSB0YXJnZXQsIFBs
YXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1h
dCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKKworI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKKyAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIo
KTsKKyAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKKyNpZiAhVVNFKE5J
Q09TSUEpCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHk+IHByb3h5
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wbGF0Zm9ybUxheWVyUHJveHkuY29weVJlZigp
OyB9CisjZW5kaWYKKyNlbHNlCisgICAgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJl
TWFwcGVyJiwgY29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiwgZmxvYXQgb3BhY2l0eSk7CisjZW5kaWYKKworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQ
SElDUykKKyNpZiBVU0UoTklDT1NJQSkKKyAgICBSZWZQdHI8Tmljb3NpYTo6Q29udGVudExheWVy
PiBtX25pY29zaWFMYXllcjsKKyNlbHNlCisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9y
bUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OworI2VuZGlmCisgICAgdWludDMyX3Qg
bV90ZXh0dXJlOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZh
Y2U7CisgICAgUmVmUHRyPGNhaXJvX3Q+IG1fY29tcG9zaXRvckNyOworICAgIHVpbnQzMl90IG1f
Y29tcG9zaXRvclRleHR1cmUgeyAwIH07CisjZW5kaWYKKyAgICB1aW50MzJfdCBtX3RleHR1cmUg
eyAwIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJ
Uk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJm
YWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTVmMmRk
ZTk4ZWI3NGU0ZTIxMDNjYWM0NDE4ZjdiNThlYTllMWNmYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFn
ZVN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fp
cm9JbWFnZVN1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGlu
ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lN
UEwoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyop
Cit7CisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBzX3N1cmZhY2VEYXRhS2V5Owor
CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJl
c29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9m
b3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSk7CisgICAg
dm9pZCogc3VyZmFjZURhdGE7CisgICAgaWYgKCF0cnlGYXN0WmVyb2VkTWFsbG9jKGJhY2tlbmRT
aXplLmhlaWdodCgpICogc3RyaWRlKS5nZXRWYWx1ZShzdXJmYWNlRGF0YSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KHN1cmZh
Y2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2Vu
ZFNpemUuaGVpZ2h0KCksIHN0cmlkZSkpOworICAgIGNhaXJvX3N1cmZhY2Vfc2V0X3VzZXJfZGF0
YShzdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3VyZmFjZURhdGEsIFtdKHZvaWQq
IGRhdGEpIHsKKyAgICAgICAgZmFzdEZyZWUoZGF0YSk7CisgICAgfSk7CisKKyAgICByZXR1cm4g
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPihuZXcg
SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBjb25zdCBHcmFwaGljc0NvbnRleHQmKQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51
bGxwdHIpOworfQorCitJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6SW1hZ2VC
dWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmIHN1cmZhY2UpCisg
ICAgOiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoc3VyZmFjZSkpCit7Cisg
ICAgQVNTRVJUKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1
cmZhY2VCYWNrZW5kOjpwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJh
eTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRh
U3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0KCkpOworICAg
IGludCBzdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUobV9zdXJmYWNlLmdl
dCgpKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbG9naWNhbFNpemUuaGVpZ2h0KCk7ICsr
eSkgeworICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5zaWdu
ZWQqPihkYXRhU3JjICsgc3RyaWRlICogeSk7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bV9sb2dpY2FsU2l6ZS53aWR0aCgpOyB4KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhl
bCA9IHJvdyArIHg7CisgICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJl
bXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKKyAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihs
b29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVl
bigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkp
OworICAgICAgICAgICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxD
b2xvcik7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3Jl
Y3RhbmdsZShtX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9s
b2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MDAzNzk0ZmRhYTk0NzMyYjYxNTU3YzQxZTg0
NDIzMWE5OGE3MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCkBAIC0w
LDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5u
IDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJ
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCitwcml2YXRlOgorICAgIEltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRy
YW5zZm9ybUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBU
YWJsZSkgb3ZlcnJpZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMmQxNWYwYmEyMjIxMGY3YTE3NGJhNzA3ZWQyNjE4MGMxOGZlYTRj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlIDxjYWlyby5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tl
bmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UpCisgICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMobV9zdXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VT
Uyk7CisKKyAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9z
dXJmYWNlLmdldCgpKSk7CisgICAgbV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOwor
ICAgIG1fY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm86OmNyZWF0ZUZhY3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3Jh
cGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBj
b25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZl
ckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05h
dGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAo
Y29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1
dG8gY29weSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1B
VF9BUkdCMzIsCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFj
ZS5nZXQoKSksCisgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZh
Y2UuZ2V0KCkpKSk7CisKKyAgICAgICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShj
b3B5LmdldCgpKSk7CisgICAgICAgIGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9f
T1BFUkFUT1JfU09VUkNFKTsKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdl
dCgpLCBtX3N1cmZhY2UuZ2V0KCksIDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQo
KSk7CisKKyAgICAgICAgcmV0dXJuIGNvcHk7CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJh
Y2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQ
dHIgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0lt
YWdlKCkgY29uc3QKK3sKKyAgICBCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZB
Q0VfVFlQRV9JTUFHRSAmJiBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQo
KSkgPT0gQ0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0g
RG9udENvcHlCYWNraW5nU3RvcmU7CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBD
b3B5QmFja2luZ1N0b3JlOworICAgIHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9y
KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6
dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29l
cmNlVG9JbWFnZSgpOworICAgIGNhaXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisK
KyAgICBWZWN0b3I8dWludDhfdD4gaW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0
YXR1cyhzdXJmYWNlLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1
dG8gcGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsK
KyAgICBpbWFnZURhdGEuYXBwZW5kKHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKHN1cmZhY2UuZ2V0KCkpICoKKyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KHN1cmZhY2UuZ2V0KCkpKTsKKworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0
cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNS
ZWN0KSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0
YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9z
dXJmYWNlLmdldCgpKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
OjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBv
aW50JiBkZXN0UG9pbnQpCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEo
aW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0
U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVz
dFBvaW50U2NhbGVkID0gdG9CYWNrZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKyAgICBjYWly
b19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50
U2NhbGVkLngoKSwgZGVzdFBvaW50U2NhbGVkLnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBz
cmNSZWN0U2NhbGVkLmhlaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jOTQ5ZmYzNzM3NDg4MjQ1NTFlM2U0ZWZlNWEyYjRkNjY5M2Yw
NTUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENB
SVJPKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFj
a2VuZCB7CitwdWJsaWM6CisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgp
IGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5w
dXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY2Fp
cm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IG1fc3VyZmFjZTsKKyAgICBQbGF0Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7
IG51bGxwdHIgfTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRl
eHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFn
ZUJ1ZmZlckRhdGFDYWlyby5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MmE2MWUzNTk5NDZlZjRiYWQ2OTIzZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTAxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0
YUNhaXJvX2gKLQotI2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENh
aXJvLmgiCi0jaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRF
RF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1
cmVNYXBwZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2lu
Y2x1ZGUgIlRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlm
Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNp
bmNsdWRlICJOaWNvc2lhQ29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGlj
IE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0g
ICAgOiBwdWJsaWMgUGxhdGZvcm1MYXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAg
ICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZp
cnR1YWwgfkltYWdlQnVmZmVyRGF0YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4g
bV9zdXJmYWNlOwotICAgIFBsYXRmb3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRT
aXplIG1fc2l6ZTsKLSAgICBSZW5kZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFj
ZSgpOwotCi0jaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQot
ICAgIHZvaWQgc3dhcEJ1ZmZlcnNJZk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAg
IHZvaWQgY3JlYXRlQ29tcG9zaXRvckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZh
Y2VfdD4gbV9jb21wb3NpdG9yU3VyZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0
dXJlOwotICAgIFJlZlB0cjxjYWlyb190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNP
U0lBKQotICAgIFJlZlB0cjxOaWNvc2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwot
I2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0
Zm9ybUxheWVyUHJveHk7Ci0jZW5kaWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9U
ZXh0dXJlTWFwcGVyKFRleHR1cmVNYXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVp
bnQzMl90IG1fdGV4dHVyZTsKLSNlbmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQot
Ci0jZW5kaWYgLy8gVVNFKENBSVJPKQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9f
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkNWU0ZWM3MTllZGI0
OTNmNzlkYmJmYWJlNWFmOTNjYTA2NzA5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgot
ICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0K
LSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAi
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8
bWF0aC5oPgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRl
IDxJbWFnZUlPL0ltYWdlSU8uaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQ
SS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRB
cml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0Jhc2U2NC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVT
RShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgi
Ci0jaW5jbHVkZSA8cGFsL3NwaS9jb2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBD
QSB1c2VzIEFSR0IzMiBmb3IgdGV4dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGlu
ZyBpcyBvcHRpbWl6ZWQuCi0jZGVmaW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURF
TlRJRklFUihJbWFnZUJ1ZmZlcik7Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElG
SUVSKEltYWdlQnVmZmVyKTsKLQotc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlQ29tcGF0aWJsZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
Y29sb3JTcGFjZTsKLSNpZiBQTEFURk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250
ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdl
dFR5cGUoY2dDb250ZXh0KSkgewotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAg
ICAgIGNvbG9yU3BhY2UgPSBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7
Ci0gICAgICAgIGJyZWFrOwotI2lmIEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4
dFR5cGVJT1N1cmZhY2U6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRH
ZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVm
YXVsdDoKLSAgICAgICAgY29sb3JTcGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNv
bG9yU3BhY2UoY2dDb250ZXh0KSk7Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAg
ICAgICBjb2xvclNwYWNlID0gc1JHQkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JT
cGFjZSA9IHNSR0JDb2xvclNwYWNlUmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUgPSBjb250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxl
ZFNpemUgPSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7
Ci0gICAgYm9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBidWZmZXIobmV3IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0
KCksIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2Vz
cykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25k
aW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNv
bnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0K
LQotSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9k
ZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNj
ZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUo
cmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSBy
ZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1
dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWls
ZihyZXNvbHV0aW9uU2NhbGUgKiBzaXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgYXV0b21hdGljYWxseSB1c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxv
YXRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUo
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwg
c2NhbGVkSGVpZ2h0KTsKLSAgICBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQot
ICAgIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5n
TW9kZTo6QWNjZWxlcmF0ZWQ7Ci0gICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXpl
LmhlaWdodCgpIDw9IDApCi0gICAgICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0
aCA9IG1fc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVp
Z2h0ID0gbV9zaXplLmhlaWdodCgpOwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIg
b3ZlcmZsb3dzCi0gICAgbV9kYXRhLmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBD
aGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1f
ZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQot
ICAgIEludFNpemUgbWF4U2l6ZSA9IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAo
d2lkdGgudW5zYWZlR2V0KCkgPiBtYXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgp
ID4gbWF4U2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNl
OwotI2Vsc2UKLSAgICBBU1NFUlQocmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkKTsKLSNlbmRpZgotCi0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNl
OwotCi0gICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2Nl
bGVyYXRlUmVuZGVyaW5nKSB7Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLSAgICAgICAgRmxvYXRTaXplIHVzZXJCb3VuZHMgPSBGbG9hdFNpemUod2lkdGgudW5zYWZl
R2V0KCksIGhlaWdodC51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9T
dXJmYWNlOjpjcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5k
cyksIGNvbG9yU3BhY2UpOwotICAgICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAg
ICAgIGNnQ29udGV4dCA9IG1fZGF0YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9z
dFdpbmRvdyk7Ci0gICAgICAgICAgICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENH
Q29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IHVzZXJCb3VuZHMpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEu
c3VyZmFjZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJB
TShob3N0V2luZG93KTsKLSNlbmRpZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAg
ICAgIGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywg
ZmFsbCBiYWNrIHRvIG5vbi1hY2NlbGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNj
ZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFs
bG9jOjp0cnlaZXJvZWRNYWxsb2MobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBt
X2RhdGEuYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRh
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0
PGludHB0cl90PihtX2RhdGEuZGF0YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAg
IG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMySG9zdDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZv
ID0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29u
dGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQo
KSwgOCwgbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwg
bV9kYXRhLmJpdG1hcEluZm8pKTsKLSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRh
ID0gW10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIElt
YWdlQnVmZmVyTWFsbG9jOjpmcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAg
fTsKLSAgICAgICAgLy8gQ3JlYXRlIGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgot
ICAgICAgICB2ZXJpZnlJbWFnZUJ1ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRl
cy51bnNhZmVHZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2Fm
ZUdldCgpLCByZWxlYXNlSW1hZ2VEYXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0
KCkuc2NhbGUoRmxvYXRTaXplKDEsIC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAt
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURl
dmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVl
OwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wm
IHN1Y2Nlc3MpCi0gICAgOiBJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hl
ZENHQ29sb3JTcGFjZShpbWFnZUNvbG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93
LCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0
OwotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFn
ZUJ1ZmZlcjo6bWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBi
ZSBpbnZva2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBi
ZSBjYXJlZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8v
IEl0J3Mgc2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRv
IGFueSBwb2ludGVyIGNoYXNpbmcuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEu
c3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBj
b25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNj
ZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9l
c24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJl
dHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJu
YWxTaXplKCkud2lkdGgoKSAqIGludGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3Qg
SW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgbWF5IGJlIGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJl
YWQsIGFuZCB3ZSBuZWVkIHRvIGJlIGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBo
ZXJlIGFuZCBob3cuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBi
ZWNhdXNlIHRoZSBzdXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rp
b24gb2YgdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0
YS5zdXJmYWNlLT50b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFz
ZSBwb2ludGVycy4KLSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2Rh
dGEuc3VyZmFjZS0+dG90YWxCeXRlcygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdy
YXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQot
ICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwot
I2VuZGlmCi0gICAgcmV0dXJuICptX2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6Zmx1c2hDb250ZXh0KCkgY29uc3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCku
cGxhdGZvcm1Db250ZXh0KCkpOwotfQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNy
ZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNp
emUmIGJvdW5kcykKLXsKLSAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkg
IT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdo
dChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAg
ICAgcmV0dXJuIGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dS
ZWN0TWFrZSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJl
dHVybiBpbWFnZTsKLX0KLQotc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VB
ZnRlclNjYWxpbmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6
ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5
KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0
aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNS
R0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAg
ICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29w
eSk7Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGlt
YWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7Ci0gICAgICAgIENHQ29udGV4dERyYXdJ
bWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNp
emVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBpbWFnZTsKLSAgICBpZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2
ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3Jl
YXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbG9naWNh
bFNpemUoKSwgaW50ZXJuYWxTaXplKCksIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29s
dXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlv
biBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFn
ZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdl
QnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFn
ZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1
ZmZlcikpLCBsb2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNl
cnZlUmVzb2x1dGlvbik7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6
c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyKQotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYg
KCFpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZl
ci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJ
T1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIo
V1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5j
b3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFp
blB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBp
bWFnZTsKLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAg
ICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5n
U3RvcmU6Ci0gICAgICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEu
YmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQo
KSwgOCwgMzIsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3Bh
Y2UsIG1fZGF0YS5iaXRtYXBJbmZvLCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVl
LCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENH
Qml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBp
bWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1
cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5z
dXJmYWNlKSB7Ci0gICAgICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAg
QVNTRVJUKGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZs
b2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAg
ICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdT
dG9yZVNpemU7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6
OnNpbmtJbnRvSW1hZ2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShp
bWFnZUJ1ZmZlcikpKTsKLSAgICAKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBk
ZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUs
IGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1
ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8
IGRlc3RDb250ZXh0LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29w
eU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBi
dWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5
TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVz
dGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCks
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRp
b25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0
IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAg
ICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0g
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZm
ZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQ
YXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5n
U3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAg
IGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAg
ICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5
RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXpl
KCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdl
QnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7
Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0g
ICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVs
QXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0
LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJy
YXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0g
Y29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3Vy
Y2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3Vy
Y2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lz
dGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAg
ICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291
cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29u
dGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3Jl
YXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91
Z2ggQ0dJT1N1cmZhY2VDb250ZXh0Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkg
dGhpcyBpcyBuZWNlc3NhcnkuCi0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQotICAgICAgICBjb250ZXh0KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsK
LX0KLQotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKSBjb25zdAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlw
ZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwo
ZGF0YS5nZXQoKSwgbWltZVR5cGUpOwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRv
Q0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAg
ICAgcmV0dXJuIGRhdGFWZWN0b3IoZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQot
UmV0YWluUHRyPENGRGF0YVJlZj4gSW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlm
IChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0
KCk7Ci0KLSAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBl
KTsKLSAgICBBU1NFUlQodXRpKTsKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsK
LSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAg
aWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRv
bid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3Np
dGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0g
ICAgICAgIGlmICghcHJlbXVsdGlwbGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgICAgICBzaXplX3QgZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgp
ICogbG9naWNhbFNpemUoKS5oZWlnaHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1
dG8gZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51
bGxwdHIsIHByZW11bHRpcGxpZWREYXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0g
ICAgICAgIGlmICghZGF0YVByb3ZpZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0
aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lk
dGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtD
R0ltYWdlQWxwaGFOb25lU2tpcExhc3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNj
YWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwot
ICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgp
LCBpbnRlcm5hbFNpemUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBh
ZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxv
Z2ljYWxTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JD
b2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAg
ICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7
Ci0gICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgw
LCAwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAg
ICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemUoKTsKLSAg
ICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
aW1hZ2VTaXplSW5Vc2VyU3BhY2Uud2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0
KCkpLCBpbWFnZS5nZXQoKSk7Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGVJbWFnZShjb250ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwot
ICAgIGlmICghZW5jb2RlSW1hZ2UoaW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZE
YXRhLmdldCgpKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92
ZShjZkRhdGEpOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEo
KSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdo
dCgpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dC
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMWNkMjM3NTgxZjk1ZDBjY2FjYjgyYzg0ZmMyNjRmOTJh
NzliM2ViCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisj
aW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgor
I2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgor
CisjaWYgVVNFKEFDQ0VMRVJBVEUpCisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+
CisjZW5kaWYKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVk
ZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4
dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIFBMQVRG
T1JNKENPQ09BKQorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpOworCisgICAgaWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dD
b250ZXh0VHlwZUJpdG1hcCkKKyAgICAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4dEdldENvbG9y
U3BhY2UoY2dDb250ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gYWRvcHRDRihDR0NvbnRleHRDb3B5
RGV2aWNlQ29sb3JTcGFjZShjZ0NvbnRleHQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNv
bnRleHQpOworICAgIHJldHVybiBudWxscHRyOworI2VuZGlmCit9CisjCisKK3ZvaWQgSW1hZ2VC
dWZmZXJDR0JhY2tlbmQ6OnNldHVwQ29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZs
b2F0U2l6ZSgxLCAtMSkpOworICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fYmFja2VuZFNp
emUuaGVpZ2h0KCkpOworICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVz
b2x1dGlvblNjYWxlKTsKK30KKworc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVD
cm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBi
YWNrZW5kU2l6ZSkKK3sKKyAgICBpZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkg
IT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihiYWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0
SGVpZ2h0KGltYWdlKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXplLmhlaWdodCgp
KSkpCisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3Qo
aW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUu
aGVpZ2h0KCkpKSk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdl
PiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdl
UmVmPiYmIGltYWdlLCBjb25zdCBJbnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
YmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHBy
ZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJl
c2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFn
ZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6
ZSk7CisgICAgZWxzZSB7CisgICAgICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKDAsIGxvZ2ljYWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgp
LCA4LCA0ICogbG9naWNhbFNpemUud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShjb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xp
cFRvUmVjdChjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dp
Y2FsU2l6ZSkpOworICAgICAgICBGbG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dp
Y2FsU2l6ZTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0
UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0
KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2Uo
Y29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFn
ZSkpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2Uo
QmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYg
KG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZl
UmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVo
YXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGlu
Z0lmTmVlZGVkKFdURk1vdmUoaW1hZ2UpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBt
X3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKQoreworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9i
YWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qg
c3JjUmVjdFNjYWxlZCA9IHNyY1JlY3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29s
dXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVz
dENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tp
bmdTdG9yZSkpCisgICAgICAgIGRlc3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQo
KSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQor
Cit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3Qg
RmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29u
dGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAg
ICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0Fm
ZmluZVRyYW5zZm9ybSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2Fs
U2l6ZS5oZWlnaHQoKSk7Cit9CisKK1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7
CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZl
ck1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxD
R0ltYWdlUmVmPiBpbWFnZTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3Rl
ZFBpeGVsQXJyYXk7CisKKyAgICBpZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsK
KyAgICAgICAgLy8gSlBFR3MgZG9uJ3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZl
IHRvIG1hbnVhbGx5IGNvbXBvc2l0ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIGF1dG8gaW1h
Z2VEYXRhID0gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQsIGxvZ2ljYWxSZWN0KCkpOworICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVm
UHRyKGltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcHJvdGVj
dGVkUGl4ZWxBcnJheS0+Ynl0ZUxlbmd0aCgpOworICAgICAgICBJbnRTaXplIHBpeGVsQXJyYXlE
aW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CisKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZm
ZXJJc0JpZ0Vub3VnaChwcm90ZWN0ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAg
ICAgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEobnVsbHB0ciwgcHJvdGVjdGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVs
bHB0cikpOworICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHBpeGVsQXJy
YXlEaW1lbnNpb25zLndpZHRoKCksIHBpeGVsQXJyYXlEaW1lbnNpb25zLmhlaWdodCgpLCA4LCAz
MiwgNCAqIHBpeGVsQXJyYXlEaW1lbnNpb25zLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCks
IGtDR0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBk
YXRhUHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7
CisgICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9w
cGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0
ZSgwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQg
KiBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxw
aGFQcmVtdWx0aXBsaWVkTGFzdCkpOworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29u
dGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1Jl
Y3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCks
IGJhY2tlbmRTaXplKCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNv
bnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNr
ZW5kU2l6ZSgpLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0
Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKwor
ICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRv
ckRlZmF1bHQsIDApKTsKKyAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0
KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyQ0dCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1l
VHlwZSwgcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBk
YXRhVmVjdG9yKGRhdGEuZ2V0KCkpOworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlv
bmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKK3sKKyAgICBpZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxp
dHksIHByZXNlcnZlUmVzb2x1dGlvbikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0
KCksIG1pbWVUeXBlKTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NF
TEVSQVRFKQorc3RhdGljIGlubGluZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5z
aWduZWQgYnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7
CisgICAgdkltYWdlX0J1ZmZlciB2SW1hZ2VCdWZmZXI7CisKKyAgICB2SW1hZ2VCdWZmZXIuaGVp
Z2h0ID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAg
dkltYWdlQnVmZmVyLndpZHRoID0gc3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53
aWR0aCgpKTsKKyAgICB2SW1hZ2VCdWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2
SW1hZ2VCdWZmZXIuZGF0YSA9IHJvd3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhh
UHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9y
bWF0LCB2SW1hZ2VfQnVmZmVyJiBzcmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYg
ZGVzdCkKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7Cisg
ICAgICAgIEFTU0VSVChzcmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAg
ICBBU1NFUlQoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpOworCisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdC
QS4KKyAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAg
ICAgdkltYWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1h
Z2VOb0ZsYWdzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAg
ICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAg
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRh
X0JHUkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKHNyY0NvbG9yRm9ybWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAg
ICAgdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9C
R1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChz
cmNDb2xvckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhl
bCBjaGFubmVscyBCR1JBIDwtPiBSR0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9
IHsgMiwgMSwgMCwgMyB9OworICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgo
JmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNyY0FscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWdu
ZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYg
c2l6ZSkgY29uc3QKK3sKKyAgICBpZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0
ICYmIHNyY0NvbG9yRm9ybWF0ID09IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1
ZmZlckJhY2tlbmQ6OmNvcHlJbWFnZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3Jt
YXQsIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZv
cm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICB2SW1hZ2VfQnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0
ZXNQZXJSb3csIHNyY1Jvd3MsIHNpemUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VW
SW1hZ2VCdWZmZXIoZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5
SW1hZ2VQaXhlbHNBY2NlbGVyYXRlZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNy
YywgZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmM3Y2EzOTgwMzRmMjVhMzM0OTI0N2Q0MzRmNWY2NTlmOTJhZjNk
NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
Q0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1Ymxp
YyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRp
b24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
SW1hZ2U+IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAg
IHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0
IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlk
ZTsKKworICAgIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2lu
ZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHN0YXRpYyBS
ZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKKyAgICB2b2lkIHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWlu
UHRyPENGRGF0YVJlZj4gdG9DRkRhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFD
Q0VMRVJBVEUpCisgICAgdm9pZCBjb3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVs
dGlwbGljYXRpb24gc3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1
bnNpZ25lZCBzcmNCeXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZv
cm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3Qg
SW50U2l6ZSYpIGNvbnN0IG92ZXJyaWRlOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTM4M2M5OTZlNTRkMGIwNDcxM2ZkYzc0MmMyMTQzNmQzODA3ZTg0
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShD
RykKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhv
c3Q7CisjZWxzZQorY29uc3RleHByIGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5m
byA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitXVEZfTUFLRV9J
U09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0
ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXpl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOwor
ICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gNCAqIGJhY2tlbmRTaXplLndpZHRoKCk7CisKKyAg
ICBpZiAoIXRyeUZhc3RDYWxsb2MoYmFja2VuZFNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5n
ZXRWYWx1ZShkYXRhKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNpemVfdCBudW1C
eXRlcyA9IGJhY2tlbmRTaXplLmhlaWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1h
Z2VCdWZmZXJJc0JpZ0Vub3VnaChkYXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4
dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKGRhdGEsIGJhY2tlbmRTaXplLndpZHRo
KCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCA4LCBieXRlc1BlclJvdywgY2dDb2xvclNwYWNlLCBE
ZWZhdWx0Qml0bWFwSW5mbykpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0
PihjZ0NvbnRleHQuZ2V0KCkpOworCisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0g
W10gKHZvaWQqLCBjb25zdCB2b2lkKiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUo
Y29uc3RfY2FzdDx2b2lkKj4oZGF0YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRl
ciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRl
cywgcmVsZWFzZUltYWdlRGF0YSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNp
emUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1v
dmUoZGF0YVByb3ZpZGVyKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKGF1dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2Uo
Y29udGV4dCkpCisgICAgICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3Jl
YXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0
cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUo
c2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6
OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAg
IHJldHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBob3N0
V2luZG93KTsKK30KKworSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUm
IGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRl
ciwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1h
Z2VCdWZmZXJDR0JhY2tlbmQobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2Nh
bGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVy
KFdURk1vdmUoZGF0YVByb3ZpZGVyKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQp
KQoreworICAgIEFTU0VSVChtX2RhdGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7Cisg
ICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAorewor
ICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2
aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5
QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVh
dGVJbWFnZShjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKKworICAgIGNhc2UgRG9udENv
cHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisg
ICAgICAgICAgICBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCks
IDgsIDMyLCBieXRlc1BlclJvdygpLAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1f
Y29sb3JTcGFjZSksIERlZmF1bHRCaXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAg
ICAgICAgICAgIDAsIHRydWUsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9CisK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVj
dG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7
Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJl
Y3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0
SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVy
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRl
c3RQb2ludCwgbV9kYXRhKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZh
ZjY2MmExYzc2YThiODliNzc2ZjIzOTZjYjg1MzQ3ZDZhNDkxYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUg
IkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDog
cHVibGljIEltYWdlQnVmZmVyQ0dCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBj
b25zdCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckNHQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2
ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lk
IHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJ
bWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBv
aW50KSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0
PiYmKTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2Vu
ZENvbG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7
IH0KKyNlbmRpZgorCisgICAgdm9pZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92
aWRlclJlZj4gbV9kYXRhUHJvdmlkZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29u
dGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2MWZjMDMxY2MwNjY0ZGU3YTU3N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgot
Ci0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENs
YW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUND
RUxFUkFURSkKLSNpbmNsdWRlIDxBY2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZh
Y2UuaCIKLSNpbmNsdWRlIDxkaXNwYXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkv
Y29jb2EvSU9TdXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRl
eHR1cmVzIGFuZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2Rl
ZmluZSBVU0VfQVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNF
X0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJE
YXRhKGNvbnN0IHZJbWFnZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkK
LXsKLSAgICBBU1NFUlQoc3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAg
aWYgKGt2SW1hZ2VOb0Vycm9yICE9IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZz
cmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3
YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBh
cmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0
XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgm
ZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVt
dWx0aXBseUJ1ZmZlckRhdGEoY29uc3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2Vf
QnVmZmVyJiBkZXN0KQotewotICAgIEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3Qu
ZGF0YSk7Ci0KLSAgICBpZiAoa3ZJbWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRh
X1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4g
SU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1
aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVs
c19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlm
IC8vIFVTRShBQ0NFTEVSQVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZB
U19CQUNLSU5HX1NUT1JFKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lk
KiBvdXRwdXQsIHZvaWQqIGlucHV0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1
dEJ5dGVzUGVyUm93KQotewotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7
Ci0gICAgQVNTRVJUKG91dHB1dCk7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMu
d2lkdGggPSB3aWR0aDsKLSAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRl
cyA9IGlucHV0Qnl0ZXNQZXJSb3c7Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFn
ZV9CdWZmZXIgZGVzdDsKLSAgICBkZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQg
PSBoZWlnaHQ7Ci0gICAgZGVzdC5yb3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEg
PSBvdXRwdXQ7Ci0KLSAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAm
ZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsK
LSAgICBVTlVTRURfUEFSQU0oaW5wdXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGhlaWdodCk7Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3Qg
QUNDRUxFUkFURS4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJl
bmRlcmluZywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50
OF90PiByZXN1bHQoNCAqIHdpZHRoICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJl
bmRlcmluZykgewotICAgICAgICB0cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lk
dGgsIGhlaWdodCwgNCAqIGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRh
KHJlc3VsdC5kYXRhKCksIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQs
IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSNlbmRpZgotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0
cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFy
ZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90
KiByZXN1bHREYXRhID0gcmVzdWx0ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlm
ICghcmVzdWx0RGF0YSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGlu
dD4gZW5keCA9IHJlY3QubWF4WCgpOwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZ
KCk7Ci0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVH
ZXQoKSA+IHNpemUud2lkdGgoKSB8fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgcmVzdWx0LT56ZXJvRmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVj
dC54KCk7Ci0gICAgaW50IGRlc3R4ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0
LndpZHRoKCk7Ci0gICAgaWYgKG9yaWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdp
bng7Ci0gICAgICAgIGRlc3R4ID0gLW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAg
IH0KLSAgICBkZXN0dyA9IHN0ZDo6bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lk
dGgoKSAtIG9yaWdpbngpOwotICAgIGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgp
KQotICAgICAgICBlbmR4ID0gc2l6ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9
IGVuZHggLSBvcmlnaW54OwotICAgIAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAg
aW50IGRlc3R5ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwot
ICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAg
ICBkZXN0eSA9IC1vcmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVz
dGggPSBzdGQ6Om1pbjxpbnQ+KGRlc3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3Jp
Z2lueSk7Ci0gICAgaWYgKGVuZHkudW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAg
ICBlbmR5ID0gc2l6ZS5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAt
IG9yaWdpbnk7Ci0gICAgCi0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0
LnVuc2FmZUdldCgpIDw9IDApCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBk
ZXN0Um93cyA9IHJlc3VsdERhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICog
NDsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNS
b3dzOwotICAgIAotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAo
IWRhdGEpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVy
Um93ID0gYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9y
aWdpbnggKiA0OwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAg
ICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgp
OwotICAgICAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAg
ICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsK
LSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAg
IGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5
dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7
Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShz
cmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JH
QkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRG
b3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAg
ICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAg
IENSQVNIKCk7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVH
ZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51
bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0
OwotICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNd
OwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBk
aWZmZXJlbnQgYXMgd2UgdXNlIGltYWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1
KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IChzcmNSb3dzW2Jhc2V4XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFz
ZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBz
cmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0g
KiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQz
Ml90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQz
Ml90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgp
OyArK3kpIHsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBi
YXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNS
b3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0g
PSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQot
ICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0
KCk7IHggKz0gNCkKLSAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJf
dCo+KGRlc3RSb3dzICsgeClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93
cyArIHgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1Bl
clJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZh
Y2UpOwotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0g
ICAgICAgIHNyY1Jvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFk
ZHJlc3MoKSkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lm
IFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3Jj
LndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQu
dW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAg
ICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0Owot
ICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVp
Z2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0
ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChv
dXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQot
ICAgICAgICAgICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBS
R0JBLgotICAgICAgICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsK
LSAgICAgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwg
bWFwLCBrdkltYWdlTm9GbGFncyk7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lk
dGggKiA0KS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAg
IGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkKSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQo
KTsgKyt5KSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNh
ZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owot
ICAgICAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAg
ICAgICAgICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0g
KiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDJdID0gKGIgKiAyNTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07
Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1ti
YXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9
IGI7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93
c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAg
ICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0
KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5z
YWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsK
LSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0jZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19C
QUNLSU5HX1NUT1JFKQotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lk
IEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNl
LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewot
ICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVj
dC5oZWlnaHQoKSA+IDApOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNl
UmVjdC54KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9p
bnQueCgpKSArIHNvdXJjZVJlY3QueCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkg
Pj0gMCk7Ci0gICAgQVNTRVJUX1VOVVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUu
d2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNT
RVJUKG9yaWdpbngudW5zYWZlR2V0KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAg
IENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJj
ZVJlY3QubWF4WCgpKTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRo
KCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsK
LSAgICBDaGVja2VkPGludD4gZGVzdHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGlu
dD4gb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChD
aGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJU
KGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8
IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwot
ICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAg
ICAKLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkg
KyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6
ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWln
aHQoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAg
aWYgKHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAg
Y29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5
dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2Vs
ZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwot
ICAgICAgICBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRl
c3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVT
RShBQ0NFTEVSQVRFKQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVy
IHNyYzsKLSAgICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAg
ICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5y
b3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9j
YXN0PHVpbnQ4X3QqPihzcmNSb3dzKTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0
OwotICAgICAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAg
ICAgZGVzdC5oZWlnaHQgPSBkZXN0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93
Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93
czsKLQotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShz
cmMsIGRlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSNlbmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9
IHggKiA0OwotICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsg
M107Ci0jaWYgVVNFX0FSR0IzMgotICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlm
ZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAg
IGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAy
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jh
c2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNS
b3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0g
PSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYg
KHNvdXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQg
JiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9
IChzcmNSb3dzW2Jhc2V4XSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAg
ICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3Jj
Um93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyAr
IGJhc2V4KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsg
YmFzZXgpWzBdOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyAr
PSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotICAgICAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1
cmZhY2U6OkxvY2tlcjo6QWNjZXNzTW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVz
UGVyUm93ID0gc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBk
ZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VM
RVJBVEUpCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3
aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQo
KTsKLSAgICAgICAgc3JjLnJvd0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5k
YXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1
ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAg
ICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0
ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0g
ICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKQotICAgICAgICAgICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7
Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9t
IFJHQkEgdG8gQkdSQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAx
LCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNy
YywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAg
ICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIg
PSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93
c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAg
ICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICog
YWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCAr
IDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhd
ID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNl
eCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93
c1tiYXNleCArIDJdID0gYjsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAz
XSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3Jj
Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNl
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0Vf
Q0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNl
MjM3NGJhZDI0ZjA3ODdmZWYwNTQzYzFiNTFiOTEyMGYxMjMwZDQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIklt
YWdlLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNp
bmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQot
dHlwZWRlZiBzdHJ1Y3QgQ0dDb2xvclNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0
cnVjdCBDR0RhdGFQcm92aWRlciAqQ0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90
IENHQml0bWFwSW5mbzsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7
Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6
ZTsKLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0g
ICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2Fy
ZSBJbWFnZUJ1ZmZlcnMuCi0gICAgdm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5Q
dHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0
bWFwSW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0Owot
Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZv
ciBhY2NlbGVyYXRlZCBJbWFnZUJ1ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4gc3VyZmFjZTsKLSNlbmRpZgotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9v
bCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9u
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmlu
ZykgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmE0N2NmNWNkZTYzOTM5N2U3YjAxNTQ3ZmZkZGM4YjY4YmQ2NjA0ODkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIEhBVkUo
SU9TVVJGQUNFKQorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJ
T1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9z
cGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6Y2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgSW50U2l6ZSBtYXhTaXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAg
IGlmIChiYWNrZW5kU2l6ZS53aWR0aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGJhY2tlbmRTaXpl
LmhlaWdodCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IHJldHVybiBiYWNrZW5kU2l6ZTsKK30KKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gSW1h
Z2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGlj
c0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCk7CisKKyAgICBpZiAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRl
eHQpID09IGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlKQorICAgICAgICByZXR1cm4gQ0dJT1N1cmZh
Y2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOworICAgIAorICAgIHJldHVybiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29udGV4dCk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBiYWNrZW5k
U2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAg
aWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShiYWNrZW5kU2l6ZSwgYmFja2VuZFNp
emUsIGNnQ29sb3JTcGFjZSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2Ut
PmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250
ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBiYWNrZW5kU2l6ZSkpOwor
CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+
KG5ldyBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAoYXV0byBjZ0NvbG9yU3BhY2UgPSBjb250ZXh0Q29s
b3JTcGFjZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xv
clNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2Up
CisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZh
Y2UpKQoreworICAgIEFTU0VSVChtX3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dCgpOworfQor
CitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7
Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQoKQor
eworICAgIENHQ29udGV4dEZsdXNoKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisK
K3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25zdAor
eworICAgIHJldHVybiBtX3N1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKK30KKworc2l6ZV90IEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbWVtb3J5Q29zdCgpOworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQ6OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5i
eXRlc1BlclJvdygpOworfQorCitDb2xvckZvcm1hdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yRm9ybWF0
OjpCR1JBOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVybiBt
X3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElP
U3VyZmFjZTo6c2lua0ludG9JbWFnZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lkIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZs
b2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRv
TmF0aXZlSW1hZ2UoKSkKKyAgICAgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdl
LmdldCgpLCBtX2JhY2tlbmRTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25z
KTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9C
R1JBRGF0YSgpIGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNl
KTsKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6Okxv
Y2tlciBsb2NrKCptX3N1cmZhY2UpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6Omdl
dEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNz
KCkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1h
Z2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
KQoreworICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpM
b2NrZXI6OkFjY2Vzc01vZGU6OlJlYWRXcml0ZSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpw
dXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBs
b2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhl
IElPU3VyZmFjZSBjYWNoZWQgaW1hZ2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVj
ZXNzYXJ5LgorICAgIGNvbnRleHQoKS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZjMGYwNDNmMDU1
YTc3ZGNlZjY2M2VlNGZjN2JmNjViOTZmNjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
CkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUg
IklPU3VyZmFjZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVk
ZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNP
UkVfRVhQT1JUIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZl
ckNHQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlQmFja2Vu
ZFNpemUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KTsKKworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBDR0NvbG9yU3BhY2VSZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNvc3Qo
KSBjb25zdCBvdmVycmlkZTsKKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qg
b3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0
b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUlt
YWdlUHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhd0Nv
bnN1bWluZyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJp
ZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9p
ZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3Qg
SW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQ
b2ludCkgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2lj
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0
cjxJT1N1cmZhY2U+JiYpOworCisgICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHVuc2lnbmVk
IGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENv
bG9yRm9ybWF0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiBtX3N1cmZhY2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKaW5kZXggMjgyMWVmODFkNzVkZmIwZmYw
NWE4NWJlNWM5ZmJjMjU4YjU2MmViMy4uMmFhODIzMzJkZTJkMTExYmRjZTFlMDgwNjM1OTBkY2Uy
MWI2YzNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UERGRG9jdW1lbnRJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFBERkRv
Y3VtZW50SW1hZ2U6OnVwZGF0ZUNhY2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdAogICAgIG1fY2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKytt
X2NhY2hpbmdDb3VudEZvclRlc3Rpbmc7CiAKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IG1f
Y2FjaGVkSW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIGRlY29kZWRTaXplQ2hhbmdl
ZChpbnRlcm5hbFNpemUudW5jbGFtcGVkQXJlYSgpICogNCk7CisgICAgSW50U2l6ZSBiYWNrZW5k
U2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CisgICAgZGVjb2RlZFNp
emVDaGFuZ2VkKGJhY2tlbmRTaXplLnVuY2xhbXBlZEFyZWEoKSAqIDQpOwogfQogCiBJbWFnZURy
YXdSZXN1bHQgUERGRG9jdW1lbnRJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYxNjBj
MDgxMDEwOTgyM2I0YjkwMzZkZGY2ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJkMTRm
ZGY0NTBmYzI4NTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9JT1N1cmZhY2UubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY29jb2EvSU9TdXJmYWNlLm1tCkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0V2lu
ZG93LmgiCiAjaW1wb3J0ICJJT1N1cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5o
IgotI2ltcG9ydCAiSW1hZ2VCdWZmZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNp
bXBvcnQgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGlj
c1NQSS5oPgpAQCAtMTEwLDEzICsxMDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9vbChz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9vbDo6
c2hhcmVkUG9vbCgpLmFkZFN1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBVU0Uo
SU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFj
ZT4gSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZlci0+
bV9kYXRhLnN1cmZhY2UpOwotfQotI2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlv
bnNGb3JCaXBsYW5hclN1cmZhY2UoSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1hdCwg
c2l6ZV90IGZpcnN0UGxhbmVCeXRlc1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRlc1Bl
clBpeGVsKQogewogICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVP
Ti5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZF
QmxlbmRORU9OLmgKaW5kZXggZmQ4ZTVlOGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0NmY1MDIxNDFj
OS4uYzk2ZTMzY2E1ZjYxMzFlNTJlMWU5ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRO
RU9OLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0
ZXJzL0ZFQmxlbmRORU9OLmgKQEAgLTExMSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogICAgIEZpbHRlckVmZmVjdCogaW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBVaW50OENs
YW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1
bHQtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICBy
ZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRl
YWU1NDNhMTE0OWUzZjJhZTQ5Mi4uMmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQy
NDM3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxh
eWxpc3RzL0Rpc3BsYXlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBtX2xpc3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQg
Y2xlYXIoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1v
dmVJdGVtc0Zyb21JbmRleChzaXplX3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxE
aXNwbGF5TGlzdD4gRGlzcGxheUxpc3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYpOwogCiB9IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0OwotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJh
d2luZ0NvbnRleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMjkyYjFjZTQ4ZmM0NGMxODE1Y2U3NzRjZTFiOTVj
NzM2NTUyZWJmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNw
bGF5TGlzdC5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJE
aXNwbGF5TGlzdFJlcGxheWVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdp
bmdDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplKQorICAgICAgICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBk
aXNwbGF5TGlzdENvbnRleHQpIHsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29y
ZGVyPihkaXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0
YXRlKCksIEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOwor
ICAgICAgICB9KQorICAgIHsKKyAgICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQo
KSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29u
dGV4dDsgIH0KKyAgICBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3Bs
YXlMaXN0OyB9CisgICAgY29uc3QgRGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNw
bGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKwor
ICAgIHZvaWQgc2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlz
dFJlcGxheSkKKyAgICB7CisgICAgICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFj
a3NEaXNwbGF5TGlzdFJlcGxheTsKKyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgp
OworICAgIH0KKworICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCkKKyAgICB7CisgICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBSZXBsYXllciByZXBsYXllcihkZXN0
Q29udGV4dCwgbV9kaXNwbGF5TGlzdCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KQorICAgICAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxh
eSh7IH0sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIERp
c3BsYXlMaXN0IG1fZGlzcGxheUxpc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0
PiBtX3JlcGxheURpc3BsYXlMaXN0OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxh
eSB7IGZhbHNlIH07Cit9OworCit9IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1h
dHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCmluZGV4IGU2MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5
NzUuLjk1MTgwMGVkYTkxNzQxMWM4OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9y
TWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhD
bGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0
aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEz
ICsyODYsMTUgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgICAgICByZXN1bHRJbWFnZS0+Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIs
IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAog
ICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6
ZSgpKTsKLSAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxB
cnJheSA9IHJlc3VsdEltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAm
cGl4ZWxBcnJheURpbWVuc2lvbnMpOwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGlt
YWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9h
dHMobV92YWx1ZXMpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsK
KyAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAK
KyAgICBWZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOwor
ICAgIAogICAgIHN3aXRjaCAobV90eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVf
VU5LTk9XTjoKICAgICAgICAgYnJlYWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9y
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAK
LSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwg
SW50UG9pbnQoKSk7CisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAK
IHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xv
ck1hdHJpeFR5cGUmIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBm
YTA0MTNjMDBkYTQzYWM1ZGY1NWU1ZTAxZjY5NDRhYjllZGE3NDgzLi45NzhjNTVhNjdiOGRlNzIw
ZTlmYTc5YmQ4Y2MzNGQ3NDUyOGEwMjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5j
cHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFy
cmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMu
aD4KICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgpAQCAtMTA4LDcgKzEwOCw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRF
ZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZVJl
c3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJh
eSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IGExOWVhMDUzNzU4MTlj
ZWNkYWMyNWQ1ZDk2M2Q1NDRkZDRkMWE5NjkuLjI2NTQ0MGY0Mzk0MmFmYTZhYTI5OGRhZjRlYzAy
ZWUzZDk1Y2VjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVk
ZSAiRkVDb21wb3NpdGVBcml0aG1ldGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4
Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNyArMjI5LDgg
QEAgdm9pZCBGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJF
ZmZlY3QqIGluMiA9IGlucHV0RWZmZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBP
U0lURV9PUEVSQVRPUl9BUklUSE1FVElDKSB7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBk
c3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAg
IGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5k
YXRhKCkgOiBudWxscHRyOwogICAgICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgICAg
ICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwCmluZGV4IDYyYzJmODMzNjUzNTg2
ODQ0ZDlmMzkwZWVhNWVkYzEwOGUzMGEzODguLmE2ZTNmNGJiYWEyNDQ5N2Y5MjYzNDY1Njk3NWZm
Yjg3ZGM3YWI5ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDb252b2x2ZU1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBA
QAogI2luY2x1ZGUgIkZFQ29udm9sdmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgot
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0
Zi9Xb3JrUXVldWUuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zNzEs
MTIgKzM3MSwxMyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWlu
dDhDbGFtcGVkQXJyYXkqIHJlc3VsdEltYWdlOworICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7
CiAgICAgaWYgKG1fcHJlc2VydmVBbHBoYSkKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2Ug
PSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdl
KQorICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5k
YXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgSW50UmVjdCBlZmZlY3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5w
dXRJbWFnZURhdGEoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpOwpAQCAtMzk1LDcgKzM5Niw3IEBA
IHZvaWQgRkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIFBh
aW50aW5nRGF0YSBwYWludGluZ0RhdGEgPSB7CiAgICAgICAgICpzcmNQaXhlbEFycmF5LAotICAg
ICAgICAqcmVzdWx0SW1hZ2UsCisgICAgICAgICpkc3RQaXhlbEFycmF5LAogICAgICAgICBwYWlu
dFNpemUud2lkdGgoKSwKICAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2Jp
YXMgKiAyNTUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCmluZGV4IDBlOTQ0ZGYwMGE5NWNj
MDZkMjZhYTQyZjE2OWVlNmE0NmY1YTI3ODIuLjUzNzM1NTA0NTNlNDk4NjJjMGU0MTZmMmRjYzI1
NmI0NzBjOTE5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50
OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTQsNyArOTQsOCBA
QCB2b2lkIEZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEFT
U0VSVChtX3hDaGFubmVsU2VsZWN0b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQo
bV95Q2hhbm5lbFNlbGVjdG9yICE9IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBVaW50OENsYW1w
ZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OworICAgIGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2Ut
PmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1
cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYx
OGU4ZmRkZDg0ZWNiLi4xMzk1YTJkYjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNjMzMxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJv
cFNoYWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRURyb3BTaGFkb3cuY3BwCkBAIC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lh
bkJsdXIuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYv
TWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtOTks
MTQgKzk5LDE1IEBAIHZvaWQgRkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQog
ICAgIFNoYWRvd0JsdXIgY29udGV4dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93
Q29sb3IpOwogCiAgICAgLy8gVE9ETzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZl
ciB3b3VsZCBhdm9pZCBjb3B5aW5nIHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dB
cmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBz
cmNQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hh
ZG93QXJlYSwgbnVsbHB0ciwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0pOwotICAgIGlmICghc3JjUGl4ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50
UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRh
ID0gcmVzdWx0SW1hZ2UtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBzaGFkb3dBcmVhKTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5k
YXRhKCksIHNoYWRvd0FyZWEuc2l6ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7
Ci0KLSAgICByZXN1bHRJbWFnZS0+cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93
QXJlYSwgSW50UG9pbnQoKSwgSW1hZ2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0
ZW0pOworICAgIGF1dG8qIHNyY1BpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBj
b250ZXh0U2hhZG93LmJsdXJMYXllckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VE
YXRhLT5zaXplKCksIDQgKiBpbWFnZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICBy
ZXN1bHRJbWFnZS0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIHNoYWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRD
b21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1
bHRDb250ZXh0LmZpbGxSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRS
ZWN0KCkuc2l6ZSgpKSwgbV9zaGFkb3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4
IDQ5YmE4NDE3M2MyZDFhOTk1NGU1NjEzOTBjZTAzYzI0YmM5MGM4MWIuLmQ3ZWQ5YjI0NDkwMTc4
ZmZiZmJlYjFjZDQyYmVhNWU4ZmYxNTllNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VM
RVJBVEUpCkBAIC01MjIsMTQgKzUyMywxNSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgw
KTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRQaXhlbEFycmF5ID0gY3JlYXRlUHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRQaXhlbEFycmF5KQorICAg
IGF1dG8qIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7Cisg
ICAgYXV0byogZHN0UGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEo
KSA6IG51bGxwdHI7CisgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAK
ICAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3Qg
ZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKnJl
c3VsdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVByZW11bHRp
cGxpZWRSZXN1bHQoKmRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIGlm
ICghbV9zdGRYICYmICFtX3N0ZFkpCiAgICAgICAgIHJldHVybjsKQEAgLTU0Myw3ICs1NDUsNyBA
QCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICgh
dG1wSW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KCpyZXN1
bHRQaXhlbEFycmF5LCAqdG1wSW1hZ2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNp
emUuaGVpZ2h0KCksIHBhaW50U2l6ZSk7CisgICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJh
eSwgKnRtcEltYWdlRGF0YSwga2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgp
LCBwYWludFNpemUpOwogfQogCiBJbnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVMaWdodGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IDBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUz
YzJlNzQyZDMuLjZkYjg3ZmQ1NDVhOGYxZGRhN2Q5YjU4OGEyNTQwNjU1YTU3OGZiMjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxp
Z2h0aW5nLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMu
aCIKICNpbmNsdWRlICJGRUxpZ2h0aW5nTkVPTi5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NDczLDcgKzQ3NCw4IEBAIHZvaWQgRkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
IHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENs
YW1wZWRBcnJheSogcmVzdXRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3Vs
dEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcmVzdXRQaXhlbEFycmF5KQogICAg
ICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcAppbmRleCAyNTE3ODFjYTVhYTUxZjc4MDI3
YWQ1MDhkZjlhYzYxMGM2Nzk0ZmE1Li5jYmQ0MjQxOTc2NTcwYTg3Mzk0NTIwMGE5MTNlMGU5ZTY1
OWFiNDI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTW9ycGhvbG9neS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0yMzQsNyArMjM0LDggQEAgdm9pZCBG
RU1vcnBob2xvZ3k6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0
KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVs
QXJyYXkgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1
bHRJbWFnZSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRz
dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRy
OwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5jcHAKaW5kZXggNmQ2MGNkZGViYjEwMmY1MmRjM2MyMWFlY2MyYTUwZGI0YmY3ODM0Yi4uZjE2
YjliMzFhNTU5ZDc0NjIxZmYyMzI0NGRhOTMyZGY0MzE2OGQ0OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNw
cApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXku
aD4KKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3Ry
ZWFtLmg+CkBAIC0zOTUsNyArMzk1LDggQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25X
b3JrZXIoRmlsbFJlZ2lvblBhcmFtZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVUdXJidWxl
bmNlOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBw
aXhlbEFycmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBy
ZXN1bHRJbWFnZSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byog
cGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7
CiAgICAgaWYgKCFwaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNw
cAppbmRleCA2ZTk4NmQ0ZWMyYTk3OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5hOWU4ZmNh
MmM1ZDFkY2JiNjY3YTViN2NjMGQ0Zjc3MDI0ODRmMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBA
IC0yNywxMCArMjcsMTAgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
Q0lubGluZXMuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5o
PgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNT
KQpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscygpCiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogaW1h
Z2VBcnJheSA9IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgdWludDhf
dCogcGl4ZWxEYXRhID0gaW1hZ2VBcnJheS0+ZGF0YSgpOwogICAgIGludCBwaXhlbEFycmF5TGVu
Z3RoID0gaW1hZ2VBcnJheS0+bGVuZ3RoKCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZp
bHRlckVmZmVjdDo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGltYWdlQnVmZmVyUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8
IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAg
ICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBm
aWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlz
dGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1f
cHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQt
PmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0yNzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3Qo
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKLSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0
ZUFycmF5KCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0
LCBJbnRQb2ludCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VC
dWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6
ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkLCAqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIApAQCAtNDM4LDUyICs0MzgsNTIg
QEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVk
QXJyYXkmIGRlc3RpbmF0aW9uLCBjb25zdAogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAg
ICAgCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJl
c3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRl
cnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0
aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIg
IiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRh
KCkpOwogCiAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8v
IFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBp
ZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJ
bnRSZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAg
ICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQ
b2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICgh
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVl
ZHNDbGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXpl
LmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYg
KCFtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQsICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNp
emUpOworICAgICAgICAgICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgaW5wdXRTaXplKTsKICAgICAgICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFn
ZUJ5dGVzKCptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCBy
ZWN0KTsKIH0KIAogdm9pZCBGaWx0ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVp
bnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAg
ICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgY29weVByZW11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwg
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZp
bHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCku
IEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwg
ICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUg
aW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAg
ICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5n
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXpl
KCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNp
emUgaW5wdXRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFT
U0VSVCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAg
ICAgICAgaW5wdXRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAg
ICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3Jl
YXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUo
aW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3B5
UHJlbXVsdGlwbHlpbmdBbHBoYSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRp
cGx5aW5nQWxwaGEoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVs
dGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5h
dGlvbiwgcmVjdCk7CisgICAgY29weUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRl
ckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQpAQCAtNDk3LDEzICs0OTcsMTAgQEAg
SW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAg
ICAgRmxvYXRTaXplIGNsYW1wZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShjbGFtcGVkU2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2Zp
bHRlci5maWx0ZXJTY2FsZSgpLCBtX3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFn
ZUJ1ZmZlclJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVy
cywgIkZpbHRlckVmZmVjdCAlcyAlcCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZp
bHRlck5hbWUoKSwgdGhpcyk7CiAKQEAgLTUxNSwxMSArNTEyLDExIEBAIFVpbnQ4Q2xhbXBlZEFy
cmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJ
bnRTaXplIHJlc3VsdFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VS
VCghSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1
bHRTaXplLnNjYWxlKG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgo
cmVzdWx0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRBcnJheSog
RmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRh
KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAg
TE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdl
UmVzdWx0IiwgZmlsdGVyTmFtZSgpLCB0aGlzKTsKIApAQCAtNTMxLDcgKzUyOCw3IEBAIFVpbnQ4
Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsK
ICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7
CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmlu
aXRpYWxpemVkKChyZXN1bHRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICBtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwog
ICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZm
ZWN0LmgKaW5kZXggYzk2NmZjYzIxNjM5ZGU1YTQwNGE3YzYyZjNlYTJiNmU5MzMyZmU0Mi4uYWY0
NjNlZmViMDEzNmFjNjE4ZTI5OWNkMDhkNDQ4MzhkMGVmNTY1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBA
IC00MCw2ICs0MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNz
IEZpbHRlckVmZmVjdDsKIGNsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOwogCiB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwog
CkBAIC0xNTMsOCArMTU0LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciog
ZmlsdGVyTmFtZSgpIGNvbnN0ID0gMDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1
ZmZlclJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCgpOwotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBJbWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7CisgICAgSW1hZ2VEYXRhKiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
IAogICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29y
cmVjdGx5IG9uIHZhbGlkIFJHQkEgdmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1
XSBhbmQgZWFjaCBjb2xvciBjb21wb25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTE4Miw4ICsxODMs
OCBAQCBwcml2YXRlOgogICAgIEZpbHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0g
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsK
KyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJl
ZlB0cjxJbWFnZURhdGE+IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50UmVj
dCBtX2Fic29sdXRlUGFpbnRSZWN0OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRl
eHRHTE9wZW5HTENvbW1vbi5jcHAKaW5kZXggMWUwMzVhN2VlZjI4MDNjZjY1OTkyZDA0OWM5Zjhi
NTU2YmNlY2FlYy4uOTE4ZTE4YWY1ZTEyZmY5MDQ5NDgzYTc4ZWYxYmE4MmQ3MzU4YzJhNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNz
Q29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCkBAIC0xODgs
NyArMTg4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoSW1hZ2VCdWZmZXIqIGltYWdlQnUKICAgICAgICAgfQogICAgIH0KIAot
ICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBt
X2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVy
LT5jb250ZXh0KCkpOworICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUo
KSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNF
KE9QRU5HTF9FUykKICAgICBwcmVzZW50UmVuZGVyYnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0
YURpcmVjdDJELmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYxYjM5NDE1ZWJi
MjFiZTZjZWZhYzU5MDZmN2Q0MjUxYjgzNTkzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQ0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBV
U0UoRElSRUNUMkQpCi0KLSNpbmNsdWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiRGlyZWN0
MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJI
V25kREMuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFy
cmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5
Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5j
bHVkZSA8d3RmL1VuaXF1ZUFycmF5Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gU3dp
enpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKLXRl
bXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lkIHN3aXp6
bGVBbmRQcmVtdWx0aXBseShjb25zdCB1aW50OF90KiBzcmNSb3dzLCB1bnNpZ25lZCByb3dDb3Vu
dCwgdW5zaWduZWQgY29sQ291bnQsIHVuc2lnbmVkIHNyY1N0cmlkZSwgdW5zaWduZWQgZGVzdFN0
cmlkZSwgdWludDhfdCogZGVzdFJvd3MpCi17Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8
IHJvd0NvdW50OyArK3kpIHsKLSAgICAgICAgLy8gU291cmNlIGRhdGEgbWF5IGJlIHBvd2VyLW9m
LXR3byBzaXplZCwgc28gd2UgbmVlZCB0byBvbmx5IGNvcHkgdGhlIGJpdHMgdGhhdAotICAgICAg
ICAvLyBjb3JyZXNwb25kIHRvIHRoZSByZWN0YW5nbGUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4K
LSAgICAgICAgY29uc3QgdWludDMyX3QqIHNyY1JvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
dWludDMyX3QqPihzcmNSb3dzICsgc3JjU3RyaWRlICogeSk7Ci0gICAgICAgIHVpbnQ4X3QqIGRl
c3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5OwotICAgICAgICBmb3IgKHVuc2lnbmVk
IHggPSAwOyB4IDwgY29sQ291bnQ7ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZVBv
c2l0aW9uID0geCAqIDQ7Ci0gICAgICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUGl4ZWwgPSBz
cmNSb3cgKyB4OwotCi0gICAgICAgICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCAoUClS
R0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIFBCR1JBIHRvIGJl
IGNvbXBhdGlibGUuCi0gICAgICAgICAgICB1aW50MzJfdCBhbHBoYSA9ICgqc3JjUGl4ZWwgJiAw
eEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgICAgIHVpbnQzMl90IHJlZCA9ICgqc3JjUGl4ZWwg
JiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgICAgIHVpbnQzMl90IGdyZWVuID0gKCpzcmNQ
aXhlbCAmIDB4MDAwMEZGMDApID4+IDg7Ci0gICAgICAgICAgICB1aW50MzJfdCBibHVlID0gKCpz
cmNQaXhlbCAmIDB4MDAwMDAwRkYpOwotCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJl
ZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVu
ICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8g
YWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBk
ZXN0Um93W2J5dGVQb3NpdGlvbl0gICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJvd1tieXRl
UG9zaXRpb24gKyAxXSA9IGdyZWVuOwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24g
KyAyXSA9IGJsdWU7Ci0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDNdID0gYWxw
aGE7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGNvcHlSZWN0RnJvbVNvdXJj
ZVRvRGVzdChjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VC
dWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RCdWZm
ZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0aW9u
KQotewotICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJbnRS
ZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5zaXplKCkpKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFJbnRSZWN0KHsgfSwgc291cmNlQnVmZmVyU2l6ZSkuY29u
dGFpbnMoc291cmNlUmVjdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVk
IHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQg
ZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdW5zaWduZWQg
c3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7Ci0gICAgdW5zaWdu
ZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwotCi0gICAgY29u
c3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJlY3QubG9j
YXRpb24oKS55KCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAq
IGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclJv
dyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8
IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90KiBzcmNS
b3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jvd09mZnNldDsKLSAgICAgICAgdWlu
dDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHkgKyBkZXN0Um93T2Zmc2V0
OwotICAgICAgICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBieXRlc1BlclJvdyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUg
YWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzaXJlZEZvcm1hdD4KLWJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVs
dGlwbGljYXRpb24oY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgc291
cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0
QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQb3Np
dGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29udGFpbnMo
SW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZlclNpemUp
LmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNp
Z25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHVuc2ln
bmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAgIHVuc2ln
bmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OwotICAgIHVu
c2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKLQotICAg
IGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0
LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRlc3RTdHJp
ZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQ
ZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQgeSA9IDA7
IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCog
c3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0gICAgICAg
IHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVzdFJvd09m
ZnNldDsKLQotICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IHNvdXJjZVJlY3Qud2lkdGgo
KTsgKyt4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB4ICogNDsKLQotICAgICAgICAg
ICAgdW5zaWduZWQgcmVkID0gc3JjUm93W3hdOwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4g
PSBzcmNSb3dbeCArIDFdOwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd1t4ICsg
Ml07Ci0gICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd1t4ICsgM107Ci0KLSAgICAg
ICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11
bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAg
ICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEg
JiYgYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1aW50MzJfdCogcGl4ZWwg
PSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvdykgKyB4OwotICAgICAgICAgICAg
KnBpeGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUJ1
ZmZlckRhdGE6OmNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiYgcmVzdWx0KSBjb25zdAotewotICAgIGF1dG8gcmF3Qml0bWFwU2l6
ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOwotCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBiYWNraW5n
U3RvcmVTaXplLndpZHRoKCkgLyByYXdCaXRtYXBTaXplLndpZHRoOwotCi0gICAgSW50UmVjdCBz
Y2FsZWRSZWN0ID0gcmVjdDsKLSAgICBzY2FsZWRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKLQot
ICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBiYWNraW5nU3RvcmVTaXplKS5jb250YWlucyhz
Y2FsZWRSZWN0KSkgewotICAgICAgICAvLyBSZXF1ZXN0ZWQgcmVjdCBpcyBvdXRzaWRlIHRoZSBi
dWZmZXIuIFJldHVybiB6ZXJvLWZpbGxlZCBidWZmZXIuCi0gICAgICAgIHJlc3VsdC0+emVyb0Zp
bGwoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvcHlSZWN0
RnJvbVNvdXJjZVRvRGVzdChzY2FsZWRSZWN0LCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEo
KSwgcmVjdC5zaXplKCksIHJlc3VsdC0+ZGF0YSgpLCBJbnRQb2ludCgpKTsKLX0KLQotYm9vbCBJ
bWFnZUJ1ZmZlckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAotewotICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNpemUgJiYgIWRhdGEuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8gbnVtQnl0ZXMgPSBzaXplLmFy
ZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJhY2tpbmdTdG9yZVNpemUgPSBzaXpl
OwotICAgIGRhdGEucmVzaXplVG9GaXQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIHJldHVy
biBkYXRhLmNhcGFjaXR5KCkgPT0gbnVtQnl0ZXMudW5zYWZlR2V0KCk7Ci19Ci0KLS8vIFN3aXp6
bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1w
bGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQ+Ci12b2lkIGluUGxhY2VT
d2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCi17Ci0gICAgc2l6
ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotICAgIGF1dG8qIHBpeGVsRGF0YSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSk7Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgewotICAgICAgICB1aW50MzJfdCBwaXhlbCA9ICpw
aXhlbERhdGE7Ci0gICAgICAgIHNpemVfdCBieXRlUG9zaXRpb24gPSBpICogNDsKLQotICAgICAg
ICB1aW50MzJfdCBhbHBoYSA9IChwaXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAgICB1
aW50MzJfdCByZWQgPSAocGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgdWludDMy
X3QgZ3JlZW4gPSAocGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICB1aW50MzJfdCBi
bHVlID0gKHBpeGVsICYgMHgwMDAwMDBGRik7Ci0KLSAgICAgICAgLy8gKFApUkdCQSAtPiBQQkdS
QQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVu
cHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAg
ICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAg
ICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
Ymx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0KLSAgICAgICAgKnBpeGVsRGF0YSA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwg
Z3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19Ci0KLS8v
IE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVt
cGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLXZvaWQgaW5QbGFj
ZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRl
Q291bnQpCi17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKLSAgICAgICAgdW5zaWdu
ZWQgeCA9IHBpeGVsQ291bnQgKiA0OwotCi0gICAgICAgIHVuc2lnbmVkIHJlZCA9IGJ5dGVEYXRh
W3hdOwotICAgICAgICB1bnNpZ25lZCBncmVlbiA9IGJ5dGVEYXRhW3ggKyAxXTsKLSAgICAgICAg
dW5zaWduZWQgYmx1ZSA9IGJ5dGVEYXRhW3ggKyAyXTsKLSAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBieXRlRGF0YVt4ICsgM107Ci0KLSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhh
ICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAy
NTU7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7
Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAg
ICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGFscGhhICYmIGFs
cGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwot
ICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAg
ICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0KLSAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGJ5dGVEYXRhKSArIGk7Ci0gICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8
IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAq
LykgY29uc3QKLXsKLSAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJmbG93
PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIGlmICghcmVzdWx0
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghYml0bWFwKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNp
cmVkRm9ybWF0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJhd0JpdG1h
cFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUoY2xhbXBU
bzxpbnQ+KHJhd0JpdG1hcFNpemUud2lkdGgpLCBjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS5o
ZWlnaHQpKTsKLQotICAgIGlmIChyZWN0LmxvY2F0aW9uKCkgPT0gSW50UG9pbnQoKSAmJiByZWN0
LnNpemUoKSA9PSBiaXRtYXBTaXplKSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUJ5dGVz
LnVuc2FmZUdldCgpID09IGRhdGEuc2l6ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE9u
bHkgd2FudCBwYXJ0IG9mIHRoZSBiaXRtYXAuCi0gICAgICAgIGlmICghY29weVJlY3RGcm9tRGF0
YShyZWN0LCByZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0g
ICAgaWYgKGJ5dGVGb3JtYXQgIT0gZGVzaXJlZEZvcm1hdCkgewotICAgICAgICAvLyBJbi1tZW1v
cnkgZGF0YSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIGZvcm1hdC4gTmVlZCB0byBzd2l6emxlIHRo
ZSByZXN1bHRzLgotICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVs
dGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihyZXN1
bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRh
RnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkg
Y29uc3QKLXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpC
dWZmZXJPdXRPZlN5bmMpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgSW50U2l6ZSBwaXhl
bFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgYXV0byBudW1CeXRlcyA9IHBp
eGVsU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFz
T3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0LT5lbmRE
cmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgQVNTRVJUKCEhZDJkRGV2
aWNlQ29udGV4dCk7Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gcGl4ZWxTaXplLndp
ZHRoKCkgKiA0OwotCi0gICAgLy8gQ29weSBHUFUgZGF0YSBmcm9tIHRoZSBJRDJEMUJpdG1hcCB0
byBhIENQVS1iYWNrZWQgSUQyRDFCaXRtYXAxCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1
Qml0bWFwOwotICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0g
RDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQy
RDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsK
LSAgICBIUkVTVUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHBpeGVsU2l6
ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0
bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVDVF9VIGRh
dGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgcGl4ZWxTaXplLndpZHRoKCksIHBpeGVsU2l6ZS5o
ZWlnaHQoKSk7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3Ms
IGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsKLSAg
ICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
aWYgKCFtYXBwZWREYXRhLmJpdHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgh
ZW5zdXJlQmFja2luZ1N0b3JlKHBpeGVsU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dp
enpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgIGlmIChkZXNp
cmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAg
ICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0
aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndp
ZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7
Ci0gICAgZWxzZQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWln
aHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5E
YXRhLCBkYXRhLmRhdGEoKSk7Ci0KLSAgICBieXRlRm9ybWF0ID0gZGVzaXJlZEZvcm1hdDsKLQot
ICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci0KLSAgICBo
ciA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIElt
YWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBB
bHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNl
U2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2lu
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+
IDApOwotICAgIEFTU0VSVChzb3VyY2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBDaGVja2Vk
PGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9
IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgZGVz
dHggKj0gcmVzb2x1dGlvblNjYWxlOwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAw
KTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFT
U0VSVChvcmlnaW54LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2Fm
ZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBl
bmR4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBz
aXplLndpZHRoKCkpOwotCi0gICAgQ2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0
aCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNr
ZWQ8aW50PiBvcmlnaW55ID0gc291cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5
ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBk
ZXN0eSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49
IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAg
IEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVu
c2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR5
ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAg
ICBlbmR5ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8
PSBzaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0
LmhlaWdodCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLQotICAg
IGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBB
U1NFUlRfRU5BQkxFRAotICAgIGlmIChiaXRtYXApIHsKLSAgICAgICAgYXV0byBwaXhlbFNpemUg
PSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRo
ID49IHNvdXJjZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGgg
Pj0gc2l6ZS53aWR0aCgpKTsKLSAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc291
cmNlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNp
emUuaGVpZ2h0KCkpOwotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKCFlbnN1cmVCYWNraW5nU3Rv
cmUoc2l6ZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzb3VyY2VTaXplID09IHNpemUp
IHsKLSAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVu
Z3RoKCkpOwotICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5dGVGb3JtYXQpOwotICAgICAg
ICBpZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VSZWN0LCBzb3VyY2UsIHNvdXJj
ZUZvcm1hdCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYml0bWFwQnVmZmVy
U3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKLX0KLQotYm9vbCBJbWFn
ZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uIHNvdXJjZUZvcm1hdCkKLXsKLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+
R2V0UGl4ZWxTaXplKCk7Ci0KLSAgICBJbnRSZWN0IHNvdXJjZVJlY3RUb0NvcHkgPSBzb3VyY2VS
ZWN0OwotICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUpLmNvbnRhaW5zKHNv
dXJjZVJlY3QpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RCdWZmZXJQ
b3NpdGlvbiA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKLQotICAgIGlmIChzb3VyY2VGb3JtYXQg
PT0gYnl0ZUZvcm1hdCkKLSAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChz
b3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3Jl
U2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICBpZiAoYnl0ZUZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAg
IHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHNvdXJjZVJlY3QsIHNvdXJj
ZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEo
KSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VU
b0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci19Ci0K
LXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKQotewotICAg
IGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3lu
YyB8fCBkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwaXhlbFNp
emUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGgg
Pj0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdo
dCA+PSBiYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8dW5zaWduZWQs
IFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IHBpeGVsU2l6ZS53aWR0aCAqIHBpeGVsU2l6ZS5o
ZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIFNvZnR3YXJlIGdlbmVyYXRlZCBiaXRtYXAgZGF0YSBpcyBpbiBSR0JB
LiBXZSBuZWVkIHRvIHN3aXp6bGUgdG8gcHJlbXVsdGlwbGllZCBCR1JBIHRvIGJlIGNvbXBhdGli
bGUKLSAgICAvLyB3aXRoIHRoZSBIV05EL0hEQyByZW5kZXIgYmFja2luZyB3ZSB1c2UuCi0gICAg
aWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
KQotICAgICAgICBpblBsYWNlU3dpenpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFJHQkEgLT4gUEJHUkEKLSAg
ICBlbHNlCi0gICAgICAgIGluUGxhY2VTd2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBSR0JBIC0+IFBCR1JB
Ci0KLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgp
ICogNDsKLQotICAgIEhSRVNVTFQgaHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KG51bGxwdHIs
IGRhdGEuZGF0YSgpLCBieXRlc1BlclJvd0luRGF0YSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRCho
cikpOwotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsK
LX0KLQotQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNvbXBhdGlibGVCaXRt
YXAoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKLXsKLSAgICBsb2FkRGF0YVRvQml0
bWFwSWZOZWVkZWQoKTsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4g
Yml0bWFwOwotCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVu
ZGVyVGFyZ2V0KSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0
bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOwotICAgICAgICBpZiAoYml0bWFwVGFyZ2V0
KSB7Ci0gICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7Ci0gICAg
ICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0
bWFwKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBiaXRtYXApCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBiaXRtYXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBX
ZSBjYW4ndCBkcmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5
LgotICAgICAgICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOwotICAg
ICAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0
bWFwLT5HZXRQaXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGll
ZEJpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0
bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzaXplID0g
Yml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53
aWR0aCk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMg
PSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVy
Zmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gQ29weSB0aGUgYml0
cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgotICAgIC8v
IFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFu
IGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0K
LSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VEZXZpY2VDb250
ZXh0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+
IHNvdXJjZUNQVUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9w
ZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVf
UkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZv
cm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0
bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LnVuc2FmZUdl
dCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFzb3VyY2VDUFVC
aXRtYXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRt
YXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVsbHB0cik7Ci0gICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEQyRDFf
TUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+
TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOwotICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQy
RDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVuZGVyVGFy
Z2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7Ci0gICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFw
OwotICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0
UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRj
aCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOwotICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9
IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0K
LSAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKLQotICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFw
OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJE
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5NGQ4YTQ4MjJmMTI1
ZjQwNmYzMDA3NzQ3ZmY5MzU4YzE1NmEzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEYXRhRGlyZWN0MkQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiSW1hZ2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLWlu
dGVyZmFjZSBJRDJEMVJlbmRlclRhcmdldDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotc3Ry
dWN0IEltYWdlQnVmZmVyRGF0YSB7Ci0gICAgbXV0YWJsZSBJbnRTaXplIGJhY2tpbmdTdG9yZVNp
emU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93Owot
Ci0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIG11dGFibGUgVmVj
dG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgbXV0YWJsZSBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ5
dGVGb3JtYXQgeyBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgfTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ+IHBsYXRmb3JtQ29udGV4
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotCi0gICAgZW51bSBjbGFzcyBCaXRtYXBCdWZmZXJT
eW5jIHsgSW5TeW5jLCBCaXRtYXBPdXRPZlN5bmMsIEJ1ZmZlck91dE9mU3luYyB9OwotICAgIG11
dGFibGUgQml0bWFwQnVmZmVyU3luYyBiaXRtYXBCdWZmZXJTeW5jIHsgQml0bWFwQnVmZmVyU3lu
Yzo6QnVmZmVyT3V0T2ZTeW5jIH07Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNp
emUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkgY29u
c3Q7Ci0gICAgdm9pZCBwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VT
aXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50
LCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUpOwotCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElE
MkQxUmVuZGVyVGFyZ2V0Kik7Ci0KLSAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJ
bnRTaXplJikgY29uc3Q7Ci0gICAgdm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAg
ICBib29sIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzaXJlZEZvcm1hdCkgY29uc3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNvbnN0IElu
dFJlY3QmLCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JikgY29uc3Q7Ci0gICAgYm9vbCBjb3B5
UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7Ci0gICAgdm9pZCBtYXJrQnVmZmVyT3V0T2ZT
eW5jKCkgeyBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZT
eW5jOyB9Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNDIxOGYxZWY0ZjU3OGNlMDdmOTRi
N2E4ZWNiYjgzMGE1MjY3ZjkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzUxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJl
Y3QyRFV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0j
aW5jbHVkZSA8ZDJkMV8xLmg+Ci0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHdpbmNvZGVj
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0g
ICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAg
IEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShz
aXplLCBjb250ZXh0KTsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwg
Q29sb3JTcGFjZTo6U1JHQiwgcmVuZGVyaW5nTW9kZSwgbnVsbHB0ciwgJmNvbnRleHQsIHN1Y2Nl
c3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3Mg
Y29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVkU2l6
ZS53aWR0aCgpIC8gc2l6ZS53aWR0aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5oZWln
aHQoKSkpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSAvKmNvbG9yU3BhY2UqLywgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0
V2luZG93KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBib29sJiBzdWNj
ZXNzKQotICAgIDogbV9sb2dpY2FsU2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUo
cmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSBy
ZXR1cm4gbWVhbiBmYWlsdXJlLgotICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gc3RkOjpjZWlsKHJl
c29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0g
c3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAg
aWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFz
SW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxl
ZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9z
aXplOwotCi0gICAgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8
fCBtX3NpemUuaGVpZ2h0KCkgPD0gMCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJldmVu
dCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgo
KSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNr
ZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWln
aHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFy
Z2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsK
LSAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRl
eHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQot
ICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJn
ZXQoKTsKLQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBS
ZW5kZXJUYXJnZXRPZlNpemUobV9sb2dpY2FsU2l6ZSwgcmVuZGVyVGFyZ2V0LCBtX3Jlc29sdXRp
b25TY2FsZSk7Ci0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBIUkVTVUxUIGhyID0gYml0bWFwQ29udGV4dC0+R2V0Qml0bWFwKCZtX2RhdGEuYml0bWFwKTsK
LSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS5w
bGF0Zm9ybUNvbnRleHQgPSBtYWtlVW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRt
YXBDb250ZXh0LmdldCgpLCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0
bWFwSWZOZWVkZWQoKTsKLSAgICB9LCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5tYXJrQnVm
ZmVyT3V0T2ZTeW5jKCk7Ci0gICAgfSk7Ci0gICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVl
PEdyYXBoaWNzQ29udGV4dD4obV9kYXRhLnBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3ND
b250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLQotICAgIHN1
Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNw
YWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29s
JiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBpbWFn
ZUNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIG51bGxwdHIsIG51bGxwdHIsIHN1Y2Nlc3MpCi17
Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUdyYXBoaWNz
Q29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9k
YXRhLmNvbnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0
Ci17Ci0gICAgY29udGV4dCgpLmZsdXNoKCk7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SUQyRDFCaXRt
YXA+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
KiBiaXRtYXBUYXJnZXQsIElEMkQxQml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRz
KQotewotICAgIEZsb2F0U2l6ZSBpbWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShp
bWFnZSkgOiBGbG9hdFNpemUoKTsKLQotICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6
ZV90PihpbWFnZVNpemUud2lkdGgoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lk
dGgoKSkgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRp
Y19jYXN0PHNpemVfdD4oYm91bmRzLmhlaWdodCgpKSkpIHsKLSAgICAgICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBjcm9wcGVkQml0bWFwID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJn
ZXQsIGJvdW5kcyk7Ci0gICAgICAgIGlmIChjcm9wcGVkQml0bWFwKSB7Ci0gICAgICAgICAgICBh
dXRvIHNvdXJjZVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRz
LmhlaWdodCgpKTsKLSAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5
RnJvbUJpdG1hcChudWxscHRyLCBpbWFnZSwgJnNvdXJjZVJlY3QpOwotICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChocikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8
SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJ
bnRTaXplIGludGVybmFsU2l6ZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5n
U3RvcmVTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVz
ZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNl
cnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2Ug
PSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgp
LCBpbnRlcm5hbFNpemUpOwotICAgIGVsc2UgewotICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBp
bXBsZW1lbnQgc2NhbGVkIHZlcnNpb24KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9
Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVy
biBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQ
cmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIENPTVB0
cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBp
bWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAg
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgYXV0
byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0
Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICByZXR1cm4gY3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBp
bnRlcm5hbFNpemUoKSwgbG9naWNhbFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1f
cmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+
IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
aW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0g
ICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0g
ICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAg
IEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0
b3JlU2l6ZTsKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNv
bHV0aW9uU2NhbGU7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1h
cFRhcmdldDsKLSAgICBIUkVTVUxUIGhyID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5wbGF0Zm9y
bUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQp
OwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJn
ZXQuZ2V0KCksIHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRl
cm5hbFNpemUsIGxvZ2ljYWxTaXplLCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUs
IHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcikKLXsKLSAgICAvLyBGSVhNRTogU2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgb24taGFy
ZHdhcmUgaW1hZ2UuCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9u
dENvcHlCYWNraW5nU3RvcmUpOwotfQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVy
Ojpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17
Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAg
SFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkt
PlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdl
OwotICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBBU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0KLSAgICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBl
dmVuIHdoZW4gYXNraW5nIHRvIGNvcHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFp
bHVyZXMuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1fZGF0
YS5kYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5n
U3RvcmU7Ci0KLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0g
Q2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3Zl
cmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3Ip
IHsKLSAgICAgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBEMkQxX1JFQ1Rf
VSBiYWNraW5nU3RvcmVEaW1lbnN0aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUpOwotICAgICAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNr
aW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9k
YXRhLnN1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsK
LX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRl
c3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKLSAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IG1fZGF0YS5jb21w
YXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KSk7Ci0KLSAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShj
b21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGli
bGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9w
dGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRl
eHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNj
YWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8
fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAo
UmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3
aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAg
ICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmlu
ZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1h
Z2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0g
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zv
cm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2Nl
bGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0
IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29y
ZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1l
bnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNp
emUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQo
KS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAg
IEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9n
aWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxB
cnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRl
cm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNv
dXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUm
IHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBk
ZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAo
Y29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgp
OwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRT
aXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lz
dGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJl
Y3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3Vy
Y2UsIGJ1ZmZlckZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVz
dFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCks
IDEpOwotfQotCi1TdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBP
cHRpb25hbDxkb3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5KSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotU3RyaW5nIEltYWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNv
dXJjZSwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSkK
LXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjcwYWJlZGYwYTYzNTBmZDU1OTQ4ZDQ4MWFiNzg5NWY2MjBiNDhjMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkRpcmVj
dDJEVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAi
SW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKKyNp
bmNsdWRlIDxkMmQxXzEuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d2luY29kZWMu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJ
bmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRF
RF9JTVBMKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50
U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25T
Y2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvKiBwbGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFy
Z2V0Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkgOiBudWxscHRyOworICAgIGF1dG8qIHJlbmRl
clRhcmdldCA9IHBsYXRmb3JtQ29udGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0
KCkgOiBudWxscHRyOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJlbmRlclRh
cmdldCA9IEdyYXBoaWNzQ29udGV4dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOworCisgICAgYXV0
byBiaXRtYXBDb250ZXh0ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6
ZShzaXplLCByZW5kZXJUYXJnZXQsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKCFiaXRtYXBD
b250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXA7Cisg
ICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQtPkdldEJpdG1hcCgmYml0bWFwKTsKKyAgICBp
ZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcGxhdGZvcm1D
b250ZXh0ID0gbWFrZVVuaXF1ZTxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4
dC5nZXQoKSwgW3RoaXNdKCkgeworICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1hcElmTmVl
ZGVkKCk7CisgICAgfSwgW3RoaXNdKCkgeworICAgICAgICBtX2RhdGEubWFya0J1ZmZlck91dE9m
U3luYygpOworICAgIH0pOworCisgICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0Nv
bnRleHQ+KHBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5k
ZXJpbmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZD4obmV3IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKHNpemUsIGJh
Y2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUocGxhdGZvcm1D
b250ZXh0KSwgV1RGTW92ZShjb250ZXh0KSwgV1RGTW92ZShiaXRtYXApKSk7Cit9CisKK3N0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEPiYmIHBsYXRmb3JtQ29udGV4dCwgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4mJiBjb250ZXh0LCBOYXRpdmVJbWFnZVB0ciYmIGJpdG1hcCkKKyAg
ICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShw
bGF0Zm9ybUNvbnRleHQpKQorICAgICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCisgICAg
LCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAq
bV9jb250ZXh0OworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENv
bnRleHQoKQoreworICAgIGNvbnRleHQoKS5mbHVzaCgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJ
bWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRh
cmdldD4gYml0bWFwVGFyZ2V0OworICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1D
b250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsK
KyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
Q09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKKyAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0
bWFwKCZpbWFnZSk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgLy8gRklYTUU6
IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJhY2tpbmcg
c3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgorICAgIGlmIChjb3B5QmVoYXZpb3IgPT0g
Q29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIGNvcHlC
ZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJl
Y29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93
PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7
CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50
KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKKyAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVt
b3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7CisK
KyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBOYXRpdmVJbWFnZVB0ciBj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0
bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKK3sK
KyAgICBGbG9hdFNpemUgaW1hZ2VTaXplID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUoaW1hZ2Up
IDogRmxvYXRTaXplKCk7CisKKyAgICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4o
aW1hZ2VTaXplLndpZHRoKCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkp
IHx8IHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQoKSkpKSB7CisgICAgICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gY3JvcHBlZEJpdG1hcCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBi
b3VuZHMpOworICAgICAgICBpZiAoY3JvcHBlZEJpdG1hcCkgeworICAgICAgICAgICAgYXV0byBz
b3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWln
aHQoKSk7CisgICAgICAgICAgICBIUkVTVUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29weUZyb21C
aXRtYXAobnVsbHB0ciwgaW1hZ2UsICZzb3VyY2VSZWN0KTsKKyAgICAgICAgICAgIGlmIChTVUND
RUVERUQoaHIpKQorICAgICAgICAgICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdl
PiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6
ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBp
bWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2Uu
Z2V0KCksIGludGVybmFsU2l6ZSk7CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGltcGxlbWVudCBzY2FsZWQgdmVyc2lvbgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
IGNvbnN0Cit7CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlv
blNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6
WWVzKQorICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAg
IGVsc2UKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpOworCisgICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICByZXR1
cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdU
Rk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZl
UmVzb2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OnNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikK
K3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAg
ICBIUkVTVUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KS0+UXVlcnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRl
Qml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCksIFdURk1v
dmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVz
b2x1dGlvbik7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
Ojpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCit7Cisg
ICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisKKyAgICBpZiAoIXJlbmRlclRhcmdldCkK
KyAgICAgICAgcmV0dXJuIGJpdG1hcDsKKworICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC0+cmVu
ZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7CisgICAgICAgIENPTVB0cjxJRDJEMUJpdG1h
cFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOworICAgICAg
ICBpZiAoYml0bWFwVGFyZ2V0KSB7CisgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJh
Y2tpbmdCaXRtYXA7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0
Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0Jp
dG1hcCAhPSBtX2JpdG1hcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpdG1hcDsKKwor
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IGRyYXcgYW4gSUQyRDFCaXRtYXAgdG8gaXRzZWxm
LiBNdXN0IHJldHVybiBhIGNvcHkuCisgICAgICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFw
PiBjb3BpZWRCaXRtYXA7CisgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZW5kZXJUYXJn
ZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBEaXJlY3QyRDo6Yml0bWFw
UHJvcGVydGllcygpLCAmY29waWVkQml0bWFwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChjb3BpZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFw
LmdldCgpLCBudWxscHRyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29waWVk
Qml0bWFwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIGF1dG8gc2l6ZSA9IG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAgICBBU1NF
UlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBS
ZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0Owor
ICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRo
ZSBvdXRwdXQgdGFyZ2V0LgorICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2lu
ZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KKyAg
ICBjb250ZXh0LT5lbmREcmF3KCk7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBz
b3VyY2VEZXZpY2VDb250ZXh0ID0gbV9wbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsK
KyAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291cmNlQ1BVQml0bWFwOworICAgIEQyRDFfQklU
TUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVz
MShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5O
T1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOworICAgIEhSRVNVTFQgaHIgPSBzb3Vy
Y2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAobV9iaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBu
dWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJj
ZUNQVUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGlmICghc291cmNlQ1BVQml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBt
X2JpdG1hcC5nZXQoKSwgbnVsbHB0cik7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0
YTsKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwg
Jm1hcHBlZFNvdXJjZURhdGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZp
Y2VDb250ZXh0OworICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0
RGV2aWNlQ29udGV4dCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRy
PElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwOworICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29u
dGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURh
dGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRp
ZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsK
KworICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFwOworfQorCit2b2lkIEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVj
dCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
LCBtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBjb21w
YXRpYmxlQml0bWFwKGRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQo
KSk7CisKKyAgICBGbG9hdFNpemUgY3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShj
b21wYXRpYmxlQml0bWFwKTsKKyAgICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGli
bGVCaXRtYXAsIGN1cnJlbnRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9w
dGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVy
bihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3Bh
Y2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxl
KG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZk
ZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFj
a2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0
UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAiZGF0YTosIl9zOwor
fQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVmUHRyPEltYWdl
RGF0YT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOworfQorCit2b2lk
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZv
cm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG51bGxwdHIpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMTU2MDdmMzY0M2RiYTdlZTVlZWZm
MmY3MWFjMzkzOTYwMDdlMTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kIDogcHVibGljIEltYWdlQnVm
ZmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJEaXJlY3QyREJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJy
aWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+
IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92
ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1
dGlvbikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25z
dCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1h
dCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRl
OworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEPiBtX3BsYXRmb3JtQ29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9iaXRt
YXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNU
MkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVy
ZVNvdXJjZS5jcHAKaW5kZXggNDkzNjdjYjI5ZDBmMjBkMTcxMjIwYjMyMDBjOTRlNWNjZDM3MDFi
ZC4uMzJiZjg2YmM2ZmI2OGMxZTZkNjNkZWQ4NzYyNzUzNTNkNTRhZmI4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApA
QCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaW50IGZwc051bWVyYXRvciwgZnBz
RGVub21pbmF0b3I7CiAgICAgICAgIGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbihmcmFtZVJh
dGUoKSwgJmZwc051bWVyYXRvciwgJmZwc0Rlbm9taW5hdG9yKTsKLSAgICAgICAgYXV0byBpbWFn
ZVNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VT
aXplID0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCk7CiAgICAgICAgIGF1dG8gY2FwcyA9IGFk
b3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJ2aWRlby94LXJhdyIsCiAgICAgICAgICAgICAi
Zm9ybWF0IiwgR19UWVBFX1NUUklORywgIkJHUkEiLAogICAgICAgICAgICAgIndpZHRoIiwgR19U
WVBFX0lOVCwgaW1hZ2VTaXplLndpZHRoKCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwCmluZGV4IDg1MWE4NjY3ODliNDgzNTQyMmM1N2E0MWRkYTc1YTBiY2FkN2Q2
NzUuLjA0MmQ1ZGQ3YmI4MzRmMWUzYmVhMWE5ZTFhOTAyZmUzZGI2ZWZmYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSAiQm94U2hhcGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxlbmd0
aEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlBvbHlnb25TaGFwZS5oIgogI2luY2x1ZGUgIlJhc3Rl
clNoYXBlLmgiCkBAIC0xODgsOCArMTg5LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFw
ZTo6Y3JlYXRlUmFzdGVyU2hhcGUoSW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAg
ICAgICAgaWYgKGltYWdlKQogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgq
aW1hZ2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAg
IFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgp
KSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHBpeGVsQXJyYXkpOworICAgICAgICBhdXRvIGlt
YWdlRGF0YSA9IGltYWdlQnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCB7IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGltYWdlRGF0YSAmJiBpbWFnZURhdGEtPmRhdGEoKSk7Cisg
ICAgICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAgICAgdW5z
aWduZWQgcGl4ZWxBcnJheUxlbmd0aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1
bnNpZ25lZCBwaXhlbEFycmF5T2Zmc2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVz
OiBSR0JBLgogICAgICAgICB1aW50OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2Fz
dDx1aW50OF90Pihscm91bmRmKGNsYW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUu
MGYpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVy
aW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmlu
Z0NvbnRleHQuY3BwCmluZGV4IDYwNzVmNjNlMWMyODAwN2Y2NzdlMjkzN2M1Y2E3YmM2NzkzMzIw
MjguLmY2YTk1NDU4OTg1OGUwMGU0ZTdiNmEzYzE5ZjIyYmFmYTU3NjFkMzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApA
QCAtMzQ2LDcgKzM0Niw3IEBAIGJvb2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdy
b3VuZChzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1CiAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTShHcmFw
aGljc0NvbnRleHQ6OkRlZmluaXRlbHlJbmNsdWRlRGV2aWNlU2NhbGUpOwogICAgICAgICBJbnRT
aXplIGV4cGFuZGVkQm91bmRpbmdCb3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6
ZSgpKTsKICAgICAgICAgSW50U2l6ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChl
eHBhbmRlZEJvdW5kaW5nQm94LndpZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGlj
X2Nhc3Q8aW50PihjZWlsKGV4cGFuZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0u
eVNjYWxlKCkpKSk7Ci0gICAgICAgIGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5pbnRl
cm5hbFNpemUoKSkKKyAgICAgICAgaWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tl
bmRTaXplKCkpCiAgICAgICAgICAgICBpbWFnZUJ1ZmZlci5yZXNldCgpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDUxZDMx
OGI3MjRlNzUxOWQ3Mjc3YWU3NTA3NzNkMWIyOGU4ZGRhYTMuLmIwMWI1NGMxNzA5MDA5NzNlYmJl
YWMxNmQzODhkYjFkMGY4MjI1ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
LWlucHV0LnhjZmlsZWxpc3QKQEAgLTE1LDYgKzE1LDggQEAgJChKQVZBU0NSSVBUQ09SRV9QUklW
QVRFX0hFQURFUlNfRElSKS9tb2RlbHMucHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFE
RVJTX0RJUikveHhkLnBsCiAkKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJv
Y2Vzcy5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQu
R1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJv
Y2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xMDcsNiAr
MTA5LDcgQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VD
b25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL0dQVS9tZWRpYS9NZWRpYVBsYXllclByaXZhdGVSZW1vdGUubWVzc2FnZXMuaW4KICQoUFJP
SkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5t
ZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJU
Q0NvZGVjcy5tZXNzYWdlcy5pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1vdXRwdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0
cHV0LnhjZmlsZWxpc3QKaW5kZXggNWM5MmI4MTMzNTNkZjcxZmU2ZDY4NTBmMzdjNGY3M2ZjY2Y3
MWU1ZS4uMGE3NzdmNzIzNzEwOGQxMTRmNmE0OGVkMWFjNGI3YjI2MjhjMzI4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9T
b3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjksNiAr
MTI5LDEyIEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikv
RGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ck1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWVzc2FnZXMuaAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlQXVkaW9N
ZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNU
U19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9S
ZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVy
UHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNv
dXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMv
V2ViS2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNw
cAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNz
YWdlc1JlcGxpZXMuaApAQCAtMTU0LDYgKzE2MCw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNS
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlM
VF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0
cnlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVz
LmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNh
bXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1l
c3NhZ2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMzQ5ZTU0ZGMz
MGM0NDk4MmJjZDgyZTA5ZTk0YmI2NmRlOTlkY2IxMS4uNjBiZTE5OGU4ZGZjY2Y5ZmE4NjA5OTJh
YzdiNjVmMDljNmE5ZjIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNl
cy5tYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiAr
MjUsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2Vi
S2l0MikvR1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBc
CisgICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2Vi
S2l0MikvR1BVUHJvY2Vzcy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3Mg
XAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3
IEBAIFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAg
ICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0dQVS9tZWRpYSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kIFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJL
aXQyKS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNz
L0luc3BlY3RvciBcCkBAIC0xNDUsNiArMTQ3LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAg
ICAgUGx1Z2luUHJveHkgXAogICAgIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
TWFuYWdlciBcCiAgICAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgXAorCVJl
bW90ZUltYWdlQnVmZmVyIFwKKwlSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIg
XAogICAgIFJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5IFwKQEAgLTE1Myw2ICsxNTcsNyBA
QCBNRVNTQUdFX1JFQ0VJVkVSUyA9IFwKICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlciBc
CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lz
dHJ5IFwKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllciBcCiAgICAgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
TWFuYWdlciBcCiAgICAgUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IgXApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmlu
ZGV4IGE2Y2VlNTRjOTdjOTIxNWE2ODczZjRkY2IxMmJkZTQ3YzFkYzQwZWMuLmE2YTU0ZmUxMThk
MDdkOGQ0NDkyZjFkNmM5M2VjZWFlZDAzNzFkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE4Niw3OSAr
MTg2LDkyIEBAIExpYldlYlJUQ0NvZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpsaWJXZWJSVENDb2RlY3NQcm94eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7Cit9CisKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJl
bmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
KTsKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyKCkgPT0gcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5ID0gbnVsbHB0cjsKK30KKworYm9vbCBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25u
ZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVs
c2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVN
ZWRpYVBsYXllclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlUGxheWVyTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAg
ICAgIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQ
cm94eSgpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rl
cik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFS
ZWNvcmRlck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJl
Y29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlv
biwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFSZWNvcmRlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlh
UmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlQXVk
aW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgYXVkaW9UcmFja1JlbmRlcmVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBhdWRpb1RyYWNrUmVuZGVyZXJNYW5h
Z2VyKCkuZGlkUmVjZWl2ZVJlbmRlcmVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29k
ZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlBy
b2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9
PSBNZXNzYWdlczo6UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRp
ZFJlY2VpdmVMYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjZW5kaWYKICNpZiBQTEFU
Rk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZl
TWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNz
YWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9
CiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6
OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBHUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgp
LmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIs
IHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdl
UmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdl
clByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwg
ZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURFT19UUkFDSykK
ICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90
ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkg
ewogICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYK
ICNlbmRpZgotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1lc3NhZ2VS
ZWNlaXZlck1hcCgpLmRpc3BhdGNoU3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVw
bHlFbmNvZGVyKTsKIH0KIAogY29uc3QgU3RyaW5nJiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjptZWRpYUNhY2hlRGlyZWN0b3J5KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCmluZGV4IDJiOWJkMWY4ODdiYWRh
ZmE0ZWE1YzRiYTM0MTY5ZDhiOTc4ZmQ2MmQuLjQwZmFlYmRmOGUxMjk2MTJlYjczY2Y1OGJhZDQ3
Y2IyZTkzMmQ4NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3NNZXNzYWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rp
c3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVz
c2FnZXMuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNs
dWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC00OSwxOCArNTEsMjAg
QEAgY2xhc3MgVXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcwogICAgIDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcz4KKyAgICAsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzPgogICAgICwgSVBDOjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3Mm
LCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVy
LCBQQUw6OlNlc3Npb25JRCk7CiAgICAgdmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cygpOwogCiAgICAgSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25u
ZWN0aW9uLmdldCgpOyB9CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNl
aXZlck1hcCgpIHsgcmV0dXJuIG1fbWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2Vz
cyYgZ3B1UHJvY2VzcygpIHsgcmV0dXJuIG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNv
cmU6OlByb2Nlc3NJZGVudGlmaWVyIHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1
cm4gbV93ZWJQcm9jZXNzSWRlbnRpZmllcjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVu
c2lvbihGdW5jdGlvbjx2b2lkKCk+JiYpOwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0g
ICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25z
dCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXImIHJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXIm
IGxvZ2dlcigpOwpAQCAtODUsMTcgKzg5LDIzIEBAIHByaXZhdGU6CiAgICAgUmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciYgc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdl
cigpOwogI2VuZGlmCiAjZW5kaWYKLQorICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChS
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFj
a2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIAogICAgIC8vIElQQzo6
Q29ubmVjdGlvbjo6Q2xpZW50CiAgICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBm
aW5hbDsKLSAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
LCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSBtZXNzYWdlTmFtZSkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2Vp
dmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNl
aXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAg
IGJvb2wgZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwor
ICAgIGJvb2wgZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwogCiAgICAgUmVmUHRyPExvZ2dl
cj4gbV9sb2dnZXI7CiAKICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAg
ICAgUmVmPEdQVVByb2Nlc3M+IG1fZ3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZl
ck1hcCBtX21lc3NhZ2VSZWNlaXZlck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRl
bnRpZmllciBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlcj4gbV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVtb3Rl
TWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk7CkBAIC0xMTEsNiArMTIxLDcgQEAgcHJpdmF0ZToKICNp
ZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
TGliV2ViUlRDQ29kZWNzUHJveHk+IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAjZW5kaWYKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0
NmMwMTIyMWQ4Li45MzJjMDEyMmRlMDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsK
K21lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3Nh
Z2UgeworICAgIHZvaWQgQ3JlYXRlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94
eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFlYzM3MGM2YzhkYmNiYjYxYjZhZjg1MTk1NmMyNTc3NDJlNjU0MmMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNzMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
I2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Nv
bnRleHR1YWxJbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBs
YXllci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2Vu
ZFR5cGU+CitjbGFzcyBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBX
ZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlciA9
IFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcg
QmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVm
ZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1
cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPFJlbW90ZUNvbnRl
eHR1YWxJbWFnZUJ1ZmZlclByb3h5PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2Us
IG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmll
cik7CisgICAgfQorCisgICAgUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1
bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFn
ZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAgIDogQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcihX
VEZNb3ZlKGJhY2tlbmQpKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyUHJveHkoZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAg
ICAgcmVtb3RlQ3JlYXRlQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2Vu
ZC0+YmFja2VuZFNpemUoKSwgbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKSwgbV9iYWNrZW5k
LT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
KCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBsb2NhbEZsdXNoRHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QpOwor
ICAgICAgICBtX2JhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgbG9j
YWxGbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWRpc3BsYXlM
aXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpSZXBsYXllciByZXBsYXllcihCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVy
Ojpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7Cisg
ICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BV
X1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmZhNGI2NzliZmNhNjU0ODM1YmE0OWZmMTdlZDM5MGEwNWExNTU0M2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKworbmFt
ZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1h
a2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFnZUJ1ZmZl
cklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIFJlZ2lzdGVyIGl0
c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy4KKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eTo6flJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2Vs
ZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4KKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6
OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIu
dG9VSW50NjQoKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVh
dGVCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRsZSkpLCBtX2ltYWdl
QnVmZmVySWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1
c2hDb250ZXh0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBsb2NhbEZs
dXNoQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VC
dWZmZXI6OlNldEZsdXNoSWRlbnRpZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hEcmF3
aW5nQ29udGV4dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxG
bHVzaERyYXdpbmdDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1v
dGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1h
Z2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOGM4ZjhmZjIzNWViN2MxNTE3MGVmMTgwMTBjMWFmYmI2YTgzNGYzNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsK
KworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3Nh
Z2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgor
ICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIElt
YWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgflJlbW90ZUltYWdlQnVmZmVyUHJveHkoKTsKKwor
cHJvdGVjdGVkOgorICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rp
b24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0
X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8v
IElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCBy
ZW1vdGVDcmVhdGVCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisg
ICAgdm9pZCBmbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlM
aXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEcmF3aW5n
Q29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRl
eHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsb2NhbEZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzPiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxZGYzYzI2
MDYxOTVkYTI2ZDM5YTY0MWVhMjE4ZTZmNDgzZTIzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4g
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIEZsdXNoQ29u
dGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktp
dDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorICAgIHZvaWQg
Rmx1c2hEcmF3aW5nQ29udGV4dChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlz
cGxheUxpc3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlm
aWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmNGRlM2M2
Y2JhZDcyOTljMDc5ODNlZTc2ZDZkNmUwNzcwZjUxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdl
QnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9D
RVNTKQorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIK
KyNpbmNsdWRlICJSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVt
b3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHk8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHk8UGxhdGZv
cm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZhNTBiN2Mw
OWRkNzYyOWVmNDYzZjBhMWVlNGNlNTFiMTA2ZjQzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisKKyNpZiBF
TkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
UHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5o
IgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6
OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworfQorCitS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNl
aXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsK
K30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpD
b25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZn
cHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRl
bnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOworICAgIGlmICghZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVy
ID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlQnVm
ZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlQnVmZmVyTWFwLmFkZChpbWFnZUJ1
ZmZlcklkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKK30KKwordm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50
aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZUltYWdlQnVmZmVy
IG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAg
aWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5
NTI3Yjg3NWFhMTMyNTU2OWFjMjI2MzAwZmE2YWQ1OThlOWFlMGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgi
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHByaXZhdGUgSVBD
OjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7
CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7IH0KKwor
cHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6
TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisK
KyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVy
LCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZl
ck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNv
dW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxv
Z2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6Oklt
YWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxl
YXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXIuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyLmgKaW5kZXggNjg1YTY2OTc4NzE3NmIxMzcxOWNiYjhmZTk5M2Nk
YzFiY2U3OWNlOC4uNmU2YTIxN2E1YTIwNWVlMzcwOGYzNDBiYWQ3NDYzOTE2YzJkNmU4NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1Jl
bW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVk
ZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcklk
ZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5o
PgorI2luY2x1ZGUgPHd0Zi9NZWRpYVRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgSW1hZ2VUcmFuc2ZlclNlc3Npb25WVDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllck1hbmFnZXIuY3BwCmluZGV4IDRiOWJlNDljYWM3MmY0NGU3MTc5NzdjNGE0NjZlMmUy
NzlmMWIxNGUuLmZiMGQyNjUyZTdkYzcxNWYzY2JlOTBiMDFhNzQxNzMxMjhjZGI1N2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyTWFuYWdlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dl
YnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcApAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIlJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oIgogCiBu
YW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZW1vdGVTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyOjpSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXJNYW5hZ2VyKFJlZjxJUEM6OkNvbm5lY3Rpb24+JiYgY29ubmVjdGlvbikKICAgICA6IG1fY29u
bmVjdGlvbihXVEZNb3ZlKGNvbm5lY3Rpb24pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllck1hbmFnZXIuaAppbmRleCA5ZjliMzBjNzYxNjIzZGQ5NDhkMjliZTBmMzdmMGFkMGY0
N2U1YTlhLi5lMzhjNWQ2YzA1ZDBkZmFmNDI2ODE5OTViOWUwNGY0ZTc2NDdmMGI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllck1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRj
L1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuaApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlJlbW90ZVNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlc1JlcGxpZXMuaCIKICNpbmNsdWRlICJTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRT
aXplLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIElQQyB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCA3YzVhYzBhY2Y3NDViN2E3
MDNjYmVjMDZiZjdiMWFjNjJlYTg0MmIwLi45OGZmZDFmMDBlMGI2NDhhMGYwOWIwOGNlYTk2MDMy
MGNhNTRhYjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzLnB5CisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAg
LTI3LDYgKzI3LDcgQEAgaW1wb3J0IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBX
QU5UU19DT05ORUNUSU9OX0FUVFJJQlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQ
QVRDSF9NRVNTQUdFX0FUVFJJQlVURSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9S
RUNFSVZFUl9BVFRSSUJVVEUgPSAnTGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNF
SVZFUl9BVFRSSUJVVEUgPSAnTm90UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9
ICdTeW5jaHJvbm91cycKQEAgLTIwNCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3Rf
YmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAn
TWFjaFNlbmRSaWdodCcsCiAgICAgICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbicsCisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAg
ICAgICAgJ1dlYkNvcmU6OkRvY3VtZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpG
ZXRjaElkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAg
LTIxMiw2ICsyMTUsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJl
ZCgpOgogICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlBy
b2Nlc3NJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJ
ZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAn
V2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2Vy
dmljZVdvcmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtl
ck9yQ2xpZW50RGF0YScsCkBAIC0yMjEsMTIgKzIyNSwxNiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5u
b3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRl
Q2hhbmdlSUQnLAogICAgICAgICAnV2ViS2l0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
cklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpDb250ZW50V29ybGRJZGVudGlmaWVyJywK
KyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlJywKKyAgICAgICAgJ1dl
YktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpJbWFn
ZUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0
SUQnLAogICAgICAgICAnV2ViS2l0OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAogICAgICAgICAn
V2ViS2l0OjpSZW1vdGVNZWRpYVJlc291cmNlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6
OlJUQ0RlY29kZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50
aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcklkZW50aWZpZXInLAogICAg
ICAgICAnV2ViS2l0OjpTdG9yYWdlQXJlYUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpT
dG9yYWdlQXJlYUltcGxJZGVudGlmaWVyJywKQEAgLTc2OSwxMyArNzc3LDE2IEBAIGRlZiBnZW5l
cmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAg
ICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdl
czoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRT
X0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9p
ZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQ
Qzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBp
ZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2Ug
JycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2
ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYo
KnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50
KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAg
ICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJ
QlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2Fn
ZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVj
dGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNl
OgpAQCAtNzg0LDEzICs3OTUsMTYgQEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNl
aXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNz
YWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FO
VFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdc
bicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNz
YWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZl
ci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JF
Q0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicp
CiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JF
Q0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBw
cm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5
bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5
bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElT
UEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAg
IGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rl
cikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykK
ICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMu
aCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDdi
ZjcxYzE3YWJkZDNkOGIxMzE5MDIyMDA1OGM5ZjljMjE5ZjYwYjMuLmQ5OTNjMjczYTMzZGZhYjk5
ZjQ2NGEwYjI3YzJjY2ZlNTkwMjEwYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNv
cmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRp
cGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9n
Z2luZ0NsaWVudC5oPgpAQCAtMzYsNiArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29y
a0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RpZmljYXRpb25EaXJlY3Rpb24u
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFTb3VyY2UuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZz
ZXRzSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2VydmljZVdvcmtlclR5cGVzLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TdG9yZWRDcmVkZW50aWFsc1BvbGljeS5oPgpAQCAtODIzLDYgKzgyNSwx
NCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRB
dHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3Qg
RW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcg
dmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9u
LAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisg
ICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAg
PjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFj
ZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JT
cGFjZSwKQEAgLTgzMiw2ICs4NDIsMTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxX
ZWJDb3JlOjpDb2xvclNwYWNlPiB7CiAgICAgPjsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVu
dW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVu
dW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFj
Y2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxl
cmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2Vi
Q29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1U
cmFpdHM8V2ViQ29yZTo6QXV0b3BsYXlFdmVudD4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1W
YWx1ZXM8CiAgICAgICAgIFdlYkNvcmU6OkF1dG9wbGF5RXZlbnQsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1
MzEwOTIwM2NhMjJjYjVmNWRiOTM1MWY5YzIzNmUwNTNhYjFlMDA5Li4yNGExNzJiYTYxMjJhNzJj
MjQ5ZjI0NjY0NzU0MmQ0YzM3ZDExMGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJj
ZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTM3LDYgKzM3LDggQEAg
R1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlLmNwcAogR1BVUHJvY2Vzcy9tZWRp
YS9SZW1vdGVNZWRpYVJlc291cmNlTG9hZGVyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlci5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9UcmFj
a1Byb3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuY3BwCitHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LmNwcAogCiBOZXR3b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2Vy
LmNwcAogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUzNyw2
ICs1MzksOSBAQCBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIu
Y3BwCiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUu
Y3BwIEBuby11bmlmeQogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZVBy
b3h5LmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvVmlkZW9UcmFja1ByaXZhdGVSZW1vdGUuY3Bw
CitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5jcHAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXIuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwCiBXZWJQcm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNw
cAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcml2YXRlLmNwcAogV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL01lZGlhUmVjb3JkZXJQcm92aWRlci5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29h
LnR4dAppbmRleCBlYWEwZDg0ZmE1Y2ZhNzQwZDI3Yjc4YjkwN2VjOTU2OTkzMWNiMGRjLi5lNGRl
NmRiMDU2ZWMzY2YxMDhiMmY5MWIxOGU1NWRhNTlkYzUwYzI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2Eu
dHh0CkBAIC01NTMsNiArNTUzLDggQEAgV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2Eu
bW0KIAogV2ViUHJvY2Vzcy9FbnRyeVBvaW50L0NvY29hL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNl
cnZpY2VFbnRyeVBvaW50Lm1tCiAKK1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cv
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcAorCiBXZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZUJhbm5lci5jcHAKIAogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9tYWMvV0tCdW5kbGVNYWMubW0KQEAgLTYzOCwxNCArNjQwLDE4
IEBAIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29v
cmRpbmF0b3IubW0KIC8vIERlcml2ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJN
ZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2Vp
dmVyLmNwcAorR1BVUHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9j
ZXNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNw
cAogTGliV2ViUlRDQ29kZWNzUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2Rl
Y3NNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJl
ck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tS
ZW5kZXJlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2Vp
dmVyLmNwcAorUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90
ZU1lZGlhUmVjb3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWFu
YWdlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3Nh
Z2VSZWNlaXZlci5jcHAKIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNz
YWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVj
ZWl2ZXIuY3BwCiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBi
ZTY0MjIwNDc3NWUyNTU1Y2NiYTVmZGU5ZjhlNGFlODM1NWVkZGQ1Li40ODhkZDhjM2ZhYWZjNjhm
Yjg5ODkwOTBjMzI1OTYwNWZhM2M0NDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktp
dC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQwMzgsOCArNDAzOCwzMiBAQAogCQk3MUE2NzZB
NDIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2du
aXplci5oOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tU
b3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
b2JqY3BwOyBuYW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0g
aW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRN
b3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDM5MjNFOUY4OEIwMDFFNkUwRCAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFn
ZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjUwNkQzQTIzRTlGODhD
MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjUwNkQzQjIzRTlGODhDMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIubWVz
c2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDNDMjNFOUY4Qjkw
MDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI1MDZEM0QyM0U5RjhCOTAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZE
M0UyM0U5RjhCOTAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDQwMjNFQTIxMkUwMDFFNkUwRCAv
KiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZENDEyM0VBMjEyRjAwMUU2RTBE
IC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZENDMyM0VBMjFBODAwMUU2RTBEIC8qIElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZENDQyM0VBMjFBOTAwMUU2RTBEIC8qIElt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjUwNkQ0NTIzRUEyMUQyMDAxRTZF
MEQgLyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjUwNkQ0ODIzRUEyMkI3MDAxRTZFMEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZl
clNoYXJlYWJsZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxh
dGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzI1NjQ1OUUyM0U4RkYwNzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjU2NDU5RjIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDVBMDIzRThGRjA3MDBB
MDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1QTEyM0U4RkYxNTAwQTA2MzJEIC8q
IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyNTY0NUEyMjNFOEZGMTUwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1QTMyM0U4RkYxNTAw
QTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NUE0MjNFOTA3RDEwMEEwNjMyRCAvKiBJbWFnZUJ1ZmZl
cklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5
NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1h
Yy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MTcyM0VBNDVEMjAwQjJC
MUNFIC8qIFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MTgyM0VBNDVEMzAwQjJCMUNFIC8qIFJlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjlD
NDUxOTIzRUE0NjExMDBCMkIxQ0UgLyogUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlQ29udGV4dHVhbEltYWdl
QnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MUEyM0VB
NDYxMTAwQjJCMUNFIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MUQyM0VBNEUwNDAwQjJCMUNF
IC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3Rv
cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5
RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRl
cm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3Rv
cmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ4Miw2ICs2NTA2
LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYy
MzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlhICovLAorCQkJCTcyNTY0NTlDMjNFOEZFNUMwMEEwNjMy
RCAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAv
KiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3ND
b25uZWN0aW9uLmNwcCAqLywKIAkJCQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAgLTY0OTgsNiArNjUyMyw3IEBACiAJCQkJMkQ5RkIyMDQy
Mzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYg
LyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJ
CQk3MjU2NDU5RDIzRThGRTg3MDBBMDYzMkQgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0
MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIw
OUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlG
QjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApA
QCAtNzg5OSw2ICs3OTI1LDUyIEBACiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJNzI1MDZENDIyM0VBMjE2MDAwMUU2RTBEIC8qIGNnICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjUwNkQ0NDIzRUEyMUE5
MDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywK
KwkJCQk3MjUwNkQ0MzIzRUEyMUE4MDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNnOworCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzI1NjQ1OUMyM0U4RkU1QzAwQTA2MzJEIC8qIFJlbmRlcmlu
Z0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CTcyNTA2RDQyMjNFQTIxNjAwMDFFNkUwRCAvKiBjZyAqLywKKwkJCQk3MjUwNkQ0NTIzRUEyMUQy
MDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmggKi8sCisJCQkJNzI5QzQ1MUQy
M0VBNEUwNDAwQjJCMUNFIC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJ
NzI1NjQ1QTQyM0U5MDdEMTAwQTA2MzJEIC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAor
CQkJCTcyNTA2RDQwMjNFQTIxMkUwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQuY3BwICovLAorCQkJCTcyNTA2RDQxMjNFQTIxMkYwMDFFNkUwRCAvKiBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MjUwNkQ0ODIzRUEyMkI3MDAx
RTZFMEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLywKKwkJCQk3
MjlDNDUxNzIzRUE0NUQyMDBCMkIxQ0UgLyogUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmgg
Ki8sCisJCQkJNzI1MDZEM0EyM0U5Rjg4QzAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNw
cCAqLywKKwkJCQk3MjUwNkQzOTIzRTlGODhCMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
aCAqLywKKwkJCQk3MjUwNkQzQjIzRTlGODhDMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW4gKi8sCisJCQkJNzI5QzQ1MTgyM0VBNDVEMzAwQjJCMUNFIC8qIFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjU2NDVBMzIzRThGRjE1MDBBMDYzMkQgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgKi8sCisJCQkJNzI1NjQ1QTIyM0U4RkYxNTAwQTA2
MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKKwkJCQk3MjU2NDVBMTIzRThGRjE1
MDBBMDYzMkQgLyogUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlw
YXRoID0gUmVuZGVyaW5nQmFja2VuZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CisJCTcyNTY0NTlEMjNFOEZFODcwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjlDNDUxOTIzRUE0NjEx
MDBCMkIxQ0UgLyogUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3
MjUwNkQzRTIzRTlGOEI5MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8s
CisJCQkJNzI1MDZEM0MyM0U5RjhCOTAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHku
aCAqLywKKwkJCQk3MjUwNkQzRDIzRTlGOEI5MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjlDNDUxQTIzRUE0NjExMDBCMkIxQ0UgLyogUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzI1NjQ1OUUyM0U4RkYwNzAw
QTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzI1NjQ1
OUYyM0U4RkYwNzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAor
CQkJCTcyNTY0NUEwMjNFOEZGMDcwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkubWVzc2FnZXMuaW4gKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJ
CQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2
NjMgLyogQ2xhc3NpZmllciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3ND
b25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nv
bm5lY3Rpb24uY3BwCmluZGV4IDhkZmY1MGYzMDg4ZWQ0NWM1OTBlYzgxZTJjMDlhMTM4YmE3YTUz
NWYuLjBmOWM3YWNlZjRlMGVkODczYzRiZTA4OTYxOGE2ZGYwNDE3ODcwZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3Bw
CkBAIC02MiwxMCArNjIsNiBAQCB2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJ
UEM6OkNvbm5lY3Rpb24mKQogewogfQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRS
ZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVu
Y2UsIElQQzo6U3RyaW5nUmVmZXJlbmNlKQotewotfQotCiAjaWYgUExBVEZPUk0oQ09DT0EpICYm
IEVOQUJMRShWSURFT19UUkFDSykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIFNhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllck1hbmFnZXImIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpzYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyKCkKIHsKQEAgLTc1LDM0ICs3MSw0NCBAQCBTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyJiBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6c2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyTQogfQogI2VuZGlmCiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJl
Y2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBk
ZWNvZGVyKQorYm9vbCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlm
IChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TWVkaWFQbGF5ZXJQ
cml2YXRlUmVtb3RlOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vz
czo6c2luZ2xldG9uKCkuc3VwcGxlbWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRp
ZFJlY2VpdmVQbGF5ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBjYXB0dXJlTWFuYWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBs
ZW1lbnQ8VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFu
YWdlci0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgUExB
VEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjo6
bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXIoKS5kaWRSZWNlaXZlTGF5ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZiAvLyBQ
TEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogI2VuZGlmIC8vIEVOQUJMRShN
RURJQV9TVFJFQU0pCiAjaWYgVVNFKExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAg
aWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVEND
b2RlY3M6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5saWJXZWJSVENDb2RlY3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwogfQogCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNw
YXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQor
eworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNv
bm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nv
bm5lY3Rpb246OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UpCit7Cit9CisKKwogfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5k
ZXggNDYwMGU1M2JiMjg0ZDc0OGNmMzkxMWI5NGRiNTU5OWE5Y2I0NWYyNy4uN2I2Zjg4MjIyYzMz
NzM2YjhjNDI3ZGI0Y2JkZTFjMDQ1NDg4NmM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBAQAog
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNs
dWRlICJNZXNzYWdlUmVjZWl2ZXJNYXAuaCIKICNpbmNsdWRlICJTYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXJNYW5hZ2VyLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAgLTQ3LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIH5HUFVQ
cm9jZXNzQ29ubmVjdGlvbigpOwogICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
bigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2Vp
dmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1h
cDsgfQogCiAjaWYgSEFWRShBVURJVF9UT0tFTikKICAgICB2b2lkIHNldEF1ZGl0VG9rZW4oT3B0
aW9uYWw8YXVkaXRfdG9rZW5fdD4gYXVkaXRUb2tlbikgeyBtX2F1ZGl0VG9rZW4gPSBhdWRpdFRv
a2VuOyB9CkBAIC02MiwxMCArNjQsMTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rp
b246OkNsaWVudAogICAgIHZvaWQgZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7
CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBmaW5hbDsKKyAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFs
OwogICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJl
bmNlIG1lc3NhZ2VOYW1lKSBvdmVycmlkZTsKKyAgICAKKyAgICBib29sIGRpc3BhdGNoTWVzc2Fn
ZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3lu
Y01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRy
PElQQzo6RW5jb2Rlcj4mKTsKIAogICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBw
cm9jZXNzIHRvIHRoZSBHUFUgcHJvY2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nv
bm5lY3Rpb247CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJN
YXA7CiAKICNpZiBIQVZFKEFVRElUX1RPS0VOKQogICAgIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+
IG1fYXVkaXRUb2tlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2
YTc3YmJiNmNhYzg4M2E2NTFlODRjZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4
MDY1OTJiNWUyMTc5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
R1BVUHJvY2Vzc0Nvbm5lY3Rpb24ubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIs
NyBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNz
Q29ubmVjdGlvbiB7CittZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3Bh
dGNoTWVzc2FnZSB7CiAKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1OTYzMDY5ZjY2MTgxODNkMDc4YTY0YzJkZWFjYzJkODNh
NGNkZTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmln
aHQuaD4KKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlID0gVmFyaWFudDwKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBNYWNoU2VuZFJpZ2h0LAorI2VuZGlmCisgICAgU2hhcmVhYmxlQml0bWFwOjpI
YW5kbGUKKz47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNDJjZjI0NWUzNDVlMWRmZWM2MmRjMWQ3YTNlY2FlZmNkOWFiNWQw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2VudW0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45YTFiYzlhZTg3ZGM4ZDcyNDI4YTBiODA5Y2FkMGQ4MGE0Y2QxY2I5Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL0ltYWdlQnVmZmVySWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0
Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdl
QnVmZmVySWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0g
T2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmUwYzczOTJmMTNiOGMyOTUwNGNiYWU4ZTg5Y2Y0OWE1NmExNzJkYWQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEz
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VE
YXRhLmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworI2lmIFBMQVRGT1JN
KENPQ09BKQorI2luY2x1ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXVEZfTUFL
RV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsK
Kworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3Qg
SG9zdFdpbmRvdyopCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tl
bmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkNv
bmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBjb25m
aWd1cmF0aW9uLmNvbG9yU3BhY2UgPSB7IGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSB9
OworI2VuZGlmCisgICAgYXV0byBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShiYWNrZW5kU2l6ZSwgY29uZmlndXJhdGlvbik7CisgICAgaWYgKCFiaXRtYXApCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVH
cmFwaGljc0NvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoc2l6ZSwg
YmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShiaXRtYXAp
LCBXVEZNb3ZlKGNvbnRleHQpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tl
bmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoIVdURjo6aG9sZHNfYWx0
ZXJuYXRpdmU8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRsZSkpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IGF1dG8gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShXVEY6OmdldDxT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZT4oaGFuZGxlKSkpOworICAgIGlmICghYml0bWFwKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKGxvZ2lj
YWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3Zl
KGJpdG1hcCksIFdURk1vdmUoY29udGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4mJiBiaXRtYXAsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4
dCkKKyAgICA6IFBsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBwaHlzaWNh
bFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fYml0bWFwKFdURk1v
dmUoYml0bWFwKSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworfQorCitJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdAoreworICAgIFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBtX2JpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShXVEZNb3ZlKGhhbmRsZSkp
OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdAoreworI2lmIFVTRShDRykK
KyAgICByZXR1cm4gbV9iaXRtYXAtPm1ha2VDR0ltYWdlQ29weSgpOworI2VsaWYgVVNFKERJUkVD
VDJEKQorICAgIHJldHVybiBudWxscHRyOworI2VsaWYgVVNFKENBSVJPKQorICAgIHJldHVybiBt
X2JpdG1hcC0+Y3JlYXRlQ2Fpcm9TdXJmYWNlKCk7CisjZW5kaWYKK30KKworUmVmUHRyPEltYWdl
PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYml0bWFw
LT5jcmVhdGVJbWFnZSgpOworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fYml0bWFwLT5kYXRhKCkpOworfQorCitSZWZQdHI8
SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKK30KKwordm9pZCBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29u
c3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJ
bWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBz
cmNSZWN0LCBkZXN0UG9pbnQsIG1fYml0bWFwLT5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hOTEzNzM5ZjhjNTE5OWQ5OGQzNTE2ZTViMjI2N2ExYzAxNDkwNzQ2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg+
CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgU2hhcmVhYmxlQml0bWFwOworCitjbGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgeworICAg
IFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
KTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGlu
dGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
IGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0OworCisgICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fY29u
dGV4dDsgfQorCisgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKFdl
YkNvcmU6OkJhY2tpbmdTdG9yZUNvcHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJDb3Jl
OjpCYWNraW5nU3RvcmVDb3B5ID0gV2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwgV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uID0gV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBo
YVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYp
IGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJl
bXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBk
ZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiwgc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IG1fYml0bWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
YzIzYjBkMzdmYjBjYTdhN2E3NmZlZDRlOWNkZDkwMjYyZGYxZjY4Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3Jt
SW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5oIgorCisjaWYgSEFWRShJT1NVUkZBQ0UpCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFj
a2VuZCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDsKKworI2lmIEhBVkUoSU9T
VVJGQUNFKQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFj
a2VuZCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2lu
ZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gUGxhdGZv
cm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kOworI2VuZGlmCisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjNlZTlhYmM4MzE3MzllMWYxZGQzZjFmYmZhNTAzODUyNzc5MGUyYTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5j
bHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZUNvbnRl
eHR1YWxJbWFnZUJ1ZmZlciA6IHB1YmxpYyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRU
eXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAg
IHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIGlmIChCYWNrZW5k
VHlwZTo6Y2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKS5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPihuZXcgUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyKHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVDb250
ZXh0dWFsSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2Rl
LCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
KyAgICAgICAgOiBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJl
bW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgY3JlYXRlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpIG92ZXJyaWRlCisgICAg
eworICAgICAgICBBU1NFUlQoIW1fYmFja2VuZCk7CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tl
bmRUeXBlOjpjcmVhdGUobG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxlKSk7CisgICAgfQorCisgICAgYm9vbCBpc0JhY2tl
bmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisK
KyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlQ29u
dGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAg
ICAgIHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRl
eHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5
TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdl
QnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5
TGlzdC5jbGVhcigpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpE
cmF3aW5nQ29udGV4dDo6ZGlzcGxheUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6
OnJlbW90ZUZsdXNoRHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5
TGlzdC5jbGVhcigpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODAzZDRkZDNiYzYwZWVkYzg1YTUwNDY3NDFiOTdjZDdiYTNkYjkw
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdl
QnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2Fn
ZXMuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90
ZUltYWdlQnVmZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJl
bmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKQorICAgIDogbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNz
YWdlUmVjZWl2ZXIgaW4gdGhlIEdQVVByb2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6TWVzc2Fn
ZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24o
KS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAg
IG1lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUlt
YWdlQnVmZmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVy
LnRvVUludDY0KCksICp0aGlzKTsKKworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OkNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigp
Cit7CisgICAgLy8gVW4tcmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAg
IElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZl
ck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRo
aXMpOworCisgICAgLy8gUmVsZWFzZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1
ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWlu
dDY0X3QgUmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30K
KworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUJhY2tlbmQoKQoreworICAgIFJl
ZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5l
bnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29u
bmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUlt
YWdlQnVmZmVyOjpDcmVhdGVCYWNrZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJ
UEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7
Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQor
eworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5n
bGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICBy
ZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6
OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01l
c3NhZ2VBcnJpdmVzKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRl
ZEJhY2tlbmQoKQoreworICAgIGNvbnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50
ID0gMzsKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNC
YWNrZW5kQ3JlYXRlZCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRlQmFj
a2VuZCgpOworCisgICAgZm9yICh1bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsg
aXNQZW5kaW5nRmx1c2goKSAmJiB3YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNo
SWRlbnRpZmllcigpOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50
aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAg
IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQg
UmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRl
bnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNl
bmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5
TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwor
ICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6
OnJlbW90ZUZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBzZW5kKE1lc3NhZ2Vz
OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpGbHVzaERyYXdpbmdDb250ZXh0KGRpc3BsYXlMaXN0
LCBtX3NlbnRGbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmUyNTIwMDhjNmYxZDRmZjhkZmI3Y2U5ODUwNTk4ZjdlZmU4NTExZTgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNp
bmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQ
Qzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7Citw
dWJsaWM6CisgICAgflJlbW90ZUltYWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1v
dGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJp
bmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAg
ICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVy
cmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAg
ICAgCisgICAgLy8gQmxvY2tlcnMKKyAgICBib29sIHdhaXRDcmVhdGVCYWNrZW5kKCk7CisgICAg
Ym9vbCB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0ZWRC
YWNrZW5kKCk7CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vu
dEZsdXNoSWRlbnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgY3JlYXRlQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
KSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisK
KyAgICB2b2lkIHNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7
CisgICAgICAgIAorICAgIHZvaWQgcmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOworICAgIHZvaWQgcmVtb3RlRmx1c2hEcmF3aW5nQ29u
dGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFn
ZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIElt
YWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVy
SWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTBiZWRkNDkyNDQz
ODQ0NzE3YTEyNjA4Y2IxYWNiMzAyMWI0YmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1l
c3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
CisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3Rl
SW1hZ2VCdWZmZXIgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVCYWNrZW5kKFdlYkNv
cmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBX
ZWJLaXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRGbHVz
aElkZW50aWZpZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50
aWZpZXIpCit9CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTUyNGJiYzBi
NjIxNjdkOTQ4NzcyNGFiYmI0ZDkwZGQzZmNlZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXIuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNp
bmNsdWRlICJSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3VzaW5nIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVDb250ZXh0dWFs
SW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNr
ZW5kPjsKK3VzaW5nIFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IFJlbW90
ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjRhZTVmZGQ3NjEyZGNkODQzZTg2ZWUwZjgxY2ZmZDM0YTJiZWY1
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVf
cHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkp
OworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkK
K3sKKyAgICAvLyBDcmVhdGUgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBz
ZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdC
YWNrZW5kKG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJlbGVh
c2UgdGhlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAg
IHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6
Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyog
aG9zdFdpbmRvdykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVm
ZmVyOworCisgICAgc3dpdGNoIChyZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdN
b2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
OworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToK
KyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cisg
ICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5k
ZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgIH0KKworICAgIHJldHVy
biBpbWFnZUJ1ZmZlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi44NmJlOWRjYmQ2MGYzOTU4NzdmNDhlNTE3MTg1MDlkOWQxZjQ0YzA1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIK
KyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ0JhY2tlbmQuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKKyAgICA6IHB1
YmxpYyBXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2Fn
ZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKwor
ICAgIH5SZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5k
ZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0
IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBSZW5kZXJpbmdCYWNrZW5kCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3Jl
OjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5kb3cqKSBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIzNTQ3
MGNjZmU3Yjc5YmI5MjQ1NzhhZmI0MTcwMzVjOTEzZGQwMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVu
dGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciA9IE9i
amVjdElkZW50aWZpZXI8UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBlPjsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YmQ3MjhlYjM4ZGVkNWQ0OWNhN2UwNzJmYWUy
NTI4ZjUzZjk1YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIgorCisj
aWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cp
Cit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUs
IHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0
ZShiYWNrZW5kU2l6ZSwgYmFja2VuZFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNl
KSk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJl
dGFpblB0cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3Jt
Q29udGV4dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9h
dFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBiYWNrZW5kU2l6ZSkpOworCisgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFu
ZGxlKQoreworICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxNYWNoU2VuZFJpZ2h0Piho
YW5kbGUpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZUZy
b21TZW5kUmlnaHQoV1RGTW92ZShXVEY6OmdldDxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSwgY2Fj
aGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZShtX3N1cmZhY2UtPmNyZWF0ZVNlbmRSaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKKyNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VC
dWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWUzNzExYTcxNzIz
ZTAxMDJiNzE5OTNlYTAwNjNhMDgwMGNmMmVmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBTaGFyZWFibGVCaXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7
CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisg
ICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRs
ZSgpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVzaW5nIFdlYkNvcmU6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL3dlYnJ0Yy9TYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcAppbmRleCBh
ZTAxNjFhYWQ5NDc0ZDZiMGYxZjkwMGIwNTQ0ZjU5ODBkMzY5OGZmLi5iOWY0ZDJhN2UzMjdlYmUz
MjBkNTdlNzU4YmFiMDNlNTdhNmFkNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5j
cHAKQEAgLTI4LDEyICsyOCwxNSBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShH
UFVfUFJPQ0VTUykgJiYgRU5BQkxFKFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJMYXllckhv
c3RpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
TWFuYWdlck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oIgogI2luY2x1ZGUgIlJlbW90ZVNhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllck1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiU2FtcGxlQnVmZmVyRGlzcGxheUxh
eWVyTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1
ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1JlbW90ZVZpZGVvU2FtcGxlLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4
IDhlNGM5Mzc1ZDdiOGNjMTBmZmEwMDgwM2Q0ODIxNzNiZTVhMzU1OGEuLjdkN2I4ODZkNjg2NDM1
ZDJiZDFhMTE0NGM2NTQ2MDZhNzQzODAzZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC05
MCw2ICs5MCwxMCBAQAogI2luY2x1ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNlbmRp
ZgogCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICNpbmNsdWRl
ICJSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvci5oIgogI2VuZGlmCkBAIC04OTEsNiArODk1LDE1
IEBAIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRl
RGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmCiAKICNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyaW5nQmFja2VuZD4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5k
KCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisgICAgcmV0dXJuIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlKCk7CisjZW5kaWYKK30KKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFj
aFJvb3RHcmFwaGljc0xheWVyKEZyYW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAg
aWYgKGxheWVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGE4YTRjY2FjNTdkODA4YWFhNTVkOGQ3
OTUxYmM1YzU0MWM2MGYyYWQuLjU2Nzg3ZTAxNzAwZWJiZWU5ZGMzN2UzYWI4NDU4NjY0ODVmNmQ2
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTIzMyw2ICsyMzMsOCBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZy
ZXNoTW9uaXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAjZW5k
aWYKIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVh
dGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QgZmluYWw7CisKICAgICBDb21wb3NpdGluZ1RyaWdn
ZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewog
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IDlmYmIx
ZmRmMGQ4Mjc4ODQ2NjVjZWM3NzM3YjMxMGI1MDMxZDQwYzUuLjBmODg0MjkwMGY4NTFhN2Q5MmY4
ODZjYTY2ZjkxYTkxMGU5ZmVmYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJGcmFtZS5jcHAKQEAgLTg0MCw3ICs4NDAsNyBAQCBSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25zdAogICAgIGlmICgh
c25hcHNob3QpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBzaGFyZWRTbmFw
c2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRlcm5h
bFNpemUoKSwgeyB9KTsKKyAgICBhdXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFw
OjpjcmVhdGVTaGFyZWFibGUoc25hcHNob3QtPmJhY2tlbmRTaXplKCksIHsgfSk7CiAgICAgaWYg
KCFzaGFyZWRTbmFwc2hvdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwYTFh
MGVjOWUzNTA2Y2ZjNTQzZDg5ZjRjMTliZjFmZGE0Yjk4MjkxLi5lOGFmMDYyMDE2M2Y4YmIwYTg0
YmExM2UwZmY4MmQwYzI5NjAwMDBlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDItMDMg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBD
cmVhdGUgYSBuZXcgSW1hZ2VCdWZmZXIgdHlwZSBmb3IgZHJhd2luZyBvbiBhIERpc3BsYXlMaXN0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxMDkK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXh0
cmEgcmVjb3JkaW5nIGhhcHBlbnMgYmVjYXVzZSBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcigp
IHVzZWQgdG8KKyAgICAgICAgaXNzdWUgaXRzIEdyYXBoaWNzQ29udGV4dCBjb21tYW5kcyBkaXJl
Y3RseSB0byB0aGUgYmFja2VuZC4gV2l0aCB0aGlzIAorICAgICAgICBwYXRjaCwgRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlciBkb2VzIG5vdCBhbGxvdyBhY2Nlc3MgdG8gdGhlIGJhY2tlbmQgY29udGV4
dC4KKyAgICAgICAgU28gYWxsIHRoZSBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgaGFzIHRvIGJl
IHJlY29yZGVkLgorCisgICAgICAgICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3Qt
ZXhwZWN0ZWQudHh0OgorCiAyMDIwLTAyLTAzICBKYXNvbiBMYXdyZW5jZSAgPGxhd3JlbmNlLmpA
YXBwbGUuY29tPgogCiAgICAgICAgIFsgTWFjIHdrMiBdIGh0dHAvd3B0L21lZGlhcmVjb3JkZXIv
TWVkaWFSZWNvcmRlci1BVi1hdWRpby12aWRlby1kYXRhYXZhaWxhYmxlLWdwdXByb2Nlc3MuaHRt
bCBpcyBmbGFreSBmYWlsaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3Rz
L2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxp
c3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CmluZGV4IDFiNTdlNzkxYjcyYWNj
YTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIz
OTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMt
ZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMv
Y2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKQEAgLTEsNyArMSwxMSBAQAogIAorKHNh
dmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2
KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNoYW5nZS1mbGFncyAxMDUwOTEyKQorICAo
c3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1jb2xvciAjQzgwMDAwKQorICAoc2hhZG93
cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJlY3QKICAgKGV4dGVudCBhdCAoMTAsMTAp
IHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389783</attachid>
            <date>2020-02-05 00:54:36 -0800</date>
            <delta_ts>2020-02-05 01:13:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200205005435.patch</filename>
            <type>text/plain</type>
            <size>546415</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMwN2ZjYTFiZWVkYzg0
NThjY2MwZTM5YjE1OWIyZWM5MjE0MzczMi4uMTU2MTcwYTY4N2IyNGM0NGY3ZDM0MTRhYmFkNmIy
MGFkNDg5NzdhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0NiBAQAorMjAyMC0wMi0wNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVxdWVzdCB0aGUgcmVtb3RlIGRyYXdpbmcgZm9yIHRoZSBI
VE1MQ2FudmFzRWxlbWVudCB3aGVuIGl0IGlzIG5lZWRlZAorICAgICAgICBieSBzZXR0aW5nIHRo
ZSBzdWl0YWJsZSBSZW5kZXJpbmdNb2RlLgorCisgICAgICAgIFNpbmNlIHJlbW90ZSBkcmF3aW5n
IGNyZWF0ZXMgb25lIEltYWdlQnVmZmVyQmFja2VuZCBpbiB0aGUgR1BVUHJvY2VzcywgCisgICAg
ICAgIHRoZSBXZWJQcm9jZXNzIHJlbW90ZSBJbWFnZUJ1ZmZlciBoYXMgdG8gYmUgY3JlYXRlZCBp
bml0aWFsbHkgd2l0aCBubworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQgdGlsbC4gU28gQ29u
dGV4dHVhbEltYWdlQnVmZmVyIGhhcyB0byBlbnN1cmUgdGhlCisgICAgICAgIGJhY2tlbmQgaXMg
Y3JlYXRlZCBiZWZvcmUgZG9pbmcgYW55IG9wZXJhdGlvbi4KKworICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbElt
YWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmZs
dXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJh
c2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjps
b2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJh
Y2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6
bWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmNvcHlOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
OjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVh
bEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRleHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIHBsYXRmb3JtTGF5ZXIKKyAgICAgICAg
Y29weVRvUGxhdGZvcm1UZXh0dXJlCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorCisyMDIwLTAyLTA0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IEltYWdlQnVmZmVyIHNoYXJlYWJsZSBiYWNrZW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIHRoZSBiYXNlIEltYWdlQnVmZmVyQmFj
a2VuZCBmb3IgZWFjaCBwbGF0Zm9ybS4gCisgICAgICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZCBpbiBXZWJLaXQgbmVlZHMgdG8gaGF2ZSBhY2Nlc3MgdG8gYmFzaWMKKyAgICAg
ICAgSW1hZ2VCdWZmZXJCYWNrZW5kIGZ1bmN0aW9uYWxpdGllcyBzcGVjaWZpYyB0byB0aGUgcGxh
dGZvcm0uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKworMjAyMC0wMi0wNCAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0
aGUgcmVtb3RlIFJlbmRlcmluZ0JhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzE5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEV4dGVuZCBSZW5kZXJpbmdNb2RlIHRvIGluY2x1ZGUgbmV3IGVu
dW0gdmFsdWVzIGZvciBjcmVhdGluZyByZW1vdGUKKyAgICAgICAgSW1hZ2VCdWZmZXIgdHlwZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCisyMDIwLTAyLTAzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFJlbmRlcmluZ0JhY2tlbmQgYW5kIG1ha2UgaXQgdGhlIGNyZWF0b3Igb2YgSW1hZ2VCdWZmZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmlu
Z0JhY2tlbmQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIEltYWdlQnVmZmVy
LiBJbiBhCisgICAgICAgIGZvbGxvd2luZyBwYXRjaCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdp
bGwgYmUgaW50cm9kdWNlZC4gSXQnbGwgaW5oZXJpdAorICAgICAgICBSZW5kZXJpbmdCYWNrZW5k
IGFuZCBsaXZlIGluIFdlYktpdC4gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcK
KyAgICAgICAgdGhlIFJlbW90ZUltYWdlQnVmZmVyLiBUaGUgZ29hbCBmb3IgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBpcyB0byBpbnRlcmFjdCB3
aXRoIFJlbW90ZUltYWdlQnVmZmVyIHNlYW1sZXNzbHkgaW4gdGhlIGNhbGxlciBzaWRlLgorCisg
ICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9DaHJv
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
IGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21l
Q2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5oOiBBZGRlZC4KKworMjAyMC0wMi0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0eXBl
IGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgaW5oZXJpdHMgSW1h
Z2VCdWZmZXIgYW5kIERyYXdpbmdDb250ZXh0LiBUaGUgCisgICAgICAgIGRyYXdpbmcgY29udGV4
dCB3aWxsIGJlIHRoZSBjb250ZXh0IG9mIHRoZSBkaXNwbGF5IGxpc3QuIFRoZSBJbWFnZUJ1ZmZl
cgorICAgICAgICBvcGVyYXRpb25zIHdpbGwgZW5zdXJlIHRoZSByZWNvcmRlZCBkaXNwbGF5LWxp
c3QgaXMgcmVwbGF5ZWQgYmFjayBiZWZvcmUKKyAgICAgICAgZ2V0dGluZyB0aGUgcGl4ZWxzIG9m
IHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlz
cGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRl
eHR1YWxJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpj
b3B5TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpzaW5rSW50b05h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFn
ZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6On5EaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpE
cmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpzZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKworMjAyMC0wMS0zMSAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZlcmVu
dCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3RvcmVkIHRvIGRl
Y291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBiYWNrLWVuZCBk
ZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAgICAgIEEgY2xh
c3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRkZWQgdG8gYWxs
b3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBhY2NvcmRpbmcg
dG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWlscy4KKworICAg
ICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhlIHJlc3Qgb2Yg
dGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBiZSBjcmVhdGVk
LiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaAorICAgICAg
ICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdlIHRvIHRoZSBj
b25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgQmFzZWQgb24g
dGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB3
aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHJlbmRlcmlu
Z01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGluc3RlYWQgb2Yg
YW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVjaXNpb25zCisg
ICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJCYWNrZW5kLgor
CisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcgbmV3IHR5cGVz
IG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVmZmVyQmFja2Vu
ZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50CisgICAgICAg
IERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5kZXJpbmcuCisK
KyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fp
cm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKwor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
UmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250
ZXh0dWFsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFs
SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
dWFsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBBIGJyaWRnZSBj
bGFzcyB0byBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5VG9QbGF0
Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1l
bW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNm
b3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlIGFsbCB0aGUgYmFjay1lbmQgYW5k
IHBsYXRmb3JtcyBkZXRhaWxzLiBVbmlmeSB0aGUgaW50ZXJmYWNlIHN1Y2gKKyAgICAgICAgdGhh
dCBJbWFnZUJ1ZmZlciBkb2VzIG5vdCBpbmNsdWRlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBB
bGwgdGhlIAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpY3Mgd2lsbCBiZSBpbiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6SW1h
Z2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVs
dGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11
bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Zmx1c2hDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRp
b25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpi
YXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JhY2tlbmRDb29y
ZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Omxv
Z2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
YmFja2VuZFJlY3QgY29uc3QpOgorICAgICAgICBBIGJhc2UgY2xhc3Mgd2hpY2ggZGVmaW5lcyBz
b21lICBkZWZhdWx0IGJlaGF2aW9ycyBzbyBub3QgYWxsIHRoZSBwbGF0Zm9ybXMKKyAgICAgICAg
aGF2ZSB0byBpbXBsZW1lbnQgdGhlbS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dMYXllckJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhaXJvOjpmaWxsU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGVhclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2Fw
QnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQu
CisgICAgICAgIEFuIGFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICBBbiB1bmFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRp
dmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgQSBDYWlybyBzdXJmYWNlIGJhc2UgY2xhc3MgYmFjay1lbmQuCisKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBpeGVs
c0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
b3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBIGJhc2UgY2xhc3MgZm9yIGFs
bCBDRyBiYWNrLWVuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICBBbiB1bmFjY2VsZXJhdGVkIENHIGJhY2stZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOiBSZW1vdmVkLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0
ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5
Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFuIElPU3VyZmFjZSBhY2NlbGVyYXRlZCBD
RyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2Fj
aGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9T
dXJmYWNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VC
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRv
QkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIFJl
bW92ZSBEaXJlY3QyRCBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VCdWZmZXIuIEludHJvZHVjZSAK
KyAgICAgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgaW5zdGVhZC4KKworICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4
dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKKzIwMjAtMDEtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEltYWdlQnVmZmVyOjpnZXRJ
bWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkgcmV0dXJuIGFuZCB0YWtlIEltYWdlRGF0YQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NjIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLS0gQ29tYmlu
ZSBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKCkgYW5kIGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoKQorICAgICAgICAgICBpbiBvbmUgZnVuY3Rpb24gYW5kIG5hbWUgaXQg
Z2V0SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgLS0gTWFrZSBnZXRJbWFnZURhdGEoKSByZXR1cm5z
IGFuIFJlZlB0cjxJbWFnZURhdGE+IHNpbmNlIHRoZSBjYW52YXMgY29kZQorICAgICAgICAgICB1
c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXR1cm5lZCBVaW50OENsYW1wZWRBcnJheSBpbnRvIGFu
IEltYWdlRGF0YQorICAgICAgICAgICBhbmQgc2VuZCBpdCB0byBKYXZhU2NyaXB0Q29yZS4KKwor
ICAgICAgICAtLSBSZW5hbWUgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheSgpIHRvIEltYWdlQnVm
ZmVyOjpwdXRJbWFnZURhdGEoKSBhbmQKKyAgICAgICAgICAgbWFrZSBpdCB0YWtlIGFuIEltYWdl
RGF0YSBzaW5jZSB0aGUgYnl0ZSBhcnJheSBoYXMgdG8gYmUgYXNzb2NpYXRlZAorICAgICAgICAg
ICB3aXRoIGFuIEludFNpemUgYW5kIHNlcGFyYXRpbmcgdGhlbSBkb2VzIG5vdCBsb29rIGEgZ29v
ZCBkZXNpZ24uCisKKyAgICAgICAgLS0gUmVtb3ZlIHRoZSBlbnVtIEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtLiBBbGwgdGhlIGNhbGxlcnMgbmVlZCB0bworICAgICAgICAgICBwYXNzIHJl
Y3RhbmdsZXMgYW5kIHNpemVzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRoZSBJbWFnZURhdGEg
aGFzIHRvCisgICAgICAgICAgIGJlIHNjYWxlZCBhY2NvcmRpbmcgdG8gdGhlIEltZ2VCdWZmZXI6
OnJlc29sdXRpb25TY2FsZSgpLiAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJ
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZElt
YWdlQml0bWFwKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xl
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5z
aG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBJbWFnZUJ1ZmZlckNhaXJvLmNwcC4KKwor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFuZCBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFyZSBub3QgCisgICAgICAgIG92ZXJyaWRkZW4g
YnkgYW55IHBsYXRmb3JtLiBTbyBkZWxldGUgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2so
KSBhbmQKKyAgICAgICAgbW92ZSBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29u
c3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMgYW5kIHJlbW92ZSB0
aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAg
ICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5kIHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGluIGxvZ2lj
YWwgY29vcmRpbmF0ZXMuIFRvCisgICAgICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdl
IG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgVGhpcyB3YXMgdGhlIG9ubHkgcGxhY2Ugd2hpY2ggd2FzIHBhc3Np
bmcgYSByZWN0YW5nbGUgaW4gYSB0aGUgYmFjay1lbmQKKyAgICAgICAgY29vcmRpbmF0ZXMgYWxv
bmcgd2l0aCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLiBJbnN0ZWFkIHdlIGNhbiBwYXNz
CisgICAgICAgIHRoZSByZWN0YW5nbGUgaW4gbG9naWNhbCBjb29yZGluYXRlcyBhbmQgdGhlbiB1
c2UgSW1hZ2VEYXRhOjpzaXplKCkgc2luY2UKKyAgICAgICAgaXQgbXVzdCBiZSBzY2FsZWQgd2l0
aCByZXNvbHV0aW9uU2NhbGUoKSB3aGVuIHRoZSBJbWFnZURhdGEgaXMgY3JlYXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjAt
MDItMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2Ug
UkdCQTMyIHR5cGVkZWYgd2l0aCBhIGNsYXNzIHRvIGltcHJvdmUgdHlwZSBzYWZldHkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggZGNhZjY5OGFkZTM5NDFkMjZmNWU2ZDI2MmM0ZDJjNDY5MmVkNTkwZC4uMTNkZjVmOWY4
MDBmMmQxNmI0Zjc1ZTdhZTZmY2I2Y2YzMTM3OWVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOTcg
QEAKKzIwMjAtMDItMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gcmVtb3RlIHJlbmRl
cmluZyBpcyByZXF1aXJlZCwgdHdvIG9iamVjdHMgd2lsbCBiZSBjcmVhdGVkIHRvIHN5bmNocm9u
aXplCisgICAgICAgIHRoZSBkcmF3aW5nIGJldHdlZW4gdGhlIFdlYlBvcmNlc3MgYW5kIHRoZSBH
UFVQb3JjZXNzIGFuZCB0byBzaGFyZSB0aGUKKyAgICAgICAgYmFja2VuZDoKKworICAgICAgICAo
MSkgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlciBpcyBjcmVhdGVkIGluIHRoZSBXZWJQcm9jZXNz
IGFuZCBpdCBhc2tzCisgICAgICAgICAgICB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
IHRoZSBzZWNvbmQgb2JqZWN0LgorICAgICAgICAoMikgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5IGlzIGNyZWF0ZWQgdGhlIEdQVVByb2Nlc3MgYW5kIGFzc29jaWF0ZWQKKyAgICAgICAg
ICAgIHdpdGggdGhlIGZpcnN0IG9uZSBieSBhbiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuCisgICAg
ICAgIAorICAgICAgICAtLSBXaGVuIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSBpcyBj
cmVhdGVkLCBpdCBzZW5kcyBhIG1lc3NhZ2UgdG8KKyAgICAgICAgICAgc2hhcmUgaXRzIGJhY2tl
bmQgd2l0aCBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLgorCisgICAgICAgIC0tIFRvIHN5bmNo
cm9uaXplIHRoZSBkcmF3aW5nLCBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyIHNlbmRzIHRoZSBt
ZXNzYWdlCisgICAgICAgICAgICdGbHVzaENvbnRleHQnIG9yIHRoZSBtZXNzYWdlICdGbHVzaERy
YXdpbmdDb250ZXh0JyB0byAKKyAgICAgICAgICAgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5LiBUbyBleGNoYW5nZSB0aGUgbWVzc2FnZXMgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgICAg
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5IHNlbmRzIGJhY2sgdGhlIG1lc3NhZ2UgU2V0
Rmx1c2hJZGVudGlmaWVyCisgICAgICAgICAgIHRvIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIg
d2hlbiB0aGUgZmx1c2hpbmcgaXMgZG9uZS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5OjpSZW1v
dGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJp
dHMgQ29udGV4dHVhbEltYWdlQnVmZmVyIGFuZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LiBXaGVu
CisgICAgICAgIGl0IGlzIGNyZWF0ZWQsIGl0cyBzaGFyZXMgaXRzIGJhY2tlbmQgd2l0aCBSZW1v
dGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIgYnkgCisgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2Ug
UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUJhY2tlbmQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUJhY2tlbmQpOgorICAg
ICAgICBTZW5kcyB0aGUgbWVzc2FnZSBSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlQmFja2VuZC4K
KworICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaERyYXdpbmdD
b250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oOgorICAgICAgICBJbXBsZW1lbnQgbWVzc2FnZSBoYW5kbGVycy4gQWZ0
ZXIgdGhlaXIgd29yayBpcyBkb25lIHRoZXkgc2VuZCB0aGUKKyAgICAgICAgbWVzc2FnZSAnU2V0
Rmx1c2hJZGVudGlmaWVyJyB0byBSZW1vdGVJbWFnZUJ1ZmZlci4KKworICAgICAgICAqIEdQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmlu
OgorICAgICAgICBBZGQgbWVzc2FnZXMgZm9yIGZsdXNoaW5nIHRoZSBjb250ZXh0IGFuZCB0aGUg
RHJhd2luZ0NvbnRleHQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICBEZWZpbmVz
IHRoZSBwbGF0Zm9ybSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHR5cGUuCisKKyAgICAgICAgKiBH
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIENyZWF0ZSB0aGUgcGxhdGZvcm0gUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBB
ZGRlZC4KKyAgICAgICAgVGhpcyBpcyB1c2VkIHRvIHN5bmNocm9uaXplIGZsdXNoaW5nIHRoZSBj
b250ZXh0IGFuZCB0aGUgRHJhd2luZ0NvbnRleHQgCisgICAgICAgIG9mIHRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgYmV0d2VlbiB0aGUgR1BVUHJvY2VzcyBhbmQgdGhlIFdlYlByb2Nlc3MuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6UmVtb3RlQ29udGV4dHVh
bEltYWdlQnVmZmVyKToKKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyIGFuZCBSZW1vdGVJbWFnZUJ1ZmZlci4gSXQgcmVwcmVzZW50cworICAgICAgICB0
aGUgV2ViUHJvY3NzIHBhcnQgb2YgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZlci4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUJhY2tlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmll
cik6CisgICAgICAgIEJsb2NrZXJzIHRoYXQgd2FpdCBmb3IgY2VydGFpbiBtZXNzYWdlcyB0byBi
ZSByZWNlaXZlZC4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJl
VXBkYXRlZEJhY2tlbmQpOgorICAgICAgICBFbnN1cmVzIHRoZSBiYWNrZW5kIGlzIGNyZWF0ZWQg
YW5kIHRoZSBEcmF3aW5nQ29udGV4dCBpcyBmbHVzaGVkIHRvIHRoZQorICAgICAgICBiYWNrZW5k
LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZp
ZXIpOgorICAgICAgICBBIG1lc3NhZ2UgaGFuZGxlciB0aGF0IGtlZXBzIHRyYWNrIG9mIHdoZXRo
ZXIgdGhlIERyYXdpbmdDb250ZXh0IGlzCisgICAgICAgIGNvbW1pdHRlZCB0byB0aGUgYmFja2Vu
ZCBvciBub3QuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZs
dXNoQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVG
bHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAgICAgRW5zdXJlcyBhbGwgdGhlIHJlY2VudCBkcmF3
aW5nIGlzIGNvbW1pdHRlZCB0byB0aGUgYmFja2VuZC4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6CisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
Lm1lc3NhZ2VzLmluOgorICAgICAgICBBZGQgbWVzc2FnZXMgZm9yIGNyZWF0aW5nIHRoZSBiYWNr
ZW5kIGFuZCBmb3Igc2V0dGluZyB0aGUgRmx1c2hJZGVudGlmaWVyLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg6
IEFkZGVkLgorICAgICAgICBEZWZpbmVzIHRoZSBwbGF0Zm9ybSBSZW1vdGVJbWFnZUJ1ZmZlciB0
eXBlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICBDcmVhdGUgdGhlIHBsYXRmb3JtIFJl
bW90ZUltYWdlQnVmZmVyLgorCisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEltYWdlQnVmZmVyIHNoYXJl
YWJsZSBiYWNrZW5kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIHJlbW90ZSBJbWFnZUJ1ZmZlciBwcm94eSB3aWxsIGNyZWF0ZSBhIHNoYXJlYWJs
ZSBiYWNrZW5kIGluIHRoZQorICAgICAgICBHUFVQcm9jZXNzLiBUaGVuIGl0IHdpbGwgZ2l2ZSBh
Y2Nlc3MgdG8gdGhlIGJhY2tlbmQgdG8gdGhlIHJlbW90ZQorICAgICAgICBJbWFnZUJ1ZmZlciBp
biB0aGUgV2ViUHJvY2VzcyBieSBzZW5kaW5nIGFuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDogQWRkZWQuCisgICAgICAgIFRo
aXMgaXMgdmFyaWFudCBvZiBzaGFyZWFibGUgaGFuZGxlcyB0byB0aGUgSW1hZ2VCdWZmZXJCYWNr
ZW5kIGRhdGEuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IFRoZSBmaXJzdCBjcmVhdGUgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHRvIGNyZWF0ZSB0aGUgcmVt
b3RlIEltYWdlQnVmZmVyCisgICAgICAgIHByb3h5IGluIHRoZSBHUFVQcm9jZXNzLiBUaGUgc2Vj
b25kIGNyZWF0ZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgdG8gY3JlYXRlIHRoZQorICAgICAgICBy
ZW1vdGUgSW1hZ2VCdWZmZXIgaW4gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjb25zdCk6CisgICAgICAg
IENyZWF0ZXMgYW4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIHdoaWNoIHdpbGwgYmUgc2VudCBm
cm9tIHRoZSBHUFVQcm9jZXNzCisgICAgICAgIHRvIHRoZSBXZWJQcm9jZXNzLgorCisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIERlZmluZXMgdGhlIHBsYXRmb3JtIHNoYXJlYWJs
ZSBJbWFnZUJ1ZmZlckJhY2tlbmQgdHlwZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgQmVjYXVzZSBJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFzIHRvIGJlIGRlZmluZWQgaW4gV2ViS2l0LCBzaGFyaW5n
CisgICAgICAgIHRoZSBJT1N1cmZhY2UgYmFja2VuZCBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4g
V2ViS2l0LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllci5jcHA6CisKKzIwMjAtMDItMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3Vo
YWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIHJlbW90ZSBJbWFnZUJ1
ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3
MjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3RlSW1hZ2VCdWZmZXIgYW5kIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgd2lsbCBiZSByZXNwb25z
aWJsZSBmb3IKKyAgICAgICAgaGFuZGxpbmcgdGhlIGNvbW11bmljYXRpb25zIG9mIHRoZSBJbWFn
ZUJ1ZmZlciBwYXJ0cyBiZXR3ZWVuIFdlYlByb2Nlc3MKKyAgICAgICAgYW5kIEdQVVByb2Nlc3Mu
CisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW46IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2Nv
YS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW46IEFkZGVkLgorCisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgUmVu
ZGVyaW5nQmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgLS0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3aWxsIGJlIGNyZWF0ZWQgYnkgV2ViQ2hy
b21lQ2xpZW50IGFuZCBvd25lZCBieQorICAgICAgICBDaHJvbWUuIEltYWdlQnVmZmVyOjpjcmVh
dGUgd2lsbCBoYXZlIGFjY2VzcyB0byBpdCB0aHJvdWdoIHRoZSBIb3N0V2luZG93CisgICAgICAg
IGFyZ3VtZW50LiBBbGwgdHlwZXMgb2YgSW1hZ2VCdWZmZXIgd2lsbCBiZSBjcmVhdGVkIGJ5Cisg
ICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgbWV0aG9k
LiBJbi1wcm9jZXNzIEltYWdlQnVmZmVyCisgICAgICAgIHR5cGVzIHdpbGwgYmUgY3JlYXRlZCBi
eSBSZW5kZXJpbmdCYWNrZW5kOjogY3JlYXRlSW1hZ2VCdWZmZXIoKS4KKworICAgICAgICAtLSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgd2lsbCBiZSBjcmVhdGVkIGFuZCBvd25lZCBieQor
ICAgICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLgorCisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJp
bmdCYWNrZW5kKToKKyAgICAgICAgQWRkIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNp
bmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorCisgICAgICAgIChXZWJLaXQ6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgIEFkZCBhIE1lc3NhZ2VS
ZWNlaXZlck1hcCB0byBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHNvIG1lc3NhZ2VzIGNhbiBi
ZQorICAgICAgICBkaXNwYXRjaGVkIHRvIGl0cyBNZXNzYWdlUmVjZWl2ZXJzLgorCisgICAgICAg
ICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAg
ICAgICBBZGQgdGhlIGF0dHJpYnV0ZSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnLgorICAgICAgICBB
ZGQgbWVzc2FnZXMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgIEFkZCBtZXRob2RzIGZvciBj
cmVhdGluZyBhbmQgcmVsZWFzaW5nIHJlbW90ZSBJbWFnZUJ1ZmZlciBwcm94eS4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW46IEFkZGVkLgorICAgICAgICBBZGQgbWVzc2FnZXMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNp
bmcgcmVtb3RlIEltYWdlQnVmZmVyIHByb3h5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy93ZWJy
dGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmg6CisgICAgICAgICogR1BVUHJvY2Vz
cy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5jcHA6CisgICAg
ICAgICogR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFu
YWdlci5oOgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAg
IElmIHRoZSBhdHRyaWJ1dGUgV2FudHNEaXNwYXRjaE1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIG1l
c3NhZ2VzLmluIGZpbGUsCisgICAgICAgIGEgY2FsbCB0byAnZGlzcGF0Y2hNZXNzYWdlKCknIHdp
bGwgYmUgYWRkZWQgdG8gZGlkUmVjZWl2ZU1lc3NhZ2UoKSBhbmQKKyAgICAgICAgYSBjYWxsIHRv
ICdkaXNwYXRjaFN5bmNNZXNzYWdlKCknIHdpbGwgYmUgYWRkZWQgdG8gZGlzcGF0Y2hTeW5jTWVz
c2FnZSgpCisgICAgICAgIGV2ZW4gaWYgbm8gbWVzc2FnZXMgYXJlIGRlZmluZWQgaW4gbWVzc2Fn
ZXMuaW4uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAg
ICAgIEFkZCBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc3VwcG9ydCBmb3IgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBhbmQgUmVuZGVyaW5nTW9kZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRj
aE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0
Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nl
c3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICBBZGQgYSBNZXNzYWdl
UmVjZWl2ZXJNYXAgdG8gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gc28gbWVzc2FnZXMgY2FuIGJlCisg
ICAgICAgIGRpc3BhdGNoZWQgdG8gaXRzIE1lc3NhZ2VSZWNlaXZlcnMuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAg
QWRkIHRoZSBhdHRyaWJ1dGUgJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJy4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IEFk
ZGVkLgorICAgICAgICBBZGQgYW4gT2JqZWN0SWRlbnRpZmllciBmb3IgcmVtb3RlIEltYWdlQnVm
ZmVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQgY29uc3QpOgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgQ3JlYXRlcyBhbGwgdHlwZXMg
b2YgSW1hZ2VCdWZmZXIuIEZvciBub3cgaXQgb25seSBjcmVhdGVzIHRoZSBpbiBwcm9jZXNzCisg
ICAgICAgIFJlbmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oOiBBZGRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICBDcmVhdGUgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCB3aGljaCB3aWxsIGJlIG93bmVkIGJ5IHRoZSBDaHJvbWUuCisKKzIwMjAtMDItMDMgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxv
dyBkaWZmZXJlbnQgYmFjay1lbmRzIGZvciBJbWFnZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNo
b3QgY29uc3QpOgorCiAyMDIwLTAyLTA0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTEzMjApOiBDYW4ndCBkb3VibGUgdGFw
IHRvIHNlbGVjdCB3b3JkIGluIE5vdGVzIG9uIGlDbG91ZC5jb20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmlu
ZGV4IGM2NjRhOWE4Y2M2MGYzMjFmZjZlNTI3ZmU3YjY4ZmZhN2Y2ODkyOWEuLjQwYmY0MzM1MmNi
MzFhYmMyNDIzZTljYzYxODBlMzZmODg1NWMwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTA0
Miw4ICsxMDQyLDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yU3BhY2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5n
T3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAtMTA5Myw3ICsxMDk1
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZU9yaWVudGF0aW9uLmgKQEAgLTExMjYsMTIgKzExMjgsMTUgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1UZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGlt
ZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0
cmluZ1RydW5jYXRvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBm
NzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZDE3NzQzZWQzODQzMDEx
ZmE4NmNlNTExYmU5MjkzMzA5OTI5MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTgzLDggKzgzLDcgQEAgaWYgKCR7VVNFX0RJUkVDVDJEfSkKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKQEAgLTEzMiw4ICsxMzEsOSBAQCBl
bHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Niw5IEBAIGVsc2UgKCkKIAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKaW5kZXggOWFiNDY4NzM5ZWYxMWZmNjA5
Yjk2MjkyODhiYjAxYjE2ZGE3MDJhYS4uZjRiOWI3Zjg4NjZiMTI0MWE4NTU3OWIyZTYxZjdiYWU1
NDNkODc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTg0LDggKzg0LDcgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZVdpbi5jcHAKQEAgLTIwMSw3ICsyMDAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVs
bFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVu
Q29udHJvbGxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGly
ZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldp
bmRvdy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDE5OWI2ZGQwMTBhMmRjYjEwYmE3
NzZhYjdmNzkxNmYzMzc4ZjgxMGQuLjliOTY5NjQ2OTA1N2QwMzQ3OWM1MjhkNzY4MjI4Y2VhZjY0
YWZiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0yOTIsOCArMjkyLDEwIEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVj
b2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0K
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApAQCAtNTU2LDcgKzU1OCw5
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA0
ZjMwNzE1OWI3ZWQ4MDZlYjgxOTUyYmJhNDVmNWMwN2E4ZGM5M2ViLi44YWY3MDFjNzc3ZmUxNTJl
MjMxNmNhNTAwMDQzYWQ5NzFhY2JmMWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAt
MTE5LDcgKzExOSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50LmgKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGU2OTAxYzNjZGIxMjcyYjIz
NDFlMTAwYzcyZWM3ZWZkYmVlMzM0MzAuLjUzNDI5NjdlNmVmYTMzMjJkMjBmZmI0N2FkMzc4YWI4
MzZlZDNkOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODYzLDYgKzE4NjMsNyBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODgyLDYgKzE4ODMsNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNGRlNzVkZjhkZjBiOGY5MGU1YjI1
ODE1N2VhZGE0YTY5ZDNiNTkxNi4uNzY2MWUyYjlhZDJiMzkxOGE1M2IxNjdlNDdiYzE0NTNhZTZm
YzkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yOTEsOCArMjkxLDkgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGZlYmYwNWViMDU5NzI4ZjZiZWE5ODE5MzQ2MjYwMDBmOGNi
NTBhZTQuLjg5ZTMzOWZjNGU0OTQ0YmY1MjZjMTkwMzE4MDhhOGUyZjJiY2YzZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0
NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMw
RDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8q
IFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdG
MTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5Rjgw
MTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBK
U1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
SXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZH
R2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQu
aCAqLzsgfTsKQEAgLTgzMywxNyArODMxLDE3IEBACiAJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4
NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250
ZXh0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTJEQUYzNDNEMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdF
MEYxMDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREQ1QTcyNzFF
QkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDVBNzI2MUVCRUU0N0QwMDlCQTU5NyAv
KiBDb21wb3NpdGlvblVuZGVybGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiBKU1ZSRmllbGRP
ZlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
REUxQ0UwMUY1NzRBRDEwMEQxQTM2NSAvKiBKU1ZSRmllbGRPZlZpZXcuaCAqLzsgfTsKLQkJMkRE
RTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNERTFGNTc0QUFCMDBEMUEzNjUgLyog
SlNWUkRpc3BsYXkuaCAqLzsgfTsKLQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIEpTVlJE
aXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRERFMUNFNjFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlDYXBhYmls
aXRpZXMuaCAqLzsgfTsKLQkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
REUxQ0U4MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50LmggKi87IH07Ci0JCTJE
REUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50UmVhc29uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFQTFGNTc0QkZG
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oICovOyB9OwotCQkyRERFMUNGRTFG
NTc0Q0YzMDBEMUEzNjUgLyogSlNWUkV5ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUMxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJFeWUuaCAq
LzsgfTsKLQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFRTFG
NTc0QkZGMDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCAqLzsgfTsKLQkJMkRERTFEMDIx
RjU3NEQwMDAwRDFBMzY1IC8qIEpTVlJGcmFtZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0YwMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZS
RnJhbWVEYXRhLmggKi87IH07Ci0JCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiBKU1ZSTGF5
ZXJJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RERFMUNGMjFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oICovOyB9OwotCQkyRERF
MUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogSlNWUlBvc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y0MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZS
UG9zZS5oICovOyB9OwotCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFy
YW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkRERTFDRjYxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCAqLzsgfTsK
KwkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIChudWxs
KSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRjgxRjU3
NEMzOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgfTsKKwkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8q
IChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFD
RkUxRjU3NENGMzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgfTsKKwkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDIxRjU3NEQwMDAwRDFB
MzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJ
MkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIChudWxsKSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDgxRjU3NEQw
RTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
fTsKIAkJMkRFNzAwMjMxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRFNzAw
MjIxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5oICovOyB9Owog
CQkyREY1MTJDRTFEODczRTQ3MDAxRDY3ODAgLyogUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREY1MTJD
QzFEODczRTQ3MDAxRDY3ODAgLyogUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmggKi87IH07
CiAJCTJERkE0ODhGMURCNTQxRDAwMDM2MkI5OSAvKiBCdWZmZXJTb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERkE0ODhFMURCNTQxQzIwMDM2
MkI5OSAvKiBCdWZmZXJTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjE0NSwxMSArMjE0MywxOSBAQAogCQk3MjE0NDMzNDIyM0VDOTE2
MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMkE4MTVEMjM4RkRBRjAwMEMwMDU4
MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjM5NDA2NTIzRTg4Mjg2MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzOTQwNjQyM0U4N0Q1NDAw
RTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRC
bGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsK
IAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VP
YnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NDIz
RDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0UwMEND
Njg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOUM0
NTFCMjNFQTRBMjkwMEIyQjFDRSAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E3MjNFMTczMjgwMDhE
NzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlDNDUxRTIzRUE1MjNEMDBCMkIxQ0UgLyogRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzOTQwNUUyM0U1RjUzRjAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjlDNDUxRjIzRUE1Mjg5MDBCMkIxQ0UgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzOTQwNjAy
M0U1RjU2NzAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlERDQ0MjIzRUEyNkEw
MDAwMjZCN0IgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNTA2RDQ2MjNFQTIyMkIwMDFFNkUwRCAv
KiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOURENDQ0MjNFQTI3MEEwMDAyNkI3QiAvKiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI5
REQ0NDUyM0VBMjc5QjAwMDI2QjdCIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0Ux
RTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkFDM0FFMjNFMUYwQjAw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZF
NjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1
NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAv
KiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpT
TWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsK
QEAgLTI1ODAsNyArMjU4Niw2IEBACiAJCThBRjRFNTVDMTFEQzVBNjMwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZVRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOEFGNEU1NTkxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggKi87
IH07CiAJCThCRDM3QTY4MjAxQkIzOUMwMDExNzM0QSAvKiBSZWFkYWJsZVN0cmVhbUNodW5rLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QkQzN0E2NzIw
MUJCMzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCThFNEM5NkREMUFENDQ4MzUwMDM2NUE1
MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhFNEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2Uu
aCAqLzsgfTsKLQkJOEU2MjBFODEyMEVFNjAyNDAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
RTYyMEU4MDIwRUU1RkZDMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RUM2Qzk2MzIw
MUEyNTE2MDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3Ro
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEY2
NzU2MUIxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGNjc1NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBF
dmVudFF1ZXVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOTAwMTc3NDExMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3NzNF
MTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi87IH07CkBAIC0z
MjAyLDcgKzMyMDcsNyBAQAogCQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25l
bnRUcmFuc2Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTc1RThCODUwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLzsg
fTsKIAkJQTc1RThCOEYwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4NzBFMURFMkQ2MDA3
RjI0ODEgLyogRkVDb21wb3NpdGUuaCAqLzsgfTsKIAkJQTc2RTVGN0YxMzVFMERDRjAwQTY5ODM3
IC8qIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkU1RjdFMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERv
Y3VtZW50TWFya2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3OTc5MTQwRDZCOUQwQzAw
Mzg1MUI5IC8qIEltYWdlRGF0YS5oICovOyB9OworCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkg
LyogSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzc5NzkxNDBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc3OTc5MjkwRDZCOUU2NDAw
Mzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzc5NzkyNTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCAq
LzsgfTsKIAkJQTc3QjQxQTAxMkU2NzVBOTAwNTQzNDNEIC8qIFRleHRFdmVudElucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3QjQxOUYx
MkU2NzVBOTAwNTQzNDNEIC8qIFRleHRFdmVudElucHV0VHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3N0QwMDEyMTMzQjBBRUIwMEQ2NjU4
QyAvKiBUZXh0Q2hlY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3N0QwMDExMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjU1OCw5ICs2
NTYzLDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJF
dmVudFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkV2ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEw
RDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEz
NTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTc5LDYgKzk1ODEsMTAgQEAK
IAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJv
cGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJh
bWVSYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjM5NDA1RTIzRTVGNTNGMDBFM0I1NDUgLyogRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0MDYw
MjNFNUY1NjcwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzOTQwNjIyM0U4N0Q1MzAwRTNCNTQ1IC8qIFJl
bmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0
MDY0MjNFODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTND
IC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU4
Niw2ICs5NTkyLDcgQEAKIAkJNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRN
aW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRCbGVuZE1pbk1h
eC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RTFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y3Rpdml0eVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVFNTRGMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDQ2MjNFQTIyMkIwMDFFNkUwRCAvKiBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjY2RjAxMzIyNDFCQ0UyMDA4MzM5NzUgLyogU1ZHUHJvcGVydHlBbmltYXRvckZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBbmltYXRvckZhY3RvcnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTQyMjQxQkZCMjAwODMzOTc1IC8qIFNW
R1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1p
dGl2ZVByb3BlcnR5QW5pbWF0b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNjZGMDE1MjI0MUMwOTgwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDEsNiArOTYwOCwxNiBAQAogCQk3MjdBRkVEMzFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhU
c1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY0MjNENjg2QTYw
MENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJD
NjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNDIzRTE3
MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E2MjNFMTczMjgwMDhE
NzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTkyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUIyM0Ux
RTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJ
bWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2
MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEy
RThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU0Myw4
ICsxMDU2MCw2IEBACiAJCThFMzNDRDkzMjAxQTI5QzEwMEUzOTA5MyAvKiBHYXBMZW5ndGguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FwTGVuZ3RoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
RmV0Y2hSZXNwb25zZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0ZldGNoUmVzcG9uc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZE
OTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRmV0Y2hSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4RTYyMEU3RTIwRUU1RkUyMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4RTYyMEU4MDIwRUU1RkZDMDA3QkM1
RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXBMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4RjkzNEQ4MzExODlGMUVFMDA1MDhENUQgLyogSlNFeGVjU3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFeGVjU3RhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjc0LDcgKzEyNjg5LDYgQEAKIAkJQjJBMDE1OTQw
QUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYy
QTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1l
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2ODYsNiArMTY3MDAsNyBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3QuaCAqLywKKwkJCQk3MjM5NDA2MDIzRTVGNTY3MDBFM0I1NDUgLyogRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODM3LDkgKzI0ODUyLDEyIEBACiAJCQkJOTM0OTA3
RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2
QzExMTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4
MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVD
Ry5oICovLAotCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNw
cCAqLywKLQkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cu
Y3BwICovLAotCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5oICovLAorCQkJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5jcHAgKi8sCisJCQkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
Q0dCYWNrZW5kLmggKi8sCisJCQkJNzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBOTIzRTFFNTQz
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJB
QzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8s
CiAJCQkJQ0Q1ODk0OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwICovLAogCQkJCUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmggKi8sCiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmNwcCAqLywKQEAgLTI0OTMxLDEyICsyNDk0OSwxNCBAQAogCQkJCTBGRTZDNzZDMUZCRkI3
QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICovLAogCQkJCUMyRjRFNzg4MUU0NUFFREYw
MDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovLAogCQkJCUMyRjRFNzg5MUU0
NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQk3MkJBQzNB
NzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMkQy
RkMwNTQxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywK
IAkJCQkyRDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2Uu
aCAqLywKIAkJCQk0QjdBRTQ5NTIxNzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5j
cHAgKi8sCiAJCQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2Uu
aCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJ
CQkJNTU1MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAorCQkJ
CTcyMzk0MDVFMjNFNUY1M0YwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8s
CiAJCQkJNDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5j
cHAgKi8sCiAJCQkJNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9u
aXRvci5oICovLAogCQkJCTJEMjlFQ0MxMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnQuY3BwICovLApAQCAtMjUwMjgsNyArMjUwNDgsOCBAQAogCQkJCTU1QTMz
NkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQzRDI1
OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEw
QjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUzNjI1
QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcyQkFDM0E0MjNFMTczMjcw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0E1MjNFMTcz
MjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFGNTcz
OTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTczOTcy
MDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0ND
MDRDIC8qIEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUwODUsNiArMjUxMDYsOCBAQAogCQkJCTJE
NTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZF
NUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFD
IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjUwNkQ0NjIzRUEyMjJCMDAxRTZF
MEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNG
ODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMw
MDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdF
MjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MDk0LDYg
KzI1MTE3LDggQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8s
CiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAq
LywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAq
LywKKwkJCQk3MjM5NDA2MjIzRTg3RDUzMDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAg
Ki8sCisJCQkJNzIzOTQwNjQyM0U4N0Q1NDAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAq
LywKIAkJCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovLAog
CQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJ
QTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCkBAIC0yNTgyMCw3
ICsyNTg0NSw2IEBACiAJCQkJNjU2Qjg0RDcwQUVBMUNFOTAwQTA5NUI0IC8qIG5ldHdvcmsgKi8s
CiAJCQkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBE
MDA2QzFEMDBFRjZGMjYgLyogdGV4dCAqLywKLQkJCQlFMTg4MjM1RjIwMzFGNTBGMDBCNDJERjMg
LyogdnIgKi8sCiAJCQkJREZEQjkxMkNGOEU4OEE2REExQUQyNjRGIC8qIEFib3J0YWJsZVRhc2tR
dWV1ZS5oICovLAogCQkJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZh
bHVlLmNwcCAqLywKIAkJCQk0OUFFMkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25W
YWx1ZS5oICovLApAQCAtMjg4OTksNiArMjg5MjMsMTcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTcy
MTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3MjE0
NDMzMTIyM0VDODU0MDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFD
RTQxRjU3NEFFOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0Y4
MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQTFG
NTc0QzNFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkMxRjU3
NENFRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZFMUY1NzRD
RjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwMDFGNTc0Q0Y3
MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTMxRjU3NEFFNTAw
RDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDAyMUY1NzREMDAwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEz
NjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1
IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyog
QWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAx
NkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYz
MzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTMz
Nyw2ICsyOTM3Miw3IEBACiAJCQkJMDY1QUQ0RjcwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRN
ZW51Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDYwMjdDQUQwQjFDQkZDMDAwODg0
QjJEIC8qIENvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FERTcyMjYxMENC
QkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyOUM0NTFCMjNFQTRBMjkwMEIyQjFDRSAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc1OUNCODM3MTkyREE5MTkwMDEyQkM2NCAvKiBDb250cm9sU3RhdGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAyOTEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9s
dmVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8q
IENvb2tpZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTY0Myw2ICsyOTY3OSw4IEBACiAJCQkJMTEy
RkIzNTIyMzlDMjNDNDAwODcwNTRBIC8qIERpc3BsYXlJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RkI0N0U2MzIyNzc0MjVBMDBDN0JDQjAgLyogRGlzcGxheUxpbmVCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzI5QzQ1MUYyM0VBNTI4OTAwQjJCMUNFIC8qIERpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOUM0NTFFMjNFQTUyM0Qw
MEIyQjFDRSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjU0LDggKzMwMjkyLDkgQEAKIAkJ
CQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEw
QjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjlERDQ0NDIzRUEyNzBBMDAwMjZCN0Ig
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOURENDQ1MjNF
QTI3OUIwMDAyNkI3QiAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNEM0UyMUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1h
Z2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2
MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzExNjAsMTcgKzMxMTk5LDYgQEAKIAkJCQlCRThFRjA0RDE3MUM5MDE0MDA5QjQ4
QzMgLyogSlNWaWRlb1RyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZFNzkxNDkxRjk3
RTAxQTAwMTk5NzM5IC8qIEpTVmlzaWJpbGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Nzc5QkQ5NjFGMzIyNDZBMDBDMjE0MTcgLyogSlNWaXN1YWxWaWV3cG9ydC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyRERFMUNGODFGNTc0QzM5MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlDYXBh
YmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAv
KiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNGQzFGNTc0Q0VF
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmlldy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDIxRjU3NEQwMDAwRDFBMzY1IC8qIEpTVlJGcmFt
ZURhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiBK
U1ZSTGF5ZXJJbml0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEz
NjUgLyogSlNWUlBvc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDA4MUY1NzREMEUwMEQx
QTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTIwNTA4
MjE4QTQ2MEMzMDA4MDY0N0UgLyogSlNWVFRDdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRjlC
MjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTc1MCw2ICszMTc3OCw3IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0
IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3
QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOURENDQyMjNFQTI2QTAwMDAyNkI3QiAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFDNEQ0MzAwQTZB
QUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDU2MkY5
NjExNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1NDRGNzg5MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTkyOCw2ICszMTk1Nyw3IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBE
Q0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFE
NDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjM5NDA2NTIzRTg4Mjg2MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgzIC8qIFJl
bmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZD
QSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0
ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKaW5kZXggYzRjN2UyODgyNzcyNjZkZGVjNzUyMDQxMjEyYjVlMmJjNWZhYTM1OC4uMjVkNjlm
OTRhNjdmYjkxYmNjNDhiYzdlODU5NmQ3NThmNmY1ZTI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05NDMsMTMg
Kzk0MywxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYg
bG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VE
YXRhID0gYnVmZmVyLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwgMCwgbG9n
aWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0pOwogICAgICAg
ICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5w
b3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5
QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCktPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAgICAg
ICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg2
NSwxOSArMjg2NSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgIGF1dG8gYXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgaWYgKCFhcnJheSkgewogICAgICAgICAg
ICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCisg
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShsb2dpY2Fs
V2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBhcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
aWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGF1dG8gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAg
ICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgq
aW1hZ2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRTaXpl
KGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRo
LCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsg
SW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRhLT5zaXplKCkgfSk7CiAKICAgICAgICAgYXV0byBi
aXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2Fz
dDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1h
cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAppbmRleCBkMmFkNDFlODcxYWM1YTBiY2I0
ZDY5YzE1MjUzNDYzOWE3MzYxNDVkLi4xNjJiMjk0MmY2NjZhOTMyNDYwYjA2ZTc2ZDA4MzZlNDNj
MDE3MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKQEAgLTE5MSw4ICsxOTEsOCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVy
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZgogICAgICAgICByZXR1cm5CdWZmZXIgPSBzdGQ6OmV4
Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfQogCi0gICAgaWYg
KG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgp
KQotICAgICAgICBtX3NpemUgPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAgICBp
ZiAobV9pbWFnZUJ1ZmZlciAmJiBtX3NpemUgIT0gbV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUo
KSkKKyAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKTsKIAogICAg
IHNpemVfdCBwcmV2aW91c01lbW9yeUNvc3QgPSBtX2ltYWdlQnVmZmVyQ29zdDsKICAgICBtX2lt
YWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKaW5kZXggZjVlNzY1MDA2OWE2ZDg2OTBkOTQzZGVlMjZiYjM2MWY5MTg5
Y2UzMS4uMWZiYzFhMWY4OGQyODVkZmVjNmVhZWIxN2E3ZDg3OWE5ZDg4OTUzMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0zNDksOSArMzUwLDYgQEAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4
dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkKIAogICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKIAot
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwotICAgIGRvd25j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5n
IGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKTsKQEAgLTgyMiwzOSArODIwLDI3IEBAIGJvb2wgSFRNTENhbnZh
c0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIAog
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIHVz
ZXNEaXNwbGF5TGlzdERyYXdpbmcpCiB7Ci0gICAgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcg
PT0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAg
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0gdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKLQotICAg
IGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAg
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwogfQogCiB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KQogewotICAgIGlmICh0cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9
PSBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3Ry
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7Ci0KLSAgICBp
ZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAg
ICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgIGlmIChi
dWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBp
ZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5k
aXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+ZGlzcGxheUxpc3QoKS5hc1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChE
aXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVwbGF5RGlzcGxh
eUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5
TGlzdCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxh
eURpc3BsYXlMaXN0KCktPmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
CkBAIC04ODksMTEgKzg3NSwyNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3VtZW50KCkudmll
dygpICYmIGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52aWV3KCktPnJv
b3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcg
c2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9j
dW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisKKyAgICAv
LyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIHJlbW90ZSBkcmF3aW5nIG9uIGNhbnZhcy4K
KyAgICBib29sIHVzZXNSZW1vdGVEcmF3aW5nID0gZmFsc2U7CisKKyAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGU7CisgICAgaWYgKHVzZXNSZW1vdGVEcmF3aW5nKQorICAgICAgICByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6UmVt
b3RlQWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpSZW1vdGU7CisgICAgZWxzZSBpZiAodXNl
c0Rpc3BsYXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2Vs
ZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDsKKyAgICBlbHNlCisgICAgICAgIHJlbmRlcmluZ01v
ZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6
U1JHQiwgaG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisKICNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAg
ICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJh
dGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CmluZGV4IGI1Mjg2NDVjNjU4NzRjZDBjYTA5MzQ0NDYxYjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEy
Mjk0MTQ5NmJmMzFiY2RkNzljNmJjNWMzOTFhNzhhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKIAotICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERy
YXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwCmluZGV4IGQ0OTQ3MTIwODMyMzEwYzdjMGQ3YmVmMWM4NzlkYTNm
ZmIyOTNmMGEuLmQyYjhkYjgxNGQzMTM0MTg2NDEyZmE1ZDhhZWFmN2EyMzgwYjEyODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwCkBAIC0yMTU4LDExICsyMTU4LDYgQEAgRXhjZXB0aW9uT3I8UmVm
UHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdl
RGF0YShmbG8KIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVm
ZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOwotfQotCi1FeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAg
IGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMg
aGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDggKzIx
OTEsOCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0g
ICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIWJ5dGVBcnJh
eSkgeworICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKKyAgICBpZiAo
IWltYWdlRGF0YSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnNvbGVNZXNzYWdlOwogICAg
ICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRMaXRlcmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRh
dGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiKTsKICAgICAgICAgY29uc29sZU1l
c3NhZ2UuYXBwZW5kTnVtYmVyKGltYWdlRGF0YVJlY3Qud2lkdGgoKSk7CkBAIC0yMjA4LDcgKzIy
MDMsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICB9CiAKLSAgICByZXR1cm4gSW1hZ2VEYXRhOjpj
cmVhdGUoaW1hZ2VEYXRhUmVjdC5zaXplKCksIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSkK
QEAgLTIyMTcsMTEgKzIyMTIsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdAogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRh
dGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0
IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQotewotICAgIHB1dEltYWdlRGF0YShkYXRh
LCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4LCBkeSwgZGlydHlYLCBk
aXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0
eUhlaWdodCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzQmFzZSgpLmJ1ZmZl
cigpOwogICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjM1LDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFn
ZUJ1ZmZlcjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCks
IHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBk
ZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09
IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZlci0+bG9naWNhbFNp
emUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBkZXN0UmVjdC5pbnRlcnNlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKICAgICBpZiAoZGVz
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0
KGRlc3RSZWN0KTsKQEAgLTIyNTMsNyArMjI0Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNv
CiAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRh
dGEuaGVpZ2h0KCkpKTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSks
IHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAg
ICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSk7CiAKICAg
ICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRy
YW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzlj
OWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uZGIzZmFjOGIwOGI3MDNiZDU0MWZj
NzJmNGQzMWJkNTE3NzM1MDRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMzcxLDkgKzM3MSw2
IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0Nv
bXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBm
bG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxv
YXQgZGlydHlIZWlnaHQpOwotCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBib29sIGhhc0ludmVydGlibGVUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm07IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAppbmRleCBmNTg2Y2NiMTc4Yzc2ZTU3OGMyMTMwODQ2YTFmYmZhN2VmZmQ3YWY1Li42Mzdl
NzdjNWZlZGFiMzNjNWJkYjgwYzZmZDBlMTFhYjdmNGE4MjE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCkBAIC00OTQsNiArNDk0LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiAgICAgbV9jbGllbnQuc2V0
Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGhpZGRlblVudGlsTW91c2VNb3Zlcyk7CiB9CiAK
K1JlbmRlcmluZ0JhY2tlbmQqIENocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tlbmQpCisgICAgICAgIG1fcmVuZGVyaW5nQmFj
a2VuZCA9IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICByZXR1cm4gbV9y
ZW5kZXJpbmdCYWNrZW5kLmdldCgpOworfQorCiBQbGF0Zm9ybURpc3BsYXlJRCBDaHJvbWU6OmRp
c3BsYXlJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlzcGxheUlEOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmgKaW5kZXggNjYyYmUwMGZhMGFiYWU4YjdiYTdkNjY4ZDQ0NzBlYzUxMzYxYWY0OS4uNmNmY2Fl
Y2EyODVjNGViYzVlMjI0NGU4ZWJkNjRiYWM5YTc2MmUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBA
IC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3Im
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29s
KSBvdmVycmlkZTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdCBvdmVycmlkZTsKKwogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBvdmVy
cmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNzZWQg
eyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggOTg5YmFmNGE3ZDdmMzM1NDU5MzJi
ZDkzMDQzZWY0M2JhN2FhNTEyYS4uYjU5Y2UxM2Q5ZWMzMzAxOTNkODAzNDdjMGNmODcxZDkyNThj
YTVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAj
aW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4u
aCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDUsNiAr
MzA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7
IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBoaWNzTGF5ZXIg
dG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkxNjE5
ZGM2NDNmODcyOTA5Y2I3MWY3ODI4ZWY4NWJiYy4uZTYwY2RlMTRkMWE3YzZjMzA0Mjg5MDc1MDdj
NjEwYmU1NWRlMWEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29s
ZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAKQEAgLTM3Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAgICAg
ICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGltYWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJjZVJl
Y3QsIEludFBvaW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0
YSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZl
ci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0
aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggNmE5ZWMyYTk1MzkwODA5N2U3MWMwNjZmOTE5Yzg3YjE0
YmFkODRjYy4uZmM2YzVmM2NkMDQ2MjY5NTY2ODIyYzA4YTQ4MmNjM2JkNmE4ODNjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0
ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5k
b3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2Fk
YzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li44OTg2NTM0NmNmNDgwZjgwNmM1YzBj
ZTkzNTIxZGU2OTIwODE4MDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9I
b3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjMsMTQgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5k
b3dfaAotI2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lk
Z2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVu
ZGVyaW5nQmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQs
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVk
UmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IGY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3MjI0
MGNmMjAyNTgzMTkyYzQuLjZmYTRmZmUxNDYwZWE3MTM4MjFiY2EzNjIyNmQyNmE5N2U1ZDk5ODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyArMzAs
MTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWly
by5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcAppbmRleCA0ODIyNDRhNGYyYmRjZWRlN2M4NzRjZDFiNTBlYTkxNGIxNDk5YTIyLi5kZGQ1
YzZjNzM0NWEyYzBkOGJkOWE4ZTRlZmI0ZTNjYjk5NTg3YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC0xNjUsMTIgKzE2NSw3
IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihjb25zCiAgICAgICAgIHJldHVybiBpbWFnZTsKIAogICAg
IGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgcmVjdC5zaXplKCksIHJl
Y3QsIHJlY3QsIHsgb3JpZW50YXRpb24gfSk7Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1Qy
RCkKICAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShi
dWZmZXIpKTsKLSNlbGlmIFVTRShDQUlSTykKLSAgICByZXR1cm4gYnVmZmVyLT5uYXRpdmVJbWFn
ZSgpOwotI2VuZGlmCiB9CiAKICNpZiBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhjZWE0OGNiM2QyOTdhZGY4MTFmODg5N2E0ODViYmJlYzUwYWQyM2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZm
ZXIuaApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgOiBwdWJs
aWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVm
ZmVyVHlwZSA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICgh
YmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3Zl
KGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29udGV4dHVhbElt
YWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIGNvbnRleHQp
OworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1
ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1l
bnRzKS4uLikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZl
cihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2Jh
Y2tlbmQoV1RGTW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgQ29udGV4dHVhbElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJl
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJh
c2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJh
Y2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgYmFja2Vu
ZFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPmJhY2tlbmRTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1
cmVCYWNrZW5kKCktPnJlc29sdXRpb25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9y
eUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPm1lbW9yeUNvc3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlD
b3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFj
a2VuZCgpLT5leHRlcm5hbE1lbW9yeUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0
dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFn
ZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAg
ICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25z
dW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29u
dmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB0cmFu
c2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0
Q29sb3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Cisg
ICAgICAgICAgICBiYWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRl
c3RDb2xvclNwYWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgp
OworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0
eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1p
bWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRl
eHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250
ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAg
ICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVj
dCwgZGVzdFBvaW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxh
dGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwg
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4
dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQs
IHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9iYWNrZW5kOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4OTlmODI2
ZTg4NTg3MDU0NjBhOGE3ODg0MWIxMDEzNDU3ZTA3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgOiBwdWJsaWMgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAs
IHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5nIEJhc2VDb250
ZXh0dWFsSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+Owor
CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAg
ICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9z
dFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXplLCBjb250
ZXh0LCBzaXplKTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0ZDo6dW5p
cXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXpl
KQorICAgICAgICA6IEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2Vu
ZCkpCisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgewor
ICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQorICAgICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAg
ICB9CisKKyAgICB+RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcigpCisgICAgeworICAgICAgICBmbHVz
aERyYXdpbmdDb250ZXh0KCk7CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAgfQorCisg
ICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZUNvbnRleHR1
YWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdhZWFjMmZhZi4uYWZh
OGI1YTVkMDhlNTZhODYzZDQwYTlkZGU4MTU5NTBkMjgyZGM2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDQ0ICsyOCw2NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQw
OTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3Ro
ICogTWF4Q2xhbXBlZExlbmd0aDsKIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
QnVmZmVyKTsKLQogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNj
ZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpz
aGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sK
KyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpLmNy
ZWF0ZUltYWdlQnVmZmVyKHNpemUsIGNvbnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChz
aXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNjYWxlZFNpemUsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGlu
ZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVm
ZmVyOworCiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
cmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAg
IGlmICghc3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2Nh
bGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5n
IHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZm
ZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQucmVu
ZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCiAK
IGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIHJldHVybiBmbG9vcmYoc2l6ZS5oZWlnaHQoKSkgKiBmbG9vcmYoc2l6ZS53aWR0aCgpKSA+
IE1heENsYW1wZWRBcmVhOwogfQogCkBAIC0xMDUsOTEgKzEyOCwxMiBAQCBGbG9hdFJlY3QgSW1h
Z2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4g
RmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0K
IAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBm
b3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNl
KQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQg
dGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0
Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3Bh
Y2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3Rk
OjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8g
MjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25l
bnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JT
cGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAg
ICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAg
ICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAy
NTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAg
fSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsK
LSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVy
OjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFu
Y2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJy
YXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFz
cmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQg
cGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zm
c2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAg
ICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAg
ICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwot
ICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQg
KyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJy
YXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXko
KnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
bHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQg
cGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFu
Y2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsK
LX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVt
LCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VC
dWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBF
bmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2Fs
aW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBp
eGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQu
c2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpA
QCAtMjA2LDUwICsxNTAsMTkgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QKICAgICByZXR1cm4g
YnVmZmVyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9y
U3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBn
cmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUg
LyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
cmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUoc2l6
ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7
Ci0jZW5kaWYKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
IH0KIAotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7
Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zv
cm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0
aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUg
KiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0lu
dG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25z
dAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZv
a2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJl
ZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBw
b2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICog
aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgaW1hZ2VCdWZmZXItPmRyYXdDb25zdW1pbmco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi1zaXplX3QgSW1hZ2VC
dWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0j
ZW5kaWYKLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggN2I3NzJhMmYyZDhmNmU3NTc3ZWFm
YzZkYjIyOTMwNmI3Y2ZlZGY5Yi4uMzU1MWY0NWY4MmJlYmEzN2YyOTcxYTA5NTA3ZDJiNWYyZjUy
ZDU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yNywxNjAgKzI3LDgzIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVz
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJE
YXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRT
aXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
QmFja2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1j
bGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVt
IEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBz
dWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tp
bmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OwotCi1l
bnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsKK25h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xhc3Mg
SW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdlQnVm
ZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZm
ZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2lsbCBy
ZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xv
clNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9y
U3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwot
I2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0
aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBv
bmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBi
dWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRp
b24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0
LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRp
YmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
KyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VC
dWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAgICBz
dGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUm
IHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwg
RmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOworICAg
IHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9u
IG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICB2aXJ0dWFsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hDb250ZXh0KCkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQq
IGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBm
bHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1h
Z2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CisgICAgCisgICAgdmlydHVhbCBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdCA9IDA7CiAKLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9OworICAgIHZp
cnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5
c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJheShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pOwotICAgIAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEp
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAgIHN0YXRpYyBO
YXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotI2lmIFVT
RShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlm
CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBD
b2xvclNwYWNlIGRzdENvbG9yU3BhY2UpID0gMDsKIAotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5l
VHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
KTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAg
IEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7
IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50
YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5
IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwg
YW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dM
ZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZv
ciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0Ns
YW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1w
aW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9h
dFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBz
dGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi1wcml2YXRl
OgotI2lmIFVTRShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2Vy
IHRoYW4gdGhlIGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8v
IGltYWdlLCBjcm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0g
ICAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0
YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRp
ZgorcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogICAgIAotICAgIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwg
LTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQotICAgIGlubGlu
ZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKLSAg
ICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3JhZGllbnRJbWFn
ZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3Mg
Qml0bWFwSW1hZ2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAg
ICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQg
bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2Ug
aXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBj
cmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JF
X0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBz
dWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNv
bnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAg
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+
IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjNhYTVkYTYyNjI1M2I1MWQ5MmZlZDgxYWJj
YWJkMjc0M2RlZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdl
QnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fbG9naWNhbFNpemUobG9naWNhbFNpemUp
CisgICAgLCBtX2JhY2tlbmRTaXplKGJhY2tlbmRTaXplKQorICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9
CisKK0ludFNpemUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBGbG9hdFNp
emUgc2NhbGVkU2l6ZSA9IHsgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKSwg
Y2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBpZiAoc2NhbGVk
U2l6ZS5pc0VtcHR5KCkgfHwgIXNjYWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IEludFNpemUo
c2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0
ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGJhY2tlbmRT
aXplLndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51
bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGJhY2tlbmRTaXplLmhl
aWdodCgpKSAqIGJ5dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK05h
dGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7
CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisK
K1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBhdXRvIGltYWdlRGF0YSA9
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxv
Z2ljYWxSZWN0KCkpOworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5z
aWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRl
bShwaXhlbE9mZnNldCArIDMpOworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7
CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAx
KTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCAr
IDIpOworCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsg
YiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5
LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBsb2dp
Y2FsUmVjdCgpLCBJbnRQb2ludDo6emVybygpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdAoreworICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsK
KyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsK
KyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhf
dCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpOworCisgICAgY29w
eUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6
OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVp
bnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRl
c3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFh
bHBoYSkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVsw
XSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQg
PT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Bp
eGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAg
ICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhl
bFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29s
b3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBk
ZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQ
aXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFs
cGhhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVs
cyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7
CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRl
c3RQaXhlbFszXSA9IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3Qg
dWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCog
ZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAo
IWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVz
dFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1h
dCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVs
WzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4
ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQ
aXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxw
aGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3RlbXBsYXRlPHZvaWQg
KCpjb3B5RnVuY3RvcikoQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwg
dWludDhfdCopPgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0
ZWQoCisgICAgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0Owor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZv
ciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNv
cHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAm
ZGVzdFJvd3NbeF0pOworICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAg
ICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVm
ZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAg
ICAgICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNv
cHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93
cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11
bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNp
emUpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKKworICAgIGF1dG8gaW1hZ2VEYXRhID0g
SW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdFNjYWxlZC5zaXplKCkpOworICAgIGlmICghaW1hZ2VE
YXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkID0gIGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBz
cmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygp
LCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlm
IChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RT
Y2FsZWQueSgpKTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdFNjYWxlZC5z
aXplKCkpCisgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT56ZXJvRmlsbCgpOworCisgICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1
aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkgKyBkZXN0UmVjdC55
KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBp
eGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFj
a2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRw
dXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBk
ZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgdm9pZCogZGF0YSkKK3sKKyAgICBJbnRSZWN0
IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKKyAgICBJbnRQ
b2ludCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOwor
CisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IEludFBvaW50Ojp6
ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnRT
Y2FsZWQpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJl
Y3Quc2V0WChkZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3Jj
UmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKGRlc3RSZWN0LnkoKSAt
IHNyY1JlY3RTY2FsZWQueSgpKTsKKworICAgIGRlc3RSZWN0LmludGVyc2VjdChiYWNrZW5kUmVj
dCgpKTsKKyAgICBzcmNSZWN0Q2xpcHBlZC5zZXRTaXplKGRlc3RSZWN0LnNpemUoKSk7CisKKyAg
ICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0UmVjdC55
KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOworICAgIHVpbnQ4
X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55
KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5
SW1hZ2VQaXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RS
b3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlhM2I2M2NkZjcxNzhhYmIxYjVhMzg4MjljNTVlMTI4ZWRiN2EyNGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiSW1h
Z2VQYWludGluZ09wdGlvbnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTmF0
aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFz
cyBJbWFnZTsKK2NsYXNzIEltYWdlRGF0YTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAg
ICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBh
ZmZlY3QgdGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBk
cmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29s
dXRpb24gOiB1aW50OF90IHsKKyAgICBObywKKyAgICBZZXMsCit9OworCitlbnVtIGNsYXNzIENv
bG9yRm9ybWF0IDogdWludDhfdCB7CisgICAgUkdCQSwKKyAgICBCR1JBCit9OworCitjbGFzcyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgeyB9CisKKyAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQor
ICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRTaXplOyB9
CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9u
U2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS5hcmVhKCkudW5z
YWZlR2V0KCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1h
Z2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
ID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFn
ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkgPSAwOworCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxh
dGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1fYmFja2VuZFNpemUud2lkdGgo
KTsgfQorICAgIHZpcnR1YWwgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qg
eyByZXR1cm4gQ29sb3JGb3JtYXQ6OlJHQkE7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCB0b0JhY2tlbmRDb29yZGluYXRlcyhUIHQpIGNvbnN0CisgICAgeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxULCBJbnRQb2ludD46OnZhbHVlIHx8IHN0ZDo6aXNf
c2FtZTxULCBJbnRTaXplPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFJlY3Q+Ojp2YWx1
ZSk7CisgICAgICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICAgICAgdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAg
IEludFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIG1fbG9naWNhbFNpemUpOyB9OworICAgIEludFJlY3QgYmFja2VuZFJlY3QoKSBjb25z
dCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYmFja2VuZFNpemUpOyB9Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3Jt
YXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRl
c3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgdm9pZCogZGF0YSk7CisKKyAgICBJbnRT
aXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2JhY2tlbmRTaXplOworICAgIGZsb2F0
IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjQyYTVjODg1ZTVjMTAyNDQ3YzczYTEyZjFkNmZiMzJiNWQzOTkwMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgot
I2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgi
Ci0jZWxpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0M2E4NzE5Y2U0OWQxNzc2Yjk3NTNkNWQ3MjYw
ODc3ZjA1MTQzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgSEFWRShJT1NVUkZBQ0Up
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJ
Uk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJh
Y2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkK
K3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQordXNpbmcgUGxhdGZvcm1B
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3Vz
aW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
OworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VC
dWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNw
bGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgxMThhZWFlZDBkZDA1NWJjYTYzZjdl
NTMwZjFlOTk4NmVlYmVhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgor
I2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOworI2VsaWYg
VVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ7CisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2NiNmIyNDFhYTVkMTA1
ZjNjYWM4ZWRjMjM5ZDBmNTFmYmE5MzNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30K
KworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmlu
Z0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0
V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2lu
ZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5n
ZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkg
eworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9y
bUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0
Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdI
OworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9z
dFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZl
cjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyOworCisgICAgc3dpdGNoIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVu
ZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4
dCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlz
dEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRE
aXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZB
TExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAg
IGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFjNzMwNjg1NzVkMjAxZTFjMDFmN2MwMGEz
ODBjZjYxYWU1MjgzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEludFNp
emU7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisK
KyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25z
dCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworCisgICAgdmlydHVhbCB+UmVuZGVyaW5nQmFja2Vu
ZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCitwcm90ZWN0ZWQ6CisgICAg
UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUu
aAppbmRleCA2OWQ4YWU4MWM4NDhiMTBlNmYyZDA3YTc4OWIxNmMzMzNkYzIzY2I0Li5hYTQ4MzVk
YmZhYWFhOTc0MmYzNGFjYzM4ZjhhMWUwZTI3MGMyNGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCkBAIC0zMCw2ICszMCwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsK
ICAgICBBY2NlbGVyYXRlZCwKICAgICBVbmFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNj
ZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3QsCisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAg
UmVtb3RlCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYy
YjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLjNjZmNlNzI5NTQyMDlkMzAzYTlmNzI0MzJmYmI0YjYz
OWQ0YjQyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00NDksNyArNDUw
LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIEludFNpemUgYnVmZmVy
U2l6ZSA9IGxheWVySW1hZ2UuaW50ZXJuYWxTaXplKCk7CisgICAgSW50U2l6ZSBidWZmZXJTaXpl
ID0gbGF5ZXJJbWFnZS5iYWNrZW5kU2l6ZSgpOwogICAgIGlmIChidWZmZXJTaXplICE9IGxheWVy
U2l6ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNzZWQgdG8gY2xpcFRvSW1hZ2VCdWZmZXIo
KSBoYXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBidWZmZXIsCiAgICAgICAgIC8vIGJ1
dCB3ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGwsIHNvIGNsaXAgdG8gdGhlIGZpbGxlZCBw
YXJ0IGZpcnN0LgpAQCAtODg0LDEyICs4ODUsMTMgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hh
ZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGEK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1w
bGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVy
UmVjdCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJsdXJM
YXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0Lndp
ZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1
clJlY3QsIHsgfSk7CisgICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEo
KTsKKyAgICBibHVyTGF5ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5z
aXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJs
dXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIo
SW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuY3BwCmluZGV4IDY4OTg0ZDU2NGE5MjkyN2Q0MjhmY2ViYjgwZTE0YWFjZjlh
ZmE0ZWYuLmNkOGYxZGIzNTllMjZhMDFhMmM4NWJiZDIyZWEzNjhlNmFjODg5NGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIGVudW0gUGF0aERyYXdpbmdTdHlsZSB7
CiAKIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0U2l6ZSYgbGF5ZXJTaXplLCBjb25zdCBTaGFk
b3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1h
Z2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2
ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KHJvdW5kZWRJ
bnRQb2ludChsYXllck9yaWdpbiksIGxheWVyU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGxheWVyU2l6ZSksIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hh
ZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0KIH0KQEAgLTE4Myw3
ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdQogLy8gRklYTUU6IFRoaXMgaXMgbW9z
dGx5IHNhbWUgYXMgZHJhd1NoYWRvd0xheWVyQnVmZmVyLCBzbyB3ZSBzaG91bGQgbWVyZ2UgdHdv
Lgogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0ltYWdlKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFk
b3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFn
ZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZv
cm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBzaGFkb3dTdGF0
ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hh
ZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lkIGZp
bGxTaGFkb3dCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1h
Z2VCdWZmZXImCiB7CiAgICAgc2F2ZShwbGF0Zm9ybUNvbnRleHQpOwogCi0gICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNl
ID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAg
ICAgICBjbGlwVG9JbWFnZUJ1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZs
b2F0UmVjdChsYXllck9yaWdpbiwgZXhwYW5kZWRJbnRTaXplKGxheWVyU2l6ZSkpKTsKIAogICAg
IEZpbGxTb3VyY2UgZmlsbFNvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRl
eCA5YjAyNWUxNDc2NzM1MmUxNGFkNDhmODY3YjA0NTg1ZWU4MDM0MTM0Li40ZTFiZjJiNDM2N2Yz
NDM1OWQ4NTRlYjc4YzIyMDJkZjU3YjI3NDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICB9CiAK
ICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlw
VG9JbWFnZUJ1ZmZlcigqcGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggYmNhMjlk
ZmI2OTQ5ODZlODc3NDY2YjhmMDc3ODZmYmQxYmYzOTQ1Ni4uY2Q4NjVhYWEyNjAxOWZmYzc1YWVl
ZTkyNjIwMmNmMTEyNTk1YmM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
Y3BwCkBAIC00MTQsNyArNDE0LDcgQEAgSW50UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNsaXBCb3VuZHMoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
IHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNvbnRleHQs
IHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzNWJmNDNmNzNkNzMzY2EzZTIyMmUzMmQ3ZTIx
MTU2ZDExZWFjYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8
RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYg
VVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VT
KQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0
KDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdN
b2RlKQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0gICAg
LCBtX3RleHR1cmUoMCkKLSNlbmRpZgotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdNb2Rl
ID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
ICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsK
LSNlbHNlCi0gICAgICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19Ci0K
LUltYWdlQnVmZmVyRGF0YTo6fkltYWdlQnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVuZGVy
aW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRl
Q2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0
ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9j
b21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0g
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jZW5k
aWYKLX0KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNvbXBvc2l0b3JC
dWZmZXIoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRv
clRleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9y
VGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7
Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEp
OwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
Ci0KLSAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9j
cmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9D
T0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSkpOwotICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1f
Y29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29t
cG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Ci19Ci0KLSNpZiAhVVNFKE5J
Q09TSUEpCi1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gSW1hZ2VCdWZm
ZXJEYXRhOjpwcm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5
LmNvcHlSZWYoKTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6c3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpCi17Ci0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBH
TENvbnRleHQ6OmN1cnJlbnQoKTsKLQotICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgewot
ICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAgICAgICAgYXV0byBwcm94eU9w
ZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSYgcHJveHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRlciBo
b2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZl
cihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0
b3JUZXh0dXJlLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEp
KTsKLSAgICAgICAgICAgIH07Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIHByb3h5T3BlcmF0
aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25p
Y29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0gICAgICAgIHByb3h5T3BlcmF0
aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBJdCB3
b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3
ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCi0gICAgLy8gd2hlcmUg
b25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlv
dXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAotICAgIC8vIGludG8gdGhlIGNv
bXBvc2l0b3IgYnVmZmVyLgotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0
b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0
b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fp
cm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOwotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZl
Q29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLX0KLSNlbmRpZgotCi12b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJP
X1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOwotICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNhaXJvR0xTdXJmYWNl
KCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG91
cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3RpbmcgaXQK
LSAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCi0gICAgZ2xHZW5UZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAg
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLQotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0K
LSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdCQSwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNv
bnRleHQtPmNhaXJvRGV2aWNlKCk7Ci0KLSAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVn
ZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCi0gICAgY2Fpcm9fZ2xfZGV2
aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7Ci0KLSAgICBtX3N1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJP
X0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSkpOwotICAgIGNsZWFyU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOwotfQotI2VuZGlm
Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29weShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKLSAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSkpOwotCi0gICAgYXV0byBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgp
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotCi0g
ICAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fp
cm9TdXJmYWNlQ29lcmNlVG9JbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAg
aWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFCi0gICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0g
Q0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0KLSAg
ICByZXR1cm4gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBhdXRvIHN1cmZhY2UgPSBj
YWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGNh
aXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4g
aW1hZ2VEYXRhOwotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkK
LSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLQotICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKLSAgICBpbWFnZURhdGEuYXBwZW5k
KHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoK
LSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsK
LQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVy
OjpuYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS5tX3N1cmZhY2UuZ2V0
KCk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShJ
bnRTaXplKHNpemUpLCByZW5kZXJpbmdNb2RlKQotICAgICwgbV9sb2dpY2FsU2l6ZShzaXplKQot
ICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZXJyb3IuCi0KLSAgICBmbG9hdCBz
Y2FsZWRXaWR0aCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAg
ICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUuaGVp
Z2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxv
d2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhl
aWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5t
X3NpemUgPSBtX3NpemU7Ci0KLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAobV9kYXRh
Lm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotICAgICAg
ICBtX2RhdGEuY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLSAgICAgICAgaWYgKCFtX2RhdGEubV9z
dXJmYWNlIHx8IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9
IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMs
IGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYgKG1fZGF0
YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkKLSNlbHNl
Ci0gICAgQVNTRVJUKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpOwotI2VuZGlmCi0gICAgewotICAgICAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRh
X2tleV90IHNfc3VyZmFjZURhdGFLZXk7Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zv
cm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgdm9pZCogc3VyZmFjZURhdGE7Ci0gICAgICAgIGlmICghdHJ5RmFzdFplcm9l
ZE1hbGxvYyhtX3NpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1cmZhY2VEYXRhKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gYWRvcHRS
ZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2Vfc2V0
X3VzZXJfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3Vy
ZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsgZmFzdEZyZWUoZGF0YSk7IH0pOwotICAgIH0KLQot
ICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBD
QUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOyAgLy8gY3JlYXRlIHdpbGwgbm90
aWNlIHdlIGRpZG4ndCBzZXQgbV9pbml0aWFsaXplZCBhbmQgZmFpbC4KLQotICAgIGNhaXJvU3Vy
ZmFjZVNldERldmljZVNjYWxlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNj
YWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotICAgIG1fZGF0YS5t
X3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9kYXRhLm1fY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNy
ZWF0ZUZhY3RvcnkobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0gICAgc3VjY2VzcyA9IHRy
dWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6
U1JHQiwgY29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLm1fY29udGV4dDsKLX0KLQotUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQotewotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKLXsKLSAgICAvLyBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UgaW5oZXJpdHMgc3Vy
ZmFjZSdzIGRldmljZSBzY2FsZSBmYWN0b3IuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5
QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5Q2Fp
cm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgLy8gQml0bWFw
SW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgot
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+KG1f
ZGF0YS5tX3N1cmZhY2UpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlt
YWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlv
bkNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChk
ZXN0aW5hdGlvbkNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAgICAgICBpZiAoJmRl
c3RpbmF0aW9uQ29udGV4dCA9PSAmY29udGV4dCgpKQotICAgICAgICAgICAgc3VyZmFjZSA9IGNh
aXJvU3VyZmFjZUNvcHkoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RpbmF0
aW9uQ29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgY29u
c3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlvbkNvbnRleHQuc3Rh
dGUoKTsKLSAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMs
IGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVz
dGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYg
KGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
YXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJu
KCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUg
Y29sb3Igc3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYg
KGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNl
LmdldCgpKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXpl
LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
KiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JG
cm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBD
b2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAg
ICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFu
Z2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNv
cHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0g
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkg
aGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsK
LSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAg
ICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICBy
ZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDAp
OwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19G
T1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxh
dGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJl
Y3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNp
emUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBi
aWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAg
IGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBp
ZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChh
cmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAg
IGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0
aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZs
b3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAo
IVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwg
ZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVz
dWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQg
ZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmln
aW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUu
d2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1u
cyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBp
bnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1v
cmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1S
b3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBz
byBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVt
Um93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2Yg
dGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgot
ICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1
cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdp
bngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0
YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNl
U2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVj
dC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewot
ICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNl
Y3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9n
aWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5v
dGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1s
b2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxv
Z2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hh
ciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdl
dCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAg
aW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2Uu
Z2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7
Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RC
eXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7
ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5z
aWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54
OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBl
ciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAo
KnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAo
KnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9
ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9
ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBy
ZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVl
biAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQo
Y29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3Jk
aW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
VW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2Nh
bGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1p
bmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1
ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0g
MS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAg
IHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJl
Y3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0
b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
aWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9n
aWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJh
eURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsK
LSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5
c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9
IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2Nh
bGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlE
aW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdl
RGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVS
ZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1
dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9y
bWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5p
dChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVk
RGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9n
aWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQs
IGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VSVChzY2Fs
ZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5o
ZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsK
LSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54
KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNh
bFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVz
dHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNT
RVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHgg
PSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50
IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5t
YXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51
bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9n
aWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJj
ZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRT
b3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55
KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAg
IEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0g
MCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0g
ICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZ
KCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2Fs
U291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsK
LSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3Mg
PSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBk
ZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAv
LyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNl
IGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVz
dHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGlt
YWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3Vy
ZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShp
bWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsK
LQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
aW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAq
IHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50
OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyAr
IG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0g
ICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBp
eGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owot
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OwotCi0gICAgICAg
ICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigp
IGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0
b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07
Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1
bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAgICAgaWYgKHNv
dXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdy
ZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBi
bHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8
PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9
IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVy
YXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJm
YWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4
LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAg
ICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAg
Ly8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdl
U3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNpemUobG9naWNh
bERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQu
eSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAgfQotfQotCi1TdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhf
dD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5j
b2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRh
KCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRh
OiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0gICAgY2Fp
cm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpKTsKLSAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxp
dHkpOwotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkp
Ci17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRo
ZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVy
IGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250
ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkp
OwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVy
ZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0
UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5n
TW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0
YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUp
Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwot
I2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNv
bHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJl
bW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlm
IChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdD
R0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVf
MkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBiaW5k
VGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJm
YWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgm
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAgIGdsR2Vu
RnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdM
X0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsK
LSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUp
OwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShi
aW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJv
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGlu
dGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NmFmNDA4OTZiYWFjZDgwZDlmMWM1
ZWZhYTc5MGExNDliOGRkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2Vk
IGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0
ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25D
b250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2lu
Z1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkcmF3TmF0aXZlSW1hZ2Uo
KmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fp
cm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RD
b250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBpbWFnZS5nZXQoKSwgbV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2Ug
PT0gZGVzdENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8
LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29s
b3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xv
clNwYWNlOjpTUkdCKQorICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGlu
ZWFyUmdiTFVUID0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFy
cmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAg
IGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAg
ICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOwor
ICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9
IGVsc2UgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsK
KyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZs
b2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRv
U1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5
KTsKKyAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRh
OiwiOworCisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVu
Y29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisg
ICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwor
fQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dl
dF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4g
ZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yM2I5MTlhZDUyMmVhMTc4YjMyYzAwOWY1ZDg4ZDVkNzE2ZGVmM2ExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxm
aXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcp
IENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgewor
cHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JT
cGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2Up
IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6
CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAg
ICBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBDb2xvckZvcm1hdDo6QkdSQTsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2
MzcyZjkxOWU3ZWNlOGNiYzZhMjYzYzQ4OWM5OWUwZTg3NjI0MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENv
bnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5j
bHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisj
ZW5kaWYKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1
ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Lmgi
CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0
KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2Vu
ZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRl
eHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11
c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENh
aXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3Vy
ZmFjZS4KKyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVy
ZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisg
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBiYWNrZW5kU2l6ZS53
aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRl
eHQtPmNhaXJvRGV2aWNlKCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBw
ZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNl
X3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJP
X0NPTlRFTlRfQ09MT1JfQUxQSEEsIHRleHR1cmUsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tl
bmRTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2Up
ICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpLCB0ZXh0dXJlKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
OjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5k
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IElt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4
dHVyZSh0ZXh0dXJlKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0Uo
TklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3Jl
YXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5
KCp0aGlzKSk7CisjZWxzZQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKwor
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklD
T1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisK
KyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOworICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3Rl
eHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisg
ICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlm
CisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAg
cmV0dXJuIG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQor
ICAgICAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCiti
b29sIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwg
IlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlv
biBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8
fCBmbGlwWSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0Owor
ICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBi
aW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVf
Q1VCRV9NQVA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0Ojpj
cmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JD
b21wb3NpdGluZygpKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1
aW50MzJfdCBmYm87CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVz
dGluYXRpb25UZXh0dXJlKTsKKyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJu
YWxmb3JtYXQsIDAsIDAsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWln
aHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAg
ICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8qIGNvbnRl
eHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJp
bmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFBpeGVs
U3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwICwgR0xfUkdCQSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29t
cG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBt
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUu
aGVpZ2h0KCkpKTsKKyAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZSht
X2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2Nv
bXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAg
ICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgp
OworCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBv
c2l0b3JCdWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAg
ICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkp
OworICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2Vu
ZFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAg
ICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRm
b3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVh
dCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdl
YmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVz
ZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNv
IHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVm
ZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwg
bV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3Np
dG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9j
b21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAg
ICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNl
bHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdl
IHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFm
dGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xD
b250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0
KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4
dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fYmFja2VuZFNp
emUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2RmMGZhZTdlMmMzNDllMjE2NDE5ODQ1NWQ0MThjM2NhYjY3NDdi
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENB
SVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9y
bUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAg
fkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9y
bVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4
dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
YmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAg
dm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVl
ZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQg
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlm
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAg
UmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQ
cm94eTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2Nv
bXBvc2l0b3JDcjsKKyAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2Vu
ZGlmCisgICAgdWludDMyX3QgbV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1ZjJkZGU5OGViNzRlNGUyMTAzY2FjNDQxOGY3YjU4ZWE5
ZTFjZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2Rh
dGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBj
YWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNr
ZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0
cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIs
IGJhY2tlbmRTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICgh
dHJ5RmFzdFplcm9lZE1hbGxvYyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFs
dWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAg
ICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURh
dGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRh
dGEpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShz
aXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90
eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUp
Cit7CisgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEobV9zdXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29s
b3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAg
ICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0s
IGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3Iu
Ymx1ZSgpXSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11
bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpOworICAgICAgICB9CisgICAgfQorICAg
IGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJmYWNlLmdldCgpLCAwLCAw
LCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
NjAwMzc5NGZkYWE5NDczMmI2MTU1N2M0MWU4NDQyMzFhOThhNzAxCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNo
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Vi
a2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENv
LiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRl
ICJJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFs
bG9jLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5k
IHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyop
OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQm
KTsKKworcHJpdmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90
PiYmKTsKKworICAgIHZvaWQgcGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6
YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUpIG92ZXJyaWRlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZh
Y2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTJkMTVmMGJhMjIy
MTBmN2ExNzRiYTcwN2VkMjYxODBjMThmZWE0YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kLmgiCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkNhaXJvT3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRJbXBsQ2Fpcm8uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworI2lmIFVTRShDQUlS
TykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQ6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFj
ZSkKKyAgICA6IEltYWdlQnVmZmVyQ2Fpcm9CYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9zdXJmYWNlKFdURk1vdmUo
c3VyZmFjZSkpCit7CisgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fc3VyZmFjZS5n
ZXQoKSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOworCisgICAgUmVmUHRyPGNhaXJvX3Q+IGNy
ID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1fc3VyZmFjZS5nZXQoKSkpOworICAgIG1fcGxhdGZv
cm1Db250ZXh0LnNldENyKGNyLmdldCgpKTsKKyAgICBtX2NvbnRleHQgPSBtYWtlVW5pcXVlPEdy
YXBoaWNzQ29udGV4dD4oR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjcmVhdGVGYWN0b3J5KG1f
cGxhdGZvcm1Db250ZXh0KSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4
dDsKK30KKwordW5zaWduZWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1Bl
clJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlk
ZShtX3N1cmZhY2UuZ2V0KCkpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhh
dmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29w
eUJhY2tpbmdTdG9yZTogeworICAgICAgICBhdXRvIGNvcHkgPSBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQVJHQjMyLAorICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF93aWR0aChtX3N1cmZhY2UuZ2V0KCkpLAorICAgICAgICBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9oZWlnaHQobV9zdXJmYWNlLmdldCgpKSkpOworCisgICAgICAgIGF1dG8g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoY29weS5nZXQoKSkpOworICAgICAgICBjYWlyb19z
ZXRfb3BlcmF0b3IoY3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgICAgIGNh
aXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsK
KyAgICAgICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOworCisgICAgICAgIHJldHVybiBjb3B5Owor
ICAgIH0KKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAgICAgIHJldHVybiBt
X3N1cmZhY2U7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFj
a2VuZDo6Y2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpIGNvbnN0Cit7CisgICAgQmFja2luZ1N0
b3JlQ29weSBjb3B5QmVoYXZpb3I7CisgICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9z
dXJmYWNlLmdldCgpKSA9PSBDQUlST19TVVJGQUNFX1RZUEVfSU1BR0UgJiYgY2Fpcm9fc3VyZmFj
ZV9nZXRfY29udGVudChtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX0NPTlRFTlRfQ09MT1JfQUxQ
SEEpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOworICAgIGVs
c2UKKyAgICAgICAgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZTsKKyAgICByZXR1cm4g
Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIGF1
dG8gc3VyZmFjZSA9IGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKTsKKyAgICBjYWlyb19zdXJm
YWNlX2ZsdXNoKHN1cmZhY2UuZ2V0KCkpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGltYWdlRGF0
YTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZS5nZXQoKSkpCisgICAgICAg
IHJldHVybiBpbWFnZURhdGE7CisKKyAgICBhdXRvIHBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoc3VyZmFjZS5nZXQoKSk7CisgICAgaW1hZ2VEYXRhLmFwcGVuZChwaXhlbHMs
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShzdXJmYWNlLmdldCgpKSAqCisgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlLmdldCgpKSk7CisKKyAgICBy
ZXR1cm4gaW1hZ2VEYXRhOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1
dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0LCBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3VyZmFjZS5nZXQoKSkpOworfQorCit2b2lkIElt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJ
bnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdl
QnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1Jl
Y3QsIGRlc3RQb2ludCwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX3N1cmZhY2UuZ2V0
KCkpKTsKKworICAgIEludFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHRvQmFja2VuZENvb3JkaW5hdGVz
KHNyY1JlY3QpOworICAgIEludFBvaW50IGRlc3RQb2ludFNjYWxlZCA9IHRvQmFja2VuZENvb3Jk
aW5hdGVzKGRlc3RQb2ludCk7CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3Rhbmds
ZShtX3N1cmZhY2UuZ2V0KCksIGRlc3RQb2ludFNjYWxlZC54KCksIGRlc3RQb2ludFNjYWxlZC55
KCksIHNyY1JlY3RTY2FsZWQud2lkdGgoKSwgc3JjUmVjdFNjYWxlZC5oZWlnaHQoKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk0OWZmMzcz
NzQ4ODI0NTUxZTNlNGVmZTVhMmI0ZDY2OTNmMDU1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZC5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlr
b2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQg
OiBwdWJsaWMgSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQgeworcHVibGljOgorICAgIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIg
Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBj
b25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlk
ZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChjb25z
dCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYm
KTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UoKSBjb25z
dDsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRlOworCisgICAgbXV0
YWJsZSBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CisgICAgUGxhdGZvcm1Db250
ZXh0Q2Fpcm8gbV9wbGF0Zm9ybUNvbnRleHQgeyBudWxscHRyIH07CisgICAgc3RkOjp1bmlxdWVf
cHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyRGF0YUNhaXJvLmgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNjFlMzU5OTQ2ZWY0YmFkNjkyM2ZkYmY3NTY0
YTJlMzlmNzY5YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm9faAotI2RlZmluZSBJbWFnZUJ1ZmZlckRhdGFDYWlyb19oCi0KLSNpZiBVU0UoQ0FJUk8pCi0K
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJv
LmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlBsYXRm
b3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyLmgiCi0jaW5jbHVkZSAiVGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1M
YXllclByb3h5UHJvdmlkZXIuaCIKLSNlbmRpZgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykgJiYgVVNFKE5JQ09TSUEpCi0jaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRl
eHR1cmVNYXBwZXJJbXBsLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBJbnRTaXplOwotY2xhc3MgVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eTsKLQotY2xh
c3MgSW1hZ2VCdWZmZXJEYXRhCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNp
ZiBVU0UoTklDT1NJQSkKLSAgICA6IHB1YmxpYyBOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJl
TWFwcGVySW1wbDo6Q2xpZW50Ci0jZWxzZQotICAgIDogcHVibGljIFBsYXRmb3JtTGF5ZXIKLSNl
bmRpZgotI2VuZGlmCi17Ci1wdWJsaWM6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNp
emUmLCBSZW5kZXJpbmdNb2RlKTsKLSAgICB2aXJ0dWFsIH5JbWFnZUJ1ZmZlckRhdGEoKTsKLQot
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKLSAgICBQbGF0Zm9ybUNvbnRl
eHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3ND
b250ZXh0PiBtX2NvbnRleHQ7Ci0gICAgSW50U2l6ZSBtX3NpemU7Ci0gICAgUmVuZGVyaW5nTW9k
ZSBtX3JlbmRlcmluZ01vZGU7Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
ICAgIHZvaWQgY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICB2b2lkIHN3YXBCdWZmZXJzSWZOZWVkZWQo
KSBvdmVycmlkZTsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVy
UHJveHk+IHByb3h5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVl
ZGVkKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKLSAgICB2b2lkIGNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIo
KTsKLQotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fY29tcG9zaXRvclN1cmZhY2U7Ci0g
ICAgdWludDMyX3QgbV9jb21wb3NpdG9yVGV4dHVyZTsKLSAgICBSZWZQdHI8Y2Fpcm9fdD4gbV9j
b21wb3NpdG9yQ3I7Ci0KLSNpZiBVU0UoTklDT1NJQSkKLSAgICBSZWZQdHI8Tmljb3NpYTo6Q29u
dGVudExheWVyPiBtX25pY29zaWFMYXllcjsKLSNlbHNlCi0gICAgUmVmUHRyPFRleHR1cmVNYXBw
ZXJQbGF0Zm9ybUxheWVyUHJveHk+IG1fcGxhdGZvcm1MYXllclByb3h5OwotI2VuZGlmCi0jZWxz
ZQotICAgIHZpcnR1YWwgdm9pZCBwYWludFRvVGV4dHVyZU1hcHBlcihUZXh0dXJlTWFwcGVyJiwg
Y29uc3QgRmxvYXRSZWN0JiB0YXJnZXQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgZmxv
YXQgb3BhY2l0eSk7Ci0jZW5kaWYKLSAgICB1aW50MzJfdCBtX3RleHR1cmU7Ci0jZW5kaWYKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKLQotI2Vu
ZGlmIC8vIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFmZDVlNGVjNzE5ZWRiNDkzZjc5ZGJiZmFiZTVhZjkzY2EwNjcwOWIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0OTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1l
cm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3Jj
aCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiTUlN
RVR5cGVSZWdpc3RyeS5oIgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+Ci0jaW5jbHVk
ZSA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgotI2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9E
ZWJ1Z0hlYXAuaD4KLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIlVUSVV0
aWxpdGllcy5oIgotI2VuZGlmCi0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotI2luY2x1ZGUgIklPU3VyZmFjZS5oIgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9T
dXJmYWNlU1BJLmg+Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFu
ZCBBUkdCMzIgLT4gQVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0Vf
QVJHQjMyIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotREVD
TEFSRV9BTExPQ0FUT1JfV0lUSF9IRUFQX0lERU5USUZJRVIoSW1hZ2VCdWZmZXIpOwotREVGSU5F
X0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIo
Y29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
IFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2U7Ci0jaWYgUExBVEZPUk0oQ09D
T0EpCi0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCk7Ci0gICAgc3dpdGNoIChDR0NvbnRleHRHZXRUeXBlKGNnQ29udGV4dCkpIHsKLSAgICBjYXNl
IGtDR0NvbnRleHRUeXBlQml0bWFwOgotICAgICAgICBjb2xvclNwYWNlID0gQ0dCaXRtYXBDb250
ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAgICAgICBicmVhazsKLSNpZiBIQVZFKElP
U1VSRkFDRSkKLSAgICBjYXNlIGtDR0NvbnRleHRUeXBlSU9TdXJmYWNlOgotICAgICAgICBjb2xv
clNwYWNlID0gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFjZShjZ0NvbnRleHQpOwotICAg
ICAgICBicmVhazsKLSNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBh
ZG9wdENGKENHQ29udGV4dENvcHlEZXZpY2VDb2xvclNwYWNlKGNnQ29udGV4dCkpOwotICAgIH0K
LQotICAgIGlmICghY29sb3JTcGFjZSkKLSAgICAgICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNw
YWNlUmVmKCk7Ci0jZWxzZQotICAgIGNvbG9yU3BhY2UgPSBzUkdCQ29sb3JTcGFjZVJlZigpOwot
I2VuZGlmCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gY29udGV4dC5yZW5kZXJp
bmdNb2RlKCk7Ci0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gSW1hZ2VCdWZmZXI6OmNvbXBhdGli
bGVCdWZmZXJTaXplKHNpemUsIGNvbnRleHQpOwotICAgIGJvb2wgc3VjY2VzcyA9IGZhbHNlOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyKG5ldyBJbWFnZUJ1ZmZlcihz
Y2FsZWRTaXplLCAxLCBjb2xvclNwYWNlLmdldCgpLCByZW5kZXJpbmdNb2RlLCBudWxscHRyLCBz
dWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBo
aWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0KCkuc2NhbGUoc2NhbGVkU2l6ZSAvIHNp
emUpOwotICAgIHJldHVybiBidWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6
ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNj
ZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9h
dCBzY2FsZWRXaWR0aCA9IGNlaWxmKHJlc29sdXRpb25TY2FsZSAqIHNpemUud2lkdGgoKSk7Ci0g
ICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWln
aHQoKSk7Ci0KLSAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGF1dG9tYXRpY2FsbHkgdXNlIGEgbG93
ZXIgcmVzb2x1dGlvbj8KLSAgICBpZiAoIUZsb2F0U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVp
Z2h0KS5pc0V4cHJlc3NpYmxlQXNJbnRTaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
c2l6ZSA9IEludFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhlaWdodCk7Ci0gICAgbV9kYXRhLmJh
Y2tpbmdTdG9yZVNpemUgPSBtX3NpemU7Ci0KLSAgICBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcg
PSByZW5kZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOwotICAgIGlmICht
X3NpemUud2lkdGgoKSA8PSAwIHx8IG1fc2l6ZS5oZWlnaHQoKSA8PSAwKQotICAgICAgICByZXR1
cm47Ci0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIENoZWNr
ZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gd2lkdGggPSBtX3NpemUud2lkdGgoKTsKLSAgICBDaGVj
a2VkPGludCwgUmVjb3JkT3ZlcmZsb3c+IGhlaWdodCA9IG1fc2l6ZS5oZWlnaHQoKTsKLSNlbmRp
ZgotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwotICAgIG1fZGF0YS5ieXRlc1Bl
clJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tp
bmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93
PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFj
a2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7Ci0gICAgaWYgKG51
bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgVVNFKElPU1VS
RkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICBJbnRTaXplIG1heFNpemUgPSBJT1N1cmZh
Y2U6Om1heGltdW1TaXplKCk7Ci0gICAgaWYgKHdpZHRoLnVuc2FmZUdldCgpID4gbWF4U2l6ZS53
aWR0aCgpIHx8IGhlaWdodC51bnNhZmVHZXQoKSA+IG1heFNpemUuaGVpZ2h0KCkpCi0gICAgICAg
IGFjY2VsZXJhdGVSZW5kZXJpbmcgPSBmYWxzZTsKLSNlbHNlCi0gICAgQVNTRVJUKHJlbmRlcmlu
Z01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7Ci0jZW5kaWYKLQotICAgIG1f
ZGF0YS5jb2xvclNwYWNlID0gY29sb3JTcGFjZTsKLQotICAgIFJldGFpblB0cjxDR0NvbnRleHRS
ZWY+IGNnQ29udGV4dDsKLSAgICBpZiAoYWNjZWxlcmF0ZVJlbmRlcmluZykgewotI2lmIFVTRShJ
T1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgICAgIEZsb2F0U2l6ZSB1c2VyQm91
bmRzID0gRmxvYXRTaXplKHdpZHRoLnVuc2FmZUdldCgpLCBoZWlnaHQudW5zYWZlR2V0KCkpOwot
ICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKG1fZGF0YS5iYWNraW5n
U3RvcmVTaXplLCBJbnRTaXplKHVzZXJCb3VuZHMpLCBjb2xvclNwYWNlKTsKLSAgICAgICAgaWYg
KG1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgICAgICBjZ0NvbnRleHQgPSBtX2RhdGEuc3VyZmFj
ZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RXaW5kb3cpOwotICAgICAgICAgICAgaWYgKGNn
Q29udGV4dCkKLSAgICAgICAgICAgICAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0Lmdl
dCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB1c2VyQm91bmRzKSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbV9kYXRhLnN1cmZhY2UgPSBudWxscHRyOwotICAgICAgICB9
Ci0jZWxzZQotICAgICAgICBVTlVTRURfUEFSQU0oaG9zdFdpbmRvdyk7Ci0jZW5kaWYKLSAgICAg
ICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICBhY2NlbGVyYXRlUmVuZGVyaW5nID0gZmFs
c2U7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMsIGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQg
cGF0aC4KLSAgICB9Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAg
bV9kYXRhLmRhdGEgPSBJbWFnZUJ1ZmZlck1hbGxvYzo6dHJ5WmVyb2VkTWFsbG9jKG1fZGF0YS5i
YWNraW5nU3RvcmVTaXplLmhlaWdodCgpICogbV9kYXRhLmJ5dGVzUGVyUm93LnVuc2FmZUdldCgp
KTsKLSAgICAgICAgaWYgKCFtX2RhdGEuZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9kYXRhLmRhdGEpICYgMykp
OwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdl
QWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7Ci0jZWxz
ZQotICAgICAgICBtX2RhdGEuYml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVk
TGFzdDsKLSNlbmRpZgotICAgICAgICBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZShtX2RhdGEuZGF0YSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIG1fZGF0YS5ieXRlc1BlclJvdy51bnNh
ZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZvKSk7Ci0gICAgICAg
IGNvbnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0
YSwgc2l6ZV90KSB7Ci0gICAgICAgICAgICBJbWFnZUJ1ZmZlck1hbGxvYzo6ZnJlZShjb25zdF9j
YXN0PHZvaWQqPihkYXRhKSk7Ci0gICAgICAgIH07Ci0gICAgICAgIC8vIENyZWF0ZSBhIGxpdmUg
aW1hZ2UgdGhhdCB3cmFwcyB0aGUgZGF0YS4KLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0Jp
Z0Vub3VnaChtX2RhdGEuZGF0YSwgbnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgICAgICBtX2Rh
dGEuZGF0YVByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAs
IG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSwgcmVsZWFzZUltYWdlRGF0YSkpOwot
Ci0gICAgICAgIGlmICghY2dDb250ZXh0KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KGNnQ29udGV4dC5n
ZXQoKSk7Ci0gICAgfQotCi0gICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOwot
ICAgIGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdo
dCgpKTsKLSAgICBjb250ZXh0KCkuYXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBI
b3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogSW1hZ2VCdWZmZXIo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjYWNoZWRDR0NvbG9yU3BhY2UoaW1hZ2VDb2xvclNwYWNl
KSwgcmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgc3VjY2VzcykKLXsKLX0KLQotSW1hZ2VCdWZm
ZXI6On5JbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25zdAot
ewotICAgIC8vIG1lbW9yeUNvc3QoKSBtYXkgYmUgaW52b2tlZCBjb25jdXJyZW50bHkgZnJvbSBh
IEdDIHRocmVhZCwgYW5kIHdlIG5lZWQgdG8gYmUgY2FyZWZ1bCBhYm91dCB3aGF0IGRhdGEgd2Ug
YWNjZXNzIGhlcmUgYW5kIGhvdy4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIGludGVybmFs
U2l6ZSgpIGJlY2F1c2UgaXQgZG9lc24ndCBkbyBhbnkgcG9pbnRlciBjaGFzaW5nLgotICAgIC8v
IEl0J3Mgc2FmZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBj
YW4gb25seSBiZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZm
ZXIuCi0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRl
cygpIGJlY2F1c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYg
KG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0
ZXMoKTsKLSAgICByZXR1cm4gNCAqIGludGVybmFsU2l6ZSgpLndpZHRoKCkgKiBpbnRlcm5hbFNp
emUoKS5oZWlnaHQoKTsKLX0KLQotc2l6ZV90IEltYWdlQnVmZmVyOjpleHRlcm5hbE1lbW9yeUNv
c3QoKSBjb25zdAotewotICAgIC8vIGV4dGVybmFsTWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2Vk
IGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVs
IGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2Fm
ZSB0byBhY2Nlc3MgbV9kYXRhLnN1cmZhY2UgYmVjYXVzZSB0aGUgc3VyZmFjZSBjYW4gb25seSBi
ZSBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoaXMgSW1hZ2VCdWZmZXIuCi0gICAg
Ly8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRlcygpIGJlY2F1
c2UgdG90YWxCeXRlcygpIGRvZXNuJ3QgY2hhc2UgcG9pbnRlcnMuCi0gICAgaWYgKG1fZGF0YS5z
dXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRhLnN1cmZhY2UtPnRvdGFsQnl0ZXMoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLSNlbmRpZgotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpj
b250ZXh0KCkgY29uc3QKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KQotICAgIGlmIChtX2RhdGEuc3VyZmFjZSkKLSAgICAgICAgcmV0dXJuIG1fZGF0YS5zdXJmYWNl
LT5lbnN1cmVHcmFwaGljc0NvbnRleHQoKTsKLSNlbmRpZgotICAgIHJldHVybiAqbV9kYXRhLmNv
bnRleHQ7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0g
ICAgQ0dDb250ZXh0Rmx1c2goY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotc3Rh
dGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShD
R0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCi17Ci0gICAgaWYgKGltYWdl
ICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRz
LndpZHRoKCkpIHx8IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVf
dD4oYm91bmRzLmhlaWdodCgpKSkpCi0gICAgICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVh
dGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwgMCwgYm91bmRzLndpZHRoKCks
IGJvdW5kcy5oZWlnaHQoKSkpKTsKLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQ
dHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoUmV0YWluUHRy
PENHSW1hZ2VSZWY+JiYgaW1hZ2UsIEludFNpemUgbG9naWNhbFNpemUsIEludFNpemUgaW50ZXJu
YWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2
ZVJlc29sdXRpb24pCi17Ci0gICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZl
UmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBj
cmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRl
eHRDcmVhdGUoMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCksIDgs
IDQgKiBsb2dpY2FsU2l6ZS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNv
bnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxT
aXplKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVzZXJTcGFjZSA9IGxvZ2ljYWxT
aXplOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0
KEZsb2F0UG9pbnQ6Onplcm8oKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UpLCBpbWFnZS5nZXQoKSk7
Ci0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0LmdldCgpKSk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGltYWdlKSk7
Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikg
Y29uc3QKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKG1fcmVz
b2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3Ip
OwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZO
ZWVkZWQoV1RGTW92ZShpbWFnZSksIGxvZ2ljYWxTaXplKCksIGludGVybmFsU2l6ZSgpLCBtX3Jl
c29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGlt
YWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAg
IEludFNpemUgaW50ZXJuYWxTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAg
IEludFNpemUgbG9naWNhbFNpemUgPSBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBm
bG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0K
LSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50
b05hdGl2ZUltYWdlKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgbG9naWNhbFNpemUsIGludGVybmFs
U2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NB
TlZBU19CQUNLSU5HX1NUT1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNl
KQotICAgICAgICByZXR1cm4gaW1hZ2VCdWZmZXItPmNvcHlOYXRpdmVJbWFnZShEb250Q29weUJh
Y2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3Vy
ZmFjZTo6Y3JlYXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0jZWxz
ZQotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2lu
Z1N0b3JlKTsKLSNlbmRpZgotfQotCi1SZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2VCdWZmZXI6
OmNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKLXsK
LSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBzd2l0Y2ggKGNvcHlCZWhhdmlvcikgewot
ICAgICAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBh
ZG9wdENGKENHSW1hZ2VDcmVhdGUobV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSwgbV9k
YXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCksIDgsIDMyLCBtX2RhdGEuYnl0ZXNQZXJSb3cu
dW5zYWZlR2V0KCksIG1fZGF0YS5jb2xvclNwYWNlLCBtX2RhdGEuYml0bWFwSW5mbywgbV9kYXRh
LmRhdGFQcm92aWRlci5nZXQoKSwgMCwgdHJ1ZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKLSAg
ICAgICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250
ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5H
X1NUT1JFKQotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBtX2RhdGEuc3VyZmFjZS0+Y3JlYXRl
SW1hZ2UoKTsKLSNlbmRpZgotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi12b2lkIEltYWdlQnVm
ZmVyOjpkcmF3Q29uc3VtaW5nKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZm
ZXIsIEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAg
ICBpZiAoIWltYWdlQnVmZmVyLT5tX2RhdGEuc3VyZmFjZSkgewotICAgICAgICBpbWFnZUJ1ZmZl
ci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIEFTU0VSVChkZXN0Q29udGV4dC5pc0FjY2VsZXJh
dGVkQ29udGV4dCgpKTsKLSAgICAKLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1
ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0gICAgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplID0g
aW1hZ2VCdWZmZXItPm1fZGF0YS5iYWNraW5nU3RvcmVTaXplOwotCi0gICAgUmV0YWluUHRyPENH
SW1hZ2VSZWY+IGltYWdlID0gSU9TdXJmYWNlOjpzaW5rSW50b0ltYWdlKElPU3VyZmFjZTo6Y3Jl
YXRlRnJvbUltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2VCdWZmZXIpKSk7Ci0gICAgCi0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKHJlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGlt
YWdlLmdldCgpLCBiYWNraW5nU3RvcmVTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBv
cHRpb25zKTsKLSNlbHNlCi0gICAgaW1hZ2VCdWZmZXItPmRyYXcoZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKLSNlbmRpZgotfQotCi12b2lkIEltYWdlQnVmZmVyOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCi17Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwotICAgIGlmICgm
ZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2luZ1N0b3Jl
KTsgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAg
ICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlKTsKLQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgZGVzdENvbnRleHQu
ZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSwgZGVz
dFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6
OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKCFjb250ZXh0KCkuaXNB
Y2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAoJmRlc3RDb250ZXh0ID09ICZjb250
ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICAg
ICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkg
Ly8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVkIHRvIGRlZXAgY29weS4KLSAgICAg
ICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVz
dGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JS
ZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAg
ICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3Qs
IGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4g
Y29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkKLSAgICAgICAgICAgIGNvcHktPmRy
YXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgfQotfQotCi1SZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
Y29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJheURpbWVuc2lvbnMsIENvb3Jk
aW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAg
SW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dp
Y2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25T
Y2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lvbnMpCi0gICAgICAgICpwaXhlbEFy
cmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0gICAgcmV0dXJuIG1fZGF0YS5nZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50
ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQotUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9ucywg
Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChjb250
ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0K
LSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1
dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBp
eGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9kYXRh
LmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwg
aW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKTsKLX0KLQot
dm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBz
b3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXpl
JiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYg
ZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYg
KGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRleHQo
KTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNlUmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50
U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNlU2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5
c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkgewotICAgICAgICBzY2FsZWRTb3VyY2VS
ZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgfQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291
cmNlLCBzb3VyY2VGb3JtYXQsIHNjYWxlZFNvdXJjZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgp
KTsKLSAgICAKLSAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGlt
YWdlIGlmIGl0IGlzIHJlcXVlc3RlZCB0aHJvdWdoIENHSU9TdXJmYWNlQ29udGV4dENyZWF0ZUlt
YWdlKCkuCi0gICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgY29udGV4dCgpLmZpbGxS
ZWN0KEZsb2F0UmVjdCgxLCAxLCAwLCAwKSk7Ci19Ci0KLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBpZiAo
YXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlv
bikpCi0gICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKLSAgICBy
ZXR1cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0Rh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25z
dAotewotICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uOjpObykpCi0gICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0
KCkpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVJldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVm
ZmVyOjp0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0g
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7Ci0KLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250
ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgYXV0byB1dGkgPSB1dGlGcm9t
SW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7Ci0gICAgQVNTRVJUKHV0aSk7Ci0KLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBwcmVtdWx0aXBsaWVkRGF0YTsKLQotICAgIGlmIChDRkVxdWFsKHV0aS5nZXQoKSwganBlZ1VU
SSgpKSkgewotICAgICAgICAvLyBKUEVHcyBkb24ndCBoYXZlIGFuIGFscGhhIGNoYW5uZWwsIHNv
IHdlIGhhdmUgdG8gbWFudWFsbHkgY29tcG9zaXRlIG9uIHRvcCBvZiBibGFjay4KLSAgICAgICAg
cHJlbXVsdGlwbGllZERhdGEgPSBnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50
UG9pbnQoKSwgbG9naWNhbFNpemUoKSkpOwotICAgICAgICBpZiAoIXByZW11bHRpcGxpZWREYXRh
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgc2l6ZV90IGRhdGFTaXpl
ID0gNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSAqIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCk7Ci0g
ICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJlbXVsdGlwbGllZERhdGEtPmRh
dGEoKSwgZGF0YVNpemUpOwotICAgICAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YShudWxscHRyLCBwcmVtdWx0aXBsaWVkRGF0YS0+ZGF0
YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOwotICAgICAgICBpZiAoIWRhdGFQcm92aWRlcikKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIGltYWdlID0gYWRvcHRDRihDR0lt
YWdlQ3JlYXRlKGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgbG9naWNhbFNpemUoKS5oZWlnaHQoKSwg
OCwgMzIsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtD
R0JpdG1hcEJ5dGVPcmRlckRlZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRh
UHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7Ci0g
ICAgfSBlbHNlIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlv
biA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykgewotICAgICAgICBpbWFnZSA9IGNvcHlOYXRp
dmVJbWFnZShDb3B5QmFja2luZ1N0b3JlKTsKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVk
SW1hZ2VJZk5lY2Vzc2FyeShpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3Jl
KTsKLSAgICAgICAgYXV0byBjb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUo
MCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICog
bG9naWNhbFNpemUoKS53aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhh
UHJlbXVsdGlwbGllZExhc3QpKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRl
eHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0
KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgbG9naWNhbFNpemUoKS53aWR0aCgpLCBs
b2dpY2FsU2l6ZSgpLmhlaWdodCgpKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBpbWFnZVNpemVJblVz
ZXJTcGFjZSA9IGxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIGltYWdlU2l6ZUluVXNlclNwYWNlLndpZHRoKCks
IGltYWdlU2l6ZUluVXNlclNwYWNlLmhlaWdodCgpKSwgaW1hZ2UuZ2V0KCkpOwotICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkp
OwotICAgIH0KLQotICAgIGF1dG8gY2ZEYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVNdXRhYmxl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKLSAgICBpZiAoIWVuY29kZUltYWdlKGltYWdlLmdl
dCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgcmV0dXJuIFdURk1vdmUoY2ZEYXRhKTsKLX0KLQotVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBpZiAoY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAgIHJl
dHVybiBtX2RhdGEudG9CR1JBRGF0YShjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzFjZDIz
NzU4MWY5NWQwY2NhY2I4MmM4NGZjMjY0ZjkyYTc5YjNlYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNw
cApAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorI2luY2x1
ZGUgPEFjY2VsZXJhdGUvQWNjZWxlcmF0ZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xvclNwYWNlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBDR0NvbnRleHRSZWYg
Y2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKTsKKworICAgIGlmIChDR0NvbnRl
eHRHZXRUeXBlKGNnQ29udGV4dCkgPT0ga0NHQ29udGV4dFR5cGVCaXRtYXApCisgICAgICAgIHJl
dHVybiBDR0JpdG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7CisgICAgCisgICAg
cmV0dXJuIGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
KyNlbmRpZgorfQorIworCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpzZXR1cENvbnRleHQo
KQoreworICAgIGNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoMSwgLTEpKTsKKyAgICBjb250ZXh0
KCkudHJhbnNsYXRlKDAsIC1tX2JhY2tlbmRTaXplLmhlaWdodCgpKTsKKyAgICBjb250ZXh0KCku
YXBwbHlEZXZpY2VTY2FsZUZhY3RvcihtX3Jlc29sdXRpb25TY2FsZSk7Cit9CisKK3N0YXRpYyBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoQ0dJbWFn
ZVJlZiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUpCit7CisgICAgaWYgKGltYWdl
ICYmIChDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYmFja2Vu
ZFNpemUud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8
c2l6ZV90PihiYWNrZW5kU2l6ZS5oZWlnaHQoKSkpKQorICAgICAgICByZXR1cm4gYWRvcHRDRihD
R0ltYWdlQ3JlYXRlV2l0aEltYWdlSW5SZWN0KGltYWdlLCBDR1JlY3RNYWtlKDAsIDAsIGJhY2tl
bmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpKSkpOworICAgIHJldHVybiBpbWFn
ZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxp
bmdJZk5lZWRlZChSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgY29uc3QgSW50U2l6ZSYg
bG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgaWYg
KHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJl
c29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShpbWFnZS5nZXQoKSwgYmFja2VuZFNpemUpOworICAgIGVsc2UgeworICAgICAgICBhdXRv
IGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53
aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWlnaHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCks
IHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwor
ICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2Rl
Q29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRS
ZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgbG9naWNhbFNpemUpKTsKKyAgICAgICAgRmxvYXRTaXpl
IGltYWdlU2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemU7CisgICAgICAgIENHQ29udGV4dERy
YXdJbWFnZShjb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFn
ZVNpemVJblVzZXJTcGFjZSksIGltYWdlLmdldCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENG
KENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdlKGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAg
ICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRt
YXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9y
LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5h
dGl2ZUltYWdlUHRyIGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHBy
ZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1h
Z2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGlt
YWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4g
Y3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbV9s
b2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVz
b2x1dGlvbik7Cit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNpbmtJ
bnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBy
ZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChzaW5rSW50b05hdGl2
ZUltYWdlKCksIG1fbG9naWNhbFNpemUsIG1fYmFja2VuZFNpemUsIG1fcmVzb2x1dGlvblNjYWxl
LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IHNyY1JlY3RTY2FsZWQgPSBzcmNSZWN0OworICAg
IHNyY1JlY3RTY2FsZWQuc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAgaWYgKGF1dG8g
aW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5
QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkZXN0Q29udGV4
dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fYmFja2VuZFNpemUsIGRlc3RSZWN0LCBz
cmNSZWN0U2NhbGVkLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9h
dFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IGNv
cHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENvcHlCYWNraW5nU3RvcmUgOiBE
b250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitBZmZpbmVUcmFuc2Zvcm0gSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmJhc2VUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oMSwgMCwgMCwgLTEsIDAsIG1fbG9naWNhbFNpemUuaGVpZ2h0KCkpOworfQorCitSZXRhaW5Q
dHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24g
cHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIEFTU0VSVChNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhtaW1lVHlwZSkpOworCisgICAg
YXV0byB1dGkgPSB1dGlGcm9tSW1hZ2VCdWZmZXJNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgQVNT
RVJUKHV0aSk7CisKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7CisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBwcm90ZWN0ZWRQaXhlbEFycmF5OworCisgICAgaWYgKENGRXF1
YWwodXRpLmdldCgpLCBqcGVnVVRJKCkpKSB7CisgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUg
YW4gYWxwaGEgY2hhbm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9w
IG9mIGJsYWNrLgorICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAg
aWYgKCFpbWFnZURhdGEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBw
cm90ZWN0ZWRQaXhlbEFycmF5ID0gbWFrZVJlZlB0cihpbWFnZURhdGEtPmRhdGEoKSk7CisgICAg
ICAgIHNpemVfdCBkYXRhU2l6ZSA9IHByb3RlY3RlZFBpeGVsQXJyYXktPmJ5dGVMZW5ndGgoKTsK
KyAgICAgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5zaW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgp
OworCisgICAgICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2gocHJvdGVjdGVkUGl4ZWxB
cnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSk7CisgICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByb3RlY3RlZFBpeGVs
QXJyYXktPmRhdGEoKSwgZGF0YVNpemUsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFkYXRhUHJv
dmlkZXIpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpbWFnZSA9IGFk
b3B0Q0YoQ0dJbWFnZUNyZWF0ZShwaXhlbEFycmF5RGltZW5zaW9ucy53aWR0aCgpLCBwaXhlbEFy
cmF5RGltZW5zaW9ucy5oZWlnaHQoKSwgOCwgMzIsIDQgKiBwaXhlbEFycmF5RGltZW5zaW9ucy53
aWR0aCgpLCBzUkdCQ29sb3JTcGFjZVJlZigpLCBrQ0dCaXRtYXBCeXRlT3JkZXJEZWZhdWx0IHwg
a0NHSW1hZ2VBbHBoYU5vbmVTa2lwTGFzdCwgZGF0YVByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCkpOworICAgIH0gZWxzZSBpZiAobV9yZXNvbHV0aW9u
U2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNvbHV0aW9uOjpZ
ZXMpIHsKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoQ29weUJhY2tpbmdTdG9yZSk7
CisgICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3NhcnkoaW1hZ2UuZ2V0
KCksIGJhY2tlbmRTaXplKCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKyAgICAgICAgYXV0byBjb250ZXh0ID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUoMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBi
YWNrZW5kU2l6ZSgpLmhlaWdodCgpLCA4LCA0ICogYmFja2VuZFNpemUoKS53aWR0aCgpLCBzUkdC
Q29sb3JTcGFjZVJlZigpLCBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QpKTsKKyAgICAg
ICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9kZUNvcHkp
OworICAgICAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2Uo
MCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSk7Cisg
ICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAs
IGJhY2tlbmRTaXplKCkud2lkdGgoKSwgYmFja2VuZFNpemUoKS5oZWlnaHQoKSksIGltYWdlLmdl
dCgpKTsKKyAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUltYWdl
KGNvbnRleHQuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBhdXRvIGNmRGF0YSA9IGFkb3B0Q0YoQ0ZE
YXRhQ3JlYXRlTXV0YWJsZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCAwKSk7CisgICAgaWYgKCFlbmNv
ZGVJbWFnZShpbWFnZS5nZXQoKSwgdXRpLmdldCgpLCBxdWFsaXR5LCBjZkRhdGEuZ2V0KCkpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEZNb3ZlKGNmRGF0YSk7Cit9
CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pKQorICAgICAgICByZXR1cm4gZGF0YVZlY3RvcihkYXRhLmdldCgpKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCitTdHJpbmcgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgaWYgKGF1dG8gZGF0
YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pKQorICAg
ICAgICByZXR1cm4gZGF0YVVSTChkYXRhLmdldCgpLCBtaW1lVHlwZSk7CisgICAgcmV0dXJuICJk
YXRhOiwiX3M7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURSkKK3N0YXRpYyBpbmxpbmUgdkltYWdl
X0J1ZmZlciBtYWtlVkltYWdlQnVmZmVyKHVuc2lnbmVkIGJ5dGVzUGVyUm93LCB1aW50OF90KiBy
b3dzLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIHZJbWFnZV9CdWZmZXIgdkltYWdlQnVm
ZmVyOworCisgICAgdkltYWdlQnVmZmVyLmhlaWdodCA9IHN0YXRpY19jYXN0PHZJbWFnZVBpeGVs
Q291bnQ+KHNpemUuaGVpZ2h0KCkpOworICAgIHZJbWFnZUJ1ZmZlci53aWR0aCA9IHN0YXRpY19j
YXN0PHZJbWFnZVBpeGVsQ291bnQ+KHNpemUud2lkdGgoKSk7CisgICAgdkltYWdlQnVmZmVyLnJv
d0J5dGVzID0gYnl0ZXNQZXJSb3c7CisgICAgdkltYWdlQnVmZmVyLmRhdGEgPSByb3dzOworICAg
IHJldHVybiB2SW1hZ2VCdWZmZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5SW1hZ2VQ
aXhlbHNBY2NlbGVyYXRlZCgKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgc3JjLAorICAg
IEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xvckZvcm1hdCBkZXN0
Q29sb3JGb3JtYXQsIHZJbWFnZV9CdWZmZXImIGRlc3QpCit7CisgICAgaWYgKHNyY0FscGhhRm9y
bWF0ID09IGRlc3RBbHBoYUZvcm1hdCkgeworICAgICAgICBBU1NFUlQoc3JjQ29sb3JGb3JtYXQg
IT0gZGVzdENvbG9yRm9ybWF0KTsKKyAgICAgICAgQVNTRVJUKGRlc3RBbHBoYUZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKTsKKworICAgICAgICAvLyBTd2Fw
IHBpeGVsIGNoYW5uZWxzIEJHUkEgPC0+IFJHQkEuCisgICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFw
WzRdID0geyAyLCAxLCAwLCAzIH07CisgICAgICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdC
ODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAgICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gQ29s
b3JGb3JtYXQ6OlJHQkEpCisgICAgICAgICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1hdCA9PSBD
b2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JB
ODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VO
b0ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQgIT0gZGVzdENvbG9yRm9y
bWF0KSB7CisgICAgICAgIC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAg
ICAgICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdklt
YWdlUGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZkZXN0LCAmZGVzdCwgbWFwLCBrdkltYWdlTm9G
bGFncyk7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2VQ
aXhlbHMoCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JG
b3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBz
cmNSb3dzLAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9ybWF0LCBDb2xv
ckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdywgdWludDhf
dCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNyY0Fs
cGhhRm9ybWF0ID09IGRlc3RBbHBoYUZvcm1hdCAmJiBzcmNDb2xvckZvcm1hdCA9PSBkZXN0Q29s
b3JGb3JtYXQpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMo
c3JjQWxwaGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywg
ZGVzdEFscGhhRm9ybWF0LCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJv
d3MsIHNpemUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdkltYWdlX0J1ZmZlciBz
cmMgPSBtYWtlVkltYWdlQnVmZmVyKHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLCBzaXplKTsKKyAg
ICB2SW1hZ2VfQnVmZmVyIGRlc3QgPSBtYWtlVkltYWdlQnVmZmVyKGRlc3RCeXRlc1BlclJvdywg
ZGVzdFJvd3MsIHNpemUpOworCisgICAgY29weUltYWdlUGl4ZWxzQWNjZWxlcmF0ZWQoc3JjQWxw
aGFGb3JtYXQsIHNyY0NvbG9yRm9ybWF0LCBzcmMsIGRlc3RBbHBoYUZvcm1hdCwgZGVzdENvbG9y
Rm9ybWF0LCBkZXN0KTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jN2NhMzk4MDM0
ZjI1YTMzNDkyNDdkNDM0ZjVmNjU5ZjkyYWYzZDQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaApAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJC
YWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV0VCQ09SRV9FWFBPUlQg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJCYWNrZW5kIHsKK3B1Ymxp
YzoKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJh
Y2tpbmdTdG9yZSwgUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZl
UmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworICAgIHZvaWQgZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IElt
YWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYmFz
ZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJy
aWRlOworCitwcm90ZWN0ZWQ6CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ7CisKKyAgICBzdGF0aWMgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29u
dGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisgICAgdm9pZCBzZXR1cENv
bnRleHQoKTsKKyAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkRhdGFSZWY+IHRvQ0ZEYXRhKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdDsKKworI2lmIFVTRShBQ0NFTEVSQVRFKQorICAgIHZvaWQgY29weUltYWdl
UGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0LCBD
b2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVpbnQ4
X3QqIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzdEFscGhhRm9y
bWF0LCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJv
dywgdWludDhfdCogZGVzdFJvd3MsIGNvbnN0IEludFNpemUmKSBjb25zdCBvdmVycmlkZTsKKyNl
bmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzODNjOTk2ZTU0
ZDBiMDQ3MTNmZGM3NDJjMjE0MzZkMzgwN2U4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5j
cHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyVXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKK2NvbnN0ZXhwciBjb25zdCBDR0Jp
dG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZp
cnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0OworI2Vsc2UKK2NvbnN0ZXhwciBjb25zdCBD
R0JpdG1hcEluZm8gRGVmYXVsdEJpdG1hcEluZm8gPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGll
ZExhc3Q7CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVy
Q0dCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kPiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENH
Q29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIElu
dFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9u
U2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgdm9pZCogZGF0YTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdyA9IDQg
KiBiYWNrZW5kU2l6ZS53aWR0aCgpOworCisgICAgaWYgKCF0cnlGYXN0Q2FsbG9jKGJhY2tlbmRT
aXplLmhlaWdodCgpLCBieXRlc1BlclJvdykuZ2V0VmFsdWUoZGF0YSkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgQVNTRVJUKCEocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZGF0
YSkgJiAzKSk7CisKKyAgICBzaXplX3QgbnVtQnl0ZXMgPSBiYWNrZW5kU2l6ZS5oZWlnaHQoKSAq
IGJ5dGVzUGVyUm93OworICAgIHZlcmlmeUltYWdlQnVmZmVySXNCaWdFbm91Z2goZGF0YSwgbnVt
Qnl0ZXMpOworCisgICAgYXV0byBjZ0NvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENy
ZWF0ZShkYXRhLCBiYWNrZW5kU2l6ZS53aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgOCwg
Ynl0ZXNQZXJSb3csIGNnQ29sb3JTcGFjZSwgRGVmYXVsdEJpdG1hcEluZm8pKTsKKyAgICBpZiAo
IWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGNvbnRleHQg
PSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dDb250ZXh0LmdldCgpKTsKKworICAgIGNv
bnN0IGF1dG8gcmVsZWFzZUltYWdlRGF0YSA9IFtdICh2b2lkKiwgY29uc3Qgdm9pZCogZGF0YSwg
c2l6ZV90KSB7CisgICAgICAgIGZhc3RGcmVlKGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKKyAg
ICB9OworCisgICAgYXV0byBkYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3Jl
YXRlV2l0aERhdGEoMCwgZGF0YSwgbnVtQnl0ZXMsIHJlbGVhc2VJbWFnZURhdGEpKTsKKworICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+KG5ldyBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCBkYXRhLCBXVEZNb3ZlKGRhdGFQcm92aWRlciksIFdURk1vdmUoY29u
dGV4dCkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
PiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChhdXRvIGNnQ29s
b3JTcGFjZSA9IGNvbnRleHRDb2xvclNwYWNlKGNvbnRleHQpKQorICAgICAgICByZXR1cm4gSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNlOjpTUkdC
LCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIG51
bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9z
dFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGNhY2hlZENH
Q29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7Cit9CisKK0ltYWdlQnVmZmVyQ0dC
aXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUm
IGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0Rh
dGFQcm92aWRlclJlZj4mJiBkYXRhUHJvdmlkZXIsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0Nv
bnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNrZW5kKGxvZ2ljYWxTaXpl
LCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlKQorICAgICwgbV9kYXRh
KGRhdGEpCisgICAgLCBtX2RhdGFQcm92aWRlcihXVEZNb3ZlKGRhdGFQcm92aWRlcikpCisgICAg
LCBtX2NvbnRleHQoV1RGTW92ZShjb250ZXh0KSkKK3sKKyAgICBBU1NFUlQobV9kYXRhKTsKKyAg
ICBBU1NFUlQobV9kYXRhUHJvdmlkZXIpOworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIHNl
dHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kOjpjb250ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwor
TmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNv
cHlCZWhhdmlvcikgeworICAgIGNhc2UgQ29weUJhY2tpbmdTdG9yZToKKyAgICAgICAgcmV0dXJu
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dCgpLnBsYXRmb3JtQ29u
dGV4dCgpKSk7CisKKyAgICBjYXNlIERvbnRDb3B5QmFja2luZ1N0b3JlOgorICAgICAgICByZXR1
cm4gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKAorICAgICAgICAgICAgbV9iYWNrZW5kU2l6ZS53aWR0
aCgpLCBtX2JhY2tlbmRTaXplLmhlaWdodCgpLCA4LCAzMiwgYnl0ZXNQZXJSb3coKSwKKyAgICAg
ICAgICAgIGNhY2hlZENHQ29sb3JTcGFjZShtX2NvbG9yU3BhY2UpLCBEZWZhdWx0Qml0bWFwSW5m
bywgbV9kYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAwLCB0cnVlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KSk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVy
QmFja2VuZDo6dG9CR1JBRGF0YShtX2RhdGEpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFn
ZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QsIG1fZGF0YSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OnB1dElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURh
dGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRl
c3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZv
cm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG1fZGF0YSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2YWY2NjJhMWM3NmE4Yjg5Yjc3NmYyMzk2Y2I4NTM0
N2Q2YTQ5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJ
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7
CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZCk7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOwor
cHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25z
dCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhv
c3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ0dCaXRt
YXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0
Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29w
eUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9C
R1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UsIHZvaWQqIGRhdGEsIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4mJiwgc3Rk
Ojp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIHZvaWQqIG1fZGF0
YTsKKyAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IG1fZGF0YVByb3ZpZGVyOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFmYzAzMWNjMDY2NGRlN2E1NzdkMWJjYjVi
NDk2MmZkZDJlYWJhYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFD
Ry5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMS0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJJbWFnZUJ1ZmZlckRhdGEuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ29yZUdyYXBoaWNzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNDSW5saW5l
cy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0jaW5jbHVkZSA8QWNjZWxlcmF0
ZS9BY2NlbGVyYXRlLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8ZGlzcGF0Y2gvZGlz
cGF0Y2guaD4KLSNpbmNsdWRlIDxwYWwvc3BpL2NvY29hL0lPU3VyZmFjZVNQSS5oPgotI2VuZGlm
Ci0KLS8vIENBIHVzZXMgQVJHQjMyIGZvciB0ZXh0dXJlcyBhbmQgQVJHQjMyIC0+IEFSR0IzMiBy
ZXNhbXBsaW5nIGlzIG9wdGltaXplZC4KLSNkZWZpbmUgVVNFX0FSR0IzMiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkgJiYg
KFVTRV9BUkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi1zdGF0
aWMgdm9pZCB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShjb25zdCB2SW1hZ2VfQnVmZmVyJiBzcmMs
IGNvbnN0IHZJbWFnZV9CdWZmZXImIGRlc3QpCi17Ci0gICAgQVNTRVJUKHNyYy5kYXRhKTsKLSAg
ICBBU1NFUlQoZGVzdC5kYXRhKTsKLQotICAgIGlmIChrdkltYWdlTm9FcnJvciAhPSB2SW1hZ2VV
bnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3MpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5kIDMsIHRvIGNvbnZl
cnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0YSBleHBlY3RzIFJH
QkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICB2SW1h
Z2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0Zs
YWdzKTsKLX0KLQotc3RhdGljIHZvaWQgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFn
ZV9CdWZmZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQo
c3JjLmRhdGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vy
cm9yICE9IHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFn
ZU5vRmxhZ3MpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTd2FwIGNoYW5uZWxzIDEgYW5k
IDMsIHRvIGNvbnZlcnQgQkdSQTwtPlJHQkEuIElPU3VyZmFjZXMgYXJlIEJHUkEsIEltYWdlRGF0
YSBleHBlY3RzIFJHQkEuCi0gICAgY29uc3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMg
fTsKLSAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAs
IGt2SW1hZ2VOb0ZsYWdzKTsKLX0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkgJiYgKFVTRV9B
UkdCMzIgfHwgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkpCi0KLXN0YXRpYyBp
bmxpbmUgdm9pZCB0cmFuc2ZlckRhdGEodm9pZCogb3V0cHV0LCB2b2lkKiBpbnB1dCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBzaXplX3QgaW5wdXRCeXRlc1BlclJvdykKLXsKLSNpZiBVU0UoQUND
RUxFUkFURSkKLSAgICBBU1NFUlQoaW5wdXQpOwotICAgIEFTU0VSVChvdXRwdXQpOwotCi0gICAg
dkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgc3JjLndpZHRoID0gd2lkdGg7Ci0gICAgc3JjLmhlaWdo
dCA9IGhlaWdodDsKLSAgICBzcmMucm93Qnl0ZXMgPSBpbnB1dEJ5dGVzUGVyUm93OwotICAgIHNy
Yy5kYXRhID0gaW5wdXQ7Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgZGVzdC53aWR0
aCA9IHdpZHRoOwotICAgIGRlc3QuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIGRlc3Qucm93Qnl0ZXMg
PSB3aWR0aCAqIDQ7Ci0gICAgZGVzdC5kYXRhID0gb3V0cHV0OwotCi0gICAgdkltYWdlVW5wcmVt
dWx0aXBseURhdGFfQkdSQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0ZsYWdzKTsKLSNlbHNl
Ci0gICAgVU5VU0VEX1BBUkFNKG91dHB1dCk7Ci0gICAgVU5VU0VEX1BBUkFNKGlucHV0KTsKLSAg
ICBVTlVTRURfUEFSQU0od2lkdGgpOwotICAgIFVOVVNFRF9QQVJBTShoZWlnaHQpOwotICAgIC8v
IEZJWE1FOiBBZGQgc3VwcG9ydCBmb3Igbm90IEFDQ0VMRVJBVEUuCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGF0YTo6
dG9CR1JBRGF0YShib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcsIGludCB3aWR0aCwgaW50IGhlaWdo
dCkgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0KDQgKiB3aWR0aCAqIGhlaWdo
dCk7Ci0KLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAgICAgICAgdHJhbnNmZXJE
YXRhKHJlc3VsdC5kYXRhKCksIGRhdGEsIHdpZHRoLCBoZWlnaHQsIDQgKiBiYWNraW5nU3RvcmVT
aXplLndpZHRoKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNpZiBVU0UoSU9T
VVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2so
KnN1cmZhY2UpOwotICAgIHRyYW5zZmVyRGF0YShyZXN1bHQuZGF0YSgpLCBsb2NrLnN1cmZhY2VC
YXNlQWRkcmVzcygpLCB3aWR0aCwgaGVpZ2h0LCBzdXJmYWNlLT5ieXRlc1BlclJvdygpKTsKLSNl
bHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5kaWYKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKSBjb25zdAot
ewotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBhcmVhID0gNDsKLSAgICBh
cmVhICo9IHJlY3Qud2lkdGgoKTsKLSAgICBhcmVhICo9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgaWYg
KGFyZWEuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoYXJl
YS51bnNhZmVHZXQoKSk7Ci0gICAgdWludDhfdCogcmVzdWx0RGF0YSA9IHJlc3VsdCA/IHJlc3Vs
dC0+ZGF0YSgpIDogbnVsbHB0cjsKLSAgICBpZiAoIXJlc3VsdERhdGEpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHggPSByZWN0Lm1heFgoKTsKLSAgICBD
aGVja2VkPGludD4gZW5keSA9IHJlY3QubWF4WSgpOwotICAgIGlmIChyZWN0LngoKSA8IDAgfHwg
cmVjdC55KCkgPCAwIHx8IGVuZHgudW5zYWZlR2V0KCkgPiBzaXplLndpZHRoKCkgfHwgZW5keS51
bnNhZmVHZXQoKSA+IHNpemUuaGVpZ2h0KCkpCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsK
LSAgICAKLSAgICBpbnQgb3JpZ2lueCA9IHJlY3QueCgpOwotICAgIGludCBkZXN0eCA9IDA7Ci0g
ICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChvcmlnaW54IDwg
MCkgewotICAgICAgICBkZXN0dyArPSBvcmlnaW54OwotICAgICAgICBkZXN0eCA9IC1vcmlnaW54
OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0gICAgZGVzdHcgPSBzdGQ6Om1pbjxpbnQ+
KGRlc3R3LnVuc2FmZUdldCgpLCBzaXplLndpZHRoKCkgLSBvcmlnaW54KTsKLSAgICBpZiAoZW5k
eC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgo
KTsKLSAgICBDaGVja2VkPGludD4gd2lkdGggPSBlbmR4IC0gb3JpZ2lueDsKLSAgICAKLSAgICBp
bnQgb3JpZ2lueSA9IHJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IDA7Ci0gICAgQ2hlY2tlZDxp
bnQ+IGRlc3RoID0gcmVjdC5oZWlnaHQoKTsKLSAgICBpZiAob3JpZ2lueSA8IDApIHsKLSAgICAg
ICAgZGVzdGggKz0gb3JpZ2lueTsKLSAgICAgICAgZGVzdHkgPSAtb3JpZ2lueTsKLSAgICAgICAg
b3JpZ2lueSA9IDA7Ci0gICAgfQotICAgIGRlc3RoID0gc3RkOjptaW48aW50PihkZXN0aC51bnNh
ZmVHZXQoKSwgc2l6ZS5oZWlnaHQoKSAtIG9yaWdpbnkpOwotICAgIGlmIChlbmR5LnVuc2FmZUdl
dCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgZW5keSA9IHNpemUuaGVpZ2h0KCk7Ci0gICAg
Q2hlY2tlZDxpbnQ+IGhlaWdodCA9IGVuZHkgLSBvcmlnaW55OwotICAgIAotICAgIGlmICh3aWR0
aC51bnNhZmVHZXQoKSA8PSAwIHx8IGhlaWdodC51bnNhZmVHZXQoKSA8PSAwKQotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIAotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBy
ZWN0LndpZHRoKCk7Ci0gICAgdWludDhfdCogZGVzdFJvd3MgPSByZXN1bHREYXRhICsgZGVzdHkg
KiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0eCAqIDQ7Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0
ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogc3JjUm93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJh
dGVSZW5kZXJpbmcpIHsKLSAgICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLQotICAgICAgICBzcmNCeXRlc1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgp
OwotICAgICAgICBzcmNSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAg
ICAgICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3Jj
LmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9
IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0gICAg
ICAgICAgICB2SW1hZ2VfQnVmZmVyIGRlc3Q7Ci0gICAgICAgICAgICBkZXN0LndpZHRoID0gZGVz
dHcudW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdl
dCgpOwotICAgICAgICAgICAgZGVzdC5yb3dCeXRlcyA9IGRlc3RCeXRlc1BlclJvdzsKLSAgICAg
ICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0jaWYgVVNFX0FSR0IzMgotICAgICAgICAg
ICAgdW5wcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAg
ICB2SW1hZ2VVbnByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5v
RmxhZ3MpOwotI2VuZGlmCi0KLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0K
LSNlbmRpZgotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKCh3aWR0aCAqIDQpLmhhc092
ZXJmbG93ZWQoKSkKLSAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAg
ICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhf
dCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgICAg
ICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFnZSBidWZm
ZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFd
ID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleF0gKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IHNyY1Jvd3NbYmFzZXhdOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICBpZiAoYWxwaGEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsgMl0gKiAy
NTUpIC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgYmFzZXgpWzBdID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Jvd3MgKyBiYXNleClbMF07Ci0j
ZW5kaWYKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0jaWYgVVNFX0FSR0IzMgotICAg
ICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykg
ewotICAgICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107
Ci0gICAgICAgICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8ICh3aWR0aCAqIDQpLnVuc2FmZUdldCgpOyB4ICs9IDQpCi0gICAgICAgICAgICAgICAg
ICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHgpWzBdID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3MgKyB4KVswXTsKLSNlbmRpZgotICAgICAgICAg
ICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJv
d3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJ
T1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlKTsKLSAgICAgICAgc3JjQnl0ZXNQZXJSb3cg
PSBzdXJmYWNlLT5ieXRlc1BlclJvdygpOwotICAgICAgICBzcmNSb3dzID0gc3RhdGljX2Nhc3Q8
dWludDhfdCo+KGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpICsgb3JpZ2lueSAqIHNyY0J5dGVz
UGVyUm93ICsgb3JpZ2lueCAqIDQ7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgdklt
YWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgIHNyYy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwot
ICAgICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICBzcmMucm93
Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgc3JjLmRhdGEgPSBzcmNSb3dzOwotCi0g
ICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0aCA9IGRlc3R3LnVu
c2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2FmZUdldCgpOwotICAg
ICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICBkZXN0LmRhdGEg
PSBkZXN0Um93czsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHVucHJlbXVsdGlwbHlCdWZm
ZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLy8gU3dhcCBw
aXhlbCBjaGFubmVscyBmcm9tIEJHUkEgdG8gUkdCQS4KLSAgICAgICAgICAgIGNvbnN0IHVpbnQ4
X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAgICB2SW1hZ2VQZXJtdXRlQ2hh
bm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotICAgICAg
ICB9Ci0jZWxzZQotICAgICAgICBpZiAoKHdpZHRoICogNCkuaGFzT3ZlcmZsb3dlZCgpKQotICAg
ICAgICAgICAgQ1JBU0goKTsKLQotICAgICAgICBpZiAob3V0cHV0Rm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAgICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAgICAgICAgICAg
ICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBi
ID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWxwaGEgPSBz
cmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAy
XSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChiICogMjU1KSAvIGFscGhhOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dzICs9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJv
dzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
YiA9IHNyY1Jvd3NbYmFzZXhdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0g
PSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4
ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4ICsgMl0gPSBiOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9
IGRlc3RCeXRlc1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFKQotI2Vsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0jZW5k
aWYgLy8gVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29u
c3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3Vy
Y2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJj
ZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgYWNjZWxlcmF0ZVJlbmRlcmluZykKLXsKLSAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0aCgp
ID4gMCk7Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsKLSAgICAKLSAgICBD
aGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJjZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBk
ZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0g
ICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVF9VTlVTRUQoc2l6
ZSwgZGVzdHgudW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54
LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNv
dXJjZVJlY3QubWF4WCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2Vk
PGludD4oZGVzdFBvaW50LngoKSkgKyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgQVNTRVJUKGVu
ZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4g
d2lkdGggPSBzb3VyY2VSZWN0LndpZHRoKCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R3ID0gZW5k
eCAtIGRlc3R4OwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnkgPSBzb3VyY2VSZWN0LnkoKTsK
LSAgICBDaGVja2VkPGludD4gZGVzdHkgPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsg
c291cmNlUmVjdC55KCkpOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAg
ICBBU1NFUlQoZGVzdHkudW5zYWZlR2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQo
b3JpZ2lueS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQo
KSA8PSBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgCi0gICAgQ2hlY2tlZDxpbnQ+IGVuZHkgPSAo
Q2hlY2tlZDxpbnQ+KGRlc3RQb2ludC55KCkpICsgc291cmNlUmVjdC5tYXhZKCkpOwotICAgIEFT
U0VSVChlbmR5LnVuc2FmZUdldCgpIDw9IHNpemUuaGVpZ2h0KCkpOwotCi0gICAgQ2hlY2tlZDxp
bnQ+IGhlaWdodCA9IHNvdXJjZVJlY3QuaGVpZ2h0KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3Ro
ID0gZW5keSAtIGRlc3R5OwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhlaWdodCA8PSAw
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0
ICogc291cmNlU2l6ZS53aWR0aCgpOwotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3Vy
Y2UuZGF0YSgpICsgKG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0KS51bnNh
ZmVHZXQoKTsKLSAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgdWludDhfdCogZGVz
dFJvd3M7Ci0gICAgCi0gICAgaWYgKCFhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0gICAgICAgIGlm
ICghZGF0YSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBkZXN0Qnl0ZXNQZXJSb3cg
PSBieXRlc1BlclJvdy51bnNhZmVHZXQoKTsKLSAgICAgICAgZGVzdFJvd3MgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIChkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4
ICogNCkudW5zYWZlR2V0KCk7Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSAgICAgICAgaWYgKHNv
dXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBzcmM7Ci0gICAgICAgICAgICBzcmMud2lkdGgg
PSB3aWR0aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5z
YWZlR2V0KCk7Ci0gICAgICAgICAgICBzcmMucm93Qnl0ZXMgPSBzcmNCeXRlc1BlclJvdzsKLSAg
ICAgICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50OF90Kj4oc3JjUm93cyk7Ci0KLSAg
ICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lkdGggPSBk
ZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAg
ICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAg
ICAgICBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSNlbHNlCi0gICAgICAgICAg
ICB2SW1hZ2VQcmVtdWx0aXBseURhdGFfUkdCQTg4ODgoJnNyYywgJmRlc3QsIGt2SW1hZ2VOb0Zs
YWdzKTsKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0jZW5kaWYKLQot
ICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0g
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsK
LSAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50
OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAgICAgICAg
ICAgICAgICAvLyBCeXRlIG9yZGVyIGlzIGRpZmZlcmVudCBhcyB3ZSB1c2UgaW1hZ2UgYnVmZmVy
cyBvZiBBUkdCMzIKLSAgICAgICAgICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDBdICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJdOwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9
Ci0jZWxzZQotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAg
ICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleF0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSAoc3Jj
Um93c1tiYXNleCArIDFdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0
KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhh
OwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICByZWludGVycHJl
dF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNleClbMF0gPSByZWludGVycHJldF9jYXN0
PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4KVswXTsKLSNlbmRpZgotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAg
ICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgSU9TdXJmYWNl
OjpMb2NrZXIgbG9jaygqc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJl
YWRXcml0ZSk7Ci0gICAgICAgIGRlc3RCeXRlc1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93
KCk7Ci0gICAgICAgIGRlc3RSb3dzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGxvY2suc3VyZmFj
ZUJhc2VBZGRyZXNzKCkpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93ICsgZGVzdHggKiA0KS51
bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAgICB2SW1hZ2VfQnVmZmVy
IHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNy
Yy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAgIHNyYy5yb3dCeXRlcyA9IHNy
Y0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IGNvbnN0X2Nhc3Q8dWludDhfdCo+KHNy
Y1Jvd3MpOwotCi0gICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgZGVzdC53aWR0
aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0LmhlaWdodCA9IGRlc3RoLnVuc2Fm
ZUdldCgpOwotICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAg
ICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotICAgICAgICBpZiAoc291cmNlRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgIHByZW11
bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgZnJvbSBSR0JBIHRvIEJHUkEuCi0gICAgICAgICAgICBj
b25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OwotICAgICAgICAgICAgdkltYWdl
UGVybXV0ZUNoYW5uZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdz
KTsKLSAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQu
dW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJhc2V4ID0geCAqIDQ7
Ci0gICAgICAgICAgICAgICAgdWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAg
ICAgICAgdWludDhfdCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAg
ICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFz
ZXhdID0gKHNyY1Jvd3NbYmFzZXggKyAyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
Ml0gPSAoYiAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7
Ci0gICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0jZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0K
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTIzNzRiYWQyNGYwNzg3ZmVmMDU0M2MxYjUxYjkx
MjBmMTIzMGQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmgK
KysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFscGhhUHJlbXVs
dGlwbGljYXRpb24uaCIKLSNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGlj
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
LSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLXR5cGVkZWYgc3RydWN0IENHQ29sb3JTcGFjZSAq
Q0dDb2xvclNwYWNlUmVmOwotdHlwZWRlZiBzdHJ1Y3QgQ0dEYXRhUHJvdmlkZXIgKkNHRGF0YVBy
b3ZpZGVyUmVmOwotdHlwZWRlZiB1aW50MzJfdCBDR0JpdG1hcEluZm87Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgSU9TdXJmYWNlOwotCi1zdHJ1Y3QgSW1hZ2VCdWZmZXJEYXRhIHsK
LSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNl
OwotCi0gICAgLy8gT25seSBmb3Igc29mdHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIHZvaWQqIGRh
dGEgeyBudWxscHRyIH07Ci0gICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJv
dmlkZXI7Ci0gICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEdyYXBoaWNzQ29udGV4dD4gY29udGV4dDsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0gICAgLy8gT25seSBmb3IgYWNjZWxlcmF0ZWQgSW1hZ2VCdWZmZXJzLgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IHN1cmZhY2U7Ci0jZW5kaWYKLQotICAgIFZl
Y3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdl
dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNp
emUmLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShj
b25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNv
dXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wg
YWNjZWxlcmF0ZVJlbmRlcmluZyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNDdjZjVjZGU2Mzkz
OTdlN2IwMTU0N2ZmZGRjOGI2OGJkNjYwNDg5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNw
cApAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1
cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAiSU9TdXJmYWNlLmgiCisjaW5jbHVkZSAiSW1hZ2VE
YXRhLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3Jl
R3JhcGhpY3MuaD4KKyNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgorI2lu
Y2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7
CisKK0ludFNpemUgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5k
U2l6ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAg
ICBJbnRTaXplIGJhY2tlbmRTaXplID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNhbGN1bGF0ZUJh
Y2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEludFNpemUgbWF4U2l6ZSA9IElP
U3VyZmFjZTo6bWF4aW11bVNpemUoKTsKKyAgICBpZiAoYmFja2VuZFNpemUud2lkdGgoKSA+IG1h
eFNpemUud2lkdGgoKSB8fCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSA+IG1heFNpemUuaGVpZ2h0KCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK1Jl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29u
dGV4dENvbG9yU3BhY2UoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAg
aWYgKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUlPU3VyZmFj
ZSkKKyAgICAgICAgcmV0dXJuIENHSU9TdXJmYWNlQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250
ZXh0KTsKKyAgICAKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvbnRleHRDb2xv
clNwYWNlKGNvbnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBDR0NvbG9yU3BhY2VSZWYgY2dDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBzdXJmYWNlID0gSU9TdXJmYWNlOjpj
cmVhdGUoYmFja2VuZFNpemUsIGJhY2tlbmRTaXplLCBjZ0NvbG9yU3BhY2UpOworICAgIGlmICgh
c3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250
ZXh0UmVmPiBjZ0NvbnRleHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdp
bmRvdyk7CisgICAgaWYgKCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgQ0dDb250ZXh0Q2xlYXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQ6Onplcm8oKSwgYmFja2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1v
dmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1
dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJl
dHVybiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNw
YWNlOjpTUkdCLCBjZ0NvbG9yU3BhY2UuZ2V0KCksIG51bGxwdHIpOworICAgIAorICAgIHJldHVy
biBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xvclNwYWNl
OjpTUkdCLCBudWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBjYWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSksIGhvc3RXaW5kb3cpOworfQorCisK
K0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlx
dWVfcHRyPElPU3VyZmFjZT4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQo
bG9naWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisg
ICAgLCBtX3N1cmZhY2UoV1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQobV9zdXJmYWNl
KTsKKyAgICBzZXR1cENvbnRleHQoKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZh
Y2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJm
YWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCkpOworfQorCitzaXplX3QgSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kOjptZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT50b3Rh
bEJ5dGVzKCk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmV4dGVy
bmFsTWVtb3J5Q29zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1lbW9yeUNvc3QoKTsKK30KKwor
dW5zaWduZWQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3VyZmFjZS0+Ynl0ZXNQZXJSb3coKTsKK30KKworQ29sb3JGb3Jt
YXQgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25z
dAoreworICAgIHJldHVybiBDb2xvckZvcm1hdDo6QkdSQTsKK30KKworTmF0aXZlSW1hZ2VQdHIg
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOworfQor
CitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnNpbmtJbnRvTmF0
aXZlSW1hZ2UoKQoreworICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoV1RGTW92
ZShtX3N1cmZhY2UpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRy
YXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3Jj
UmVjdDsKKyAgICBhZGp1c3RlZFNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOworCisg
ICAgaWYgKGF1dG8gaW1hZ2UgPSBzaW5rSW50b05hdGl2ZUltYWdlKCkpCisgICAgICAgIGRlc3RD
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVzdFJl
Y3QsIGFkanVzdGVkU3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK1ZlY3Rvcjx1aW50OF90PiBJbWFn
ZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIElPU3Vy
ZmFjZTo6TG9ja2VyIGxvY2soKm1fc3VyZmFjZSk7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFj
a2VuZDo6dG9CR1JBRGF0YShsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKworUmVmUHRy
PEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qp
IGNvbnN0Cit7CisgICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNS
ZWN0LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVzcygpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBs
b2NrKCptX3N1cmZhY2UsIElPU3VyZmFjZTo6TG9ja2VyOjpBY2Nlc3NNb2RlOjpSZWFkV3JpdGUp
OworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFn
ZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSk7CisK
KyAgICAvLyBGb3JjZSByZWNyZWF0aW5nIHRoZSBJT1N1cmZhY2UgY2FjaGVkIGltYWdlLgorICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTY2IGZv
ciBleHBsYWluaW5nIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4KKyAgICBjb250ZXh0KCkuZmlsbFJl
Y3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRmYzBmMDQzZjA1NWE3N2RjZWY2NjNlZTRmYzdiZjY1Yjk2ZjY4NWYK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaApAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
SEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQgOiBwdWJsaWMgSW1hZ2VCdWZmZXJDR0JhY2tlbmQgeworICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworcHVibGljOgorICAgIHN0
YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25z
dCBIb3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlk
ZTsKKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgc2l6ZV90
IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1hZ2VQ
dHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3JlKSBj
b25zdCBvdmVycmlkZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bWFnZVBhaW50aW5nT3B0aW9ucyYpIG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRv
QkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVj
dCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6
CisgICAgSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlLCBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmKTsKKworICAgIHN0YXRp
YyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFw
aGljc0NvbnRleHQmKTsKKyAgICB1bnNpZ25lZCBieXRlc1BlclJvdygpIGNvbnN0IG92ZXJyaWRl
OworICAgIENvbG9yRm9ybWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gbV9zdXJmYWNlOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gSEFWRShJT1NVUkZBQ0UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2Uu
Y3BwCmluZGV4IDI4MjFlZjgxZDc1ZGZiMGZmMDVhODViZTVjOWZiYzI1OGI1NjJlYjMuLjJhYTgy
MzMyZGUyZDExMWJkY2UxZTA4MDYzNTkwZGNlMjFiNmMzZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCkBA
IC0yNTQsOCArMjU0LDggQEAgdm9pZCBQREZEb2N1bWVudEltYWdlOjp1cGRhdGVDYWNoZWRJbWFn
ZUlmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QKICAgICBtX2NhY2hlZFNv
dXJjZVJlY3QgPSBzcmNSZWN0OwogICAgICsrbV9jYWNoaW5nQ291bnRGb3JUZXN0aW5nOwogCi0g
ICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5pbnRlcm5hbFNp
emUoKTsKLSAgICBkZWNvZGVkU2l6ZUNoYW5nZWQoaW50ZXJuYWxTaXplLnVuY2xhbXBlZEFyZWEo
KSAqIDQpOworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBtX2NhY2hlZEltYWdlQnVmZmVyLT5i
YWNrZW5kU2l6ZSgpOworICAgIGRlY29kZWRTaXplQ2hhbmdlZChiYWNrZW5kU2l6ZS51bmNsYW1w
ZWRBcmVhKCkgKiA0KTsKIH0KIAogSW1hZ2VEcmF3UmVzdWx0IFBERkRvY3VtZW50SW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9J
T1N1cmZhY2UubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1
cmZhY2UubW0KaW5kZXggYzIxMjVjM2VmMTYwYzA4MTAxMDk4MjNiNGI5MDM2ZGRmNmZiY2Y2Ny4u
MzkxZmMyM2NkMGE4Zjg2OWFjYzEwNzMyZDE0ZmRmNDUwZmMyODU1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0lPU3VyZmFjZS5tbQpAQCAtMzMs
NyArMzMsNiBAQAogI2ltcG9ydCAiSG9zdFdpbmRvdy5oIgogI2ltcG9ydCAiSU9TdXJmYWNlUG9v
bC5oIgogI2ltcG9ydCAiSW1hZ2VCdWZmZXIuaCIKLSNpbXBvcnQgIkltYWdlQnVmZmVyRGF0YUNH
LmgiCiAjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2lt
cG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KQEAgLTExMCwxMyArMTA5LDYgQEAg
dm9pZCBJT1N1cmZhY2U6Om1vdmVUb1Bvb2woc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4mJiBz
dXJmYWNlKQogICAgIElPU3VyZmFjZVBvb2w6OnNoYXJlZFBvb2woKS5hZGRTdXJmYWNlKFdURk1v
dmUoc3VyZmFjZSkpOwogfQogCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9S
RSkKLXN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+IElPU3VyZmFjZTo6Y3JlYXRlRnJvbUltYWdl
QnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAg
cmV0dXJuIFdURk1vdmUoaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKTsKLX0KLSNlbmRpZgot
CiBzdGF0aWMgTlNEaWN0aW9uYXJ5ICpvcHRpb25zRm9yQmlwbGFuYXJTdXJmYWNlKEludFNpemUg
c2l6ZSwgdW5zaWduZWQgcGl4ZWxGb3JtYXQsIHNpemVfdCBmaXJzdFBsYW5lQnl0ZXNQZXJQaXhl
bCwgc2l6ZV90IHNlY29uZFBsYW5lQnl0ZXNQZXJQaXhlbCkKIHsKICAgICBpbnQgd2lkdGggPSBz
aXplLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCmluZGV4IGZkOGU1ZThlMmU5
NGU3MDU0ODk2ZjlhYmJiYTdhNDZmNTAyMTQxYzkuLmM5NmUzM2NhNWY2MTMxZTUyZTFlOWQ0NWQ3
YzAyMTYzZGU0YWNjMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oCkBAIC0xMTEsNyAr
MTExLDggQEAgdm9pZCBGRUJsZW5kOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEZpbHRl
ckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlu
cHV0RWZmZWN0KDEpOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBpbWFnZVJlc3VsdCA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJy
YXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlm
ICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2YyYWU0OTIuLjJjNjc3ZjZi
NzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5o
CkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4
XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAog
ICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBA
IC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRl
eHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJD
b3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTI5
MmIxY2U0OGZjNDRjMTgxNWNlNzc0Y2UxYjk1YzczNjU1MmViZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNpbmNsdWRlICJEaXNwbGF5
TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgorI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
RGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7CitwdWJsaWM6CisgICAgRHJh
d2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKKyAgICAgICAgOiBtX2Nv
bnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7CisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rp
c3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2Fs
U2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAgICB7CisgICAgfQorCisg
ICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxE
cmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAgRGlzcGxheUxpc3QmIGRp
c3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAgIGNvbnN0IERpc3BsYXlM
aXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUxpc3Q7IH0KKyAgICBj
b25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3Jl
cGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRyYWNrc0Rpc3BsYXlMaXN0
UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAgeworICAgICAgICBtX3Ry
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7CisgICAgICAg
IG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlcGxheURp
c3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisgICAgeworICAgICAgICBp
ZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlzcGxheUxpc3QpOworICAg
ICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAgICAgICAgIG1fcmVwbGF5
RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVw
bGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAg
ICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgR3JhcGhp
Y3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rpc3BsYXlMaXN0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNwbGF5TGlzdDsKKyAgICBi
b29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9OworfTsKKworfSAvLyBEaXNw
bGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcAppbmRleCBlNjE0MWJkZTMy
MDRjMTc3YWI2OWY1MWM1ZDAzNDI1YTQ3ZmM1OTc1Li45NTE4MDBlZGE5MTc0MTFjODhiOWE0YmU1
NTE0Y2YxZjY4Yzc4Nzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAK
IAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTI4NiwxMyArMjg2LDE1IEBAIHZvaWQgRkVDb2xvck1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgcmVzdWx0SW1hZ2UtPmNvbnRleHQo
KS5kcmF3SW1hZ2VCdWZmZXIoKmluQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGlu
LT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7CiAKICAgICBJbnRSZWN0IGltYWdlUmVjdChJbnRQb2lu
dCgpLCByZXN1bHRJbWFnZS0+bG9naWNhbFNpemUoKSk7Ci0gICAgSW50U2l6ZSBwaXhlbEFycmF5
RGltZW5zaW9uczsKLSAgICBhdXRvIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZS0+Z2V0VW5tdWx0
aXBsaWVkSW1hZ2VEYXRhKGltYWdlUmVjdCwgJnBpeGVsQXJyYXlEaW1lbnNpb25zKTsKLSAgICBp
ZiAoIXBpeGVsQXJyYXkpCisgICAgYXV0byBpbWFnZURhdGEgPSByZXN1bHRJbWFnZS0+Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgaW1hZ2VSZWN0
KTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPGZs
b2F0PiB2YWx1ZXMgPSBub3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKKyAgICBhdXRvKiBwaXhl
bEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgSW50U2l6ZSBwaXhlbEFycmF5RGltZW5z
aW9ucyA9IGltYWdlRGF0YS0+c2l6ZSgpOwogCisgICAgVmVjdG9yPGZsb2F0PiB2YWx1ZXMgPSBu
b3JtYWxpemVkRmxvYXRzKG1fdmFsdWVzKTsKKyAgICAKICAgICBzd2l0Y2ggKG1fdHlwZSkgewog
ICAgIGNhc2UgRkVDT0xPUk1BVFJJWF9UWVBFX1VOS05PV046CiAgICAgICAgIGJyZWFrOwpAQCAt
MzExLDcgKzMxMyw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVBcnJh
eSgqcGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBp
bWFnZVJlY3Quc2l6ZSgpLCBpbWFnZVJlY3QsIEludFBvaW50KCkpOworICAgIHJlc3VsdEltYWdl
LT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAq
aW1hZ2VEYXRhLCBpbWFnZVJlY3QpOwogfQogCiBzdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ29sb3JNYXRyaXhUeXBlJiB0eXBlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRy
YW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb25lbnRUcmFuc2Zlci5jcHAKaW5kZXggZmEwNDEzYzAwZGE0M2FjNWRmNTVlNWUwMWY2OTQ0
YWI5ZWRhNzQ4My4uOTc4YzU1YTY3YjhkZTcyMGU5ZmE3OWJkOGNjMzRkNzQ1MjhhMDI4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBv
bmVudFRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNs
dWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5o
IgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KQEAgLTEwOCw3ICsxMDgsOCBA
QCB2b2lkIEZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVk
QXJyYXkqIHBpeGVsQXJyYXkgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAg
IGF1dG8qIGltYWdlUmVzdWx0ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAg
ICBhdXRvKiBwaXhlbEFycmF5ID0gaW1hZ2VSZXN1bHQgPyBpbWFnZVJlc3VsdC0+ZGF0YSgpIDog
bnVsbHB0cjsKICAgICBpZiAoIXBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9z
aXRlLmNwcAppbmRleCBhMTllYTA1Mzc1ODE5Y2VjZGFjMjVkNWQ5NjNkNTQ0ZGQ0ZDFhOTY5Li4y
NjU0NDBmNDM5NDJhZmE2YWEyOThkYWY0ZWMwMmVlM2Q5NWNlYzgwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9zaXRlLmNw
cApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkZFQ29tcG9zaXRlQXJpdGhtZXRpY05FT04u
aCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIklt
YWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMjI5LDcgKzIyOSw4IEBAIHZvaWQgRkVDb21wb3NpdGU6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiAgICAgRmlsdGVyRWZmZWN0KiBpbjIgPSBpbnB1dEVmZmVjdCgxKTsK
IAogICAgIGlmIChtX3R5cGUgPT0gRkVDT01QT1NJVEVfT1BFUkFUT1JfQVJJVEhNRVRJQykgewot
ICAgICAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgICAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgICAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0g
cmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICAgICAgaWYg
KCFkc3RQaXhlbEFycmF5KQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbnZvbHZlTWF0
cml4LmNwcAppbmRleCA2MmMyZjgzMzY1MzU4Njg0NGQ5ZjM5MGVlYTVlZGMxMDhlMzBhMzg4Li5h
NmUzZjRiYmFhMjQ0OTdmOTI2MzQ2NTY5NzVmZmI4N2RjN2FiOWYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2
ZU1hdHJpeC5jcHAKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlICJGRUNvbnZvbHZlTWF0cml4
LmgiCiAKICNpbmNsdWRlICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50
OENsYW1wZWRBcnJheS5oPgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9Q
YXJhbGxlbEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvV29ya1F1ZXVlLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzcxLDEyICszNzEsMTMgQEAgdm9pZCBGRUNvbnZvbHZl
TWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4g
PSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiByZXN1bHRJbWFnZTsK
KyAgICBJbWFnZURhdGEqIHJlc3VsdEltYWdlOwogICAgIGlmIChtX3ByZXNlcnZlQWxwaGEpCiAg
ICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAg
ICBlbHNlCiAgICAgICAgIHJlc3VsdEltYWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0KCk7Ci0gICAgaWYgKCFyZXN1bHRJbWFnZSkKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0g
cmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKKyAgICBpZiAoIWRz
dFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2lu
Z1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50
UmVjdCgpKTsKQEAgLTM5NSw3ICszOTYsNyBAQCB2b2lkIEZFQ29udm9sdmVNYXRyaXg6OnBsYXRm
b3JtQXBwbHlTb2Z0d2FyZSgpCiAKICAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhID0gewog
ICAgICAgICAqc3JjUGl4ZWxBcnJheSwKLSAgICAgICAgKnJlc3VsdEltYWdlLAorICAgICAgICAq
ZHN0UGl4ZWxBcnJheSwKICAgICAgICAgcGFpbnRTaXplLndpZHRoKCksCiAgICAgICAgIHBhaW50
U2l6ZS5oZWlnaHQoKSwKICAgICAgICAgbV9iaWFzICogMjU1LApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURpc3BsYWNlbWVudE1hcC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcAppbmRleCAwZTk0NGRmMDBhOTVjYzA2ZDI2YWE0MmYxNjllZTZhNDZmNWEyNzgyLi41
MzczNTUwNDUzZTQ5ODYyYzBlNDE2ZjJkY2MyNTZiNDcwYzkxOTUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFwLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxh
Y2VtZW50TWFwLmNwcApAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTk0LDcgKzk0LDggQEAgdm9pZCBGRURpc3BsYWNlbWVudE1hcDo6cGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBBU1NFUlQobV94Q2hhbm5lbFNlbGVjdG9yICE9IENI
QU5ORUxfVU5LTk9XTik7CiAgICAgQVNTRVJUKG1feUNoYW5uZWxTZWxlY3RvciAhPSBDSEFOTkVM
X1VOS05PV04pOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNy
ZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkg
PSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICgh
ZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKaW5kZXgg
MjM2NjZhMWFlZjUzNTMyMTQ5M2M5ZWEyZDU2MThlOGZkZGQ4NGVjYi4uMTM5NWEyZGI4NTAzMmM5
ZTJhZTg2NGM2Mzk2NjY4YjM3NDFjYzMzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcApAQCAtMjMsOCAr
MjMsOCBAQAogI2luY2x1ZGUgIkZFR2F1c3NpYW5CbHVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSAiU2hhZG93Qmx1ci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xh
bXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CiAKQEAgLTk5LDE0ICs5OSwxNSBAQCB2b2lkIEZFRHJvcFNoYWRv
dzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBTaGFkb3dCbHVyIGNvbnRleHRTaGFkb3co
Ymx1clJhZGl1cywgb2Zmc2V0LCBtX3NoYWRvd0NvbG9yKTsKIAogICAgIC8vIFRPRE86IERpcmVj
dCBwaXhlbCBhY2Nlc3MgdG8gSW1hZ2VCdWZmZXIgd291bGQgYXZvaWQgY29weWluZyB0aGUgSW1h
Z2VEYXRhLgotICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFnZS0+
aW50ZXJuYWxTaXplKCkpOwotICAgIGF1dG8gc3JjUGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5n
ZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKHNoYWRvd0FyZWEsIG51bGxwdHIsIEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIXNyY1BpeGVsQXJyYXkp
CisgICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2Fs
U2l6ZSgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgc2hhZG93QXJlYSk7CisgICAg
aWYgKCFpbWFnZURhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnRleHRTaGFkb3cuYmx1
ckxheWVySW1hZ2Uoc3JjUGl4ZWxBcnJheS0+ZGF0YSgpLCBzaGFkb3dBcmVhLnNpemUoKSwgNCAq
IHNoYWRvd0FyZWEuc2l6ZSgpLndpZHRoKCkpOwotCi0gICAgcmVzdWx0SW1hZ2UtPnB1dEJ5dGVB
cnJheSgqc3JjUGl4ZWxBcnJheSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZCwgc2hhZG93QXJlYS5zaXplKCksIHNoYWRvd0FyZWEsIEludFBvaW50KCksIEltYWdlQnVmZmVy
OjpCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtKTsKKyAgICBhdXRvKiBzcmNQaXhlbEFycmF5
ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgY29udGV4dFNoYWRvdy5ibHVyTGF5ZXJJbWFnZShz
cmNQaXhlbEFycmF5LT5kYXRhKCksIGltYWdlRGF0YS0+c2l6ZSgpLCA0ICogaW1hZ2VEYXRhLT5z
aXplKCkud2lkdGgoKSk7CisgICAgCisgICAgcmVzdWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBzaGFkb3dBcmVh
KTsKIAogICAgIHJlc3VsdENvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yOjpTb3VyY2VJbik7CiAgICAgcmVzdWx0Q29udGV4dC5maWxsUmVjdChGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnNpemUoKSksIG1fc2hhZG93Q29sb3Ip
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUdhdXNzaWFuQmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcAppbmRleCA0OWJhODQxNzNjMmQxYTk5NTRlNTYxMzkwY2Uw
M2MyNGJjOTBjODFiLi5kN2VkOWIyNDQ5MDE3OGZmYmZiZWIxY2Q0MmJlYTVlOGZmMTU5ZTc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1
c3NpYW5CbHVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkZFR2F1
c3NpYW5CbHVyTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KIAogI2lmIFVTRShBQ0NFTEVSQVRFKQpAQCAtNTIyLDE0ICs1MjMsMTUgQEAg
dm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0
ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSog
cmVzdWx0UGl4ZWxBcnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAg
IGlmICghcmVzdWx0UGl4ZWxBcnJheSkKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1
bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOworICAgIGlmICghZHN0UGl4
ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc2V0SXNBbHBoYUltYWdlKGluLT5pc0Fs
cGhhSW1hZ2UoKSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVk
UmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAgaW4t
PmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpyZXN1bHRQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5n
UmVjdCk7CisgICAgaW4tPmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCpkc3RQaXhlbEFycmF5LCBl
ZmZlY3REcmF3aW5nUmVjdCk7CiAKICAgICBpZiAoIW1fc3RkWCAmJiAhbV9zdGRZKQogICAgICAg
ICByZXR1cm47CkBAIC01NDMsNyArNTQ1LDcgQEAgdm9pZCBGRUdhdXNzaWFuQmx1cjo6cGxhdGZv
cm1BcHBseVNvZnR3YXJlKCkKICAgICBpZiAoIXRtcEltYWdlRGF0YSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgcGxhdGZvcm1BcHBseSgqcmVzdWx0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwg
a2VybmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOworICAg
IHBsYXRmb3JtQXBwbHkoKmRzdFBpeGVsQXJyYXksICp0bXBJbWFnZURhdGEsIGtlcm5lbFNpemUu
d2lkdGgoKSwga2VybmVsU2l6ZS5oZWlnaHQoKSwgcGFpbnRTaXplKTsKIH0KIAogSW50T3V0c2V0
cyBGRUdhdXNzaWFuQmx1cjo6b3V0c2V0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAppbmRleCAwYmE1
MWI3NjEyZjJjYjJmNjlmNGY2MDIxY2VmY2JlM2MyZTc0MmQzLi42ZGI4N2ZkNTQ1YThmMWRkYTdk
OWI1ODhhMjU0MDY1NWE1NzhmYjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTMwLDYgKzMwLDcgQEAK
IAogI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiRkVMaWdodGluZ05FT04u
aCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ3Myw3ICs0NzQsOCBAQCB2b2lkIEZFTGlnaHRp
bmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlu
cHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIHJlc3V0UGl4ZWxBcnJheSA9
IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdEltYWdl
ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdXRQaXhl
bEFycmF5ID0gcmVzdWx0SW1hZ2UgPyByZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAg
ICBpZiAoIXJlc3V0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5j
cHAKaW5kZXggMjUxNzgxY2E1YWE1MWY3ODAyN2FkNTA4ZGY5YWM2MTBjNjc5NGZhNS4uY2JkNDI0
MTk3NjU3MGE4NzM5NDUyMDBhOTEzZTBlOWU2NTlhYjQyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9sb2d5LmNwcApA
QCAtMjcsNyArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJGaWx0ZXIuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5o
PgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxlbEpvYnMuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgpAQCAtMjM0LDcgKzIzNCw4IEBAIHZvaWQgRkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogewogICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAg
IFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBkc3RQaXhlbEFycmF5ID0gcmVzdWx0SW1hZ2UgPyBy
ZXN1bHRJbWFnZS0+ZGF0YSgpIDogbnVsbHB0cjsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAg
ICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCmluZGV4IDZkNjBjZGRlYmIxMDJmNTJk
YzNjMjFhZWNjMmE1MGRiNGJmNzgzNGIuLmYxNmI5YjMxYTU1OWQ3NDYyMWZmMjMyNDRkYTkzMmRm
NDMxNjhkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVUdXJidWxlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRl
ICJGRVR1cmJ1bGVuY2UuaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvUGFyYWxsZWxKb2JzLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMzk1LDcgKzM5NSw4IEBAIHZv
aWQgRkVUdXJidWxlbmNlOjpmaWxsUmVnaW9uV29ya2VyKEZpbGxSZWdpb25QYXJhbWV0ZXJzKiBw
YXJhbWV0ZXJzKQogCiB2b2lkIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkK
IHsKLSAgICBVaW50OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGll
ZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJl
c3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggNmU5ODZkNGVjMmE5NzkyOTY2Mzg0
ZmM1NTA3NGEyZjk3MmI1OTBmYS4uYTllOGZjYTJjNWQxZGNiYjY2N2E1YjdjYzBkNGY3NzAyNDg0
ZjM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMjcsMTAgKzI3LDEwIEBACiAjaW5jbHVkZSAi
RmlsdGVyLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJbWFn
ZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9V
aW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
I2lmIEhBVkUoQVJNX05FT05fSU5UUklOU0lDUykKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEZp
bHRlckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQogICAgIGlmICghbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVpbnQ4Q2xh
bXBlZEFycmF5KiBpbWFnZUFycmF5ID0gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7
CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdC0+ZGF0YSgpOwogICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGltYWdlQXJyYXktPmRh
dGEoKTsKICAgICBpbnQgcGl4ZWxBcnJheUxlbmd0aCA9IGltYWdlQXJyYXktPmxlbmd0aCgpOwog
CkBAIC0yNjUsNyArMjY1LDcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0c1JlY3Vy
c2l2ZSgpCiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkK
IHsKLSAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3Qg
IiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgp
LiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8
ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQuZ2V0KCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0
cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8
ICIgaW1hZ2VCdWZmZXJSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFn
ZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8
IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAg
IGlmICghaGFzUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjc5LDkgKzI3
OSw5IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmltYWdlQnVmZmVyUmVzdWx0KCkKIAog
ICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJl
Y3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCi0gICAgICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVBcnJheSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGRlc3RpbmF0aW9u
UmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisgICAgICAgIG1faW1h
Z2VCdWZmZXJSZXN1bHQtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCAqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3RpbmF0aW9uUmVjdCk7
CiAgICAgZWxzZQotICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoKm1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgZGVzdGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2lu
dCgpKTsKKyAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1
bHQsIGRlc3RpbmF0aW9uUmVjdCk7CiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCk7CiB9CiAKQEAgLTQzOCw1MiArNDM4LDUyIEBAIHZvaWQgRmlsdGVyRWZmZWN0Ojpjb3B5VW5t
dWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0aW5hdGlvbiwgY29uc3QKIHsK
ICAgICBBU1NFUlQoaGFzUmVzdWx0KCkpOwogICAgIAotICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVy
ICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkp
OworICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAi
IDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlVbm11bHRpcGxpZWRSZXN1
bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCkgPDwgIiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpKTsKIAogICAgIGlmICghbV91bm11bHRpcGxp
ZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBwcmVmZXIgYSBjb252ZXJzaW9uIGZyb20g
dGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAg
ICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0
LT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LnNpemUoKSkpOworICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQsIHsgSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5z
aXplKCkgfSk7CiAgICAgICAgICAgICBpZiAoIW1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgSW50
U2l6ZSBpbnB1dFNpemUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgICAgICAgICAg
QVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6ZU5lZWRzQ2xhbXBpbmcoaW5wdXRTaXplKSk7CiAgICAg
ICAgICAgICBpbnB1dFNpemUuc2NhbGUobV9maWx0ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgICAg
ICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5hcmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7Cisg
ICAgICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUo
aW5wdXRTaXplKTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvcHlV
bnByZW11bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCAqbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXplKTsKKyAgICAgICAgICAgIGNvcHlVbnByZW11
bHRpcGx5aW5nQWxwaGEoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksICptX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgY29weUltYWdlQnl0ZXMoKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQsIGRlc3Rp
bmF0aW9uLCByZWN0KTsKKyAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVjdCk7CiB9CiAKIHZvaWQgRmlsdGVyRWZmZWN0
Ojpjb3B5UHJlbXVsdGlwbGllZFJlc3VsdChVaW50OENsYW1wZWRBcnJheSYgZGVzdGluYXRpb24s
IGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGhhc1Jlc3VsdCgpKTsKIAotICAg
IExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZp
bHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCku
IEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwg
ICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlw
bGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmlsdGVycywgc3Ry
ZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8IHRoaXMgPDwg
IiBjb3B5UHJlbXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwog
CiAgICAgaWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkgewogICAgICAgICAvLyBXZSBw
cmVmZXIgYSBjb252ZXJzaW9uIGZyb20gdGhlIGltYWdlIGJ1ZmZlci4KICAgICAgICAgaWYgKG1f
aW1hZ2VCdWZmZXJSZXN1bHQpIHsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbnRS
ZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAg
ICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZmZXJSZXN1bHQtPmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCB7IEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpIH0pOwogICAgICAgICAgICAgaWYgKCFtX3By
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRS
ZWN0LnNpemUoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHND
bGFtcGluZyhpbnB1dFNpemUpKTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRl
ci5maWx0ZXJTY2FsZSgpKTsKLSAgICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKGlucHV0U2l6ZS5h
cmVhKCkgKiA0KS51bnNhZmVHZXQoKSk7CisgICAgICAgICAgICBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdCA9IEltYWdlRGF0YTo6Y3JlYXRlKGlucHV0U2l6ZSk7CiAgICAgICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgaW5wdXRTaXpl
KTsKKyAgICAgICAgICAgIGNvcHlQcmVtdWx0aXBseWluZ0FscGhhKCptX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0LT5kYXRhKCksICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBp
bnB1dFNpemUpOwogICAgICAgICB9CiAgICAgfQotICAgIGNvcHlJbWFnZUJ5dGVzKCptX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5
dGVzKCptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpLCBkZXN0aW5hdGlvbiwgcmVj
dCk7CiB9CiAKIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZUltYWdlQnVmZmVyUmVz
dWx0KCkKQEAgLTQ5NywxMyArNDk3LDEwIEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZUltYWdlQnVmZmVyUmVzdWx0KCkKIAogICAgIEZsb2F0U2l6ZSBjbGFtcGVkU2l6ZSA9IElt
YWdlQnVmZmVyOjpjbGFtcGVkU2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoY2xhbXBlZFNpemUsIG1f
ZmlsdGVyLnJlbmRlcmluZ01vZGUoKSwgbV9maWx0ZXIuZmlsdGVyU2NhbGUoKSwgbV9yZXN1bHRD
b2xvclNwYWNlKTsKLSAgICBpZiAoIW1faW1hZ2VCdWZmZXJSZXN1bHQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAK
LVVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdl
UmVzdWx0KCkKK0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJFZmZlY3QgJXMgJXAgY3JlYXRl
VW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQiLCBmaWx0ZXJOYW1lKCksIHRoaXMpOwogCkBAIC01MTUs
MTEgKzUxMiwxMSBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVVbm11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAgSW50U2l6ZSByZXN1bHRTaXplKG1fYWJzb2x1dGVQ
YWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFt
cGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJT
Y2FsZSgpKTsKLSAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ID0gVWludDhDbGFtcGVkQXJy
YXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoKHJlc3VsdFNpemUuYXJlYSgpICogNCkudW5zYWZl
R2V0KCkpOworICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6OmNyZWF0
ZShyZXN1bHRTaXplKTsKICAgICByZXR1cm4gbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQo
KTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0KCkKK0ltYWdlRGF0YSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKQogewogICAgIExPRyhGaWx0ZXJzLCAiRmlsdGVyRWZmZWN0ICVz
ICVwIGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7
CiAKQEAgLTUzMSw3ICs1MjgsNyBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIEludFNpemUgcmVzdWx0U2l6ZSht
X2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAgQVNTRVJUKCFJbWFnZUJ1ZmZlcjo6c2l6
ZU5lZWRzQ2xhbXBpbmcocmVzdWx0U2l6ZSkpOwogICAgIHJlc3VsdFNpemUuc2NhbGUobV9maWx0
ZXIuZmlsdGVyU2NhbGUoKSk7Ci0gICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50
OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkg
KiA0KS51bnNhZmVHZXQoKSk7CisgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFn
ZURhdGE6OmNyZWF0ZShyZXN1bHRTaXplKTsKICAgICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQuZ2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IGM5NjZmY2MyMTYzOWRlNWE0
MDRhN2M2MmYzZWEyYjZlOTMzMmZlNDIuLmFmNDYzZWZlYjAxMzZhYzYxOGUyOTljZDA4ZDQ0ODM4
ZDBlZjU2NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtNDAsNiArNDAsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBGaWx0ZXI7CiBjbGFzcyBGaWx0ZXJFZmZlY3Q7CiBjbGFzcyBJbWFnZUJ1
ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsKIAogdHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVm
ZmVjdD4+IEZpbHRlckVmZmVjdFZlY3RvcjsKIApAQCAtMTUzLDggKzE1NCw4IEBAIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIGZpbHRlck5hbWUoKSBjb25zdCA9IDA7CiAKICAg
ICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKLSAgICBVaW50OENsYW1w
ZWRBcnJheSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKLSAgICBVaW50OENsYW1w
ZWRBcnJheSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRh
KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIEltYWdlRGF0YSogY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUg
ZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywg
d2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGlu
IFswLCBhbHBoYV0uCkBAIC0xODIsOCArMTgzLDggQEAgcHJpdmF0ZToKICAgICBGaWx0ZXJFZmZl
Y3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IG1faW1hZ2VCdWZmZXJSZXN1bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
bV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gbV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdDsKIAogICAgIEludFJlY3QgbV9hYnNvbHV0ZVBhaW50UmVjdDsKICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCmluZGV4IDFl
MDM1YTdlZWYyODAzY2Y2NTk5MmQwNDljOWY4YjU1NmJjZWNhZWMuLjkxOGUxOGFmNWUxMmZmOTA0
OTQ4M2E3OGVmMWJhODJkNzM1OGMyYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4
dEdMT3BlbkdMQ29tbW9uLmNwcApAQCAtMTg4LDcgKzE4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0R0xPcGVuR0w6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKiBp
bWFnZUJ1CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQo
KSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0KSwgaW1hZ2VCdWZmZXIt
PmludGVybmFsU2l6ZSgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpKTsKKyAgICBwYWludFRvQ2Fu
dmFzKHBpeGVscy5nZXQoKSwgSW50U2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0
KSwgaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOwog
CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShPUEVOR0xfRVMpCiAgICAgcHJlc2VudFJlbmRl
cmJ1ZmZlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGZmMWIzOTQxNWViYjIxYmU2Y2VmYWM1OTA2ZjdkNDI1MWI4MzU5M2Yu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDU0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0
bWFwSW5mby5oIgotI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFduZERDLmgiCi0jaW5jbHVkZSAiSW50UmVjdC5o
IgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0NJbmxpbmVzLmg+Ci0jaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPGQyZDEuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9VbmlxdWVBcnJheS5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBieXRlcyBv
ZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBkZXNpcmVkRm9ybWF0Pgotdm9pZCBzd2l6emxlQW5kUHJlbXVsdGlwbHkoY29uc3QgdWludDhf
dCogc3JjUm93cywgdW5zaWduZWQgcm93Q291bnQsIHVuc2lnbmVkIGNvbENvdW50LCB1bnNpZ25l
ZCBzcmNTdHJpZGUsIHVuc2lnbmVkIGRlc3RTdHJpZGUsIHVpbnQ4X3QqIGRlc3RSb3dzKQotewot
ICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCByb3dDb3VudDsgKyt5KSB7Ci0gICAgICAgIC8v
IFNvdXJjZSBkYXRhIG1heSBiZSBwb3dlci1vZi10d28gc2l6ZWQsIHNvIHdlIG5lZWQgdG8gb25s
eSBjb3B5IHRoZSBiaXRzIHRoYXQKLSAgICAgICAgLy8gY29ycmVzcG9uZCB0byB0aGUgcmVjdGFu
Z2xlIHN1cHBsaWVkIGJ5IHRoZSBjYWxsZXIuCi0gICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNS
b3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIHNyY1N0cmlk
ZSAqIHkpOwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBkZXN0U3RyaWRl
ICogeTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCB4ID0gMDsgeCA8IGNvbENvdW50OyArK3gpIHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVQb3NpdGlvbiA9IHggKiA0OwotICAgICAgICAgICAg
Y29uc3QgdWludDMyX3QqIHNyY1BpeGVsID0gc3JjUm93ICsgeDsKLQotICAgICAgICAgICAgLy8g
U29mdHdhcmUgZmlsdGVycyBleHBlY3QgKFApUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxl
IGZyb20gRGlyZWN0MkQncyBQQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgICAgICAgICAgdWlu
dDMyX3QgYWxwaGEgPSAoKnNyY1BpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAg
ICB1aW50MzJfdCByZWQgPSAoKnNyY1BpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAg
ICAgICB1aW50MzJfdCBncmVlbiA9ICgqc3JjUGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAg
ICAgICAgICAgdWludDMyX3QgYmx1ZSA9ICgqc3JjUGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAg
ICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1
NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAg
ICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb25dICAgICA9IHJl
ZDsKLSAgICAgICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgMV0gPSBncmVlbjsKLSAgICAg
ICAgICAgIGRlc3RSb3dbYnl0ZVBvc2l0aW9uICsgMl0gPSBibHVlOwotICAgICAgICAgICAgZGVz
dFJvd1tieXRlUG9zaXRpb24gKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgfQotfQotCi1z
dGF0aWMgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3QoY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50U2l6ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3QgdWludDhfdCogc291
cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCogZGVzdCwgY29uc3Qg
SW50UG9pbnQmIGRlc3RCdWZmZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUludFJlY3QoeyB9LCBk
ZXN0QnVmZmVyU2l6ZSkuY29udGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9zaXRpb24sIHNvdXJj
ZVJlY3Quc2l6ZSgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghSW50UmVj
dCh7IH0sIHNvdXJjZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXpl
LndpZHRoKCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53
aWR0aCgpICogNDsKLQotICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9j
YXRpb24oKS54KCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVy
UG9zaXRpb24ueCgpICogNDsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2Ug
KyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAgIHVpbnQ4X3QqIGRl
c3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwotCi0g
ICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0Owot
ICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsK
LSAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkg
KyBzcmNSb3dPZmZzZXQ7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRl
c3RTdHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKLSAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNy
Y1JvdywgYnl0ZXNQZXJSb3cpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBO
b3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBs
YXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci1ib29sIGNvcHlSZWN0
RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0aW9uKGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3Qq
IHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNv
bnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCi17Ci0gICAgaWYgKCFJbnRSZWN0KHsg
fSwgZGVzdEJ1ZmZlclNpemUpLmNvbnRhaW5zKEludFJlY3QoZGVzdEJ1ZmZlclBvc2l0aW9uLCBz
b3VyY2VSZWN0LnNpemUoKSkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIUlu
dFJlY3QoeyB9LCBzb3VyY2VCdWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgc3JjU3RyaWRlID0gc291cmNlQnVmZmVy
U2l6ZS53aWR0aCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0gZGVzdEJ1ZmZlclNp
emUud2lkdGgoKSAqIDQ7Ci0KLSAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0
LmxvY2F0aW9uKCkueCgpICogNDsKLSAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVzdEJ1
ZmZlclBvc2l0aW9uLngoKSAqIDQ7Ci0KLSAgICBjb25zdCB1aW50OF90KiBzcmNSb3dzID0gc291
cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKLSAgICB1aW50OF90
KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9uLnkoKTsK
LQotICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICog
NDsKLSAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5
KSB7Ci0gICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUg
KiB5ICsgc3JjUm93T2Zmc2V0OwotICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3Mg
KyBkZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7Ci0KLSAgICAgICAgZm9yIChzaXplX3Qg
eCA9IDA7IHggPCBzb3VyY2VSZWN0LndpZHRoKCk7ICsreCkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgcG9zID0geCAqIDQ7Ci0KLSAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd1t4XTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93W3ggKyAxXTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dbeCArIDJdOwotICAgICAgICAgICAgdW5zaWduZWQgYWxw
aGEgPSBzcmNSb3dbeCArIDNdOwotCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBB
bHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAg
ICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAg
Z3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0g
Ymx1ZSAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGRlc3RSb3cpICsgeDsKLSAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQg
IDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21EYXRhKGNv
bnN0IEludFJlY3QmIHJlY3QsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4mIHJlc3VsdCkgY29u
c3QKLXsKLSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKLQotICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpIC8gcmF3Qml0bWFw
U2l6ZS53aWR0aDsKLQotICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IHJlY3Q7Ci0gICAgc2NhbGVk
UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0KLSAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwg
YmFja2luZ1N0b3JlU2l6ZSkuY29udGFpbnMoc2NhbGVkUmVjdCkpIHsKLSAgICAgICAgLy8gUmVx
dWVzdGVkIHJlY3QgaXMgb3V0c2lkZSB0aGUgYnVmZmVyLiBSZXR1cm4gemVyby1maWxsZWQgYnVm
ZmVyLgotICAgICAgICByZXN1bHQtPnplcm9GaWxsKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc2NhbGVkUmVjdCwg
YmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIHJlY3Quc2l6ZSgpLCByZXN1bHQtPmRhdGEo
KSwgSW50UG9pbnQoKSk7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5n
U3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKLXsKLSAgICBpZiAoc2l6ZSA9PSBiYWNr
aW5nU3RvcmVTaXplICYmICFkYXRhLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0K
LSAgICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBiYWNraW5nU3RvcmVTaXplID0gc2l6ZTsKLSAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5
dGVzLnVuc2FmZUdldCgpKTsKLSAgICByZXR1cm4gZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVz
LnVuc2FmZUdldCgpOwotfQotCi0vLyBTd2l6emxlIHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2Yg
dGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0Pgotdm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdW5z
aWduZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8g
NDsKLSAgICBhdXRvKiBwaXhlbERhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oYnl0
ZURhdGEpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsK
LSAgICAgICAgdWludDMyX3QgcGl4ZWwgPSAqcGl4ZWxEYXRhOwotICAgICAgICBzaXplX3QgYnl0
ZVBvc2l0aW9uID0gaSAqIDQ7Ci0KLSAgICAgICAgdWludDMyX3QgYWxwaGEgPSAocGl4ZWwgJiAw
eEZGMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgdWludDMyX3QgcmVkID0gKHBpeGVsICYgMHgwMEZG
MDAwMCkgPj4gMTY7Ci0gICAgICAgIHVpbnQzMl90IGdyZWVuID0gKHBpeGVsICYgMHgwMDAwRkYw
MCkgPj4gODsKLSAgICAgICAgdWludDMyX3QgYmx1ZSA9IChwaXhlbCAmIDB4MDAwMDAwRkYpOwot
Ci0gICAgICAgIC8vIChQKVJHQkEgLT4gUEJHUkEKLSAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAg
IGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAy
NTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAv
IDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgICpwaXhlbERhdGEgPSAo
YWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAg
KytwaXhlbERhdGE7Ci0gICAgfQotfQotCi0vLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJl
IGFscmVhZHkgaW4gUkdCQSBmb3JtYXQKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc2lyZWRGb3JtYXQ+Ci12b2lkIGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50
OF90KiBieXRlRGF0YSwgdW5zaWduZWQgYnl0ZUNvdW50KQotewotICAgIHNpemVfdCBwaXhlbENv
dW50ID0gYnl0ZUNvdW50IC8gNDsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxD
b3VudDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHggPSBwaXhlbENvdW50ICogNDsKLQotICAg
ICAgICB1bnNpZ25lZCByZWQgPSBieXRlRGF0YVt4XTsKLSAgICAgICAgdW5zaWduZWQgZ3JlZW4g
PSBieXRlRGF0YVt4ICsgMV07Ci0gICAgICAgIHVuc2lnbmVkIGJsdWUgPSBieXRlRGF0YVt4ICsg
Ml07Ci0gICAgICAgIHVuc2lnbmVkIGFscGhhID0gYnl0ZURhdGFbeCArIDNdOwotCi0gICAgICAg
IGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxp
ZWQpIHsKLSAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAgICBy
ZWQgPSAocmVkICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGdyZWVuID0g
KGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1
ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKLSAgICAgICAgICAgICAg
ICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVu
ICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBo
YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHVpbnQzMl90KiBwaXhlbCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihieXRlRGF0YSkgKyBpOwotICAgICAgICAqcGl4
ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAg
ICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXRE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICov
LCBmbG9hdCAvKiByZXNvbHV0aW9uU2NhbGUgKi8pIGNvbnN0Ci17Ci0gICAgYXV0byBudW1CeXRl
cyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhh
c092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJlc3Vs
dCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVu
c2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBpZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAgIGlmICghcmVh
ZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoZGVzaXJlZEZvcm1hdCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgYXV0byByYXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7Ci0g
ICAgSW50U2l6ZSBiaXRtYXBTaXplKGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLndpZHRoKSwg
Y2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUuaGVpZ2h0KSk7Ci0KLSAgICBpZiAocmVjdC5sb2Nh
dGlvbigpID09IEludFBvaW50KCkgJiYgcmVjdC5zaXplKCkgPT0gYml0bWFwU2l6ZSkgewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChudW1CeXRlcy51bnNhZmVHZXQoKSA9PSBkYXRhLnNpemUoKSk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsK
LSAgICB9IGVsc2UgewotICAgICAgICAvLyBPbmx5IHdhbnQgcGFydCBvZiB0aGUgYml0bWFwLgot
ICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbURhdGEocmVjdCwgcmVzdWx0KSkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGlmIChieXRlRm9ybWF0ICE9IGRlc2lyZWRG
b3JtYXQpIHsKLSAgICAgICAgLy8gSW4tbWVtb3J5IGRhdGEgZG9lcyBub3QgbWF0Y2ggZGVzaXJl
ZCBmb3JtYXQuIE5lZWQgdG8gc3dpenpsZSB0aGUgcmVzdWx0cy4KLSAgICAgICAgaWYgKGRlc2ly
ZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAg
ICAgICAgICAgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRp
b248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCks
IHJlc3VsdC0+bGVuZ3RoKCkpOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJv
b2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQpIGNvbnN0Ci17Ci0gICAgaWYgKGJpdG1hcEJ1ZmZl
clN5bmMgIT0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIEludFNpemUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUo
KTsKLQotICAgIGF1dG8gbnVtQnl0ZXMgPSBwaXhlbFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4o
KSAqIDQ7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2
aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29u
dGV4dCgpOwotICAgIEFTU0VSVCghIWQyZERldmljZUNvbnRleHQpOwotCi0gICAgYXV0byBieXRl
c1BlclJvd0luRGF0YSA9IHBpeGVsU2l6ZS53aWR0aCgpICogNDsKLQotICAgIC8vIENvcHkgR1BV
IGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgdG8gYSBDUFUtYmFja2VkIElEMkQxQml0bWFwMQot
ICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IGNwdUJpdG1hcDsKLSAgICBEMkQxX0JJVE1BUF9QUk9Q
RVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFf
QklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFX
LCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IGQyZERldmljZUNv
bnRleHQtPkNyZWF0ZUJpdG1hcChwaXhlbFNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRh
LCBiaXRtYXBQcm9wZXJ0aWVzMiwgJmNwdUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIHRhcmdldFBvcyA9IEQyRDE6OlBv
aW50MlUoKTsKLSAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIHBp
eGVsU2l6ZS53aWR0aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOwotICAgIGhyID0gY3B1Qml0bWFw
LT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBiaXRtYXAuZ2V0KCksICZkYXRhUmVjdCk7Ci0g
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBEMkQx
X01BUFBFRF9SRUNUIG1hcHBlZERhdGE7Ci0gICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01B
UF9PUFRJT05TX1JFQUQsICZtYXBwZWREYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbWFwcGVkRGF0YS5iaXRzKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShwaXhlbFNpemUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVj
dCBSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8g
YmUgY29tcGF0aWJsZS4KLSAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkKQotICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhl
bFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRl
c1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwotICAgIGVsc2UKLSAgICAgICAgc3dpenpsZUFu
ZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4obWFw
cGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBw
ZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwotCi0gICAgYnl0
ZUZvcm1hdCA9IGRlc2lyZWRGb3JtYXQ7Ci0KLSAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFw
QnVmZmVyU3luYzo6SW5TeW5jOwotCi0gICAgaHIgPSBjcHVCaXRtYXAtPlVubWFwKCk7Ci0gICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VG
b3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
LyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQotewotICAg
IEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5o
ZWlnaHQoKSA+IDApOwotCi0gICAgQ2hlY2tlZDxpbnQ+IG9yaWdpbnggPSBzb3VyY2VSZWN0Lngo
KTsKLSAgICBDaGVja2VkPGludD4gZGVzdHggPSAoQ2hlY2tlZDxpbnQ+KGRlc3RQb2ludC54KCkp
ICsgc291cmNlUmVjdC54KCkpOwotICAgIGRlc3R4ICo9IHJlc29sdXRpb25TY2FsZTsKLSAgICBB
U1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKGRlc3R4LnVuc2FmZUdl
dCgpIDwgc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA+PSAw
KTsKLSAgICBBU1NFUlQob3JpZ2lueC51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFgoKSk7
Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LngoKSkg
KyBzb3VyY2VSZWN0Lm1heFgoKSk7Ci0gICAgZW5keCAqPSByZXNvbHV0aW9uU2NhbGU7Ci0gICAg
QVNTRVJUKGVuZHgudW5zYWZlR2V0KCkgPD0gc2l6ZS53aWR0aCgpKTsKLQotICAgIENoZWNrZWQ8
aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVzdHcg
PSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJlY3Qu
eSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50Lnko
KSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgZGVzdHkgKj0gcmVzb2x1dGlvblNjYWxlOwotICAg
IEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHkudW5zYWZl
R2V0KCkgPCBzaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA+
PSAwKTsKLSAgICBBU1NFUlQob3JpZ2lueS51bnNhZmVHZXQoKSA8PSBzb3VyY2VSZWN0Lm1heFko
KSk7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50Lnko
KSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7Ci0gICAgZW5keSAqPSByZXNvbHV0aW9uU2NhbGU7Ci0g
ICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBDaGVj
a2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGludD4g
ZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0KLSAgICBpZiAod2lkdGggPD0gMCB8fCBoZWlnaHQgPD0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBpZiAoYml0bWFw
KSB7Ci0gICAgICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAg
ICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzb3VyY2VTaXplLndpZHRoKCkpOwotICAg
ICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNpemUud2lkdGgoKSk7Ci0gICAgICAgIEFT
U0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOwotICAgICAgICBB
U1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBzaXplLmhlaWdodCgpKTsKLSAgICB9Ci0jZW5kaWYK
LQotICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHNpemUpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoc291cmNlU2l6ZSA9PSBzaXplKSB7Ci0gICAgICAgIG1lbWNweShkYXRhLmRhdGEo
KSwgc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKLSAgICAgICAgYnl0ZUZvcm1hdCA9
IHNvdXJjZUZvcm1hdDsKLSAgICB9IGVsc2UgewotICAgICAgICByZWFkRGF0YUZyb21CaXRtYXBJ
Zk5lZWRlZChieXRlRm9ybWF0KTsKLSAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21Tb3VyY2VUb0Rh
dGEoc291cmNlUmVjdCwgc291cmNlLCBzb3VyY2VGb3JtYXQpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRt
YXBPdXRPZlN5bmM7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3Vy
Y2VUb0RhdGEoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgVWludDhDbGFtcGVkQXJy
YXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQpCi17Ci0gICAg
SW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotCi0gICAgSW50UmVj
dCBzb3VyY2VSZWN0VG9Db3B5ID0gc291cmNlUmVjdDsKLSAgICBpZiAoIUludFJlY3QoSW50UG9p
bnQoKSwgcGl4ZWxTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBkZXN0QnVmZmVyUG9zaXRpb24gPSBzb3VyY2VSZWN0LmxvY2F0aW9u
KCk7Ci0KLSAgICBpZiAoc291cmNlRm9ybWF0ID09IGJ5dGVGb3JtYXQpCi0gICAgICAgIHJldHVy
biBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCks
IHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVy
UG9zaXRpb24pOwotCi0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9E
ZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAg
ICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNl
UmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgp
LCBkZXN0QnVmZmVyUG9zaXRpb24pOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6bG9hZERh
dGFUb0JpdG1hcElmTmVlZGVkKCkKLXsKLSAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRt
YXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmMgfHwgZGF0YS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsK
LSAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7
Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQo
KSk7Ci0KLSAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBw
aXhlbFNpemUud2lkdGggKiBwaXhlbFNpemUuaGVpZ2h0ICogNDsKLSAgICBpZiAobnVtQnl0ZXMu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBTb2Z0d2FyZSBnZW5l
cmF0ZWQgYml0bWFwIGRhdGEgaXMgaW4gUkdCQS4gV2UgbmVlZCB0byBzd2l6emxlIHRvIHByZW11
bHRpcGxpZWQgQkdSQSB0byBiZSBjb21wYXRpYmxlCi0gICAgLy8gd2l0aCB0aGUgSFdORC9IREMg
cmVuZGVyIGJhY2tpbmcgd2UgdXNlLgotICAgIGlmIChieXRlRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgaW5QbGFjZVN3aXp6bGU8QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkpOyAvLyBSR0JBIC0+IFBCR1JBCi0gICAgZWxzZQotICAgICAgICBpblBsYWNlU3dpenps
ZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihkYXRhLmRhdGEoKSwgZGF0
YS5zaXplKCkpOyAvLyBQUkdCQSAtPiBQQkdSQQotCi0gICAgYXV0byBieXRlc1BlclJvd0luRGF0
YSA9IGJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSAqIDQ7Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0
bWFwLT5Db3B5RnJvbU1lbW9yeShudWxscHRyLCBkYXRhLmRhdGEoKSwgYnl0ZXNQZXJSb3dJbkRh
dGEpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMg
PSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1h
Z2VCdWZmZXJEYXRhOjpjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJU
YXJnZXQpCi17Ci0gICAgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0KLSAgICBpZiAoIXJl
bmRlclRhcmdldCkKLSAgICAgICAgcmV0dXJuIGJpdG1hcDsKLQotICAgIGlmIChwbGF0Zm9ybUNv
bnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkgewotICAgICAgICBDT01QdHI8
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0
KTsKLSAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgewotICAgICAgICAgICAgQ09NUHRyPElEMkQx
Qml0bWFwPiBiYWNraW5nQml0bWFwOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChiaXRtYXBU
YXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGJhY2tpbmdCaXRtYXAgIT0gYml0bWFwKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYml0
bWFwOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZHJhdyBhbiBJRDJEMUJpdG1hcCB0
byBpdHNlbGYuIE11c3QgcmV0dXJuIGEgY29weS4KLSAgICAgICAgICAgICAgICBDT01QdHI8SUQy
RDFCaXRtYXA+IGNvcGllZEJpdG1hcDsKLSAgICAgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJl
bmRlclRhcmdldC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIERpcmVjdDJE
OjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb3BpZWRCaXRtYXApKSkgewotICAgICAgICAgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKGNvcGllZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwg
Yml0bWFwLmdldCgpLCBudWxscHRyKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Y29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGF1dG8gc2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAg
QVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwotCi0gICAgQ2hlY2tlZDx1bnNpZ25l
ZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICog
NDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIC8vIENvcHkgdGhlIGJpdHMgZnJvbSBjdXJyZW50IHJlbmRlclRhcmdldCB0
byB0aGUgb3V0cHV0IHRhcmdldC4KLSAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJh
Y2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4u
Ci0gICAgY29udGV4dC0+ZW5kRHJhdygpOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4
dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgp
OwotICAgIGlmICghc291cmNlRGV2aWNlQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7Ci0gICAgRDJEMV9C
SVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRp
ZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NB
Tk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgSFJFU1VMVCBociA9IHNv
dXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBu
dWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJj
ZUNQVUJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmICghc291cmNlQ1BVQml0bWFwKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIGhyID0gc291cmNlQ1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBi
aXRtYXAuZ2V0KCksIG51bGxwdHIpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7
Ci0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZt
YXBwZWRTb3VyY2VEYXRhKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNl
Q29udGV4dDsKLSAgICBociA9IHJlbmRlclRhcmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERl
dmljZUNvbnRleHQpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQotICAgIENPTVB0cjxJ
RDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcDsKLSAgICBociA9IHRhcmdldERldmljZUNvbnRl
eHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRh
LmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVz
KCksICZjb21wYXRpYmxlQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7Ci0g
ICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgY29udGV4dC0+YmVnaW5EcmF3KCk7Ci0K
LSAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1hcDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDljOTRkOGE0ODIyZjEyNWY0MDZmMzAwNzc0N2ZmOTM1OGMxNTZhMzAuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgKKysrIC9k
ZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTgg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkltYWdlLmgiCi0j
aW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgi
Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRl
IDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgotCi1pbnRlcmZhY2UgSUQyRDFSZW5kZXJUYXJnZXQ7Ci1p
bnRlcmZhY2UgSUQyRDFCaXRtYXA7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZlckRhdGEgewotICAgIG11
dGFibGUgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplOwotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJl
Y29yZE92ZXJmbG93PiBieXRlc1BlclJvdzsKLQotICAgIC8vIE9ubHkgZm9yIHNvZnR3YXJlIElt
YWdlQnVmZmVycy4KLSAgICBtdXRhYmxlIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIG11dGFi
bGUgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBieXRlRm9ybWF0IHsgQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6VW5wcmVtdWx0aXBsaWVkIH07Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEPiBwbGF0Zm9ybUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBo
aWNzQ29udGV4dD4gY29udGV4dDsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLQot
ICAgIGVudW0gY2xhc3MgQml0bWFwQnVmZmVyU3luYyB7IEluU3luYywgQml0bWFwT3V0T2ZTeW5j
LCBCdWZmZXJPdXRPZlN5bmMgfTsKLSAgICBtdXRhYmxlIEJpdG1hcEJ1ZmZlclN5bmMgYml0bWFw
QnVmZmVyU3luYyB7IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYyB9OwotCi0gICAg
UmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24s
IGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5n
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpIGNvbnN0OwotICAgIHZvaWQgcHV0RGF0YShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZv
cm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxl
cmF0ZVJlbmRlcmluZywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gY29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCopOwotCi0gICAgYm9v
bCBlbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAgIHZvaWQgbG9h
ZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0gICAgYm9vbCByZWFkRGF0YUZyb21CaXRtYXBJZk5l
ZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQpIGNvbnN0OwotICAgIGJv
b2wgY29weVJlY3RGcm9tRGF0YShjb25zdCBJbnRSZWN0JiwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiYpIGNvbnN0OwotICAgIGJvb2wgY29weVJlY3RGcm9tU291cmNlVG9EYXRhKGNvbnN0IElu
dFJlY3QmLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24p
OwotICAgIHZvaWQgbWFya0J1ZmZlck91dE9mU3luYygpIHsgYml0bWFwQnVmZmVyU3luYyA9IEJp
dG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYzsgfQotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBlMDQyMThmMWVmNGY1NzhjZTA3Zjk0YjdhOGVjYmI4MzBhNTI2N2Y5Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJELmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDM1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
LQotI2lmIFVTRShESVJFQ1QyRCkKLQotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiQ09NUHRyLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJJbWFn
ZURlY29kZXJEaXJlY3QyRC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJNSU1F
VHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPGQyZDFfMS5oPgotI2luY2x1ZGUg
PG1hdGguaD4KLSNpbmNsdWRlIDx3aW5jb2RlYy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVkZSA8d3RmL01h
aW5UaHJlYWQuaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVy
OjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBj
b250ZXh0LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1
ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNj
ZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3
IEltYWdlQnVmZmVyKHNjYWxlZFNpemUsIDEsIENvbG9yU3BhY2U6OlNSR0IsIHJlbmRlcmluZ01v
ZGUsIG51bGxwdHIsICZjb250ZXh0LCBzdWNjZXNzKSk7Ci0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGluZyBz
Y2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCi0gICAgYnVmZmVyLT5jb250ZXh0
KCkuc2NhbGUoRmxvYXRTaXplKHNjYWxlZFNpemUud2lkdGgoKSAvIHNpemUud2lkdGgoKSwgc2Nh
bGVkU2l6ZS5oZWlnaHQoKSAvIHNpemUuaGVpZ2h0KCkpKTsKLSAgICByZXR1cm4gYnVmZmVyOwot
fQotCi1JbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgLypjb2xvclNwYWNlKi8sIFJlbmRlcmluZ01v
ZGUgcmVuZGVyaW5nTW9kZSwgY29uc3QgSG9zdFdpbmRvdyosIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCogdGFyZ2V0Q29udGV4dCwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fbG9naWNhbFNpemUoc2l6
ZSkKLSAgICAsIG1fcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZSkKLXsKLSAgICBzdWNj
ZXNzID0gZmFsc2U7IC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZmFpbHVyZS4KLSAgICBmbG9h
dCBzY2FsZWRXaWR0aCA9IHN0ZDo6Y2VpbChyZXNvbHV0aW9uU2NhbGUgKiBzaXplLndpZHRoKCkp
OwotICAgIGZsb2F0IHNjYWxlZEhlaWdodCA9IHN0ZDo6Y2VpbChyZXNvbHV0aW9uU2NhbGUgKiBz
aXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1
c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBz
Y2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJl
bmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0g
ICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFByZXZlbnQgaW50ZWdlciBvdmVyZmxvd3MKLSAgICBtX2Rh
dGEuYnl0ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLndpZHRoKCkpOwotICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNv
cmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4o
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93Owot
ICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8qIHBsYXRmb3JtQ29udGV4dCA9IHRhcmdldENvbnRleHQgPyB0YXJnZXRDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKSA6IG51bGxwdHI7Ci0gICAgYXV0byogcmVuZGVyVGFyZ2V0ID0gcGxh
dGZvcm1Db250ZXh0ID8gcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSA6IG51bGxwdHI7
Ci0KLSAgICBpZiAoIXJlbmRlclRhcmdldCkKLSAgICAgICAgcmVuZGVyVGFyZ2V0ID0gR3JhcGhp
Y3NDb250ZXh0OjpkZWZhdWx0UmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBhdXRvIGJpdG1hcENvbnRl
eHQgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwUmVuZGVyVGFyZ2V0T2ZTaXplKG1fbG9naWNhbFNp
emUsIHJlbmRlclRhcmdldCwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIGlmICghYml0bWFwQ29u
dGV4dCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgSFJFU1VMVCBociA9IGJpdG1hcENvbnRleHQt
PkdldEJpdG1hcCgmbV9kYXRhLmJpdG1hcCk7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEucGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3RoaXNdKCkgewot
ICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7Ci0gICAgfSwgW3RoaXNd
KCkgewotICAgICAgICBtX2RhdGEubWFya0J1ZmZlck91dE9mU3luYygpOwotICAgIH0pOwotICAg
IG1fZGF0YS5jb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KG1fZGF0YS5wbGF0
Zm9ybUNvbnRleHQuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4
dFR5cGU6OkdQVU1lbW9yeSk7Ci0KLSAgICBzdWNjZXNzID0gdHJ1ZTsKLX0KLQotSW1hZ2VCdWZm
ZXI6OkltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBDb2xvclNwYWNlIGltYWdlQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IEltYWdlQnVmZmVy
KHNpemUsIHJlc29sdXRpb25TY2FsZSwgaW1hZ2VDb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBu
dWxscHRyLCBudWxscHRyLCBzdWNjZXNzKQotewotfQotCi1JbWFnZUJ1ZmZlcjo6fkltYWdlQnVm
ZmVyKCkgPSBkZWZhdWx0OwotCi1HcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyOjpjb250ZXh0
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gKm1fZGF0YS5jb250ZXh0OwotfQotCi12b2lkIEltYWdl
QnVmZmVyOjpmbHVzaENvbnRleHQoKSBjb25zdAotewotICAgIGNvbnRleHQoKS5mbHVzaCgpOwot
fQotCi1zdGF0aWMgQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vz
c2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1hcCog
aW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBGbG9hdFNpemUgaW1hZ2VTaXpl
ID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7Ci0KLSAgICBp
ZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9IHN0
YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVfdD4o
aW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWlnaHQo
KSkpKSB7Ci0gICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERpcmVj
dDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBib3VuZHMpOwotICAgICAgICBpZiAoY3Jv
cHBlZEJpdG1hcCkgewotICAgICAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVjdFUo
MCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBIUkVT
VUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2UsICZz
b3VyY2VSZWN0KTsKLSAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBjcm9wcGVkQml0bWFwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGltYWdlOwotfQotCi1zdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVy
U2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIENP
TVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIEludFNpemUg
bG9naWNhbFNpemUsIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIGlmIChy
ZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nh
cnkoYml0bWFwVGFyZ2V0LCBpbWFnZS5nZXQoKSwgaW50ZXJuYWxTaXplKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHNjYWxlZCB2ZXJzaW9uCi0gICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShXVEZNb3Zl
KGltYWdlKSk7Ci19Ci0KLVJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZShCYWNr
aW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVz
b2x1dGlvbikgY29uc3QKLXsKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGlm
IChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoY29weUJl
aGF2aW9yKTsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKLQotICAgIGF1dG8gYml0bWFwVGFyZ2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQo
KSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoYml0
bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIGxvZ2ljYWxTaXplKCks
IG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJlc2VydmVSZXNv
bHV0aW9uKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uKQotewotICAgIEludFNpemUgaW50ZXJuYWxTaXplID0gaW1h
Z2VCdWZmZXItPmludGVybmFsU2l6ZSgpOwotICAgIEludFNpemUgbG9naWNhbFNpemUgPSBpbWFn
ZUJ1ZmZlci0+bG9naWNhbFNpemUoKTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemUgPSBp
bWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0gICAgZmxvYXQgcmVzb2x1dGlv
blNjYWxlID0gaW1hZ2VCdWZmZXItPm1fcmVzb2x1dGlvblNjYWxlOwotCi0gICAgQ09NUHRyPElE
MkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGlt
YWdlQnVmZmVyLT5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5R
dWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0
ZXJTY2FsaW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LmdldCgpLCBzaW5rSW50b05hdGl2ZUltYWdl
KFdURk1vdmUoaW1hZ2VCdWZmZXIpKSwgaW50ZXJuYWxTaXplLCBsb2dpY2FsU2l6ZSwgYmFja2lu
Z1N0b3JlU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1D
T01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIpCi17Ci0gICAgLy8gRklYTUU6IFNl
ZSBpZiB3ZSBjYW4gcmV1c2UgdGhlIG9uLWhhcmR3YXJlIGltYWdlLgotICAgIHJldHVybiBpbWFn
ZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKLX0KLQotQ09N
UHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9y
ZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gYml0bWFwVGFyZ2V0OwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZv
cm1Db250ZXh0KCktPnJlbmRlclRhcmdldCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0
KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBpbWFnZTsKLSAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0
Qml0bWFwKCZpbWFnZSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgLy8gRklY
TUU6IG1fZGF0YS5kYXRhIGlzIG51bGxwdHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJhY2tp
bmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0IGZhaWx1cmVzLgotICAgIGlmIChjb3B5QmVoYXZpb3Ig
PT0gQ29weUJhY2tpbmdTdG9yZSAmJiBtX2RhdGEuZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIGNv
cHlCZWhhdmlvciA9IERvbnRDb3B5QmFja2luZ1N0b3JlOwotCi0gICAgQ2hlY2tlZDxzaXplX3Qs
IFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJm
bG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJS
b3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0g
ICAgICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNr
aW5nU3RvcmU6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0
b3JlOgotICAgICAgICAgICAgRDJEMV9SRUNUX1UgYmFja2luZ1N0b3JlRGltZW5zdGlvbnMgPSBJ
bnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplKTsKLSAgICAgICAgICAg
IGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMsIG1fZGF0YS5k
YXRhLmRhdGEoKSwgMzIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNlLT5jcmVhdGVJbWFnZSgpOwot
I2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXdD
b25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlciwgR3JhcGhp
Y3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykK
LXsKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3Qs
IG9wdGlvbnMpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYg
ZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNj
YWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBhdXRvIGNv
bXBhdGlibGVCaXRtYXAgPSBtX2RhdGEuY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOwotCi0gICAgRmxvYXRTaXplIGN1cnJlbnRJ
bWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7Ci0gICAgaWYgKGN1
cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRlc3RDb250
ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBG
bG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQot
ewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFkanVzdGVk
U3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotCi0g
ICAgaWYgKCFjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkgewotICAgICAgICBpZiAo
JmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgfHwgZGVzdENvbnRleHQuaXNBY2NlbGVyYXRlZENv
bnRleHQoKSkgewotICAgICAgICAgICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFn
ZShDb3B5QmFja2luZ1N0b3JlKSkgLy8gRHJhd2luZyBpbnRvIG91ciBvd24gYnVmZmVyLCBuZWVk
IHRvIGRlZXAgY29weS4KLSAgICAgICAgICAgICAgICBjb3B5LT5kcmF3UGF0dGVybihkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2Us
IHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKFJl
ZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXJpbmcgPSBjb3B5SW1hZ2UoRG9udENvcHlCYWNraW5n
U3RvcmUpKQotICAgICAgICAgICAgICAgIGltYWdlRm9yUmVuZGVyaW5nLT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwg
cGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKFJlZlB0cjxJbWFnZT4gY29weSA9IGNvcHlJbWFnZShDb3B5QmFja2luZ1N0b3JlKSkK
LSAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7
Ci0gICAgfQotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxB
cnJheURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QK
LXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZs
dXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzcmNSZWN0ID0gcmVjdDsKLSAgICBpZiAoY29v
cmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSkKLSAgICAgICAgc3JjUmVj
dC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAocGl4ZWxBcnJheURpbWVuc2lv
bnMpCi0gICAgICAgICpwaXhlbEFycmF5RGltZW5zaW9ucyA9IHNyY1JlY3Quc2l6ZSgpOwotCi0g
ICAgcmV0dXJuIG1fZGF0YS5nZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2VsZXJhdGVk
Q29udGV4dCgpLCAxKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAg
IGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAg
ICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5
RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXpl
KCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
UHJlbXVsdGlwbGllZCwgc3JjUmVjdCwgaW50ZXJuYWxTaXplKCksIGNvbnRleHQoKS5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
YnVmZmVyRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNv
b3JkaW5hdGVTeXN0ZW0pCi17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc2NhbGVkU291cmNl
UmVjdCA9IHNvdXJjZVJlY3Q7Ci0gICAgSW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gc291cmNl
U2l6ZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbSA9PSBMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSkgewotICAgICAgICBzY2FsZWRTb3VyY2VSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
LSAgICAgICAgc2NhbGVkU291cmNlU2l6ZS5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
fQotCi0gICAgbV9kYXRhLnB1dERhdGEoc291cmNlLCBidWZmZXJGb3JtYXQsIHNjYWxlZFNvdXJj
ZVNpemUsIHNjYWxlZFNvdXJjZVJlY3QsIGRlc3RQb2ludCwgaW50ZXJuYWxTaXplKCksIGNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpLCAxKTsKLX0KLQotU3RyaW5nIEltYWdlQnVmZmVy
Ojp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8ZG91YmxlPiwgUHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuICJkYXRh
OiwiX3M7Ci19Ci0KLVZlY3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlcjo6dG9EYXRhKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29uc3QKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLVN0cmluZyBJbWFnZURhdGFU
b0RhdGFVUkwoY29uc3QgSW1hZ2VEYXRhJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGNvbnN0IGRvdWJsZSogcXVhbGl0eSkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAiZGF0YTosIl9zOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNw
YWNlKENvbG9yU3BhY2UsIENvbG9yU3BhY2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3MGFiZWRmMGE2MzUwZmQ1NTk0OGQ0ODFhYjc4
OTVmNjIwYjQ4YzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzI0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5oIgor
CisjaWYgVVNFKERJUkVDVDJEKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJDT01QdHIuaCIKKyNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkltYWdl
RGVjb2RlckRpcmVjdDJELmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dERpcmVjdDJELmgiCisjaW5jbHVkZSA8ZDJkMV8xLmg+CisjaW5jbHVkZSA8
bWF0aC5oPgorI2luY2x1ZGUgPHdpbmNvZGVjLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4gSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBjYWxjdWxhdGVC
YWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNrZW5kU2l6ZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byogcGxhdGZvcm1D
b250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
IDogbnVsbHB0cjsKKyAgICBhdXRvKiByZW5kZXJUYXJnZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBw
bGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDogbnVsbHB0cjsKKworICAgIGlmICghcmVu
ZGVyVGFyZ2V0KQorICAgICAgICByZW5kZXJUYXJnZXQgPSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1
bHRSZW5kZXJUYXJnZXQoKTsKKworICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IERpcmVjdDJEOjpj
cmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUoc2l6ZSwgcmVuZGVyVGFyZ2V0LCByZXNvbHV0
aW9uU2NhbGUpOworICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgTmF0aXZlSW1hZ2VQdHIgYml0bWFwOworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBDb250ZXh0
LT5HZXRCaXRtYXAoJmJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBhdXRvIHBsYXRmb3JtQ29udGV4dCA9IG1ha2VVbmlxdWU8UGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQ+KGJpdG1hcENvbnRleHQuZ2V0KCksIFt0aGlzXSgpIHsKKyAgICAgICAg
bV9kYXRhLmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpOworICAgIH0sIFt0aGlzXSgpIHsKKyAg
ICAgICAgbV9kYXRhLm1hcmtCdWZmZXJPdXRPZlN5bmMoKTsKKyAgICB9KTsKKworICAgIGlmICgh
cGxhdGZvcm1Db250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gY29u
dGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihwbGF0Zm9ybUNvbnRleHQuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDo6Qml0bWFwUmVuZGVyaW5nQ29udGV4dFR5cGU6OkdQVU1lbW9yeSk7
CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+KG5ldyBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBXVEZNb3ZlKHBsYXRmb3JtQ29udGV4dCksIFdURk1vdmUoY29udGV4dCksIFdU
Rk1vdmUoYml0bWFwKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3Qy
REJhY2tlbmQ+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgcmV0dXJu
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6
U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJ
bnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4mJiBwbGF0
Zm9ybUNvbnRleHQsIHN0ZDo6dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCwg
TmF0aXZlSW1hZ2VQdHImJiBiaXRtYXApCisgICAgOiBJbWFnZUJ1ZmZlckNHQmFja2VuZChsb2dp
Y2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSkKKyAgICAs
IG1fcGxhdGZvcm1Db250ZXh0KFdURk1vdmUocGxhdGZvcm1Db250ZXh0KSkKKyAgICAsIG1fY29u
dGV4dChXVEZNb3ZlKGNvbnRleHQpKQorICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQor
eworfQorCitHcmFwaGljc0NvbnRleHQmIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb250
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKm1fY29udGV4dDsKK30KKwordm9pZCBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDo6Zmx1c2hDb250ZXh0KCkKK3sKKyAgICBjb250ZXh0KCkuZmx1
c2goKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcikgY29uc3QKK3sKKyAg
ICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAgICBIUkVT
VUxUIGhyID0gY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVl
cnlJbnRlcmZhY2UoJmJpdG1hcFRhcmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7Cisg
ICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmaW1hZ2UpOworICAgIEFTU0VSVChTVUND
RUVERUQoaHIpKTsKKworICAgIC8vIEZJWE1FOiBtX2RhdGEuZGF0YSBpcyBudWxscHRyIGV2ZW4g
d2hlbiBhc2tpbmcgdG8gY29weSBiYWNraW5nIHN0b3JlIGxlYWRpbmcgdG8gdGVzdCBmYWlsdXJl
cy4KKyAgICBpZiAoY29weUJlaGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUgJiYgbV9kYXRhLmRh
dGEuaXNFbXB0eSgpKQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBEb250Q29weUJhY2tpbmdTdG9y
ZTsKKworICAgIENoZWNrZWQ8c2l6ZV90LCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBDaGVj
a2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVp
Z2h0KCkpICogbV9kYXRhLmJ5dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxv
d2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKGNvcHlCZWhhdmlvciA9
PSBDb3B5QmFja2luZ1N0b3JlKSB7CisgICAgICAgIEQyRDFfUkVDVF9VIGJhY2tpbmdTdG9yZURp
bWVuc3Rpb25zID0gSW50UmVjdChJbnRQb2ludCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZSk7
CisgICAgICAgIGltYWdlLT5Db3B5RnJvbU1lbW9yeSgmYmFja2luZ1N0b3JlRGltZW5zdGlvbnMs
IG1fZGF0YS5kYXRhLmRhdGEoKSwgMzIpOworCisgICAgfQorCisgICAgcmV0dXJuIGltYWdlOwor
fQorCitzdGF0aWMgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlQ3JvcHBlZEltYWdlSWZOZWNlc3Nhcnko
SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRhcmdldCwgSUQyRDFCaXRtYXAqIGltYWdl
LCBjb25zdCBJbnRTaXplJiBib3VuZHMpCit7CisgICAgRmxvYXRTaXplIGltYWdlU2l6ZSA9IGlt
YWdlID8gbmF0aXZlSW1hZ2VTaXplKGltYWdlKSA6IEZsb2F0U2l6ZSgpOworCisgICAgaWYgKGlt
YWdlICYmIChzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdlU2l6ZS53aWR0aCgpKSAhPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KGJvdW5kcy53aWR0aCgpKSB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KGltYWdl
U2l6ZS5oZWlnaHQoKSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkg
eworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGNyb3BwZWRCaXRtYXAgPSBEaXJlY3QyRDo6
Y3JlYXRlQml0bWFwKGJpdG1hcFRhcmdldCwgYm91bmRzKTsKKyAgICAgICAgaWYgKGNyb3BwZWRC
aXRtYXApIHsKKyAgICAgICAgICAgIGF1dG8gc291cmNlUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAs
IGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOworICAgICAgICAgICAgSFJFU1VMVCBo
ciA9IGNyb3BwZWRCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIGltYWdlLCAmc291cmNl
UmVjdCk7CisgICAgICAgICAgICBpZiAoU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JvcHBlZEJpdG1hcDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpbWFn
ZTsKK30KKworc3RhdGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxp
bmdJZk5lZWRlZChJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBDT01QdHI8
SUQyRDFCaXRtYXA+JiYgaW1hZ2UsIEludFNpemUgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAg
aWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2
ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOworICAgIGVs
c2UgeworICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNpb24K
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdU
Rk1vdmUoaW1hZ2UpKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAoreworICAgIE5hdGl2ZUltYWdlUHRy
IGltYWdlOworICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1
dGlvbiA9PSBQcmVzZXJ2ZVJlc29sdXRpb246OlllcykKKyAgICAgICAgaW1hZ2UgPSBjb3B5TmF0
aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICBlbHNlCisgICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKERvbnRDb3B5QmFja2luZ1N0b3JlKTsKKworICAgIGF1dG8gYml0bWFwVGFyZ2V0
ID0gcmVpbnRlcnByZXRfY2FzdDxJRDJEMUJpdG1hcFJlbmRlclRhcmdldCo+KGNvbnRleHQoKS5w
bGF0Zm9ybUNvbnRleHQoKSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2Fs
aW5nSWZOZWVkZWQoYml0bWFwVGFyZ2V0LCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCks
IHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVu
ZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7CisgICAgSFJFU1VMVCBociA9IGNvbnRleHQoKS5wbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJn
ZXQpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tp
bmdTdG9yZSk7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoYml0bWFwVGFyZ2V0LmdldCgpLCBXVEZNb3ZlKGltYWdlKSwgaW50ZXJuYWxTaXplKCksIHJl
c29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29tcGF0aWJsZUJpdG1hcChJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KQoreworICAgIGxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgp
OworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAg
ICBpZiAobV9wbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpID09IHJlbmRlclRhcmdldCkg
eworICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldChR
dWVyeSwgcmVuZGVyVGFyZ2V0KTsKKyAgICAgICAgaWYgKGJpdG1hcFRhcmdldCkgeworICAgICAg
ICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiYWNraW5nQml0bWFwOworICAgICAgICAgICAgaWYg
KFNVQ0NFRURFRChiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmYmFja2luZ0JpdG1hcCkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGJhY2tpbmdCaXRtYXAgIT0gbV9iaXRtYXApCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBiaXRtYXA7CisKKyAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBk
cmF3IGFuIElEMkQxQml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgorICAgICAg
ICAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOworICAgICAgICAgICAg
ICAgIGlmIChTVUNDRUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQ
aXhlbFNpemUoKSwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkp
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5
RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0cikpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGNvcGllZEJpdG1hcDsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBhdXRvIHNpemUgPSBtX2JpdG1h
cC0+R2V0UGl4ZWxTaXplKCk7CisgICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgp
OworCisgICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6
ZS53aWR0aCAqIHNpemUuaGVpZ2h0ICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dl
ZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIENvcHkgdGhlIGJpdHMgZnJv
bSBjdXJyZW50IHJlbmRlclRhcmdldCB0byB0aGUgb3V0cHV0IHRhcmdldC4KKyAgICAvLyBXZSBj
YW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcgYW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3Rp
dmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCisgICAgY29udGV4dC0+ZW5kRHJhdygpOworCisgICAg
Q09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291cmNlRGV2aWNlQ29udGV4dCA9IG1fcGxhdGZv
cm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7CisgICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNv
dXJjZUNQVUJpdG1hcDsKKyAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0
aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVB
RCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1h
dCgpKTsKKyAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFw
KG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0
KCksIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXApOworICAgIGlmICghU1VDQ0VF
REVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXNvdXJjZUNQVUJp
dG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBociA9IHNvdXJjZUNQVUJpdG1h
cC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgbV9iaXRtYXAuZ2V0KCksIG51bGxwdHIpOworICAg
IGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBEMkQx
X01BUFBFRF9SRUNUIG1hcHBlZFNvdXJjZURhdGE7CisgICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAt
Pk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWRTb3VyY2VEYXRhKTsKKyAgICBpZiAo
IVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElE
MkQxRGV2aWNlQ29udGV4dD4gdGFyZ2V0RGV2aWNlQ29udGV4dDsKKyAgICBociA9IHJlbmRlclRh
cmdldC0+UXVlcnlJbnRlcmZhY2UoJnRhcmdldERldmljZUNvbnRleHQpOworICAgIEFTU0VSVChT
VUNDRUVERUQoaHIpKTsKKworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY29tcGF0aWJsZUJpdG1h
cDsKKyAgICBociA9IHRhcmdldERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdl
dFBpeGVsU2l6ZSgpLCBtYXBwZWRTb3VyY2VEYXRhLmJpdHMsIG1hcHBlZFNvdXJjZURhdGEucGl0
Y2gsIERpcmVjdDJEOjpiaXRtYXBQcm9wZXJ0aWVzKCksICZjb21wYXRpYmxlQml0bWFwKTsKKyAg
ICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaHIg
PSBzb3VyY2VDUFVCaXRtYXAtPlVubWFwKCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwor
CisgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisKKyAgICByZXR1cm4gY29tcGF0aWJsZUJpdG1h
cDsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3Jj
UmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSwgbV9yZXNvbHV0aW9uU2NhbGUpOworCisgICAg
YXV0byBjb21wYXRpYmxlQml0bWFwID0gY29tcGF0aWJsZUJpdG1hcChkZXN0Q29udGV4dC5wbGF0
Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCkpOworCisgICAgRmxvYXRTaXplIGN1cnJlbnRJ
bWFnZVNpemUgPSBuYXRpdmVJbWFnZVNpemUoY29tcGF0aWJsZUJpdG1hcCk7CisgICAgaWYgKGN1
cnJlbnRJbWFnZVNpemUuaXNaZXJvKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGRlc3RDb250
ZXh0LmRyYXdOYXRpdmVJbWFnZShjb21wYXRpYmxlQml0bWFwLCBjdXJyZW50SW1hZ2VTaXplLCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQm
IHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRp
b25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0
OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBp
ZiAoYXV0byBpbWFnZSA9IGNvcHlJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSA/IENv
cHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGltYWdlLT5k
cmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworfQorCitTdHJpbmcgSW1hZ2VC
dWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxk
b3VibGU+LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gImRhdGE6LCJfczsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIHsgfTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB7IH07Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBz
cmNSZWN0LCBudWxscHRyKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6
cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IElt
YWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2lu
dCYgZGVzdFBvaW50KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVz
dFBvaW50LCBudWxscHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zZDE1NjA3ZjM2NDNkYmE3ZWU1ZWVmZjJmNzFhYzM5Mzk2MDA3ZTEzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGlyZWN0MkRCYWNrZW5kLmgKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShESVJFQ1Qy
RCkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Jc29N
YWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0lT
T19BTExPQ0FURUQoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVj
dDJEQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4
dCYpOworCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZTsKKworICAgIE5hdGl2ZUltYWdlUHRyIGNv
cHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPEltYWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwg
UHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZT4g
c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24pIG92ZXJyaWRlOworCisgICAgU3RyaW5n
IHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpIGNvbnN0IG92ZXJyaWRlOworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRD4gbV9wbGF0Zm9y
bUNvbnRleHQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0
OworICAgIE5hdGl2ZUltYWdlUHRyIG1fYml0bWFwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1
cmVTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCmluZGV4IDQ5MzY3Y2IyOWQw
ZjIwZDE3MTIyMGIzMjAwYzk0ZTVjY2QzNzAxYmQuLjMyYmY4NmJjNmZiNjhjMWU2ZDYzZGVkODc2
Mjc1MzUzZDU0YWZiODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJl
YW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogCiAg
ICAgICAgIGludCBmcHNOdW1lcmF0b3IsIGZwc0Rlbm9taW5hdG9yOwogICAgICAgICBnc3RfdXRp
bF9kb3VibGVfdG9fZnJhY3Rpb24oZnJhbWVSYXRlKCksICZmcHNOdW1lcmF0b3IsICZmcHNEZW5v
bWluYXRvcik7Ci0gICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPmludGVybmFs
U2l6ZSgpOworICAgICAgICBhdXRvIGltYWdlU2l6ZSA9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6
ZSgpOwogICAgICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgi
dmlkZW8veC1yYXciLAogICAgICAgICAgICAgImZvcm1hdCIsIEdfVFlQRV9TVFJJTkcsICJCR1JB
IiwKICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIGltYWdlU2l6ZS53aWR0aCgpLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3NoYXBlcy9TaGFwZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNwcAppbmRleCA4NTFhODY2Nzg5
YjQ4MzU0MjJjNTdhNDFkZGE3NWEwYmNhZDdkNjc1Li4wNDJkNWRkN2JiODM0ZjFlM2JlYTFhOWUx
YTkwMmZlM2RiNmVmZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hh
cGVzL1NoYXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJ
bWFnZURhdGEuaCIKICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJQb2x5
Z29uU2hhcGUuaCIKICNpbmNsdWRlICJSYXN0ZXJTaGFwZS5oIgpAQCAtMTg4LDggKzE4OSw5IEBA
IHN0ZDo6dW5pcXVlX3B0cjxTaGFwZT4gU2hhcGU6OmNyZWF0ZVJhc3RlclNoYXBlKEltYWdlKiBp
bWFnZSwgZmxvYXQgdGhyZXNob2xkLCBjCiAgICAgICAgIGlmIChpbWFnZSkKICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBJbnRSZWN0KEludFBvaW50KCksIGlt
YWdlUmVjdC5zaXplKCkpKTsKIAotICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHBp
eGVsQXJyYXkgPSBpbWFnZUJ1ZmZlci0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3Qo
SW50UG9pbnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChw
aXhlbEFycmF5KTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2lu
dCgpLCBpbWFnZVJlY3Quc2l6ZSgpIH0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVChpbWFnZURh
dGEgJiYgaW1hZ2VEYXRhLT5kYXRhKCkpOworICAgICAgICBhdXRvKiBwaXhlbEFycmF5ID0gaW1h
Z2VEYXRhLT5kYXRhKCk7CiAgICAgICAgIHVuc2lnbmVkIHBpeGVsQXJyYXlMZW5ndGggPSBwaXhl
bEFycmF5LT5sZW5ndGgoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheU9mZnNldCA9IDM7
IC8vIEVhY2ggcGl4ZWwgaXMgZm91ciBieXRlczogUkdCQS4KICAgICAgICAgdWludDhfdCBhbHBo
YVBpeGVsVGhyZXNob2xkID0gc3RhdGljX2Nhc3Q8dWludDhfdD4obHJvdW5kZihjbGFtcFRvPGZs
b2F0Pih0aHJlc2hvbGQsIDAsIDEpICogMjU1LjBmKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA2MDc1ZjYzZTFj
MjgwMDdmNjc3ZTI5MzdjNWNhN2JjNjc5MzMyMDI4Li5mNmE5NTQ1ODk4NThlMDBlNGU3YjZhM2Mx
OWYyMmJhZmE1NzYxZDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM0Niw3ICszNDYsNyBAQCBib29sIFNWR1Jl
bmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckZvcmVncm91bmQoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyPiYgaW1hZ2VCdQogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtID0gbV9wYWlu
dEluZm8tPmNvbnRleHQoKS5nZXRDVE0oR3JhcGhpY3NDb250ZXh0OjpEZWZpbml0ZWx5SW5jbHVk
ZURldmljZVNjYWxlKTsKICAgICAgICAgSW50U2l6ZSBleHBhbmRlZEJvdW5kaW5nQm94ID0gZXhw
YW5kZWRJbnRTaXplKGJvdW5kaW5nQm94LnNpemUoKSk7CiAgICAgICAgIEludFNpemUgYnVmZmVy
U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoZXhwYW5kZWRCb3VuZGluZ0JveC53aWR0aCgpICog
dHJhbnNmb3JtLnhTY2FsZSgpKSksIHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5k
aW5nQm94LmhlaWdodCgpICogdHJhbnNmb3JtLnlTY2FsZSgpKSkpOwotICAgICAgICBpZiAoYnVm
ZmVyU2l6ZSAhPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpCisgICAgICAgIGlmIChidWZm
ZXJTaXplICE9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpKQogICAgICAgICAgICAgaW1hZ2VC
dWZmZXIucmVzZXQoKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAppbmRleCA1MWQzMThiNzI0ZTc1MTlkNzI3N2FlNzUwNzczZDFiMjhl
OGRkYWEzLi5iMDFiNTRjMTcwOTAwOTczZWJiZWFjMTZkMzg4ZGIxZDBmODIyNWY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNSw2ICsx
NSw4IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW9kZWxzLnB5CiAk
KEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJ
UikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1l
c3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9HUFVQ
cm9jZXNzL21hYy9jb20uYXBwbGUuV2ViS2l0LkdQVVByb2Nlc3Muc2IuaW4KICQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFQbGF5ZXJQ
cm94eS5tZXNzYWdlcy5pbgpAQCAtMTA3LDYgKzEwOSw3IEBAICQoUFJPSkVDVF9ESVIpL1dlYlBy
b2Nlc3MvQ2FjaGUvV2ViQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgogJChQUk9K
RUNUX0RJUikvV2ViUHJvY2Vzcy9EYXRhYmFzZXMvSW5kZXhlZERCL1dlYklEQkNvbm5lY3Rpb25U
b1NlcnZlci5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9GdWxsU2NyZWVu
L1dlYkZ1bGxTY3JlZW5NYW5hZ2VyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2
YXRlUmVtb3RlLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dl
YlByb2Nlc3MvR1BVL3dlYnJ0Yy9MaWJXZWJSVENDb2RlY3MubWVzc2FnZXMuaW4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QgYi9Tb3Vy
Y2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDVjOTJiODEz
MzUzZGY3MWZlNmQ2ODUwZjM3YzRmNzNmY2NmNzFlNWUuLjBhNzc3ZjcyMzcxMDhkMTE0ZjZhNDhl
ZDFhYzRiN2IyNjI4YzMyOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJj
ZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1v
dXRwdXQueGNmaWxlbGlzdApAQCAtMTI5LDYgKzEyOSwxMiBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5k
ZXJlcgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVBdWRpb01lZGlhU3Ry
ZWFtVHJhY2tSZW5kZXJlck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWVzc2Fn
ZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlcy5oCisk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1
ZmZlck1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eU1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlc1JlcGxpZXMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdl
cy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZXNSZXBsaWVzLmgKQEAgLTE1NCw2ICsxNjAs
OSBAQCAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVN
ZWRpYVJlc291cmNlTWFuYWdlck1lc3NhZ2VzUgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmpl
Y3RSZWdpc3RyeU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNl
cy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgKKyQo
QlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVy
aXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2Vy
TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlc1JlcGxpZXMuaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy5tYWtlCmluZGV4IDM0OWU1NGRjMzBjNDQ5ODJiY2Q4MmUwOWU5NGJiNjZkZTk5ZGNi
MTEuLjYwYmUxOThlOGRmY2NmOWZhODYwOTkyYWM3YjY1ZjA5YzZhOWYyMGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0L0Rl
cml2ZWRTb3VyY2VzLm1ha2UKQEAgLTI1LDYgKzI1LDcgQEAgVlBBVEggPSBcCiAgICAgJChXZWJL
aXQyKS9HUFVQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MvbWFjIFwKICAgICAk
KFdlYktpdDIpL0dQVVByb2Nlc3MvbWVkaWEgXAorICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3Mvd2VicnRjIFwKICAg
ICAkKFdlYktpdDIpL05ldHdvcmtQcm9jZXNzIFwKICAgICAkKFdlYktpdDIpL05ldHdvcmtQcm9j
ZXNzL0Nvb2tpZXMgXApAQCAtNTIsNiArNTMsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIp
L1dlYlByb2Nlc3MvR2VvbG9jYXRpb24gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUg
XAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEgXAorICAgICQoV2ViS2l0Mikv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZCBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL0dQVS93ZWJydGMgXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JY29uRGF0YWJhc2Ug
XAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9JbnNwZWN0b3IgXApAQCAtMTQ1LDYgKzE0Nyw4
IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFBsdWdpblByb3h5IFwKICAgICBSZW1vdGVB
dWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXIgXAogICAgIFJlbW90ZUF1ZGlvTWVk
aWFTdHJlYW1UcmFja1JlbmRlcmVyIFwKKwlSZW1vdGVJbWFnZUJ1ZmZlciBcCisJUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eSBcCiAgICAgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eSBcCiAg
ICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFn
ZXJQcm94eSBcCkBAIC0xNTMsNiArMTU3LDcgQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAg
UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5h
Z2VyIFwKICAgICBSZW1vdGVPYmplY3RSZWdpc3RyeSBcCisgICAgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5IFwKICAgICBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIgXAogICAgIFJl
bW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIgXAogICAgIFJlbW90ZVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCBhNmNlZTU0Yzk3YzkyMTVhNjg3M2Y0ZGNi
MTJiZGU0N2MxZGM0MGVjLi5hNmE1NGZlMTE4ZDA3ZDhkNDQ5MmYxZDZjOTNlY2VhZWQwMzcxZDcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MuY3BwCkBAIC0xODYsNzkgKzE4Niw5MiBAQCBMaWJXZWJSVENDb2RlY3NQcm94
eSYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bGliV2ViUlRDQ29kZWNzUHJveHkoKQogfQog
I2VuZGlmCiAKLXZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpCit2
b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7Cisg
ICAgQVNTRVJUKCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0
ZSgqdGhpcywgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCit2b2lkIEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVCht
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSk7CisgICAgQVNTRVJUKG1fcmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpID09IHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9
IG51bGxwdHI7Cit9CisKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hN
ZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVy
KQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6
UmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewog
ICAgICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNzYWdl
RnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFQbGF5ZXJQcm94eTo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlk
UmVjZWl2ZVBsYXllck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICByZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
cigpLmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNl
ck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAg
ICAgIHVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21H
UFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2
ZXJOYW1lKCkpIHsKICAgICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlTWVz
c2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVj
ZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVjb3JkZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJlY2VpdmVS
ZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0Ep
ICYmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJO
YW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGF1ZGlvVHJhY2tSZW5kZXJl
ck1hbmFnZXIoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZUF1
ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgYXVkaW9UcmFja1JlbmRlcmVyTWFuYWdlcigpLmRpZFJlY2VpdmVSZW5kZXJlck1lc3Nh
Z2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBN
ZXNzYWdlczo6UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcjo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIo
KS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZVNhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoKS5kaWRSZWNlaXZlTGF5ZXJNZXNzYWdlKGNvbm5lY3Rp
b24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNlbmRpZgogI2VuZGlmCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJXRUJSVEMp
CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJX
ZWJSVENDb2RlY3NQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGxpYldl
YlJUQ0NvZGVjc1Byb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwogfQogCi12b2lkIEdQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6OmRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJl
cGx5RW5jb2RlcikKK2Jvb2wgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6ZGlzcGF0Y2hTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKIHsKICAgICBp
ZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2Vi
UHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogI2lmIEVOQUJMRShNRURJQV9TVFJF
QU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpV
c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZUZyb21HUFVQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIFBMQVRGT1JNKENP
Q09BKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5h
Z2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVTeW5jTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNvbm5l
Y3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCiAjZW5kaWYKLQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7CiB9CiAKIGNvbnN0IFN0cmlu
ZyYgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6bWVkaWFDYWNoZURpcmVjdG9yeSgpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MuaAppbmRleCAyYjliZDFmODg3YmFkYWZhNGVhNWM0YmEzNDE2OWQ4Yjk3OGZkNjJkLi40
MGZhZWJkZjhlMTI5NjEyZWI3M2NmNThiYWQ0N2NiMmU5MzJkODQwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKQEAgLTI4
LDEzICsyOCwxNSBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKLSNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXNSZXBs
aWVzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSAi
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJl
Y2VpdmVyTWFwLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisj
aW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKICNpbmNsdWRlIDxXZWJDb3Jl
L1Byb2Nlc3NJZGVudGlmaWVyLmg+CiAjaW5jbHVkZSA8cGFsL1Nlc3Npb25JRC5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2dnZXIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUg
PHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIApAQCAtNDksMTggKzUxLDIwIEBAIGNsYXNzIFVzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyUHJveHk7CiAKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKICAgICA6IHB1Ymxp
YyBSZWZDb3VudGVkPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+CisgICAgLCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KICAgICAsIElQQzo6Q29ubmVj
dGlvbjo6Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3M+IGNyZWF0ZShHUFVQcm9jZXNzJiwgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIs
IElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQpOwogICAgIHZpcnR1
YWwgfkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoKTsKIAogICAgIElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVjdGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVz
c2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VS
ZWNlaXZlck1hcDsgfQogICAgIEdQVVByb2Nlc3MmIGdwdVByb2Nlc3MoKSB7IHJldHVybiBtX2dw
dVByb2Nlc3MuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9j
ZXNzSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0K
IAogICAgIHZvaWQgY2xlYW51cEZvclN1c3BlbnNpb24oRnVuY3Rpb248dm9pZCgpPiYmKTsKICAg
ICB2b2lkIGVuZFN1c3BlbnNpb24oKTsKIAotICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVy
IHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRp
ZmllcjsgfQogICAgIFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyJiByZW1vdGVNZWRpYVJlc291
cmNlTWFuYWdlcigpOwogCiAgICAgTG9nZ2VyJiBsb2dnZXIoKTsKQEAgLTg1LDE3ICs4OSwyMyBA
QCBwcml2YXRlOgogICAgIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXImIHNh
bXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoKTsKICNlbmRpZgogI2VuZGlmCi0KKyAgICB2
b2lkIGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOwor
ICAgIHZvaWQgcmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIpOworICAgICAgICAKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQg
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgZmluYWw7Ci0gICAgdm9pZCBkaWRSZWNlaXZlSW52
YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2Fn
ZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZpbmFsOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVy
JikgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsK
KyAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlTmFtZSkgZmluYWw7CisKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5j
b2Rlcj4mKTsKIAogICAgIFJlZlB0cjxMb2dnZXI+IG1fbG9nZ2VyOwogCiAgICAgUmVmPElQQzo6
Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOwogICAgIFJlZjxHUFVQcm9jZXNzPiBtX2dwdVByb2Nl
c3M7CisgICAgSVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAg
ICAgY29uc3QgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgbV93ZWJQcm9jZXNzSWRlbnRpZmll
cjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI+IG1fcmVt
b3RlTWVkaWFSZXNvdXJjZU1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZU1lZGlh
UGxheWVyTWFuYWdlclByb3h5PiBtX3JlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5OwpAQCAt
MTExLDYgKzEyMSw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIFVTRShMSUJX
RUJSVEMpCiAgICAgc3RkOjp1bmlxdWVfcHRyPExpYldlYlJUQ0NvZGVjc1Byb3h5PiBtX2xpYldl
YlJUQ0NvZGVjc1Byb3h5OwogI2VuZGlmCisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eT4gbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2Q0
MGE1NzEyZTAyZDE0OWQxNGY5MmY1NmU0NDUzNDZjMDEyMjFkOC4uOTMyYzAxMjJkZTA4MWVkZTli
YjllZmI1NmY5YmM1MjU5YmE0ZDcwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KQEAg
LTIyLDcgKzIyLDkgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAotbWVzc2FnZXMgLT4g
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyB7CittZXNzYWdlcyAtPiBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzIFdhbnRzRGlzcGF0Y2hNZXNzYWdlIHsKKyAgICB2b2lkIENyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQoV2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcikKKyAgICB2b2lkIFJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCiB9
CiAKICNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZm
ZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZWMzNzBjNmM4ZGJj
YmI2MWI2YWY4NTE5NTZjMjU3NzQyZTY1NDJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVm
ZmVyUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaD4KKyNpbmNs
dWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0UmVwbGF5ZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgorY2xhc3MgUmVtb3RlQ29udGV4dHVh
bEltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
PEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgeworICAgIHVzaW5n
IEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXI6Om1f
YmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXI6
OnRlbXBsYXRlIGNyZWF0ZTxSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eT4oc2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBudWxscHRyLCBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90ZUNvbnRl
eHR1YWxJbWFnZUJ1ZmZlclByb3h5KHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBiYWNr
ZW5kLCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6
IEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkKKyAgICAgICAgLCBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVm
ZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJlbW90ZUNyZWF0ZUJhY2tlbmQobV9iYWNr
ZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCksIG1fYmFja2VuZC0+
cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2VuZC0+Y29sb3JTcGFjZSgpLCBtX2JhY2tlbmQtPmNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
dm9pZCBsb2NhbEZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbG9jYWxGbHVzaERy
YXdpbmdDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgbV9iYWNrZW5kLT5mbHVzaENvbnRl
eHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGxvY2FsRmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KSBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKCFkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVwbGF5
ZXIoQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpLCBkaXNwbGF5TGlzdCk7Cisg
ICAgICAgIHJlcGxheWVyLnJlcGxheSgpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTRiNjc5YmZjYTY1NDgzNWJhNDlmZjE3
ZWQzOTBhMDVhMTU1NDNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVy
UHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cywgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICA6IG1f
Z3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKSkKKyAgICAsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVySWRlbnRp
ZmllcikKK3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4g
dGhlIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuCisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAg
ICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1l
c3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVJl
Y2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7
Cit9CisKK1JlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkK
K3sKKyAgICAvLyBVbi1yZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIuCisgICAg
aWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3Nh
Z2VSZWNlaXZlck1hcCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRp
Zmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1dG8q
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
Z2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVj
dGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eTo6cmVtb3RlQ3JlYXRlQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFu
ZGxlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVCYWNr
ZW5kKGxvZ2ljYWxTaXplLCBpbnRlcm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShoYW5kbGUpKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lk
IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoQ29udGV4dChjb25zdCBEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVz
aElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaENvbnRleHQoZGlzcGxheUxpc3QpOworICAg
IHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpTZXRGbHVzaElkZW50aWZpZXIoZmx1
c2hJZGVudGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCit2b2lkIFJlbW90
ZUltYWdlQnVmZmVyUHJveHk6OmZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgRGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1
c2hJZGVudGlmaWVyKQoreworICAgIGxvY2FsRmx1c2hEcmF3aW5nQ29udGV4dChkaXNwbGF5TGlz
dCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRp
ZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjOGY4ZmYyMzVlYjdj
MTUxNzBlZjE4MDEwYzFhZmJiNmE4MzRmMzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgK
QEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRl
ICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6
TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH5S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6Ok1lc3Nh
Z2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigp
IGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZv
aWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3Zl
cnJpZGU7CisgICAgICAgIAorICAgIHZvaWQgcmVtb3RlQ3JlYXRlQmFja2VuZChjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIHZvaWQgZmx1c2hDb250ZXh0KGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyKTsKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworCisgICAg
dmlydHVhbCB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaERyYXdpbmdD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKwor
ICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRp
ZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNz
YWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jMWRmM2MyNjA2MTk1ZGEyNmQzOWE2NDFlYTIxOGU2ZjQ4M2Uy
MzQzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMx
IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyUHJveHkgTm90UmVm
Q291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
IGZsdXNoSWRlbnRpZmllcikKKyAgICB2b2lkIEZsdXNoRHJhd2luZ0NvbnRleHQoV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVy
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZjRkZTNjNmNiYWQ3Mjk5YzA3OTgzZWU3NmQ2ZDZlMDc3MGY1
MTJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVtb3RlQ29udGV4dHVhbElt
YWdlQnVmZmVyUHJveHkuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5
PFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47Cit1c2lu
ZyBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJQcm94eSA9IFJlbW90ZUNvbnRl
eHR1YWxJbWFnZUJ1ZmZlclByb3h5PFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJhY2tlbmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmE2YTUwYjdjMDlkZDc2MjllZjQ2M2YwYTFlZTRjZTUxYjEwNmY0
M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCkBAIC0wLDAgKzEsMTEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVk
ZSAiUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgiCisjaW5jbHVkZSAiUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyYgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgcmV0dXJu
IHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+KG5ldyBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgOiBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mo
bWFrZVdlYWtQdHIoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykpCisgICAgLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIGlm
IChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmdldCgpKQorICAgICAgICBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5tZXNzYWdl
UmVjZWl2ZXJNYXAoKS5hZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eTo6flJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpCit7CisgICAgaWYgKGF1dG8qIGdw
dUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0
KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1h
cCgpLnJlbW92ZU1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIudG9VSW50NjQoKSk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgaWYgKGF1
dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MuZ2V0KCkpCisgICAgICAgIHJldHVybiAmZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29u
bmVjdGlvbigpOworICAgIHJldHVybiBudWxscHRyOworfQorCit1aW50NjRfdCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOworfQor
Cit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pbWFnZUJ1ZmZl
ck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byogZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKTsK
KyAgICBpZiAoIWdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAgICBzd2l0
Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2Vs
ZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJ
bWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmll
cik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBSZW5kZXJpbmdNb2Rl
OjpSZW1vdGU6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5OjpjcmVhdGUobG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
KmdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAg
ICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorCisgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9pbWFnZUJ1ZmZlck1hcC5hZGQoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdl
QnVmZmVyKSk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNl
SW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikK
K3sKKyAgICAvLyBDcmVhdGVJbWFnZUJ1ZmZlciBtZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVj
ZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgIGlmICghbV9pbWFnZUJ1ZmZlck1hcC5jb250YWlu
cyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGlt
YWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTUyN2I4NzVhYTEzMjU1NjlhYzIyNjMwMGZhNmFk
NTk4ZTlhZTBlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTAsMCArMSw3
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRp
Zmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VT
ZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VCdWZmZXIu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+IGNyZWF0ZShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIHZpcnR1YWwgflJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSgpOworCisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyOyB9CisKK3ByaXZhdGU6CisgICAgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5KEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25u
ZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVp
bnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGNyZWF0
ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JT
cGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VJbWFnZUJ1ZmZl
cihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworCisgICAgdXNpbmcgSW1hZ2VCdWZmZXJNYXAgPSBI
YXNoTWFwPEltYWdlQnVmZmVySWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6Oklt
YWdlQnVmZmVyPj47CisgICAgSW1hZ2VCdWZmZXJNYXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAgICBX
ZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzczsKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkubWVzc2FnZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTRkY2Y3ZjMyYjQ1MjZkZGZiZWJi
Nzg3ZjgwMmMzNmZkOTU3YmM0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIENyZWF0ZUltYWdl
QnVmZmVyKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9y
U3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZUltYWdlQnVmZmVyKFdlYktpdDo6SW1hZ2VC
dWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK30KKworI2VuZGlmIC8vIEVO
QUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93
ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oCmluZGV4IDY4
NWE2Njk3ODcxNzZiMTM3MTljYmI4ZmU5OTNjZGMxYmNlNzljZTguLjZlNmEyMTdhNWEyMDVlZTM3
MDhmMzQwYmFkNzQ2MzkxNmMyZDZlODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmgKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIu
aApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKICNpbmNsdWRl
ICJTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29y
ZS9TYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWVkaWFUaW1lLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEltYWdlVHJhbnNmZXJTZXNzaW9uVlQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dl
YnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAppbmRleCA0Yjli
ZTQ5Y2FjNzJmNDRlNzE3OTc3YzRhNDY2ZTJlMjc5ZjFiMTRlLi5mYjBkMjY1MmU3ZGM3MTVmM2Ni
ZTkwYjAxYTc0MTczMTI4Y2RiNTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyTWFuYWdlci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJSZW1vdGVTYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXIuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcjo6
UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcihSZWY8SVBDOjpDb25uZWN0aW9u
PiYmIGNvbm5lY3Rpb24pCiAgICAgOiBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dl
YnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgKaW5kZXggOWY5YjMw
Yzc2MTYyM2RkOTQ4ZDI5YmUwZjM3ZjBhZDBmNDdlNWE5YS4uZTM4YzVkNmMwNWQwZGZhZjQyNjgx
OTk1YjllMDRmNGU3NjQ3ZjBiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5
ZXJNYW5hZ2VyLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIu
aCIKICNpbmNsdWRlICJSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2Fn
ZXNSZXBsaWVzLmgiCiAjaW5jbHVkZSAiU2FtcGxlQnVmZmVyRGlzcGxheUxheWVySWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAKIG5hbWVzcGFjZSBJUEMgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC9tZXNzYWdlcy5weSBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2Fn
ZXMucHkKaW5kZXggN2M1YWMwYWNmNzQ1YjdhNzAzY2JlYzA2YmY3YjFhYzYyZWE4NDJiMC4uOThm
ZmQxZjAwZTBiNjQ4YTBmMDliMDhjZWE5NjAzMjBjYTU0YWI2ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZy
b20gd2Via2l0IGltcG9ydCBwYXJzZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAn
V2FudHNDb25uZWN0aW9uJworV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2Fu
dHNEaXNwYXRjaE1lc3NhZ2UnCiBMRUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJl
Y2VpdmVyJwogTk9UX1JFRkNPVU5URURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50
ZWQnCiBTWU5DSFJPTk9VU19BVFRSSUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1
LDggQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICBy
ZXR1cm4gZnJvemVuc2V0KFsKICAgICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3Ry
aW5nJywKKyAgICAgICAgJ1dlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAg
ICAnV2ViQ29yZTo6Q29sb3JTcGFjZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50
aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0Y2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dl
YkNvcmU6OkZyYW1lSWRlbnRpZmllcicsCkBAIC0yMTIsNiArMjE1LDcgQEAgZGVmIHR5cGVzX3Ro
YXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICAgICAgJ1dlYkNvcmU6OlBvaW50
ZXJJRCcsCiAgICAgICAgICdXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllcicsCiAgICAgICAgICdX
ZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlSWRlbnRpZmllcicsCisgICAgICAgICdXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJKb2JJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYkNvcmU6OlNlcnZpY2VXb3JrZXJPckNsaWVudERhdGEnLApAQCAtMjIxLDEyICsy
MjUsMTYgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICAgICAgJ1dlYktpdDo6QWN0aXZpdHlTdGF0ZUNoYW5nZUlEJywKICAgICAgICAgJ1dlYktpdDo6
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6Q29udGVudFdvcmxkSWRlbnRpZmllcicsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZScsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyJywKICAgICAgICAg
J1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAgJ1dlYktpdDo6TWVkaWFQ
bGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVj
b3JkZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UmVtb3RlTWVkaWFSZXNvdXJjZUlk
ZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSVENEZWNvZGVySWRlbnRpZmllcicsCiAgICAg
ICAgICdXZWJLaXQ6OlJUQ0VuY29kZXJJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6UmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6U3RvcmFnZUFyZWFJbXBsSWRlbnRpZmllcicsCkBA
IC03NjksMTMgKzc3NywxNiBAQCBkZWYgZ2VuZXJhdGVfbWVzc2FnZV9oYW5kbGVyKHJlY2VpdmVy
KToKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGFzeW5jX21lc3NhZ2VzLmFwcGVuZChtZXNz
YWdlKQogCi0gICAgaWYgYXN5bmNfbWVzc2FnZXM6CisgICAgaWYgYXN5bmNfbWVzc2FnZXMgb3Ig
cmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmUlc01lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIpXG4nICUgKHJl
Y2VpdmVyLm5hbWUsIHJlY2VpdmVyLm5hbWUgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShMRUdB
Q1lfUkVDRUlWRVJfQVRUUklCVVRFKSBlbHNlICcnKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
e1xuJykKICAgICAgICAgaWYgbm90IHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTk9UX1JFRkNPVU5U
RURfUkVDRUlWRVJfQVRUUklCVVRFKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBh
dXRvIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKTtcbicpCiAKICAgICAgICAgcmVzdWx0
ICs9IFthc3luY19tZXNzYWdlX3N0YXRlbWVudChyZWNlaXZlciwgbWVzc2FnZSkgZm9yIG1lc3Nh
Z2UgaW4gYXN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUo
V0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIGlmIChkaXNwYXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlcikpXG4nKQor
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICBp
ZiAocmVjZWl2ZXIuc3VwZXJjbGFzcyk6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAg
JXM6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpO1xuJyAlIChyZWNlaXZl
ci5zdXBlcmNsYXNzKSkKICAgICAgICAgZWxzZToKQEAgLTc4NCwxMyArNzk1LDE2IEBAIGRlZiBn
ZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZCgnICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnfVxuJykKIAotICAgIGlmIHN5bmNfbWVzc2FnZXM6CisgICAgaWYgc3luY19tZXNzYWdlcyBv
ciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRF
KToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd2
b2lkICVzOjpkaWRSZWNlaXZlU3luYyVzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rp
b24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4m
IHJlcGx5RW5jb2RlcilcbicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNl
aXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQog
ICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFz
X2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
O1xuJykKICAgICAgICAgcmVzdWx0ICs9IFtzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVy
LCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBzeW5jX21lc3NhZ2VzXQorICAgICAgICBpZiByZWNl
aXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBpZiAoZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25u
ZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpKVxuJykKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJyAgICAgICAgcmV0dXJuO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVO
VVNFRF9QQVJBTShjb25uZWN0aW9uKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBV
TlVTRURfUEFSQU0oZGVjb2Rlcik7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5V
U0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7XG4nKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJD
b3JlQXJndW1lbnRDb2RlcnMuaAppbmRleCA3YmY3MWMxN2FiZGQzZDhiMTMxOTAyMjAwNThjOWY5
YzIxOWY2MGIzLi5kOTkzYzI3M2EzM2RmYWI5OWY0NjRhMGIyN2MyY2NmZTU5MDIxMGExIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtMjYsNiAr
MjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNv
cmUvQXV0b3BsYXlFdmVudC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQuaD4KQEAgLTM2LDYgKzM3LDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL05ldHdvcmtMb2FkTWV0cmljcy5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvTm90aWZpY2F0aW9uRGlyZWN0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWFsdGlt
ZU1lZGlhU291cmNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdNb2RlLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9TY3JvbGxTbmFwT2Zmc2V0c0luZm8uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1NlcnZpY2VXb3JrZXJUeXBlcy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU3RvcmVkQ3JlZGVudGlh
bHNQb2xpY3kuaD4KQEAgLTgyMyw2ICs4MjUsMTQgQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1l
bnRDb2RlcjxXZWJDb3JlOjpTZXJpYWxpemVkQXR0YWNobWVudERhdGE+IHsKIAogbmFtZXNwYWNl
IFdURiB7CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbj4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2Vi
Q29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiwKKyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGlj
YXRpb246OlVucHJlbXVsdGlwbGllZAorICAgID47Cit9OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBF
bnVtVHJhaXRzPFdlYkNvcmU6OkNvbG9yU3BhY2U+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVt
VmFsdWVzPAogICAgIFdlYkNvcmU6OkNvbG9yU3BhY2UsCkBAIC04MzIsNiArODQyLDE4IEBAIHRl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgID47
CiB9OwogCit0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGU+IHsKKyAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAorICAgIFdlYkNvcmU6OlJlbmRl
cmluZ01vZGUsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQsCisgICAg
V2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwKKyAgICBXZWJDb3JlOjpSZW5k
ZXJpbmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmlu
Z01vZGU6OkRpc3BsYXlMaXN0LAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZUFj
Y2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01vZGU6OlJlbW90ZQorICAgID47Cit9
OworCiB0ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OkF1dG9wbGF5RXZlbnQ+
IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgICAgICBXZWJDb3JlOjpBdXRv
cGxheUV2ZW50LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvU291cmNlcy50eHQKaW5kZXggNTMxMDkyMDNjYTIyY2I1ZjVkYjkzNTFmOWMyMzZl
MDUzYWIxZTAwOS4uMjRhMTcyYmE2MTIyYTcyYzI0OWYyNDY2NDc1NDJkNGMzN2QxMTBkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0L1Nv
dXJjZXMudHh0CkBAIC0zNyw2ICszNyw4IEBAIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFS
ZXNvdXJjZS5jcHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZUxvYWRlci5j
cHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIuY3BwCiBHUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZVZpZGVvVHJhY2tQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcAorR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKIAogTmV0d29ya1Byb2Nl
c3MvQWRDbGlja0F0dHJpYnV0aW9uTWFuYWdlci5jcHAKIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtB
Y3Rpdml0eVRyYWNrZXIuY3BwCkBAIC01MzcsNiArNTM5LDkgQEAgV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvUmVt
b3RlTWVkaWFQbGF5ZXJNSU1FVHlwZUNhY2hlLmNwcCBAbm8tdW5pZnkKIFdlYlByb2Nlc3MvR1BV
L21lZGlhL1JlbW90ZU1lZGlhUmVzb3VyY2VQcm94eS5jcHAKIFdlYlByb2Nlc3MvR1BVL21lZGlh
L1ZpZGVvVHJhY2tQcml2YXRlUmVtb3RlLmNwcAorV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCitXZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcAorV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRp
YVJlY29yZGVyUHJpdmF0ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJlY29yZGVy
UHJvdmlkZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQg
Yi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZWFhMGQ4NGZhNWNmYTc0MGQy
N2I3OGI5MDdlYzk1Njk5MzFjYjBkYy4uZTRkZTZkYjA1NmVjM2NmMTA4YjJmOTFiMThlNTVkYTU5
ZGM1MGMyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CisrKyBi
L1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNTUzLDYgKzU1Myw4IEBAIFdlYlBy
b2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCiAKIFdlYlByb2Nlc3MvRW50cnlQb2ludC9D
b2NvYS9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlRW50cnlQb2ludC5tbQogCitXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5jcHAKKwogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBh
Z2VCYW5uZXIuY3BwCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvbWFjL1dLQnVu
ZGxlTWFjLm1tCkBAIC02MzgsMTQgKzY0MCwxOCBAQCBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVkIFNvdXJj
ZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25uZWN0aW9u
TWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAog
R1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5TWVzc2Fn
ZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAog
UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitS
ZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VSZWNlaXZlci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWVzc2FnZVJlY2VpdmVy
LmNwcAogUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVTYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVyLmNwcAogUmVtb3RlU2FtcGxl
QnVmZmVyRGlzcGxheUxheWVyTWVzc2FnZVJlY2VpdmVyLmNwcAogU2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyTWVzc2FnZVJlY2VpdmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmU2NDIyMDQ3NzVlMjU1NWNjYmE1ZmRlOWY4ZTRh
ZTgzNTVlZGRkNS4uNDg4ZGQ4YzNmYWFmYzY4ZmI4OTg5MDkwYzMyNTk2MDVmYTNjNDQ0MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00
MDM4LDggKzQwMzgsMzIgQEAKIAkJNzFBNjc2QTQyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hB
Y3Rpb25HZXN0dXJlUmVjb2duaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBXS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0
aW9uR2VzdHVyZVJlY29nbml6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFB
Njc2QTUyMkM2MjMxODAwN0Q2Mjk1IC8qIFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25H
ZXN0dXJlUmVjb2duaXplci5tbTsgcGF0aCA9IGlvcy9XS1RvdWNoQWN0aW9uR2VzdHVyZVJlY29n
bml6ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRkI4MTBBMjI2MDYyN0Ew
MDMyMzY3NyAvKiBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVudHNEaXNwYXRjaFBvbGljeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJzaXRlU2ltdWxhdGVkTW91c2VFdmVu
dHNEaXNwYXRjaFBvbGljeS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjUwNkQz
OTIzRTlGODhCMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI1MDZEM0EyM0U5Rjg4QzAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZUltYWdlQnVm
ZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZEM0IyM0U5Rjg4QzAw
MUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjUwNkQzQzIzRTlGOEI5MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDNEMjNFOUY4Qjkw
MDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDNFMjNFOUY4QjkwMDFFNkUwRCAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjUwNkQ0MDIzRUEyMTJFMDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyNTA2RDQxMjNFQTIxMkYwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NTA2RDQzMjNFQTIxQTgwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NTA2RDQ0MjNFQTIxQTkwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI1MDZENDUyM0VBMjFEMjAwMUU2RTBEIC8qIEltYWdlQnVmZmVyQmFja2VuZEhhbmRs
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZENDgyM0VBMjJCNzAw
MUU2RTBEIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NTlFMjNFOEZGMDcwMEEw
NjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1OUYyM0U4RkYwNzAwQTA2MzJEIC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzI1NjQ1QTAyM0U4RkYwNzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eS5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyNTY0NUExMjNFOEZGMTUwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDVBMjIzRThGRjE1MDBB
MDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyNTY0NUEzMjNFOEZGMTUwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDVBNDIz
RTkwN0QxMDBBMDYzMkQgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVySWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNr
ZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI4RTg2RjAxNzk1MTg4QzAwODc4
NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTcyOUM0NTE3MjNFQTQ1RDIwMEIyQjFDRSAvKiBSZW1vdGVDb250ZXh0dWFsSW1hZ2VC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlQ29udGV4dHVh
bEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyOUM0NTE4MjNF
QTQ1RDMwMEIyQjFDRSAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MTkyM0VBNDYxMTAwQjJCMUNFIC8qIFJlbW90
ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyOUM0NTFBMjNFQTQ2MTEwMEIyQjFDRSAvKiBSZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyOUM0NTFEMjNFQTRFMDQwMEIyQjFDRSAvKiBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJDNDE4N0NDRjlG
MDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3NUE4RDJDNTE4N0NDRjlGMDBDMzlDOUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlLm1tICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3Jl
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3NUE4RDJENDE4N0QxQzAxMDBDMzlD
OUUgLyogV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTY0ODIsNiArNjUwNiw3IEBACiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAogCQkJCTA3OTIzMTJGMjM5QjNCMEMwMDk1OThFMiAvKiBtZWRpYSAqLywK
KwkJCQk3MjU2NDU5QzIzRThGRTVDMDBBMDYzMkQgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJ
CQk0MTcyMTk4ODIzQjYxMjYxMDBBRTU2ODYgLyogd2VicnRjICovLAogCQkJCTJEN0U0M0MwMjM3
NTJDRDkwMEVBNUNBMCAvKiBHUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJMkQ3RTQz
QzMyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmggKi8sCkBAIC02NDk4
LDYgKzY1MjMsNyBAQAogCQkJCTJEOUZCMjA0MjM3NTIwOUQwMDQ5RjkzNiAvKiBpb3MgKi8sCiAJ
CQkJMkQ5RkIyMDYyMzc1MjA5RDAwNDlGOTM2IC8qIG1hYyAqLywKIAkJCQkwN0M3NUMxNzIzOTlB
M0RCMDA4OEU2NUIgLyogbWVkaWEgKi8sCisJCQkJNzI1NjQ1OUQyM0U4RkU4NzAwQTA2MzJEIC8q
IFJlbmRlcmluZ0JhY2tlbmQgKi8sCiAJCQkJNDE3MjE5OEUyM0I2MzNDQTAwQUU1Njg2IC8qIHdl
YnJ0YyAqLywKIAkJCQkyRDlGQjIwQzIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5jcHAgKi8sCiAJCQkJMkQ5RkIyMDAyMzc1MjA5RDAwNDlGOTM2IC8qIEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCAqLywKQEAgLTc4OTksNiArNzkyNSw1MiBAQAogCQkJbmFt
ZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTcyNTA2RDQyMjNF
QTIxNjAwMDFFNkUwRCAvKiBjZyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNzI1MDZENDQyM0VBMjFBOTAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZC5jcHAgKi8sCisJCQkJNzI1MDZENDMyM0VBMjFBODAwMUU2RTBE
IC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICovLAorCQkJKTsKKwkJ
CXBhdGggPSBjZzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyNTY0NTlD
MjNFOEZFNUMwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjUwNkQ0MjIzRUEyMTYwMDAxRTZFMEQgLyog
Y2cgKi8sCisJCQkJNzI1MDZENDUyM0VBMjFEMjAwMUU2RTBEIC8qIEltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZS5oICovLAorCQkJCTcyOUM0NTFEMjNFQTRFMDQwMEIyQjFDRSAvKiBJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllci5oICovLAorCQkJCTcyNTY0NUE0MjNFOTA3RDEwMEEwNjMyRCAvKiBJ
bWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKKwkJCQk3MjUwNkQ0MDIzRUEyMTJFMDAxRTZFMEQg
LyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjUwNkQ0
MTIzRUEyMTJGMDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgg
Ki8sCisJCQkJNzI1MDZENDgyM0VBMjJCNzAwMUU2RTBEIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJT
aGFyZWFibGVCYWNrZW5kLmggKi8sCisJCQkJNzI5QzQ1MTcyM0VBNDVEMjAwQjJCMUNFIC8qIFJl
bW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICovLAorCQkJCTcyNTA2RDNBMjNFOUY4OEMwMDFF
NkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5jcHAgKi8sCisJCQkJNzI1MDZEMzkyM0U5Rjg4QjAw
MUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8sCisJCQkJNzI1MDZEM0IyM0U5Rjg4QzAw
MUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluICovLAorCQkJCTcyOUM0NTE4
MjNFQTQ1RDMwMEIyQjFDRSAvKiBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8sCisJCQkJ
NzI1NjQ1QTMyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICov
LAorCQkJCTcyNTY0NUEyMjNFOEZGMTUwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LmggKi8sCisJCQkJNzI1NjQ1QTEyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyLmggKi8sCisJCQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQk3MjU2NDU5RDIzRThGRTg3MDBBMDYzMkQg
LyogUmVuZGVyaW5nQmFja2VuZCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRy
ZW4gPSAoCisJCQkJNzI5QzQ1MTkyM0VBNDYxMTAwQjJCMUNFIC8qIFJlbW90ZUNvbnRleHR1YWxJ
bWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzI1MDZEM0UyM0U5RjhCOTAwMUU2RTBEIC8qIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovLAorCQkJCTcyNTA2RDNDMjNFOUY4QjkwMDFFNkUw
RCAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8sCisJCQkJNzI1MDZEM0QyM0U5RjhCOTAw
MUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8sCisJCQkJNzI5
QzQ1MUEyM0VBNDYxMTAwQjJCMUNFIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5o
ICovLAorCQkJCTcyNTY0NTlFMjNFOEZGMDcwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHkuY3BwICovLAorCQkJCTcyNTY0NTlGMjNFOEZGMDcwMEEwNjMyRCAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MjU2NDVBMDIzRThGRjA3MDBBMDYzMkQg
LyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovLAorCQkJKTsKKwkJ
CXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJ
fTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENsYXNzaWZpZXIgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAppbmRleCA4ZGZmNTBmMzA4
OGVkNDVjNTkwZWM4MWUyYzA5YTEzOGJhN2E1MzVmLi4wZjljN2FjZWY0ZTBlZDg3M2M0YmUwODk2
MThhNmRmMDQxNzg3MGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcApAQCAtNjIsMTAgKzYyLDYgQEAgdm9pZCBHUFVQ
cm9jZXNzQ29ubmVjdGlvbjo6ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikKIHsKIH0KIAotdm9p
ZCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSkKLXsK
LX0KLQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9fVFJBQ0spICYmIEVOQUJM
RShNRURJQV9TVFJFQU0pCiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyJiBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpCiB7CkBAIC03
NSwzNCArNzEsNDQgQEAgU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciYgR1BVUHJvY2Vz
c0Nvbm5lY3Rpb246OnNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck0KIH0KICNlbmRpZgogCi12b2lk
IEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK2Jvb2wgR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb246OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6
RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1l
KCkgPT0gTWVzc2FnZXM6Ok1lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZTo6bWVzc2FnZVJlY2VpdmVy
TmFtZSgpKSB7CiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyPigpLT5kaWRSZWNlaXZlUGxheWVyTWVzc2FnZShjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9Ci0KICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1hbmFnZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBpZiAoYXV0byogY2FwdHVyZU1hbmFnZXIgPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5zdXBwbGVtZW50PFVzZXJNZWRpYUNhcHR1cmVNYW5hZ2Vy
PigpKQogICAgICAgICAgICAgY2FwdHVyZU1hbmFnZXItPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUdQ
VVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2Vz
OjpTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAg
ICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZUxheWVyTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYgLy8gUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURF
T19UUkFDSykKICNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQogI2lmIFVTRShMSUJXRUJS
VEMpICYmIFBMQVRGT1JNKENPQ09BKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5h
bWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkubGliV2ViUlRDQ29kZWNzKCkuZGlk
UmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAgcmV0dXJuIG1lc3NhZ2VSZWNl
aXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKIH0KIAorYm9v
bCBHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlciwgc3RkOjp1bmlxdWVfcHRyPElQ
Qzo6RW5jb2Rlcj4mIHJlcGx5RW5jb2RlcikKK3sKKyAgICByZXR1cm4gbWVzc2FnZVJlY2VpdmVy
TWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29k
ZXIpOworfQorCit2b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5n
UmVmZXJlbmNlKQoreworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5oCmluZGV4IDQ2MDBlNTNiYjI4NGQ3NDhjZjM5MTFiOTRk
YjU1OTlhOWNiNDVmMjcuLjdiNmY4ODIyMmMzMzczNmI4YzQyN2RiNGNiZGUxYzA0NTQ4ODZjODIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyTWFwLmgiCiAj
aW5jbHVkZSAiU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC00Nyw2
ICs0OCw3IEBAIHB1YmxpYzoKICAgICB+R1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKICAgICAKICAg
ICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX2Nvbm5lY3Rpb24uZ2V0
KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwKCkg
eyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KIAogI2lmIEhBVkUoQVVESVRfVE9LRU4p
CiAgICAgdm9pZCBzZXRBdWRpdFRva2VuKE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IGF1ZGl0VG9r
ZW4pIHsgbV9hdWRpdFRva2VuID0gYXVkaXRUb2tlbjsgfQpAQCAtNjIsMTAgKzY0LDE1IEBAIHBy
aXZhdGU6CiAgICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3Nl
KElQQzo6Q29ubmVjdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNl
aXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlx
dWVfcHRyPElQQzo6RW5jb2Rlcj4mKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVJbnZhbGlk
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVj
ZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkgb3ZlcnJpZGU7Cisg
ICAgCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNv
ZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQ
Qzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CiAKICAgICAvLyBU
aGUgY29ubmVjdGlvbiBmcm9tIHRoZSB3ZWIgcHJvY2VzcyB0byB0aGUgR1BVIHByb2Nlc3MuCiAg
ICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gbV9jb25uZWN0aW9uOworICAgIElQQzo6TWVzc2FnZVJl
Y2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogCiAjaWYgSEFWRShBVURJVF9UT0tFTikK
ICAgICBPcHRpb25hbDxhdWRpdF90b2tlbl90PiBtX2F1ZGl0VG9rZW47CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5t
ZXNzYWdlcy5pbgppbmRleCBkMzZmOGEwOTVmNmE3N2JiYjZjYWM4ODNhNjUxZTg0Y2U5ZDY0YjMw
Li41N2ZlY2RlOWRmMjdjNzM5YTZjYmYwMjY5ODA2NTkyYjVlMjE3OWE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24ubWVzc2FnZXMuaW4KQEAgLTIyLDcgKzIyLDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAotbWVzc2FnZXMgLT4gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24geworbWVzc2FnZXMgLT4gR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24gV2FudHNEaXNwYXRjaE1lc3NhZ2UgewogCiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlckJhY2tlbmRIYW5kbGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNTk2MzA2
OWY2NjE4MTgzZDA3OGE2NGMyZGVhY2MyZDgzYTRjZGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5o
IgorI2luY2x1ZGUgPHd0Zi9NYWNoU2VuZFJpZ2h0Lmg+CisjaW5jbHVkZSA8d3RmL1ZhcmlhbnQu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIEltYWdlQnVmZmVyQmFja2VuZEhhbmRs
ZSA9IFZhcmlhbnQ8CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgTWFjaFNlbmRSaWdodCwKKyNl
bmRpZgorICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlCis+OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNo
SWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL0ltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzQyY2YyNDVlMzQ1
ZTFkZmVjNjJkYzFkN2EzZWNhZWZjZDlhYjVkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciA9IE9iamVjdElk
ZW50aWZpZXI8SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWExYmM5YWU4N2RjOGQ3MjQy
OGEwYjgwOWNhZDBkODBhNGNkMWNiOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApA
QCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
R1BVX1BST0NFU1MpCisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworZW51bSBJbWFnZUJ1ZmZlcklkZW50aWZpZXJUeXBlIHsgfTsKK3Vz
aW5nIEltYWdlQnVmZmVySWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMGM3MzkyZjEzYjhjMjk1
MDRjYmFlOGU4OWNmNDlhNTZhMTcyZGFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmgi
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAu
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlRGF0YS5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxs
b2NJbmxpbmVzLmg+CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlIDxXZWJDb3JlL0dy
YXBoaWNzQ29udGV4dENHLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIEludFNpemUg
YmFja2VuZFNpemUgPSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUp
OworICAgIGlmIChiYWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgU2hhcmVhYmxlQml0bWFwOjpDb25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Cisj
aWYgUExBVEZPUk0oQ09DT0EpCisgICAgY29uZmlndXJhdGlvbi5jb2xvclNwYWNlID0geyBjYWNo
ZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkgfTsKKyNlbmRpZgorICAgIGF1dG8gYml0bWFwID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoYmFja2VuZFNpemUsIGNvbmZpZ3VyYXRp
b24pOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1
dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIFdURk1vdmUoYml0bWFwKSwgV1RGTW92ZShjb250ZXh0KSkpOworfQorCitz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPiBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUp
Cit7CisgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFNoYXJlYWJsZUJpdG1hcDo6SGFu
ZGxlPihoYW5kbGUpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlKFdURk1vdmUoV1RGOjpnZXQ8U2hhcmVhYmxlQml0bWFwOjpIYW5kbGU+KGhhbmRs
ZSkpKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvIGNvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworICAgIGlmICgh
Y29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4obmV3IEltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShiaXRtYXApLCBXVEZNb3ZlKGNvbnRleHQpKSk7
Cit9CisKK0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+JiYgYml0bWFwLCBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0PiYmIGNvbnRleHQpCisgICAgOiBQbGF0Zm9ybUltYWdlQnVmZmVy
QmFja2VuZChsb2dpY2FsU2l6ZSwgcGh5c2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UpCisgICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJpdG1hcCkpCisgICAgLCBtX2NvbnRleHQo
V1RGTW92ZShjb250ZXh0KSkKK3sKK30KKworSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlKCkgY29uc3QKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAg
bV9iaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUoV1RGTW92ZShoYW5kbGUpKTsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3Jl
Q29weSkgY29uc3QKK3sKKyNpZiBVU0UoQ0cpCisgICAgcmV0dXJuIG1fYml0bWFwLT5tYWtlQ0dJ
bWFnZUNvcHkoKTsKKyNlbGlmIFVTRShESVJFQ1QyRCkKKyAgICByZXR1cm4gbnVsbHB0cjsKKyNl
bGlmIFVTRShDQUlSTykKKyAgICByZXR1cm4gbV9iaXRtYXAtPmNyZWF0ZUNhaXJvU3VyZmFjZSgp
OworI2VuZGlmCit9CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSwgUHJlc2VydmVSZXNvbHV0aW9uKSBj
b25zdAoreworICAgIHJldHVybiBtX2JpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKK30KKworVmVjdG9y
PHVpbnQ4X3Q+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YShtX2Jp
dG1hcC0+ZGF0YSgpKTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRw
dXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIElt
YWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgbV9i
aXRtYXAtPmRhdGEoKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29u
c3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURh
dGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBtX2JpdG1hcC0+
ZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
R1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTkxMzczOWY4YzUxOTlkOThkMzUxNmU1
YjIyNjdhMWMwMTQ5MDc0NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tl
bmQuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Q
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFNoYXJlYWJsZUJpdG1hcDsKKworY2xhc3Mg
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kIDogcHVibGljIFdlYkNvcmU6OlBsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRv
dyopOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKwor
ICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUoKSBjb25zdDsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2NvbnRleHQ7IH0KKworICAgIFdlYkNvcmU6Ok5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2Vi
Q29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6
OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiA9IFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1
dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+JiYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+JiYpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdS
QTsgfQorI2VuZGlmCisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmMyM2IwZDM3ZmIwY2E3YTdhNzZmZWQ0ZTljZGQ5
MDI2MmRmMWY2OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5o
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKworI2lmIEhBVkUoSU9T
VVJGQUNFKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ7CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKK3VzaW5nIFBsYXRmb3JtQWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQgPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlP
U3VyZmFjZUJhY2tlbmQ7CisjZWxzZQordXNpbmcgUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVm
ZmVyU2hhcmVhYmxlQmFja2VuZCA9IFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hh
cmVhYmxlQmFja2VuZDsKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVDb250
ZXh0dWFsSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZWU5YWJjODMxNzM5ZTFmMWRkM2YxZmJm
YTUwMzg1Mjc3OTBlMmE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRl
ICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFj
a2VuZFR5cGU+CitjbGFzcyBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIgOiBwdWJsaWMgRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZl
ciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSBy
ZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
CisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKHNp
emUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4obmV3IFJl
bW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKSk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIg
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgICAgIDogQmFzZURpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIoc2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJp
bmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0ZUJhY2tlbmQoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUgaGFuZGxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQp
OworICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBi
YWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRsZSkp
OworICAgIH0KKworICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2VuZFR5cGUqIGVuc3VyZUJhY2tl
bmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tlbmQpCisgICAg
ICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5l
bnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLmdldCgpOwor
ICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGF1dG8mIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNwbGF5
TGlzdCgpOworICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hDb250ZXh0KGRp
c3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisKKyAgICB2
b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYg
ZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KCk7
CisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaERyYXdpbmdDb250ZXh0KGRp
c3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgwM2Q0ZGQzYmM2
MGVlZGM4NWE1MDQ2NzQxYjk3Y2Q3YmEzZGI5MDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
Y3BwCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1
ZmZlci5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiR1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24uaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1hZ2VCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAg
Ly8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyIGluIHRoZSBHUFVQcm9jZXNz
Q29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVy
TWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24o
KS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAuYWRkTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7CisKKyAgICAv
LyBDcmVhdGUgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpDcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5k
ZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1faW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK1JlbW90ZUltYWdl
QnVmZmVyOjp+UmVtb3RlSW1hZ2VCdWZmZXIoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2Vs
ZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVz
c2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vz
c0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJN
YXAucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJl
bW90ZUltYWdlQnVmZmVyUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5OjpSZWxlYXNlSW1hZ2VCdWZmZXIobV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIp
LCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBS
ZW1vdGVJbWFnZUJ1ZmZlcjo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAg
IHJldHVybiAmV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rp
b24oKS5jb25uZWN0aW9uKCk7Cit9CisKK3VpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyOjptZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK2Jvb2wgUmVtb3RlSW1hZ2VCdWZmZXI6Ondh
aXRDcmVhdGVCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9u
ID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5j
b25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaElt
bWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlQmFja2VuZD4obV9p
bWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRX
YWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJlbW90ZUltYWdlQnVmZmVy
Ojp3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBj
b25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5l
Y3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmRE
aXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1c2hJ
ZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRp
b246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK3ZvaWQgUmVt
b3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCkKK3sKKyAgICBjb25zdGV4cHIg
Y29uc3QgdW5zaWduZWQgTWF4V2FpdHNDb3VudCA9IDM7CisgICAgZm9yICh1bnNpZ25lZCB3YWl0
c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgIWlzQmFja2VuZENyZWF0ZWQoKSAmJiB3YWl0c0NvdW50
LS07ICkKKyAgICAgICAgd2FpdENyZWF0ZUJhY2tlbmQoKTsKKworICAgIGZvciAodW5zaWduZWQg
d2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7IGlzUGVuZGluZ0ZsdXNoKCkgJiYgd2FpdHNDb3Vu
dC0tOyApCisgICAgICAgIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsKK30KKwordm9pZCBSZW1v
dGVJbWFnZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyID0g
Zmx1c2hJZGVudGlmaWVyOworfQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVz
aENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5
TGlzdCkKK3sKKyAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5OjpGbHVzaENvbnRleHQoZGlzcGxheUxpc3QsIG1fc2VudEZsdXNoSWRlbnRpZmllciks
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOwor
fQorCit2b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaERyYXdpbmdDb250ZXh0KGNv
bnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7Cisg
ICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXI6Omdl
bmVyYXRlKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Rmx1
c2hEcmF3aW5nQ29udGV4dChkaXNwbGF5TGlzdCwgbV9zZW50Rmx1c2hJZGVudGlmaWVyKSwgbV9p
bWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjUyMDA4YzZmMWQ0
ZmY4ZGZiN2NlOTg1MDU5OGY3ZWZlODUxMWU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgK
QEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1
ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyRmx1
c2hJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5j
bHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2lu
Y2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdEl0ZW1zLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVJ
bWFnZUJ1ZmZlcgorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIH5SZW1vdGVJbWFnZUJ1ZmZl
cigpOworCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisKKyAg
ICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0aW9uKiBtZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5k
ZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIC8vIEJsb2NrZXJzCisgICAgYm9v
bCB3YWl0Q3JlYXRlQmFja2VuZCgpOworICAgIGJvb2wgd2FpdFNldEZsdXNoSWRlbnRpZmllcigp
OworCisgICAgdm9pZCBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgIGJvb2wgaXNQZW5kaW5n
Rmx1c2goKSBjb25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNlaXZl
ZEZsdXNoSWRlbnRpZmllcjsgfQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0ZUJhY2tlbmQoY29u
c3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3Bh
Y2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0Jh
Y2tlbmRDcmVhdGVkKCkgY29uc3QgPSAwOworCisgICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIo
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworICAgICAgICAKKyAgICB2b2lkIHJlbW90ZUZs
dXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKyAg
ICB2b2lkIHJlbW90ZUZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3Nl
bnRGbHVzaElkZW50aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNl
aXZlZEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKKyAg
ICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMu
aW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODEwYmVkZDQ5MjQ0Mzg0NDcxN2ExMjYwOGNiMWFjYjMwMjFiNGJkYgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBACisj
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNvdW50ZWQgewor
ICAgIHZvaWQgQ3JlYXRlQmFja2VuZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdl
YkNvcmU6OkludFNpemUgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUgaGFuZGxlKQorICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VCdWZm
ZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNzk1MjRiYmMwYjYyMTY3ZDk0ODc3MjRhYmJiNGQ5MGRkM2ZjZWQz
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VC
dWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVtb3RlQ29udGV4dHVhbEltYWdl
QnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBSZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyID0gUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVy
YXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZv
cm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0YWU1ZmRkNzYx
MmRjZDg0M2U4NmVlMGY4MWNmZmQzNGEyYmVmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworc3RkOjp1bmlx
dWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgp
Cit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kPihu
ZXcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzczo6Q3JlYXRlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKSwgMCk7Cit9CisKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6On5SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kKCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuCisgICAgc2VuZChNZXNzYWdlczo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6UmVs
ZWFzZVJlbmRlcmluZ0JhY2tlbmQobV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOwor
fQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldlYlByb2Nlc3M6OnNpbmdsZXRv
bigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworfQorCit1aW50
NjRfdCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIudG9VSW50
NjQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5n
TW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAg
ICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBt
X3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisg
ICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0
ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6
CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZm
ZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0
V2luZG93KTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODZiZTlkY2JkNjBm
Mzk1ODc3ZjQ4ZTUxNzE4NTA5ZDlkMWY0NGMwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisj
aW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgor
I2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9SZW5kZXJpbmdCYWNrZW5kLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kCisgICAgOiBwdWJsaWMgV2ViQ29yZTo6UmVuZGVyaW5nQmFja2Vu
ZAorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZhdGUgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisKKyAgICB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgp
OworCisgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gUmVuZGVy
aW5nQmFja2VuZAorICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3Jl
YXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25z
dCBXZWJDb3JlOjpIb3N0V2luZG93Kikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZCgpOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2Vu
ZXJhdGUoKSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMzU0NzBjY2ZlN2I3OWJiOTI0NTc4YWZiNDE3MDM1Yzkx
M2RkMDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApAQCAtMCwwICsxLDM5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisKKyNpbmNsdWRlIDx3dGYvT2JqZWN0SWRlbnRpZmllci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworZW51bSBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGUgeyB9OwordXNpbmcgUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIgPSBPYmplY3RJZGVudGlmaWVyPFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyVHlwZT47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
Y2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NWJkNzI4ZWIzOGRlZDVkNDljYTdlMDcyZmFlMjUyOGY1M2Y5NWIwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpZiBI
QVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25h
bWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1dURl9NQUtFX0lT
T19BTExPQ0FURURfSU1QTChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOwor
CitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUg
PSBjYWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChi
YWNrZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byBzdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUoYmFja2VuZFNpemUsIGJhY2tlbmRTaXplLCBj
YWNoZWRDR0NvbG9yU3BhY2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBjZ0NvbnRl
eHQgPSBzdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7CisgICAgaWYg
KCFjZ0NvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ0dDb250ZXh0Q2xl
YXJSZWN0KGNnQ29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwgYmFj
a2VuZFNpemUpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFy
ZWFibGVJT1N1cmZhY2VCYWNrZW5kPihuZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVh
YmxlSU9TdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
OjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgaW50
ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
SW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBpZiAoIVdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8TWFjaFNlbmRSaWdodD4oaGFuZGxlKSkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYXV0byBz
dXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGVGcm9tU2VuZFJpZ2h0KFdURk1vdmUoV1RGOjpnZXQ8
TWFjaFNlbmRSaWdodD4oaGFuZGxlKSksIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7
CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVy
biBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPihu
ZXcgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKGxvZ2ljYWxTaXplLCBpbnRl
cm5hbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkp
OworfQorCitJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdAorewor
ICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUobV9zdXJmYWNlLT5jcmVhdGVTZW5k
UmlnaHQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gSEFWRShJ
T1NVUkZBQ0UpCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjFlMzcxMWE3MTcyM2UwMTAyYjcxOTkzZWEwMDYzYTA4MDBjZjJlZjkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAs
MCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKyNpZiBIQVZFKElPU1VS
RkFDRSkKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmg+CisjaW5jbHVkZSA8d3RmL0lz
b01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVhYmxlQml0bWFw
OworCitjbGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQgOiBwdWJsaWMg
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKTsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
Y29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJD
b3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKworICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBj
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB1
c2luZyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
SEFWRShJT1NVUkZBQ0UpCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxh
eUxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllci5jcHAKaW5kZXggYWUwMTYxYWFkOTQ3NGQ2YjBmMWY5MDBiMDU0NGY1
OTgwZDM2OThmZi4uYjlmNGQyYTdlMzI3ZWJlMzIwZDU3ZTc1OGJhYjAzZTU3YTZhZDY1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVy
RGlzcGxheUxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0
Yy9TYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwCkBAIC0yOCwxMiArMjgsMTUgQEAKIAogI2lm
IFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoR1BVX1BST0NFU1MpICYmIEVOQUJMRShWSURFT19U
UkFDSykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAorI2luY2x1ZGUgIkdQVVByb2Nlc3NDb25u
ZWN0aW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJIb3N0aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlJl
bW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlcy5oIgogI2luY2x1ZGUg
IlJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlc1JlcGxpZXMuaCIK
ICNpbmNsdWRlICJSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuaCIKICNpbmNsdWRlICJXZWJD
b3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9SZW1vdGVWaWRlb1NhbXBsZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkNocm9tZUNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcAppbmRleCA4ZTRjOTM3NWQ3YjhjYzEwZmZhMDA4MDNkNDgy
MTczYmU1YTM1NThhLi43ZDdiODg2ZDY4NjQzNWQyYmQxYTExNDRjNjU0NjA2YTc0MzgwM2Y1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViQ2hyb21lQ2xpZW50LmNwcApAQCAtOTAsNiArOTAsMTAgQEAKICNpbmNsdWRlICJWaWRl
b0Z1bGxzY3JlZW5NYW5hZ2VyLmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgiCisjZW5kaWYKKwogI2lmIEVOQUJM
RShBU1lOQ19TQ1JPTExJTkcpCiAjaW5jbHVkZSAiUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
aCIKICNlbmRpZgpAQCAtODkxLDYgKzg5NSwxNSBAQCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25p
dG9yPiBXZWJDaHJvbWVDbGllbnQ6OmNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zgog
CiAjZW5kaWYKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFdlYkNocm9tZUNs
aWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorICAgIHJldHVybiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNl
bHNlCisgICAgcmV0dXJuIFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpOworI2VuZGlmCit9CisK
IHZvaWQgV2ViQ2hyb21lQ2xpZW50OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihGcmFtZSYsIEdy
YXBoaWNzTGF5ZXIqIGxheWVyKQogewogICAgIGlmIChsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApp
bmRleCBhOGE0Y2NhYzU3ZDgwOGFhYTU1ZDhkNzk1MWJjNWM1NDFjNjBmMmFkLi41Njc4N2UwMTcw
MGViYmVlOWRjMzdlM2FiODQ1ODY2NDg1ZjZkNmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0y
MzMsNiArMjMzLDggQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJl
c2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6UGxhdGZvcm1E
aXNwbGF5SUQpIGNvbnN0IGZpbmFsOwogI2VuZGlmCiAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0IGZp
bmFsOworCiAgICAgQ29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJp
Z2dlcnMoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENv
bXBvc2l0aW5nVHJpZ2dlckZsYWdzPigKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYkZyYW1lLmNwcAppbmRleCA5ZmJiMWZkZjBkODI3ODg0NjY1Y2VjNzczN2IzMTBiNTAz
MWQ0MGM1Li4wZjg4NDI5MDBmODUxYTdkOTJmODg2Y2E2NmY5MWE5MTBlOWZlZmFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCkBAIC04NDAsNyAr
ODQwLDcgQEAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlv
blNuYXBzaG90KCkgY29uc3QKICAgICBpZiAoIXNuYXBzaG90KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGF1dG8gc2hhcmVkU25hcHNob3QgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0
ZVNoYXJlYWJsZShzbmFwc2hvdC0+aW50ZXJuYWxTaXplKCksIHsgfSk7CisgICAgYXV0byBzaGFy
ZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5i
YWNrZW5kU2l6ZSgpLCB7IH0pOwogICAgIGlmICghc2hhcmVkU25hcHNob3QpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYWQxMDU5NGRjZDBkNDk0Y2QxOWY0NTBhMzY2Yzc1MmJl
MjU2MzJkNS4uNDNjMjM1ZGVlOTA4MWZkZmQwYmNmNmYyZjRkZjMxY2RiOGYxMGE3YSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE3IEBACisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFs
bGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGEgbmV3IEltYWdlQnVmZmVyIHR5cGUg
Zm9yIGRyYXdpbmcgb24gYSBEaXNwbGF5TGlzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIGV4dHJhIHJlY29yZGluZyBoYXBwZW5zIGJlY2F1c2Ug
Q2FudmFzQmFzZTo6c2V0SW1hZ2VCdWZmZXIoKSB1c2VkIHRvCisgICAgICAgIGlzc3VlIGl0cyBH
cmFwaGljc0NvbnRleHQgY29tbWFuZHMgZGlyZWN0bHkgdG8gdGhlIGJhY2tlbmQuIFdpdGggdGhp
cyAKKyAgICAgICAgcGF0Y2gsIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgZG9lcyBub3QgYWxsb3cg
YWNjZXNzIHRvIHRoZSBiYWNrZW5kIGNvbnRleHQuCisgICAgICAgIFNvIGFsbCB0aGUgR3JhcGhp
Y3NDb250ZXh0IGNvbW1hbmRzIGhhcyB0byBiZSByZWNvcmRlZC4KKworICAgICAgICAqIGRpc3Bs
YXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dDoKKwogMjAyMC0wMi0wNCAg
TGF1cm8gTW91cmEgIDxsbW91cmFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBHYXJkZW4g
c29tZSB3cHQgdGVzdHMgZmFpbGluZyB3aXRoIGhhcm5lc3MgdGltZW91dApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQu
dHh0CmluZGV4IDFiNTdlNzkxYjcyYWNjYTg3NzYxNDQ3OWI0ZGM3ZmU1Yzk1OTRkNzcuLjM0Yzg3
YjliMDQyOTQ1NWE5YmYxMTQxYzZiZmIzOTcxYzc1MjBiOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAorKysgYi9M
YXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQK
QEAgLTEsNyArMSwxMSBAQAogIAorKHNhdmUKKyAgKHJlc3RvcmUtaW5kZXggMCkpCiAoc2V0LXN0
YXRlCi0gIChjaGFuZ2UtZmxhZ3MgMjU2KQotICAoZmlsbC1jb2xvciAjQzgwMDAwKSkKKyAgKGNo
YW5nZS1mbGFncyAxMDUwOTEyKQorICAoc3Ryb2tlLXRoaWNrbmVzcyAxLjAwKQorICAoZmlsbC1j
b2xvciAjQzgwMDAwKQorICAoc2hhZG93cy1pZ25vcmUtdHJhbnNmb3JtcyAxKSkKIChmaWxsLXJl
Y3QKICAgKGV4dGVudCBhdCAoMTAsMTApIHNpemUgNTV4NTApCiAgIChyZWN0IGF0ICgxMCwxMCkg
c2l6ZSA1NXg1MCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389784</attachid>
            <date>2020-02-05 01:13:19 -0800</date>
            <delta_ts>2020-02-19 17:43:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200205011318.patch</filename>
            <type>text/plain</type>
            <size>546423</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGMwN2ZjYTFiZWVkYzg0
NThjY2MwZTM5YjE1OWIyZWM5MjE0MzczMi4uMTU2MTcwYTY4N2IyNGM0NGY3ZDM0MTRhYmFkNmIy
MGFkNDg5NzdhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0NiBAQAorMjAyMC0wMi0wNCAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxl
bWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgUmVxdWVzdCB0aGUgcmVtb3RlIGRyYXdpbmcgZm9yIHRoZSBI
VE1MQ2FudmFzRWxlbWVudCB3aGVuIGl0IGlzIG5lZWRlZAorICAgICAgICBieSBzZXR0aW5nIHRo
ZSBzdWl0YWJsZSBSZW5kZXJpbmdNb2RlLgorCisgICAgICAgIFNpbmNlIHJlbW90ZSBkcmF3aW5n
IGNyZWF0ZXMgb25lIEltYWdlQnVmZmVyQmFja2VuZCBpbiB0aGUgR1BVUHJvY2VzcywgCisgICAg
ICAgIHRoZSBXZWJQcm9jZXNzIHJlbW90ZSBJbWFnZUJ1ZmZlciBoYXMgdG8gYmUgY3JlYXRlZCBp
bml0aWFsbHkgd2l0aCBubworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQgdGlsbC4gU28gQ29u
dGV4dHVhbEltYWdlQnVmZmVyIGhhcyB0byBlbnN1cmUgdGhlCisgICAgICAgIGJhY2tlbmQgaXMg
Y3JlYXRlZCBiZWZvcmUgZG9pbmcgYW55IG9wZXJhdGlvbi4KKworICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbElt
YWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmZs
dXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJh
c2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjps
b2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJh
Y2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cmVz
b2x1dGlvblNjYWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6
bWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmV4
dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmNvcHlOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpkcmF3
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnNpbmtJ
bnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
OjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVh
bEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bnRleHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRl
eHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJ
bWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIHBsYXRmb3JtTGF5ZXIKKyAgICAgICAg
Y29weVRvUGxhdGZvcm1UZXh0dXJlCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0
SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oOgorCisyMDIwLTAyLTA0ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IEltYWdlQnVmZmVyIHNoYXJlYWJsZSBiYWNrZW5kcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRGVmaW5lIHRoZSBiYXNlIEltYWdlQnVmZmVyQmFj
a2VuZCBmb3IgZWFjaCBwbGF0Zm9ybS4gCisgICAgICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZCBpbiBXZWJLaXQgbmVlZHMgdG8gaGF2ZSBhY2Nlc3MgdG8gYmFzaWMKKyAgICAg
ICAgSW1hZ2VCdWZmZXJCYWNrZW5kIGZ1bmN0aW9uYWxpdGllcyBzcGVjaWZpYyB0byB0aGUgcGxh
dGZvcm0uCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKworMjAyMC0wMi0wNCAgU2FpZCBBYm91
LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCB0
aGUgcmVtb3RlIFJlbmRlcmluZ0JhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIwNzE5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEV4dGVuZCBSZW5kZXJpbmdNb2RlIHRvIGluY2x1ZGUgbmV3IGVu
dW0gdmFsdWVzIGZvciBjcmVhdGluZyByZW1vdGUKKyAgICAgICAgSW1hZ2VCdWZmZXIgdHlwZXMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorCisyMDIwLTAyLTAzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW50cm9kdWNl
IFJlbmRlcmluZ0JhY2tlbmQgYW5kIG1ha2UgaXQgdGhlIGNyZWF0b3Igb2YgSW1hZ2VCdWZmZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEzNAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbmRlcmlu
Z0JhY2tlbmQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhlIEltYWdlQnVmZmVy
LiBJbiBhCisgICAgICAgIGZvbGxvd2luZyBwYXRjaCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kIHdp
bGwgYmUgaW50cm9kdWNlZC4gSXQnbGwgaW5oZXJpdAorICAgICAgICBSZW5kZXJpbmdCYWNrZW5k
IGFuZCBsaXZlIGluIFdlYktpdC4gSXQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcK
KyAgICAgICAgdGhlIFJlbW90ZUltYWdlQnVmZmVyLiBUaGUgZ29hbCBmb3IgUmVuZGVyaW5nQmFj
a2VuZCBhbmQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgICAgICBpcyB0byBpbnRlcmFjdCB3
aXRoIFJlbW90ZUltYWdlQnVmZmVyIHNlYW1sZXNzbHkgaW4gdGhlIGNhbGxlciBzaWRlLgorCisg
ICAgICAgICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAg
KiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGFnZS9DaHJv
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5k
IGNvbnN0KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21l
Q2xpZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVu
ZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFj
a2VuZC5oOiBBZGRlZC4KKworMjAyMC0wMi0wMiAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIG5ldyBJbWFnZUJ1ZmZlciB0eXBl
IGZvciBkcmF3aW5nIG9uIGEgRGlzcGxheUxpc3QKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzEwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgaW5oZXJpdHMgSW1h
Z2VCdWZmZXIgYW5kIERyYXdpbmdDb250ZXh0LiBUaGUgCisgICAgICAgIGRyYXdpbmcgY29udGV4
dCB3aWxsIGJlIHRoZSBjb250ZXh0IG9mIHRoZSBkaXNwbGF5IGxpc3QuIFRoZSBJbWFnZUJ1ZmZl
cgorICAgICAgICBvcGVyYXRpb25zIHdpbGwgZW5zdXJlIHRoZSByZWNvcmRlZCBkaXNwbGF5LWxp
c3QgaXMgcmVwbGF5ZWQgYmFjayBiZWZvcmUKKyAgICAgICAgZ2V0dGluZyB0aGUgcGl4ZWxzIG9m
IHRoZSBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4dDJkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRVc2VzRGlzcGxheUxpc3REcmF3
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6ZGlz
cGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1l
bnQ6OnJlcGxheURpc3BsYXlMaXN0QXNUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRl
eHR1YWxJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpm
bHVzaENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpj
b3B5TmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZHJhd1BhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpzaW5rSW50b05h
dGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6c2lu
a0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRy
YXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpj
b252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFn
ZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkRp
c3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5
TGlzdEltYWdlQnVmZmVyOjpEaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6On5EaXNwbGF5TGlzdEltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXdpbmdDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpmbHVzaERyYXdpbmdDb250ZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0Lmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpE
cmF3aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0Nv
bnRleHQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRy
YXdpbmdDb250ZXh0OjpkaXNwbGF5TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpzZXRUcmFja3NE
aXNwbGF5TGlzdFJlcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2lu
Z0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KToKKworMjAyMC0wMS0zMSAgU2FpZCBBYm91LUhh
bGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEFsbG93IGRpZmZlcmVu
dCBiYWNrLWVuZHMgZm9yIEltYWdlQnVmZmVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcwNDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIHJlLWZhY3RvcmVkIHRvIGRl
Y291cGxlIHRoZSBwbGF0Zm9ybSBzcGVjaWZpY3MgYW5kCisgICAgICAgIHRoZSBiYWNrLWVuZCBk
ZXRhaWxzIGZyb20gdGhlIGludGVyZmFjZSAiSW1hZ2VCdWZmZXIiLgorCisgICAgICAgIEEgY2xh
c3MgaGllcmFyY2h5IGZvciB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIHdpbGwgYWRkZWQgdG8gYWxs
b3cgY29kZQorICAgICAgICBzaGFyaW5nIGFuZCB0byBzcGxpdCB0aGUgY29kZSBhY2NvcmRpbmcg
dG8gdGhlIHBsYXRmb3JtIGFuZCB0aGUgYmFjay1lbmQKKyAgICAgICAgZGV0YWlscy4KKworICAg
ICAgICBJbWFnZUJ1ZmZlciB3aWxsIGJlIGtlcHQgaW50ZXJmYWNlIHdpdGggdGhlIHJlc3Qgb2Yg
dGhlIGNvZGUgYnV0IGRpZmZlcmVudAorICAgICAgICBiYWNrLWVuZHMgd2lsbCBiZSBjcmVhdGVk
LiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgaXMgYSB0ZW1wbGF0ZSBjbGFzcyB3aGljaAorICAgICAg
ICBpbmhlcml0cyBJbWFnZUJ1ZmZlciBhbmQgd2lsbCAgYWN0IGFzIGEgYnJpZGdlIHRvIHRoZSBj
b25jcmV0ZQorICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgQmFzZWQgb24g
dGhlIFJlbmRlcmluZ01vZGUsIGEgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB3
aWxsCisgICAgICAgIGJlIGNyZWF0ZWQuIEluc3RlYWQgb2YgY2hlY2tpbmcgdGhlIHJlbmRlcmlu
Z01vZGUgaW4gbWFueSBwbGFjZXMgb2YgdGhlCisgICAgICAgIGNvZGUgYW5kIGluc3RlYWQgb2Yg
YW5kIHVzaW5nIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLCBhbGwgdGhlc2UgZGVjaXNpb25zCisg
ICAgICAgIHdpbGwgYmUgbWFkZSBpbiB0aGUgY29uY3JldGUgSW1hZ2VCdWZmZXJCYWNrZW5kLgor
CisgICAgICAgIFRoaXMgcmUtZmFjdG9yaW5nIHdpbGwgYWxsb3cgY3JlYXRpbmcgbmV3IHR5cGVz
IG9mIEltYWdlQnVmZmVycyBiYWNrZWQgYnkKKyAgICAgICAgbmV3IEltYWdlQnVmZmVyQmFja2Vu
ZHMuIFRoZXNlIG5ldyBJbWFnZUJ1ZmZlckJhY2tlbmRzIHdpbGwgaW1wbGVtZW50CisgICAgICAg
IERpc3BsYXlMaXN0IGRyYXdpbmcgYW5kIHN5bmNocm9uaXplIHJlbW90ZSByZW5kZXJpbmcuCisK
KyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1GVFcuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1NYWMu
Y21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW4uY21ha2U6CisgICAgICAgICogU291cmNlcy50
eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9DYWlyby5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9Tb3VyY2VzQ2Fp
cm8udHh0OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKwor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
UmVzcGVjdGluZ09yaWVudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db250
ZXh0dWFsSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFs
SW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0
dWFsSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICBBIGJyaWRnZSBj
bGFzcyB0byBJbWFnZUJ1ZmZlckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnNpbmtJbnRvSW1hZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OnRvQkdSQURhdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwbGF0Zm9ybUxheWVyIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5VG9QbGF0
Zm9ybVRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6Om1l
bW9yeUNvc3QgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpk
cmF3KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6aW50ZXJuYWxTaXplIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpiYXNlVHJhbnNm
b3JtIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgUmVtb3ZlIGFsbCB0aGUgYmFjay1lbmQgYW5k
IHBsYXRmb3JtcyBkZXRhaWxzLiBVbmlmeSB0aGUgaW50ZXJmYWNlIHN1Y2gKKyAgICAgICAgdGhh
dCBJbWFnZUJ1ZmZlciBkb2VzIG5vdCBpbmNsdWRlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBB
bGwgdGhlIAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpY3Mgd2lsbCBiZSBpbiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6SW1h
Z2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
Y2FsY3VsYXRlQmFja2VuZFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpzaW5rSW50b05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
QmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJh
Y2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNr
ZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVm
ZmVyQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZCk6CisgICAgICAgIChXZWJDb3JlOjpjb3B5UHJlbXVs
dGlwbGllZFRvVW5wcmVtdWx0aXBsaWVkKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlVbnByZW11
bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Y29weUZ1bmN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpjb3B5SW1hZ2VQaXhlbHMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURh
dGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFn
ZURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Zmx1c2hDb250
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFNpemUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kU2l6
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OnJlc29sdXRp
b25TY2FsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNv
bG9yU3BhY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpi
YXNlVHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2Vu
ZDo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tl
bmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckJhY2tlbmQ6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJCYWNrZW5kOjpwbGF0Zm9ybUxheWVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6Ynl0ZXNQZXJSb3cgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjpiYWNrZW5kQ29sb3JGb3JtYXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JhY2tlbmRDb29y
ZGluYXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6Omxv
Z2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6
YmFja2VuZFJlY3QgY29uc3QpOgorICAgICAgICBBIGJhc2UgY2xhc3Mgd2hpY2ggZGVmaW5lcyBz
b21lICBkZWZhdWx0IGJlaGF2aW9ycyBzbyBub3QgYWxsIHRoZSBwbGF0Zm9ybXMKKyAgICAgICAg
aGF2ZSB0byBpbXBsZW1lbnQgdGhlbS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpkcmF3U2hhZG93
QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb09wZXJhdGlv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fpcm86OmRyYXdTaGFkb3dMYXllckJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpDYWlybzo6ZHJhd1NoYWRvd0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNhaXJvOjpmaWxsU2hhZG93QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0SW1wbENhaXJvOjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWly
b0JhY2tlbmQ6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0JhY2tl
bmQ6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kOjp0cmFuc2Zvcm1Db2xvclNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
Q2Fpcm9CYWNrZW5kOjp0b0RhdGFVUkwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNw
YWNlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjbGVhclN1
cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tl
bmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNl
QmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1MYXllciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZDo6Y29weVRvUGxhdGZvcm1UZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjcmVhdGVDb21wb3NpdG9yQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2Fw
QnVmZmVyc0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVyZU1hcHBlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQu
CisgICAgICAgIEFuIGFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kOjpw
bGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICBBbiB1bmFjY2VsZXJhdGVkIENhaXJvIGJhY2stZW5kLgorCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6Oklt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpieXRlc1BlclJvdyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRp
dmVJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQ6OmNhaXJvU3VyZmFjZUNvZXJjZVRvSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1h
Z2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgQSBDYWlybyBzdXJmYWNlIGJhc2UgY2xhc3MgYmFjay1lbmQuCisKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb250ZXh0Q29sb3JTcGFjZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2V0dXBDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckNHQmFja2VuZDo6ZHJhd1BhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VCdWZmZXJDR0JhY2tlbmQ6OmJhc2VUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvQ0ZEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnRvRGF0YVVSTCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjptYWtlVkltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OmNvcHlJbWFnZVBpeGVs
c0FjY2VsZXJhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQ0dCYWNrZW5kOjpj
b3B5SW1hZ2VQaXhlbHMgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lt
YWdlQnVmZmVyQ0dCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICBBIGJhc2UgY2xhc3MgZm9yIGFs
bCBDRyBiYWNrLWVuZHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckNHQml0bWFwQmFja2VuZDo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJ
bWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckNHQml0
bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICBBbiB1bmFjY2VsZXJhdGVkIENHIGJhY2stZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwOiBSZW1vdmVkLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0
ZUJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6Y29udGV4dENvbG9yU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpjb250ZXh0IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Zmx1c2hDb250ZXh0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6bWVtb3J5
Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ6OmV4dGVybmFsTWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6YmFja2VuZENvbG9yRm9ybWF0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNl
QmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmRyYXdDb25zdW1pbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIEFuIElPU3VyZmFjZSBhY2NlbGVyYXRlZCBD
RyBiYWNrLWVuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UERGRG9jdW1lbnRJbWFnZTo6dXBkYXRlQ2Fj
aGVkSW1hZ2VJZk5lZWRlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9T
dXJmYWNlLm1tOgorICAgICAgICAoV2ViQ29yZTo6SU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VC
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFw
aGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyRC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y29u
dGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2Vu
ZDo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpjb3B5TmF0aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Q3JvcHBlZEltYWdlSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6Y29weUltYWdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVybik6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhVVJMIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjp0b0RhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRv
QkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEaXJlY3QyREJh
Y2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIFJl
bW92ZSBEaXJlY3QyRCBpbXBsZW1lbnRhdGlvbiBmb3IgSW1hZ2VCdWZmZXIuIEludHJvZHVjZSAK
KyAgICAgICAgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQgaW5zdGVhZC4KKworICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyYXBwZWRNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZTo6dXBkYXRlU2FtcGxlQnVmZmVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Jl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVuZGVyaW5nQ29udGV4
dDo6YnVmZmVyRm9yZWdyb3VuZCk6CisKKzIwMjAtMDEtMjggIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEltYWdlQnVmZmVyOjpnZXRJ
bWFnZURhdGEoKSBhbmQgcHV0SW1hZ2VEYXRhKCkgcmV0dXJuIGFuZCB0YWtlIEltYWdlRGF0YQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NjIxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgLS0gQ29tYmlu
ZSBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKCkgYW5kIGdldFByZW11bHRp
cGxpZWRJbWFnZURhdGEoKQorICAgICAgICAgICBpbiBvbmUgZnVuY3Rpb24gYW5kIG5hbWUgaXQg
Z2V0SW1hZ2VEYXRhKCk7CisKKyAgICAgICAgLS0gTWFrZSBnZXRJbWFnZURhdGEoKSByZXR1cm5z
IGFuIFJlZlB0cjxJbWFnZURhdGE+IHNpbmNlIHRoZSBjYW52YXMgY29kZQorICAgICAgICAgICB1
c2VkIHRvIGVuY2Fwc3VsYXRlIHRoZSByZXR1cm5lZCBVaW50OENsYW1wZWRBcnJheSBpbnRvIGFu
IEltYWdlRGF0YQorICAgICAgICAgICBhbmQgc2VuZCBpdCB0byBKYXZhU2NyaXB0Q29yZS4KKwor
ICAgICAgICAtLSBSZW5hbWUgSW1hZ2VCdWZmZXI6OnB1dEJ5dGVBcnJheSgpIHRvIEltYWdlQnVm
ZmVyOjpwdXRJbWFnZURhdGEoKSBhbmQKKyAgICAgICAgICAgbWFrZSBpdCB0YWtlIGFuIEltYWdl
RGF0YSBzaW5jZSB0aGUgYnl0ZSBhcnJheSBoYXMgdG8gYmUgYXNzb2NpYXRlZAorICAgICAgICAg
ICB3aXRoIGFuIEludFNpemUgYW5kIHNlcGFyYXRpbmcgdGhlbSBkb2VzIG5vdCBsb29rIGEgZ29v
ZCBkZXNpZ24uCisKKyAgICAgICAgLS0gUmVtb3ZlIHRoZSBlbnVtIEltYWdlQnVmZmVyOjpDb29y
ZGluYXRlU3lzdGVtLiBBbGwgdGhlIGNhbGxlcnMgbmVlZCB0bworICAgICAgICAgICBwYXNzIHJl
Y3RhbmdsZXMgYW5kIHNpemVzIGluIGxvZ2ljYWwgY29vcmRpbmF0ZXMuIFRoZSBJbWFnZURhdGEg
aGFzIHRvCisgICAgICAgICAgIGJlIHNjYWxlZCBhY2NvcmRpbmcgdG8gdGhlIEltZ2VCdWZmZXI6
OnJlc29sdXRpb25TY2FsZSgpLiAKKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJ
bWFnZUJpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6cmVhZElt
YWdlQml0bWFwKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJh
c2U6OmdldEltYWdlRGF0YSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VDb25zb2xl
Q2xpZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5z
aG90KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Y29udmVydFRvTHVtaW5hbmNlTWFzayk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSk6IERlbGV0ZWQu
CisgICAgICAgIE1vdmUgdGhpcyBmdW5jdGlvbiB0byBJbWFnZUJ1ZmZlckNhaXJvLmNwcC4KKwor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFuZCBnZW5l
cmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpIGFyZSBub3QgCisgICAgICAgIG92ZXJyaWRkZW4g
YnkgYW55IHBsYXRmb3JtLiBTbyBkZWxldGUgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2so
KSBhbmQKKyAgICAgICAgbW92ZSBpdHMgYm9keSB0byBjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCku
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZm
ZXI6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpkcmF3Q29u
c3VtaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICBNYWtlIHRoZSBwcml2YXRlIGZ1bmN0aW9ucyBiZSBwdWJsaWMgYW5kIHJlbW92ZSB0
aGUgZnJpZW5kIGNsYXNzZXMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJTaGFkb3dCdWZmZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnRyYW5zZm9ybUNvbG9yU3BhY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpw
dXRJbWFnZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SW1hZ2VEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmxvZ2ljYWxVbml0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmJhY2tpbmdTdG9yZVVuaXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
dWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFy
cmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckRhdGFDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oOgorICAgICAg
ICBBbGwgdGhlIHJlY3RhbmdsZXMgYW5kIHNpemVzIGhhdmUgdG8gYmUgcGFzc2VkIGluIGxvZ2lj
YWwgY29vcmRpbmF0ZXMuIFRvCisgICAgICAgIGRlYWwgd2l0aCB0aGUgcGl4ZWxzJyBkYXRhIHdl
IG5lZWQgdG8gc2NhbGUgdGhlbSBieSB0aGUgcmVzb2x1dGlvblNjYWxlKCkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jcHUvYXJtL2ZpbHRlcnMvRkVCbGVuZE5FT04uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ29sb3JNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFQ29tcG9uZW50VHJhbnNmZXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvc2l0ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUNvbXBvc2l0ZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29udm9sdmVNYXRyaXguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RkVDb252b2x2ZU1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50TWFw
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRGlzcGxhY2VtZW50TWFwOjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hh
ZG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFRHJvcFNoYWRvdzo6cGxhdGZvcm1BcHBseVNv
ZnR3YXJlKToKKyAgICAgICAgVGhpcyB3YXMgdGhlIG9ubHkgcGxhY2Ugd2hpY2ggd2FzIHBhc3Np
bmcgYSByZWN0YW5nbGUgaW4gYSB0aGUgYmFjay1lbmQKKyAgICAgICAgY29vcmRpbmF0ZXMgYWxv
bmcgd2l0aCBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLiBJbnN0ZWFkIHdlIGNhbiBwYXNz
CisgICAgICAgIHRoZSByZWN0YW5nbGUgaW4gbG9naWNhbCBjb29yZGluYXRlcyBhbmQgdGhlbiB1
c2UgSW1hZ2VEYXRhOjpzaXplKCkgc2luY2UKKyAgICAgICAgaXQgbXVzdCBiZSBzY2FsZWQgd2l0
aCByZXNvbHV0aW9uU2NhbGUoKSB3aGVuIHRoZSBJbWFnZURhdGEgaXMgY3JlYXRlZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RkVHYXVzc2lhbkJsdXI6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xvZ3kuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RkVNb3JwaG9sb2d5OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1bHQpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpjb3B5VW5tdWx0aXBsaWVkUmVzdWx0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y29weVByZW11bHRpcGxpZWRSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFE
aXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdl
RGF0YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0
Qnl0ZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvc2hhcGVzL1NoYXBlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYXBlOjpjcmVhdGVSYXN0ZXJTaGFwZSk6CisKIDIwMjAt
MDItMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2Ug
UkdCQTMyIHR5cGVkZWYgd2l0aCBhIGNsYXNzIHRvIGltcHJvdmUgdHlwZSBzYWZldHkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
aW5kZXggZGNhZjY5OGFkZTM5NDFkMjZmNWU2ZDI2MmM0ZDJjNDY5MmVkNTkwZC4uMTNkZjVmOWY4
MDBmMmQxNmI0Zjc1ZTdhZTZmY2I2Y2YzMTM3OWVmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOTcg
QEAKKzIwMjAtMDItMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KKworICAgICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gcmVtb3RlIHJlbmRl
cmluZyBpcyByZXF1aXJlZCwgdHdvIG9iamVjdHMgd2lsbCBiZSBjcmVhdGVkIHRvIHN5bmNocm9u
aXplCisgICAgICAgIHRoZSBkcmF3aW5nIGJldHdlZW4gdGhlIFdlYlBvcmNlc3MgYW5kIHRoZSBH
UFVQb3JjZXNzIGFuZCB0byBzaGFyZSB0aGUKKyAgICAgICAgYmFja2VuZDoKKworICAgICAgICAo
MSkgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlciBpcyBjcmVhdGVkIGluIHRoZSBXZWJQcm9jZXNz
IGFuZCBpdCBhc2tzCisgICAgICAgICAgICB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
IHRoZSBzZWNvbmQgb2JqZWN0LgorICAgICAgICAoMikgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5IGlzIGNyZWF0ZWQgdGhlIEdQVVByb2Nlc3MgYW5kIGFzc29jaWF0ZWQKKyAgICAgICAg
ICAgIHdpdGggdGhlIGZpcnN0IG9uZSBieSBhbiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuCisgICAg
ICAgIAorICAgICAgICAtLSBXaGVuIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSBpcyBj
cmVhdGVkLCBpdCBzZW5kcyBhIG1lc3NhZ2UgdG8KKyAgICAgICAgICAgc2hhcmUgaXRzIGJhY2tl
bmQgd2l0aCBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLgorCisgICAgICAgIC0tIFRvIHN5bmNo
cm9uaXplIHRoZSBkcmF3aW5nLCBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyIHNlbmRzIHRoZSBt
ZXNzYWdlCisgICAgICAgICAgICdGbHVzaENvbnRleHQnIG9yIHRoZSBtZXNzYWdlICdGbHVzaERy
YXdpbmdDb250ZXh0JyB0byAKKyAgICAgICAgICAgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclBy
b3h5LiBUbyBleGNoYW5nZSB0aGUgbWVzc2FnZXMgYXN5bmNocm9ub3VzbHkKKyAgICAgICAgICAg
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5IHNlbmRzIGJhY2sgdGhlIG1lc3NhZ2UgU2V0
Rmx1c2hJZGVudGlmaWVyCisgICAgICAgICAgIHRvIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIg
d2hlbiB0aGUgZmx1c2hpbmcgaXMgZG9uZS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5OjpSZW1v
dGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIFRoaXMgY2xhc3MgaW5oZXJp
dHMgQ29udGV4dHVhbEltYWdlQnVmZmVyIGFuZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LiBXaGVu
CisgICAgICAgIGl0IGlzIGNyZWF0ZWQsIGl0cyBzaGFyZXMgaXRzIGJhY2tlbmQgd2l0aCBSZW1v
dGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIgYnkgCisgICAgICAgIHNlbmRpbmcgdGhlIG1lc3NhZ2Ug
UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUJhY2tlbmQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OnJlbW90ZUNyZWF0ZUJhY2tlbmQpOgorICAg
ICAgICBTZW5kcyB0aGUgbWVzc2FnZSBSZW1vdGVJbWFnZUJ1ZmZlcjo6Q3JlYXRlQmFja2VuZC4K
KworICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaENvbnRleHQp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpmbHVzaERyYXdpbmdD
b250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oOgorICAgICAgICBJbXBsZW1lbnQgbWVzc2FnZSBoYW5kbGVycy4gQWZ0
ZXIgdGhlaXIgd29yayBpcyBkb25lIHRoZXkgc2VuZCB0aGUKKyAgICAgICAgbWVzc2FnZSAnU2V0
Rmx1c2hJZGVudGlmaWVyJyB0byBSZW1vdGVJbWFnZUJ1ZmZlci4KKworICAgICAgICAqIEdQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmlu
OgorICAgICAgICBBZGQgbWVzc2FnZXMgZm9yIGZsdXNoaW5nIHRoZSBjb250ZXh0IGFuZCB0aGUg
RHJhd2luZ0NvbnRleHQuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICBEZWZpbmVz
IHRoZSBwbGF0Zm9ybSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHR5cGUuCisKKyAgICAgICAgKiBH
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJ
bWFnZUJ1ZmZlcik6CisgICAgICAgIENyZWF0ZSB0aGUgcGxhdGZvcm0gUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAg
ICAqIFdlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBB
ZGRlZC4KKyAgICAgICAgVGhpcyBpcyB1c2VkIHRvIHN5bmNocm9uaXplIGZsdXNoaW5nIHRoZSBj
b250ZXh0IGFuZCB0aGUgRHJhd2luZ0NvbnRleHQgCisgICAgICAgIG9mIHRoZSBJbWFnZUJ1ZmZl
ckJhY2tlbmQgYmV0d2VlbiB0aGUgR1BVUHJvY2VzcyBhbmQgdGhlIFdlYlByb2Nlc3MuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6UmVtb3RlQ29udGV4dHVh
bEltYWdlQnVmZmVyKToKKyAgICAgICAgVGhpcyBjbGFzcyBpbmhlcml0cyBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyIGFuZCBSZW1vdGVJbWFnZUJ1ZmZlci4gSXQgcmVwcmVzZW50cworICAgICAgICB0
aGUgV2ViUHJvY3NzIHBhcnQgb2YgdGhlIHJlbW90ZSBJbWFnZUJ1ZmZlci4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdENyZWF0ZUJhY2tlbmQpOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6d2FpdFNldEZsdXNoSWRlbnRpZmll
cik6CisgICAgICAgIEJsb2NrZXJzIHRoYXQgd2FpdCBmb3IgY2VydGFpbiBtZXNzYWdlcyB0byBi
ZSByZWNlaXZlZC4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJl
VXBkYXRlZEJhY2tlbmQpOgorICAgICAgICBFbnN1cmVzIHRoZSBiYWNrZW5kIGlzIGNyZWF0ZWQg
YW5kIHRoZSBEcmF3aW5nQ29udGV4dCBpcyBmbHVzaGVkIHRvIHRoZQorICAgICAgICBiYWNrZW5k
LgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZp
ZXIpOgorICAgICAgICBBIG1lc3NhZ2UgaGFuZGxlciB0aGF0IGtlZXBzIHRyYWNrIG9mIHdoZXRo
ZXIgdGhlIERyYXdpbmdDb250ZXh0IGlzCisgICAgICAgIGNvbW1pdHRlZCB0byB0aGUgYmFja2Vu
ZCBvciBub3QuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZs
dXNoQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVG
bHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAgICAgRW5zdXJlcyBhbGwgdGhlIHJlY2VudCBkcmF3
aW5nIGlzIGNvbW1pdHRlZCB0byB0aGUgYmFja2VuZC4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
R1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAg
IChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyOjppc1BlbmRpbmdGbHVzaCBjb25zdCk6CisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
Lm1lc3NhZ2VzLmluOgorICAgICAgICBBZGQgbWVzc2FnZXMgZm9yIGNyZWF0aW5nIHRoZSBiYWNr
ZW5kIGFuZCBmb3Igc2V0dGluZyB0aGUgRmx1c2hJZGVudGlmaWVyLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmg6
IEFkZGVkLgorICAgICAgICBEZWZpbmVzIHRoZSBwbGF0Zm9ybSBSZW1vdGVJbWFnZUJ1ZmZlciB0
eXBlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFj
a2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICBDcmVhdGUgdGhlIHBsYXRmb3JtIFJl
bW90ZUltYWdlQnVmZmVyLgorCisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IEltYWdlQnVmZmVyIHNoYXJl
YWJsZSBiYWNrZW5kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MjMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhlIHJlbW90ZSBJbWFnZUJ1ZmZlciBwcm94eSB3aWxsIGNyZWF0ZSBhIHNoYXJlYWJs
ZSBiYWNrZW5kIGluIHRoZQorICAgICAgICBHUFVQcm9jZXNzLiBUaGVuIGl0IHdpbGwgZ2l2ZSBh
Y2Nlc3MgdG8gdGhlIGJhY2tlbmQgdG8gdGhlIHJlbW90ZQorICAgICAgICBJbWFnZUJ1ZmZlciBp
biB0aGUgV2ViUHJvY2VzcyBieSBzZW5kaW5nIGFuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS4K
KworICAgICAgICAqIFNjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5OgorICAgICAgICAqIFNvdXJj
ZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaDogQWRkZWQuCisgICAgICAgIFRo
aXMgaXMgdmFyaWFudCBvZiBzaGFyZWFibGUgaGFuZGxlcyB0byB0aGUgSW1hZ2VCdWZmZXJCYWNr
ZW5kIGRhdGEuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAg
IFRoZSBmaXJzdCBjcmVhdGUgbWV0aG9kIHdpbGwgYmUgY2FsbGVkIHRvIGNyZWF0ZSB0aGUgcmVt
b3RlIEltYWdlQnVmZmVyCisgICAgICAgIHByb3h5IGluIHRoZSBHUFVQcm9jZXNzLiBUaGUgc2Vj
b25kIGNyZWF0ZSBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgdG8gY3JlYXRlIHRoZQorICAgICAgICBy
ZW1vdGUgSW1hZ2VCdWZmZXIgaW4gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjb25zdCk6CisgICAgICAg
IENyZWF0ZXMgYW4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIHdoaWNoIHdpbGwgYmUgc2VudCBm
cm9tIHRoZSBHUFVQcm9jZXNzCisgICAgICAgIHRvIHRoZSBXZWJQcm9jZXNzLgorCisgICAgICAg
IChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUlt
YWdlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kOjpjb3B5SW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNo
YXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURhdGEgY29uc3QpOgorICAgICAgICAoV2ViS2l0
OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YSBjb25zdCk6
CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0lt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oOiBBZGRlZC4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIERlZmluZXMgdGhlIHBsYXRmb3JtIHNoYXJlYWJs
ZSBJbWFnZUJ1ZmZlckJhY2tlbmQgdHlwZXMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNvbnN0KToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVy
U2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgQmVjYXVzZSBJbWFn
ZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFzIHRvIGJlIGRlZmluZWQgaW4gV2ViS2l0LCBzaGFyaW5n
CisgICAgICAgIHRoZSBJT1N1cmZhY2UgYmFja2VuZCBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgaW4g
V2ViS2l0LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllci5jcHA6CisKKzIwMjAtMDItMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3Vo
YWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIHJlbW90ZSBJbWFnZUJ1
ZmZlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3
MjIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3RlSW1hZ2VCdWZmZXIgYW5kIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgd2lsbCBiZSByZXNwb25z
aWJsZSBmb3IKKyAgICAgICAgaGFuZGxpbmcgdGhlIGNvbW11bmljYXRpb25zIG9mIHRoZSBJbWFn
ZUJ1ZmZlciBwYXJ0cyBiZXR3ZWVuIFdlYlByb2Nlc3MKKyAgICAgICAgYW5kIEdQVVByb2Nlc3Mu
CisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAq
IERlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0OgorICAgICAgICAqIERlcml2ZWRTb3Vy
Y2VzLm1ha2U6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24g
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdl
U2VuZGVyRGVzdGluYXRpb25JRCBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMu
aW46IEFkZGVkLgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFNvdXJjZXNDb2Nv
YS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVtb3RlSW1h
Z2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6flJlbW90ZUlt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6Om1lc3NhZ2VT
ZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIu
bWVzc2FnZXMuaW46IEFkZGVkLgorCisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgUmVu
ZGVyaW5nQmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjA3MTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgLS0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZCB3aWxsIGJlIGNyZWF0ZWQgYnkgV2ViQ2hy
b21lQ2xpZW50IGFuZCBvd25lZCBieQorICAgICAgICBDaHJvbWUuIEltYWdlQnVmZmVyOjpjcmVh
dGUgd2lsbCBoYXZlIGFjY2VzcyB0byBpdCB0aHJvdWdoIHRoZSBIb3N0V2luZG93CisgICAgICAg
IGFyZ3VtZW50LiBBbGwgdHlwZXMgb2YgSW1hZ2VCdWZmZXIgd2lsbCBiZSBjcmVhdGVkIGJ5Cisg
ICAgICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKCkgbWV0aG9k
LiBJbi1wcm9jZXNzIEltYWdlQnVmZmVyCisgICAgICAgIHR5cGVzIHdpbGwgYmUgY3JlYXRlZCBi
eSBSZW5kZXJpbmdCYWNrZW5kOjogY3JlYXRlSW1hZ2VCdWZmZXIoKS4KKworICAgICAgICAtLSBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgd2lsbCBiZSBjcmVhdGVkIGFuZCBvd25lZCBieQor
ICAgICAgICBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLgorCisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1vdXRwdXQu
eGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorCisgICAgICAgICog
R1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCk6Cisg
ICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OnJlbGVhc2VSZW5kZXJp
bmdCYWNrZW5kKToKKyAgICAgICAgQWRkIG1ldGhvZHMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNp
bmcgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorCisgICAgICAgIChXZWJLaXQ6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgIEFkZCBhIE1lc3NhZ2VS
ZWNlaXZlck1hcCB0byBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHNvIG1lc3NhZ2VzIGNhbiBi
ZQorICAgICAgICBkaXNwYXRjaGVkIHRvIGl0cyBNZXNzYWdlUmVjZWl2ZXJzLgorCisgICAgICAg
ICogR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAg
ICAgICBBZGQgdGhlIGF0dHJpYnV0ZSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnLgorICAgICAgICBB
ZGQgbWVzc2FnZXMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNpbmcgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZFByb3h5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgIEFkZCBtZXRob2RzIGZvciBj
cmVhdGluZyBhbmQgcmVsZWFzaW5nIHJlbW90ZSBJbWFnZUJ1ZmZlciBwcm94eS4KKworICAgICAg
ICAqIEdQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAqIEdQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMu
aW46IEFkZGVkLgorICAgICAgICBBZGQgbWVzc2FnZXMgZm9yIGNyZWF0aW5nIGFuZCByZWxlYXNp
bmcgcmVtb3RlIEltYWdlQnVmZmVyIHByb3h5LgorCisgICAgICAgICogR1BVUHJvY2Vzcy93ZWJy
dGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmg6CisgICAgICAgICogR1BVUHJvY2Vz
cy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5jcHA6CisgICAg
ICAgICogR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFu
YWdlci5oOgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHk6CisgICAgICAg
IElmIHRoZSBhdHRyaWJ1dGUgV2FudHNEaXNwYXRjaE1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIG1l
c3NhZ2VzLmluIGZpbGUsCisgICAgICAgIGEgY2FsbCB0byAnZGlzcGF0Y2hNZXNzYWdlKCknIHdp
bGwgYmUgYWRkZWQgdG8gZGlkUmVjZWl2ZU1lc3NhZ2UoKSBhbmQKKyAgICAgICAgYSBjYWxsIHRv
ICdkaXNwYXRjaFN5bmNNZXNzYWdlKCknIHdpbGwgYmUgYWRkZWQgdG8gZGlzcGF0Y2hTeW5jTWVz
c2FnZSgpCisgICAgICAgIGV2ZW4gaWYgbm8gbWVzc2FnZXMgYXJlIGRlZmluZWQgaW4gbWVzc2Fn
ZXMuaW4uCisKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAg
ICAgIEFkZCBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc3VwcG9ydCBmb3IgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBhbmQgUmVuZGVyaW5nTW9kZS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAg
ICAgICAqIFNvdXJjZXNDb2NvYS50eHQ6CisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVj
dGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRj
aE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlzcGF0
Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjpk
aWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9jZXNzQ29u
bmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nl
c3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgorICAgICAgICBBZGQgYSBNZXNzYWdl
UmVjZWl2ZXJNYXAgdG8gR1BVUHJvY2Vzc0Nvbm5lY3Rpb24gc28gbWVzc2FnZXMgY2FuIGJlCisg
ICAgICAgIGRpc3BhdGNoZWQgdG8gaXRzIE1lc3NhZ2VSZWNlaXZlcnMuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5tZXNzYWdlcy5pbjoKKyAgICAgICAg
QWRkIHRoZSBhdHRyaWJ1dGUgJ1dhbnRzRGlzcGF0Y2hNZXNzYWdlJy4KKworICAgICAgICAqIFdl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg6IEFk
ZGVkLgorICAgICAgICBBZGQgYW4gT2JqZWN0SWRlbnRpZmllciBmb3IgcmVtb3RlIEltYWdlQnVm
ZmVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0
KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQgY29uc3QpOgorCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgQ3JlYXRlcyBhbGwgdHlwZXMg
b2YgSW1hZ2VCdWZmZXIuIEZvciBub3cgaXQgb25seSBjcmVhdGVzIHRoZSBpbiBwcm9jZXNzCisg
ICAgICAgIFJlbmRlcmluZ0JhY2tlbmQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci5oOiBBZGRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVS
ZW5kZXJpbmdCYWNrZW5kIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICBDcmVhdGUgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCB3aGljaCB3aWxsIGJlIG93bmVkIGJ5IHRoZSBDaHJvbWUuCisKKzIwMjAtMDItMDMgIFNh
aWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBBbGxv
dyBkaWZmZXJlbnQgYmFjay1lbmRzIGZvciBJbWFnZUJ1ZmZlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA3MDQ4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJh
bWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNo
b3QgY29uc3QpOgorCiAyMDIwLTAyLTA0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNTEzMjApOiBDYW4ndCBkb3VibGUgdGFw
IHRvIHNlbGVjdCB3b3JkIGluIE5vdGVzIG9uIGlDbG91ZC5jb20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmlu
ZGV4IGM2NjRhOWE4Y2M2MGYzMjFmZjZlNTI3ZmU3YjY4ZmZhN2Y2ODkyOWEuLjQwYmY0MzM1MmNi
MzFhYmMyNDIzZTljYzYxODBlMzZmODg1NWMwM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTA0
Miw4ICsxMDQyLDEwIEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yU3BhY2UuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbXBsZXhUZXh0Q29udHJvbGxlci5o
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EYXNoQXJyYXkuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0RlY29kaW5n
T3B0aW9ucy5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5o
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXIuaApAQCAtMTA5Myw3ICsxMDk1
LDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyRGF0YS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZm
ZXJCYWNrZW5kLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmgKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZU9ic2VydmVyLmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZU9yaWVudGF0aW9uLmgKQEAgLTExMjYsMTIgKzExMjgsMTUgQEAgc2V0KFdlYkNvcmVfUFJJVkFU
RV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdGhVdGlsaXRpZXMu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L1BsYXRmb3JtRGlzcGxheS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1
ZmZlci5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQu
aAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtTGF5ZXIuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1BsYXRmb3JtTWVkaWFSZXNvdXJjZUxvYWRlci5oCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1UZXh0VHJhY2suaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtVGlt
ZVJhbmdlcy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmgKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVy
aW5nQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1N0
cmluZ1RydW5jYXRvci5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCBm
NzEyOTI3Y2M5MThmM2FiMGZlNzA4YThhYzAxN2JkMGYzY2Y5NDBkLi41ZDE3NzQzZWQzODQzMDEx
ZmE4NmNlNTExYmU5MjkzMzA5OTI5MmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTgzLDggKzgzLDcgQEAgaWYgKCR7VVNFX0RJUkVDVDJEfSkKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHAKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzTGF5ZXJEaXJlY3QyRC5jcHAKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAotICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKyAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmNwcAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGlyZWN0MkQuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vTmF0aXZlSW1hZ2VEaXJlY3QyRC5jcHAKQEAgLTEzMiw4ICsxMzEsOSBAQCBl
bHNlICgpCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dEdMQ0cu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JT1N1cmZhY2VQb29sLmNwcAotICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5jcHAKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyVXRpbGl0aWVzQ0cuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZVNvdXJjZUNHV2luLmNwcApAQCAtMTc2LDcgKzE3Niw5IEBAIGVsc2UgKCkKIAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5oCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckRhdGFDRy5oCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmgKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmgKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1VUSVJl
Z2lzdHJ5LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlIGIv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKaW5kZXggOWFiNDY4NzM5ZWYxMWZmNjA5
Yjk2MjkyODhiYjAxYjE2ZGE3MDJhYS4uZjRiOWI3Zjg4NjZiMTI0MWE4NTU3OWIyZTYxZjdiYWU1
NDNkODc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKKysr
IGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKQEAgLTg0LDggKzg0LDcgQEAgbGlz
dChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBo
aWNzQ29udGV4dEltcGxEaXJlY3QyRC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3Jh
cGhpY3NDb250ZXh0V2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JY29uV2luLmNw
cAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlRGVjb2RlckRpcmVjdDJELmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZURpcmVjdDJELmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9JbWFnZVdpbi5jcHAKQEAgLTIwMSw3ICsyMDAsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRnVs
bFNjcmVlbkNvbnRyb2xsZXIuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVu
Q29udHJvbGxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29u
dGV4dEltcGxEaXJlY3QyRC5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVy
RGF0YURpcmVjdDJELmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VEZWNvZGVyRGly
ZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldp
bmRvdy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCmluZGV4IDE5OWI2ZGQwMTBhMmRjYjEwYmE3
NzZhYjdmNzkxNmYzMzc4ZjgxMGQuLjliOTY5NjQ2OTA1N2QwMzQ3OWM1MjhkNzY4MjI4Y2VhZjY0
YWZiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCkBAIC0yOTIsOCArMjkyLDEwIEBAIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dEdMQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSU9TdXJmYWNlUG9vbC5jcHAKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNHLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlclV0aWxpdGllc0NHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlRGVj
b2RlckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlU291cmNlQ0dNYWMubW0K
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbnRQb2ludENHLmNwcApAQCAtNTU2LDcgKzU1OCw5
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuaAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuaAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVyRGF0YUNHLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tl
bmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5oCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvVVRJUmVnaXN0cnkuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCA0
ZjMwNzE1OWI3ZWQ4MDZlYjgxOTUyYmJhNDVmNWMwN2E4ZGM5M2ViLi44YWY3MDFjNzc3ZmUxNTJl
MjMxNmNhNTAwMDQzYWQ5NzFhY2JmMWFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbi5jbWFrZQpAQCAt
MTE5LDcgKzExOSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVB
REVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9ESUJQaXhlbERhdGEuaAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3dpbi9GdWxsU2NyZWVuQ29udHJvbGxlci5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0Z1bGxTY3JlZW5Db250cm9sbGVyQ2xpZW50LmgKLSAgICBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Mb2NhbFdpbmRvd3NDb250ZXh0LmgKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVk
aWFQbGF5ZXJQcml2YXRlRnVsbHNjcmVlbldpbmRvdy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1NoYXJlZEdESU9iamVjdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IGU2OTAxYzNjZGIxMjcyYjIz
NDFlMTAwYzcyZWM3ZWZkYmVlMzM0MzAuLjUzNDI5NjdlNmVmYTMzMjJkMjBmZmI0N2FkMzc4YWI4
MzZlZDNkOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xODYzLDYgKzE4NjMsNyBAQCBwbGF0Zm9ybS9n
cmFwaGljcy9IRVZDVXRpbGl0aWVzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSWNvbi5jcHAKIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIu
Y3BwCitwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZURlY29kZXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lLmNw
cAogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCkBAIC0xODgyLDYgKzE4ODMsNyBA
QCBwbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1UaW1lUmFuZ2VzLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUmVnaW9uLmNwcAogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVtb3RlVmlkZW9TYW1wbGUuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJp
bmdCYWNrZW5kLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3QuY3BwCiBwbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggNGRlNzVkZjhkZjBiOGY5MGU1YjI1
ODE1N2VhZGE0YTY5ZDNiNTkxNi4uNzY2MWUyYjlhZDJiMzkxOGE1M2IxNjdlNDdiYzE0NTNhZTZm
YzkxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0yOTEsOCArMjkxLDkgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhZGllbnRDRy5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dEdMQ0cuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0lPU3VyZmFjZVBvb2wuY3BwCi1wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAotcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VC
dWZmZXJEYXRhQ0cuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNw
cAorcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcAog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NnL0ltYWdlRGVjb2RlckNHLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VTb3VyY2VDR01hYy5tbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGZlYmYwNWViMDU5NzI4ZjZiZWE5ODE5MzQ2MjYwMDBmOGNi
NTBhZTQuLjg5ZTMzOWZjNGU0OTQ0YmY1MjZjMTkwMzE4MDhhOGUyZjJiY2YzZDUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTY0
NSw4ICs2NDUsNiBAQAogCQkyMEQ2MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMEQ2MjkyNTEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
LmggKi87IH07CiAJCTIyNUExNkI1MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJFdmVudFJlZ2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI1QTE2QjMw
RDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMjI4QzI4NDUxMEQ4MjUwMDAwOUQwRDBFIC8q
IFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTIyQkQ5RjdG
MTM1MzYyNUMwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGEuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5RjdEMTM1MzYyNUMwMDlCRDEwMiAvKiBJ
bWFnZUJ1ZmZlckRhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkyMkJEOUY4MTEzNTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyQkQ5Rjgw
MTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFDRy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTI0RDkxMjkyMTNDQTk1MUUwMEQyMTkx
NSAvKiBKU1NWR0FsdEdseXBoRGVmRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0
R2x5cGhEZWZFbGVtZW50LmggKi87IH07CiAJCTI0RDkxMjk2MTNDQTk1NjEwMEQyMTkxNSAvKiBK
U1NWR0FsdEdseXBoSXRlbUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDI0RDkxMjk0MTNDQTk1NjEwMEQyMTkxNSAvKiBKU1NWR0FsdEdseXBo
SXRlbUVsZW1lbnQuaCAqLzsgfTsKIAkJMjREOTEyOUExM0NBOTcxNDAwRDIxOTE1IC8qIEpTU1ZH
R2x5cGhSZWZFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyNEQ5MTI5OTEzQ0E5NzE0MDBEMjE5MTUgLyogSlNTVkdHbHlwaFJlZkVsZW1lbnQu
aCAqLzsgfTsKQEAgLTgzMywxNyArODMxLDE3IEBACiAJCTJEQUNCOUU5MjM3NTVEMDAwMEI0QzE4
NSAvKiBHcmFwaGljc0NvbnRleHRJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjAwMTIzRjFGQUQ4N0Q2MDA1MzFENzYgLyogR3JhcGhpY3NDb250
ZXh0SW1wbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTJEQUYzNDNEMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREFGMzQzQjFFQTdF
MEYxMDAzODJDRDMgLyogQ29uc3RhbnRQcm9wZXJ0eU1hcC5oICovOyB9OwogCQkyREQ1QTcyNzFF
QkVFNDdEMDA5QkE1OTcgLyogQ29tcG9zaXRpb25VbmRlcmxpbmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERDVBNzI2MUVCRUU0N0QwMDlCQTU5NyAv
KiBDb21wb3NpdGlvblVuZGVybGluZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCTJEREUxQ0UzMUY1NzRBRTUwMEQxQTM2NSAvKiBKU1ZSRmllbGRP
ZlZpZXcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
REUxQ0UwMUY1NzRBRDEwMEQxQTM2NSAvKiBKU1ZSRmllbGRPZlZpZXcuaCAqLzsgfTsKLQkJMkRE
RTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNERTFGNTc0QUFCMDBEMUEzNjUgLyog
SlNWUkRpc3BsYXkuaCAqLzsgfTsKLQkJMkRERTFDRjgxRjU3NEMzOTAwRDFBMzY1IC8qIEpTVlJE
aXNwbGF5Q2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRERFMUNFNjFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkRpc3BsYXlDYXBhYmls
aXRpZXMuaCAqLzsgfTsKLQkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJE
REUxQ0U4MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50LmggKi87IH07Ci0JCTJE
REUxQ0ZDMUY1NzRDRUUwMEQxQTM2NSAvKiBKU1ZSRGlzcGxheUV2ZW50UmVhc29uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFQTFGNTc0QkZG
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oICovOyB9OwotCQkyRERFMUNGRTFG
NTc0Q0YzMDBEMUEzNjUgLyogSlNWUkV5ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkRERTFDRUMxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJFeWUuaCAq
LzsgfTsKLQkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIEpTVlJFeWVQYXJhbWV0ZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRERFMUNFRTFG
NTc0QkZGMDBEMUEzNjUgLyogSlNWUkV5ZVBhcmFtZXRlcnMuaCAqLzsgfTsKLQkJMkRERTFEMDIx
RjU3NEQwMDAwRDFBMzY1IC8qIEpTVlJGcmFtZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0YwMUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZS
RnJhbWVEYXRhLmggKi87IH07Ci0JCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiBKU1ZSTGF5
ZXJJbml0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RERFMUNGMjFGNTc0QkZGMDBEMUEzNjUgLyogSlNWUkxheWVySW5pdC5oICovOyB9OwotCQkyRERF
MUQwNjFGNTc0RDBBMDBEMUEzNjUgLyogSlNWUlBvc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEREUxQ0Y0MUY1NzRCRkYwMEQxQTM2NSAvKiBKU1ZS
UG9zZS5oICovOyB9OwotCQkyRERFMUQwODFGNTc0RDBFMDBEMUEzNjUgLyogSlNWUlN0YWdlUGFy
YW1ldGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MkRERTFDRjYxRjU3NEJGRjAwRDFBMzY1IC8qIEpTVlJTdGFnZVBhcmFtZXRlcnMuaCAqLzsgfTsK
KwkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIChudWxs
KSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRjgxRjU3
NEMzOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgfTsKKwkJMkRERTFDRkExRjU3NEMzRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFDRkMxRjU3NENFRTAwRDFBMzY1IC8q
IChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFD
RkUxRjU3NENGMzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgfTsKKwkJMkRERTFEMDAxRjU3NENGNzAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDIxRjU3NEQwMDAwRDFB
MzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJ
MkRERTFEMDQxRjU3NEQwNTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1IC8qIChudWxsKSBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgfTsKKwkJMkRERTFEMDgxRjU3NEQw
RTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
fTsKIAkJMkRFNzAwMjMxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1h
Yy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkRFNzAw
MjIxOTJGRTgyQTAwQjA5NzVDIC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hYy5oICovOyB9Owog
CQkyREY1MTJDRTFEODczRTQ3MDAxRDY3ODAgLyogUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyREY1MTJD
QzFEODczRTQ3MDAxRDY3ODAgLyogUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmggKi87IH07
CiAJCTJERkE0ODhGMURCNTQxRDAwMDM2MkI5OSAvKiBCdWZmZXJTb3VyY2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJERkE0ODhFMURCNTQxQzIwMDM2
MkI5OSAvKiBCdWZmZXJTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjE0NSwxMSArMjE0MywxOSBAQAogCQk3MjE0NDMzNDIyM0VDOTE2
MDBGMTJGRjcgLyogU1ZHUHJvcGVydHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3Bl
cnR5T3duZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3MjI4M0YwRTIzMEIyNjhDMDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMw
QjA0QjcwMDY4NDdDNyAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMkE4MTVEMjM4RkRBRjAwMEMwMDU4
MyAvKiBBbmltYXRpb25GcmFtZVJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDcyMkE4MTVDMjM4RkQ1MDUwMEMwMDU4MyAvKiBBbmltYXRpb25GcmFt
ZVJhdGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjM5NDA2NTIzRTg4Mjg2MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzOTQwNjQyM0U4N0Q1NDAw
RTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjRFRDMzMjFBM0E4QjIzMDBGNUYxM0MgLyogSlNFWFRC
bGVuZE1pbk1heC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRNaW5NYXguaCAqLzsgfTsK
IAkJNzI0RUU1NTAxREM4MEQ3RjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRFMURDN0YyNUIwMEE5
MUZGQiAvKiBBY3Rpdml0eVN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3Rh
dGVDaGFuZ2VPYnNlcnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzI0RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VP
YnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcyOTlCQzY3MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NDIz
RDY4NkE2MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0UwMEND
Njg4MyAvKiBSZW5kZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOUM0
NTFCMjNFQTRBMjkwMEIyQjFDRSAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E3MjNFMTczMjgwMDhE
NzQxQyAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlDNDUxRTIzRUE1MjNEMDBCMkIxQ0UgLyogRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzIzOTQwNUUyM0U1RjUzRjAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MjlDNDUxRjIzRUE1Mjg5MDBCMkIxQ0UgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzOTQwNjAy
M0U1RjU2NzAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlERDQ0MjIzRUEyNkEw
MDAwMjZCN0IgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNTA2RDQ2MjNFQTIyMkIwMDFFNkUwRCAv
KiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOURENDQ0MjNFQTI3MEEwMDAyNkI3QiAvKiBJbWFn
ZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzI5
REQ0NDUyM0VBMjc5QjAwMDI2QjdCIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0Ux
RTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQkFDM0FFMjNFMUYwQjAw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZF
NjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1
NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAv
KiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKIAkJNzU3OTNFQzkwRDBDRTcyRDAwN0ZDMEFDIC8qIEpT
TWVzc2FnZUV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3NTc5M0VDNzBEMENFNzJEMDA3RkMwQUMgLyogSlNNZXNzYWdlRXZlbnQuaCAqLzsgfTsK
QEAgLTI1ODAsNyArMjU4Niw2IEBACiAJCThBRjRFNTVDMTFEQzVBNjMwMDBFRDNERSAvKiBQZXJm
b3JtYW5jZVRpbWluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOEFGNEU1NTkxMURDNUE2MzAwMEVEM0RFIC8qIFBlcmZvcm1hbmNlVGltaW5nLmggKi87
IH07CiAJCThCRDM3QTY4MjAxQkIzOUMwMDExNzM0QSAvKiBSZWFkYWJsZVN0cmVhbUNodW5rLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4QkQzN0E2NzIw
MUJCMzlDMDAxMTczNEEgLyogUmVhZGFibGVTdHJlYW1DaHVuay5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCThFNEM5NkREMUFENDQ4MzUwMDM2NUE1
MCAvKiBKU0ZldGNoUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDhFNEM5NkQ5MUFENDQ4MzUwMDM2NUE1MCAvKiBKU0ZldGNoUmVzcG9uc2Uu
aCAqLzsgfTsKLQkJOEU2MjBFODEyMEVFNjAyNDAwN0JDNUVGIC8qIFZSUGxhdGZvcm1EaXNwbGF5
Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4
RTYyMEU4MDIwRUU1RkZDMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4RUM2Qzk2MzIw
MUEyNTE2MDBGQkZBNTMgLyogR2FwTGVuZ3RoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4RUM2Qzk2MTIwMUEyNTAxMDBGQkZBNTMgLyogR2FwTGVuZ3Ro
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJOEY2
NzU2MUIxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDhGNjc1NjE5MTI4OEIxN0IwMDQ3QUNBMyAvKiBF
dmVudFF1ZXVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJOTAwMTc3NDExMkUwMzQ3ODAwNjQ4NDYyIC8qIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwMDE3NzNF
MTJFMDM0NzgwMDY0ODQ2MiAvKiBPRVNTdGFuZGFyZERlcml2YXRpdmVzLmggKi87IH07CkBAIC0z
MjAyLDcgKzMyMDcsNyBAQAogCQlBNzVFOEI4RDBFMURFMkQ2MDA3RjI0ODEgLyogRkVDb21wb25l
bnRUcmFuc2Zlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTc1RThCODUwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9uZW50VHJhbnNmZXIuaCAqLzsg
fTsKIAkJQTc1RThCOEYwRTFERTJENjAwN0YyNDgxIC8qIEZFQ29tcG9zaXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4NzBFMURFMkQ2MDA3
RjI0ODEgLyogRkVDb21wb3NpdGUuaCAqLzsgfTsKIAkJQTc2RTVGN0YxMzVFMERDRjAwQTY5ODM3
IC8qIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3NkU1RjdFMTM1RTBEQ0YwMEE2OTgzNyAvKiBSZW5kZXJlZERv
Y3VtZW50TWFya2VyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJQTc3OTc5MUEwRDZCOUQwQzAwMzg1MUI5IC8qIEltYWdlRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3OTc5MTQwRDZCOUQwQzAw
Mzg1MUI5IC8qIEltYWdlRGF0YS5oICovOyB9OworCQlBNzc5NzkxQTBENkI5RDBDMDAzODUxQjkg
LyogSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBNzc5NzkxNDBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTc3OTc5MjkwRDZCOUU2NDAw
Mzg1MUI5IC8qIEpTSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBNzc5NzkyNTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCAq
LzsgfTsKIAkJQTc3QjQxQTAxMkU2NzVBOTAwNTQzNDNEIC8qIFRleHRFdmVudElucHV0VHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3QjQxOUYx
MkU2NzVBOTAwNTQzNDNEIC8qIFRleHRFdmVudElucHV0VHlwZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3N0QwMDEyMTMzQjBBRUIwMEQ2NjU4
QyAvKiBUZXh0Q2hlY2tpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE3N0QwMDExMTMzQjBBRUIwMEQ2NjU4QyAvKiBUZXh0Q2hlY2tpbmcuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjU1OCw5ICs2
NTYzLDYgQEAKIAkJMjI1QTE2QjMwRDVDMTFFOTAwMDkwMjk1IC8qIFdlYkV2ZW50UmVnaW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYkV2ZW50UmVnaW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyNUExNkI0MEQ1QzExRTkwMDA5MDI5NSAvKiBXZWJF
dmVudFJlZ2lvbi5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdl
YkV2ZW50UmVnaW9uLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEw
RDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY3RDEzNTM2MjVDMDA5QkQxMDIg
LyogSW1hZ2VCdWZmZXJEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlQnVmZmVyRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkyMkJEOUY4MDEz
NTM2NEZFMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJEYXRhQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hDaGFuZ2VFdmVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdlRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjREOTEyOEYxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZH
QWx0R2x5cGhEZWZFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMjREOTEyOTAxM0NBOTUxRTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhEZWZFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHQWx0R2x5cGhEZWZFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05NTc5LDYgKzk1ODEsMTAgQEAK
IAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDYyMjQwQ0FEMjAwRjEyRkY3IC8qIFNWR1ZhbHVlUHJv
cGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MjJBODE1QzIzOEZENTA1MDBDMDA1ODMgLyogQW5pbWF0aW9uRnJh
bWVSYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkZyYW1lUmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjM5NDA1RTIzRTVGNTNGMDBFM0I1NDUgLyogRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0MDYw
MjNFNUY1NjcwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIzOTQwNjIyM0U4N0Q1MzAwRTNCNTQ1IC8qIFJl
bmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyMzk0
MDY0MjNFODdENTQwMEUzQjU0NSAvKiBSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzI0RUQzMjkxQTNBN0U1NDAwRjVGMTNDIC8qIEVYVEJsZW5kTWluTWF4LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVYVEJsZW5kTWluTWF4LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI0RUQzMkExQTNBN0U1NDAwRjVGMTND
IC8qIEVYVEJsZW5kTWluTWF4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVY
VEJsZW5kTWluTWF4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVEMzJCMUEz
QTdFNTQwMEY1RjEzQyAvKiBFWFRCbGVuZE1pbk1heC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gRVhUQmxlbmRNaW5NYXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTU4
Niw2ICs5NTkyLDcgQEAKIAkJNzI0RUQzMzAxQTNBOEIyMzAwRjVGMTNDIC8qIEpTRVhUQmxlbmRN
aW5NYXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFWFRCbGVuZE1pbk1h
eC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjRFRTU0RTFEQzdGMjVCMDBBOTFG
RkIgLyogQWN0aXZpdHlTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
Y3Rpdml0eVN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyNEVFNTRGMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZpdHlTdGF0ZUNoYW5nZU9ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDQ2MjNFQTIyMkIwMDFFNkUwRCAvKiBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MjY2RjAxMzIyNDFCQ0UyMDA4MzM5NzUgLyogU1ZHUHJvcGVydHlBbmltYXRvckZh
Y3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHUHJvcGVydHlBbmltYXRvckZhY3RvcnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI2NkYwMTQyMjQxQkZCMjAwODMzOTc1IC8qIFNW
R1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3JJbXBsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1p
dGl2ZVByb3BlcnR5QW5pbWF0b3JJbXBsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyNjZGMDE1MjI0MUMwOTgwMDgzMzk3NSAvKiBTVkdQcmltaXRpdmVQcm9wZXJ0eUFuaW1hdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1ByaW1pdGl2ZVByb3BlcnR5QW5pbWF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk2MDEsNiArOTYwOCwxNiBAQAogCQk3MjdBRkVEMzFB
MkVBNkEwMDAwNDQyRTggLyogRVhUc1JHQi5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhU
c1JHQi5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY0MjNENjg2QTYw
MENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFscGhh
UHJlbXVsdGlwbGljYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzI5OUJD
NjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVu
ZGVyaW5nTW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MkJBQzNBNDIzRTE3
MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNr
ZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyQkFDM0E2MjNFMTczMjgwMDhE
NzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8qIENvbnRleHR1YWxJbWFnZUJ1ZmZlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8q
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQTkyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJh
Y2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJDR0Jp
dG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUIyM0Ux
RTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJCQUMzQUMyM0UxRTU0NTAwOEQ3NDFDIC8qIElt
YWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJ
bWFnZVBhaW50aW5nT3B0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkU0MTc2MTFBMkU4RDJGMDA0QzU2
MkEgLyogSlNFWFRzUkdCLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTRVhUc1JHQi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyRTQxNzYyMUEy
RThEMkYwMDRDNTYyQSAvKiBKU0VYVHNSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNFWFRzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDU0Myw4
ICsxMDU2MCw2IEBACiAJCThFMzNDRDkzMjAxQTI5QzEwMEUzOTA5MyAvKiBHYXBMZW5ndGguY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2FwTGVuZ3RoLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOEU0Qzk2RDgxQUQ0NDgzNTAwMzY1QTUwIC8qIEpT
RmV0Y2hSZXNwb25zZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBK
U0ZldGNoUmVzcG9uc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4RTRDOTZE
OTFBRDQ0ODM1MDAzNjVBNTAgLyogSlNGZXRjaFJlc3BvbnNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRmV0Y2hSZXNwb25zZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk4RTYyMEU3RTIwRUU1RkUyMDA3QkM1RUYgLyogVlJQbGF0Zm9ybURpc3BsYXkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk4RTYyMEU4MDIwRUU1RkZDMDA3QkM1
RUYgLyogVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVlJQbGF0Zm9ybURpc3BsYXlDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOEVDNkM5NjEyMDFBMjUwMTAwRkJGQTUzIC8qIEdhcExlbmd0aC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHYXBMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXZlbnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk4RjkzNEQ4MzExODlGMUVFMDA1MDhENUQgLyogSlNFeGVjU3RhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNFeGVjU3RhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyNjc0LDcgKzEyNjg5LDYgQEAKIAkJQjJBMDE1OTQw
QUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzVHlwZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMkEwMTU5NTBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBlcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhpY3NUeXBlcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VC
dWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAv
KiBJbWFnZUJ1ZmZlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBJbWFnZUJ1ZmZlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYy
QTEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIyQTFGMkEyMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdGb250RWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHRm9udEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjJBMUYyQTMwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gU1ZHRm9udEVsZW1l
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY2ODYsNiArMTY3MDAsNyBA
QAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMEZFNUZCQ0ExQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0LmNwcCAqLywKIAkJCQkwRkU1RkJDQjFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxp
c3QuaCAqLywKKwkJCQk3MjM5NDA2MDIzRTVGNTY3MDBFM0I1NDUgLyogRGlzcGxheUxpc3REcmF3
aW5nQ29udGV4dC5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxh
eUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVGQkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI0ODM3LDkgKzI0ODUyLDEyIEBACiAJCQkJOTM0OTA3
RTMxMjVCQkJDODAwN0YyM0EwIC8qIEdyYXBoaWNzQ29udGV4dENHLmggKi8sCiAJCQkJNkUyMUM2
QzExMTI2MzM5OTAwQTdCRTAyIC8qIEdyYXBoaWNzQ29udGV4dEdMQ0cuY3BwICovLAogCQkJCUE4
MEQ2NzA3MEU5RTlERUIwMEU0MjBGMCAvKiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVD
Ry5oICovLAotCQkJCUIyQTEwQjkzMEIzODE4RDcwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlckNHLmNw
cCAqLywKLQkJCQkyMjkyQjI3QjEzNTY2Njk0MDBDRjExRUYgLyogSW1hZ2VCdWZmZXJEYXRhQ0cu
Y3BwICovLAotCQkJCTIyQkQ5RjgwMTM1MzY0RkUwMDlCRDEwMiAvKiBJbWFnZUJ1ZmZlckRhdGFD
Ry5oICovLAorCQkJCTcyQkFDM0FDMjNFMUU1NDUwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5jcHAgKi8sCisJCQkJNzJCQUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVy
Q0dCYWNrZW5kLmggKi8sCisJCQkJNzJCQUMzQTgyM0UxRTU0MzAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJBQzNBQTIzRTFFNTQ0MDA4RDc0MUMg
LyogSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQuaCAqLywKKwkJCQk3MkJBQzNBOTIzRTFFNTQz
MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkJB
QzNBQjIzRTFFNTQ0MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmggKi8s
CiAJCQkJQ0Q1ODk0OTMyMTg3NDA2NDAwNEY0MjRBIC8qIEltYWdlQnVmZmVyVXRpbGl0aWVzQ0cu
Y3BwICovLAogCQkJCUNEM0UyMURCMjE4MzNGNTEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxp
dGllc0NHLmggKi8sCiAJCQkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmNwcCAqLywKQEAgLTI0OTMxLDEyICsyNDk0OSwxNCBAQAogCQkJCTBGRTZDNzZDMUZCRkI3
QTYwMDI1QzA1MyAvKiBDb2xvclV0aWxpdGllcy5oICovLAogCQkJCUMyRjRFNzg4MUU0NUFFREYw
MDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuY3BwICovLAogCQkJCUMyRjRFNzg5MUU0
NUFFREYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCAqLywKKwkJCQk3MkJBQzNB
NzIzRTE3MzI4MDA4RDc0MUMgLyogQ29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMkQy
RkMwNTQxNDYwQ0Q2RjAwMjYzNjMzIC8qIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlLmNwcCAqLywK
IAkJCQkyRDJGQzA1NTE0NjBDRDZGMDAyNjM2MzMgLyogQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2Uu
aCAqLywKIAkJCQk0QjdBRTQ5NTIxNzdCNjNFMDBDNTk5NTkgLyogQ3VzdG9tUGFpbnRJbWFnZS5j
cHAgKi8sCiAJCQkJNEI3QUU0OTIyMTc3QjU2RjAwQzU5OTU5IC8qIEN1c3RvbVBhaW50SW1hZ2Uu
aCAqLywKIAkJCQlBOENCNDEwMjBFODVCOEE1MDAzMkM0RjAgLyogRGFzaEFycmF5LmggKi8sCiAJ
CQkJNTU1MTMwMDAxRTdDQ0NDQTAwQTY5RTM4IC8qIERlY29kaW5nT3B0aW9ucy5oICovLAorCQkJ
CTcyMzk0MDVFMjNFNUY1M0YwMEUzQjU0NSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8s
CiAJCQkJNDlGQzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5j
cHAgKi8sCiAJCQkJNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9u
aXRvci5oICovLAogCQkJCTJEMjlFQ0MxMTkyRUNDODMwMDk4NEI3OCAvKiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnQuY3BwICovLApAQCAtMjUwMjgsNyArMjUwNDgsOCBAQAogCQkJCTU1QTMz
NkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJCTQzRDI1
OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEw
QjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCi0JCQkJMjJCRDlGN0QxMzUzNjI1
QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTcyQkFDM0E0MjNFMTczMjcw
MDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuY3BwICovLAorCQkJCTcyQkFDM0E1MjNFMTcz
MjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQlDRDE5RkVBNzFGNTcz
OTcyMDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmNwcCAqLywKIAkJCQlDRDE5RkVBNjFGNTczOTcy
MDAwQzQyRkIgLyogSW1hZ2VEZWNvZGVyLmggKi8sCiAJCQkJNTU3NkE1NjIxRDg4QTcwODAwQ0ND
MDRDIC8qIEltYWdlRnJhbWUuY3BwICovLApAQCAtMjUwODUsNiArMjUxMDYsOCBAQAogCQkJCTJE
NTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8sCiAJCQkJQThGQTZF
NUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4RkE2RTVCMEU0Q0ZE
RUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNzJCQUMzQTYyM0UxNzMyODAwOEQ3NDFD
IC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjUwNkQ0NjIzRUEyMjJCMDAxRTZF
MEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNG
ODhGMDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMw
MDM4NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdF
MjE2RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI1MDk0LDYg
KzI1MTE3LDggQEAKIAkJCQlCQ0FCNDE4MDEzRTM1NkU4MDBEOEFBRjMgLyogUmVnaW9uLmggKi8s
CiAJCQkJMDczQTE1NTEyMTc3QTM5ODAwRUEwOEYyIC8qIFJlbW90ZVZpZGVvU2FtcGxlLmNwcCAq
LywKIAkJCQkwNzNBMTU1MzIxNzdBMzlBMDBFQTA4RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuaCAq
LywKKwkJCQk3MjM5NDA2MjIzRTg3RDUzMDBFM0I1NDUgLyogUmVuZGVyaW5nQmFja2VuZC5jcHAg
Ki8sCisJCQkJNzIzOTQwNjQyM0U4N0Q1NDAwRTNCNTQ1IC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAq
LywKIAkJCQk3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovLAog
CQkJCUE3M0Y5NUZDMTJDOTdCRkUwMDMxQUFGOSAvKiBSb3VuZGVkUmVjdC5jcHAgKi8sCiAJCQkJ
QTczRjk1RkQxMkM5N0JGRTAwMzFBQUY5IC8qIFJvdW5kZWRSZWN0LmggKi8sCkBAIC0yNTgyMCw3
ICsyNTg0NSw2IEBACiAJCQkJNjU2Qjg0RDcwQUVBMUNFOTAwQTA5NUI0IC8qIG5ldHdvcmsgKi8s
CiAJCQkJMUEyRTZFNTYwQ0M1NTFFMDAwNEEyMDYyIC8qIHNxbCAqLywKIAkJCQlCMkMzRDlFQzBE
MDA2QzFEMDBFRjZGMjYgLyogdGV4dCAqLywKLQkJCQlFMTg4MjM1RjIwMzFGNTBGMDBCNDJERjMg
LyogdnIgKi8sCiAJCQkJREZEQjkxMkNGOEU4OEE2REExQUQyNjRGIC8qIEFib3J0YWJsZVRhc2tR
dWV1ZS5oICovLAogCQkJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZh
bHVlLmNwcCAqLywKIAkJCQk0OUFFMkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25W
YWx1ZS5oICovLApAQCAtMjg4OTksNiArMjg5MjMsMTcgQEAKIAkJCWZpbGVzID0gKAogCQkJCTcy
MTQ0MzMyMjIzRUM4NUYwMEYxMkZGNyAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3MjE0
NDMzMTIyM0VDODU0MDBGMTJGRjcgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFD
RTQxRjU3NEFFOTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0Y4
MUY1NzRDMzkwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUNGQTFG
NTc0QzNFMDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRkMxRjU3
NENFRTAwRDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxQ0ZFMUY1NzRD
RjMwMEQxQTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwMDFGNTc0Q0Y3
MDBEMUEzNjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFDRTMxRjU3NEFFNTAw
RDFBMzY1IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDAyMUY1NzREMDAwMEQx
QTM2NSAvKiAobnVsbCkgaW4gSGVhZGVycyAqLywKKwkJCQkyRERFMUQwNDFGNTc0RDA1MDBEMUEz
NjUgLyogKG51bGwpIGluIEhlYWRlcnMgKi8sCisJCQkJMkRERTFEMDYxRjU3NEQwQTAwRDFBMzY1
IC8qIChudWxsKSBpbiBIZWFkZXJzICovLAorCQkJCTJEREUxRDA4MUY1NzREMEUwMEQxQTM2NSAv
KiAobnVsbCkgaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCODFGODBBNDgyMDAxNkE0Q0UgLyog
QWJvcnRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3Q0QwRTJCRjFGODBBNTZFMDAx
NkE0Q0UgLyogQWJvcnRTaWduYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ2Qjk1MTk1MjA3RDYz
MzQwMEE3RDJERCAvKiBBYnN0cmFjdERPTVdpbmRvdy5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTMz
Nyw2ICsyOTM3Miw3IEBACiAJCQkJMDY1QUQ0RjcwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRN
ZW51Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDYwMjdDQUQwQjFDQkZDMDAwODg0
QjJEIC8qIENvbnRleHRNZW51SXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0FERTcyMjYxMENC
QkI5QjAwNkIzQjNBIC8qIENvbnRleHRNZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTcyOUM0NTFCMjNFQTRBMjkwMEIyQjFDRSAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc1OUNCODM3MTkyREE5MTkwMDEyQkM2NCAvKiBDb250cm9sU3RhdGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDMxNjAyOTEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9s
dmVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8q
IENvb2tpZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTY0Myw2ICsyOTY3OSw4IEBACiAJCQkJMTEy
RkIzNTIyMzlDMjNDNDAwODcwNTRBIC8qIERpc3BsYXlJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RkI0N0U2MzIyNzc0MjVBMDBDN0JDQjAgLyogRGlzcGxheUxpbmVCb3guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTVGQkQzMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNzI5QzQ1MUYyM0VBNTI4OTAwQjJCMUNFIC8qIERpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOUM0NTFFMjNFQTUyM0Qw
MEIyQjFDRSAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkU1RkJENTFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFNUZCRDcxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5
TGlzdFJlcGxheWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMjU0LDggKzMwMjkyLDkgQEAKIAkJ
CQk3Qzc5MDNCMzFGODZGOTVDMDA0NjNBNzAgLyogSW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkzMThFQUQ0RDFGQTkxMzgwMDA4Q0VGODYgLyogSW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0U2V0dGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQTEw
QjkyMEIzODE4QkQwMDA5OUFBNCAvKiBJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MjJCRDlGN0YxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMjJCRDlGODExMzUzNjRGRTAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YUNHLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MjlERDQ0NDIzRUEyNzBBMDAwMjZCN0Ig
LyogSW1hZ2VCdWZmZXJDR0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOURENDQ1MjNF
QTI3OUIwMDAyNkI3QiAvKiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUNEM0UyMUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGll
c0NHLmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1h
Z2VDb250cm9sc0J1dHRvbkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2
MThCNkI5QjcwMDdGQzdBMSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzExNjAsMTcgKzMxMTk5LDYgQEAKIAkJCQlCRThFRjA0RDE3MUM5MDE0MDA5QjQ4
QzMgLyogSlNWaWRlb1RyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDZFNzkxNDkxRjk3
RTAxQTAwMTk5NzM5IC8qIEpTVmlzaWJpbGl0eVN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
Nzc5QkQ5NjFGMzIyNDZBMDBDMjE0MTcgLyogSlNWaXN1YWxWaWV3cG9ydC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMkRERTFDRTQxRjU3NEFFOTAwRDFBMzY1IC8qIEpTVlJEaXNwbGF5LmggaW4gSGVh
ZGVycyAqLywKLQkJCQkyRERFMUNGODFGNTc0QzM5MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlDYXBh
YmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxQ0ZBMUY1NzRDM0UwMEQxQTM2NSAv
KiBKU1ZSRGlzcGxheUV2ZW50LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUNGQzFGNTc0Q0VF
MDBEMUEzNjUgLyogSlNWUkRpc3BsYXlFdmVudFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MkRERTFDRkUxRjU3NENGMzAwRDFBMzY1IC8qIEpTVlJFeWUuaCBpbiBIZWFkZXJzICovLAotCQkJ
CTJEREUxRDAwMUY1NzRDRjcwMEQxQTM2NSAvKiBKU1ZSRXllUGFyYW1ldGVycy5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMkRERTFDRTMxRjU3NEFFNTAwRDFBMzY1IC8qIEpTVlJGaWVsZE9mVmlldy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMkRERTFEMDIxRjU3NEQwMDAwRDFBMzY1IC8qIEpTVlJGcmFt
ZURhdGEuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDA0MUY1NzREMDUwMEQxQTM2NSAvKiBK
U1ZSTGF5ZXJJbml0LmggaW4gSGVhZGVycyAqLywKLQkJCQkyRERFMUQwNjFGNTc0RDBBMDBEMUEz
NjUgLyogSlNWUlBvc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTJEREUxRDA4MUY1NzREMEUwMEQx
QTM2NSAvKiBKU1ZSU3RhZ2VQYXJhbWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCRTIwNTA4
MjE4QTQ2MEMzMDA4MDY0N0UgLyogSlNWVFRDdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdBRjlC
MjBEMThDRkI1RjQwMEM2NEJFRiAvKiBKU1ZUVFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
N0FGOUIyMEYxOENGQjVGNDAwQzY0QkVGIC8qIEpTVlRUUmVnaW9uTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTc1MCw2ICszMTc3OCw3IEBACiAJCQkJQkNBQTQ4NzAxNEEwNTI1MzAwODhGQUM0
IC8qIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzIzRjc3
QjE0ODRDQTRDMDA4QzZEQkUgLyogUGxhdGZvcm1FeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTUxNUJFMTk1MUQ1NEY1RkIwMEREN0M2OCAvKiBQbGF0Zm9ybUdhbWVwYWQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOURENDQyMjNFQTI2QTAwMDAyNkI3QiAvKiBQbGF0Zm9ybUltYWdl
QnVmZmVyQmFja2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTM1QzQ3NjgwOUFDNEQ0MzAwQTZB
QUI0IC8qIFBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDU2MkY5
NjExNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY1NDRGNzg5MTVDRkIyQTgwMEFGMzNBOCAvKiBQbGF0Zm9ybUxvY2FsZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0zMTkyOCw2ICszMTk1Nyw3IEBACiAJCQkJQkNFQTQ4NzYwOTdEOTMwMjAwOTRDOUU0
IC8qIFJlbmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEYyRjAwQTEyMTNFNjE3MDBE
Q0VDNDggLyogUmVuZGVySW1hZ2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg2NDFE
NDgxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MjM5NDA2NTIzRTg4Mjg2MDBFM0I1NDUgLyogUmVuZGVyaW5nQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzI5OUJDNjgyM0Q2QTUzRTAwQ0M2ODgzIC8qIFJl
bmRlcmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZD
QSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0
ODc4MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbmxpbmUuaCBpbiBIZWFkZXJzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5j
cHAKaW5kZXggYzRjN2UyODgyNzcyNjZkZGVjNzUyMDQxMjEyYjVlMmJjNWZhYTM1OC4uMjVkNjlm
OTRhNjdmYjkxYmNjNDhiYzdlODU5NmQ3NThmNmY1ZTI3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC05NDMsMTMg
Kzk0MywxMyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgY29uc3QgSW50U2l6ZSYg
bG9naWNhbFNpemUgPSBidWZmZXItPmxvZ2ljYWxTaXplKCk7Ci0gICAgICAgIGF1dG8gaW1hZ2VE
YXRhID0gYnVmZmVyLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoMCwgMCwgbG9n
aWNhbFNpemUud2lkdGgoKSwgbG9naWNhbFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgYXV0byBp
bWFnZURhdGEgPSBidWZmZXItPmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkLCB7IEludFBvaW50Ojp6ZXJvKCksIGxvZ2ljYWxTaXplIH0pOwogICAgICAg
ICBpZiAoIWltYWdlRGF0YSkgewogICAgICAgICAgICAgY29kZSA9IFNlcmlhbGl6YXRpb25SZXR1
cm5Db2RlOjpWYWxpZGF0aW9uRXJyb3I7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyID0gaW1hZ2VEYXRhLT5w
b3NzaWJseVNoYXJlZEJ1ZmZlcigpOworICAgICAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5
QnVmZmVyID0gaW1hZ2VEYXRhLT5kYXRhKCktPnBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAgICAg
ICAgIGlmICghYXJyYXlCdWZmZXIpIHsKICAgICAgICAgICAgIGNvZGUgPSBTZXJpYWxpemF0aW9u
UmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjg2
NSwxOSArMjg2NSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gVWludDhDbGFtcGVkQXJyYXk6
OnRyeUNyZWF0ZShXVEZNb3ZlKGFycmF5QnVmZmVyKSwgMCwgYXJyYXlCdWZmZXItPmJ5dGVMZW5n
dGgoKSk7Ci0gICAgICAgIGlmICghaW1hZ2VEYXRhKSB7CisgICAgICAgIGF1dG8gYXJyYXkgPSBV
aW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlKFdURk1vdmUoYXJyYXlCdWZmZXIpLCAwLCBhcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpKTsKKyAgICAgICAgaWYgKCFhcnJheSkgewogICAgICAgICAg
ICAgZmFpbCgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAgICAgfQogCisg
ICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50U2l6ZShsb2dpY2Fs
V2lkdGgsIGxvZ2ljYWxIZWlnaHQpLCBhcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
aWYgKCFpbWFnZURhdGEpIHsKKyAgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGF1dG8gYnVmZmVyID0g
SW1hZ2VCdWZmZXI6OmNyZWF0ZShGbG9hdFNpemUobG9naWNhbFdpZHRoLCBsb2dpY2FsSGVpZ2h0
KSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCwgcmVzb2x1dGlvblNjYWxlKTsKICAgICAg
ICAgaWYgKCFidWZmZXIpIHsKICAgICAgICAgICAgIGZhaWwoKTsKICAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBidWZmZXItPnB1dEJ5dGVBcnJheSgq
aW1hZ2VEYXRhLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBJbnRTaXpl
KGxvZ2ljYWxXaWR0aCwgbG9naWNhbEhlaWdodCksIEludFJlY3QoMCwgMCwgbG9naWNhbFdpZHRo
LCBsb2dpY2FsSGVpZ2h0KSwgSW50UG9pbnQoKSk7CisgICAgICAgIGJ1ZmZlci0+cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHsg
SW50UG9pbnQ6Onplcm8oKSwgaW1hZ2VEYXRhLT5zaXplKCkgfSk7CiAKICAgICAgICAgYXV0byBi
aXRtYXAgPSBJbWFnZUJpdG1hcDo6Y3JlYXRlKHsgV1RGTW92ZShidWZmZXIpLCBzdGF0aWNfY2Fz
dDxib29sPihvcmlnaW5DbGVhbikgfSk7CiAgICAgICAgIHJldHVybiBnZXRKU1ZhbHVlKGJpdG1h
cCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAppbmRleCBkMmFkNDFlODcxYWM1YTBiY2I0
ZDY5YzE1MjUzNDYzOWE3MzYxNDVkLi4xNjJiMjk0MmY2NjZhOTMyNDYwYjA2ZTc2ZDA4MzZlNDNj
MDE3MTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NhbnZhc0Jhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2FudmFzQmFzZS5jcHAKQEAgLTE5MSw4ICsxOTEsOCBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IENhbnZhc0Jhc2U6OnNldEltYWdlQnVmZmVy
KHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZgogICAgICAgICByZXR1cm5CdWZmZXIgPSBzdGQ6OmV4
Y2hhbmdlKG1faW1hZ2VCdWZmZXIsIFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfQogCi0gICAgaWYg
KG1faW1hZ2VCdWZmZXIgJiYgbV9zaXplICE9IG1faW1hZ2VCdWZmZXItPmludGVybmFsU2l6ZSgp
KQotICAgICAgICBtX3NpemUgPSBtX2ltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKTsKKyAgICBp
ZiAobV9pbWFnZUJ1ZmZlciAmJiBtX3NpemUgIT0gbV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUo
KSkKKyAgICAgICAgbV9zaXplID0gbV9pbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKTsKIAogICAg
IHNpemVfdCBwcmV2aW91c01lbW9yeUNvc3QgPSBtX2ltYWdlQnVmZmVyQ29zdDsKICAgICBtX2lt
YWdlQnVmZmVyQ29zdCA9IG1lbW9yeUNvc3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKaW5kZXggZjVlNzY1MDA2OWE2ZDg2OTBkOTQzZGVlMjZiYjM2MWY5MTg5
Y2UzMS4uMWZiYzFhMWY4OGQyODVkZmVjNmVhZWIxN2E3ZDg3OWE5ZDg4OTUzMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlICJDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkNhbnZhc1BhdHRlcm4uaCIKICNp
bmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlz
dERyYXdpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC0zNDksOSArMzUwLDYgQEAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBIVE1MQ2FudmFzRWxlbWVudDo6Y3JlYXRlQ29udGV4
dDJkKGNvbnN0IFN0cmluZyYgdHlwZSkKIAogICAgIG1fY29udGV4dCA9IENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6Y3JlYXRlKCp0aGlzLCBkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpKTsKIAot
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwotICAgIGRvd25j
YXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7Ci0KICNpZiBVU0UoSU9TVVJG
QUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQogICAgIC8vIE5lZWQgdG8gbWFrZSBzdXJlIGEgUmVuZGVyTGF5ZXIgYW5kIGNvbXBvc2l0aW5n
IGxheWVyIGdldCBjcmVhdGVkIGZvciB0aGUgQ2FudmFzLgogICAgIGludmFsaWRhdGVTdHlsZUFu
ZExheWVyQ29tcG9zaXRpb24oKTsKQEAgLTgyMiwzOSArODIwLDI3IEBAIGJvb2wgSFRNTENhbnZh
c0VsZW1lbnQ6OnNob3VsZEFjY2VsZXJhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKIAog
dm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VXNlc0Rpc3BsYXlMaXN0RHJhd2luZyhib29sIHVz
ZXNEaXNwbGF5TGlzdERyYXdpbmcpCiB7Ci0gICAgaWYgKHVzZXNEaXNwbGF5TGlzdERyYXdpbmcg
PT0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nKQotICAgICAgICByZXR1cm47Ci0gICAgCiAgICAg
bV91c2VzRGlzcGxheUxpc3REcmF3aW5nID0gdXNlc0Rpc3BsYXlMaXN0RHJhd2luZzsKLQotICAg
IGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5nZXQoKSkpCi0gICAg
ICAgIGRvd25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkuc2V0VXNl
c0Rpc3BsYXlMaXN0RHJhd2luZyhtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcpOwogfQogCiB2b2lk
IEhUTUxDYW52YXNFbGVtZW50OjpzZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShib29sIHRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KQogewotICAgIGlmICh0cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9
PSBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQotICAgICAgICByZXR1cm47Ci0KICAgICBtX3Ry
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RSZXBsYXk7Ci0KLSAgICBp
ZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAg
ICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCptX2NvbnRleHQpLnNldFRyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpOworICAgIGlmIChi
dWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSkKKyAgICAgICAgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCktPnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkpOwogfQogCiBTdHJpbmcgSFRNTENhbnZhc0VsZW1lbnQ6OmRpc3BsYXlM
aXN0QXNUZXh0KERpc3BsYXlMaXN0OjpBc1RleHRGbGFncyBmbGFncykgY29uc3QKIHsKLSAgICBp
ZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPigqbV9jb250ZXh0KS5k
aXNwbGF5TGlzdEFzVGV4dChmbGFncyk7Ci0KKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCkt
PmRyYXdpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRl
eHQoKS0+ZGlzcGxheUxpc3QoKS5hc1RleHQoZmxhZ3MpOwogICAgIHJldHVybiBTdHJpbmcoKTsK
IH0KIAogU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50OjpyZXBsYXlEaXNwbGF5TGlzdEFzVGV4dChE
aXNwbGF5TGlzdDo6QXNUZXh0RmxhZ3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4obV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRv
d25jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oKm1fY29udGV4dCkucmVwbGF5RGlzcGxh
eUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5
TGlzdCgpKQorICAgICAgICByZXR1cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPnJlcGxh
eURpc3BsYXlMaXN0KCktPmFzVGV4dChmbGFncyk7CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
CkBAIC04ODksMTEgKzg3NSwyNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFn
ZUJ1ZmZlcigpIGNvbnN0CiAgICAgaWYgKCF3aWR0aCgpIHx8ICFoZWlnaHQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxl
cmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkOwotCiAgICAgYXV0byBob3N0V2luZG93ID0gKGRvY3VtZW50KCkudmll
dygpICYmIGRvY3VtZW50KCkudmlldygpLT5yb290KCkpID8gZG9jdW1lbnQoKS52aWV3KCktPnJv
b3QoKS0+aG9zdFdpbmRvdygpIDogbnVsbHB0cjsKKworICAgIC8vIEZJWE1FOiBBZGQgYSBuZXcg
c2V0dGluZyBmb3IgRGlzcGxheUxpc3QgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2Vz
RGlzcGxheUxpc3REcmF3aW5nID0gbV91c2VzRGlzcGxheUxpc3REcmF3aW5nLnZhbHVlT3IoZG9j
dW1lbnQoKS5zZXR0aW5ncygpLmRpc3BsYXlMaXN0RHJhd2luZ0VuYWJsZWQoKSk7CisKKyAgICAv
LyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIHJlbW90ZSBkcmF3aW5nIG9uIGNhbnZhcy4K
KyAgICBib29sIHVzZXNSZW1vdGVEcmF3aW5nID0gZmFsc2U7CisKKyAgICBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGU7CisgICAgaWYgKHVzZXNSZW1vdGVEcmF3aW5nKQorICAgICAgICByZW5k
ZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6UmVt
b3RlQWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpSZW1vdGU7CisgICAgZWxzZSBpZiAodXNl
c0Rpc3BsYXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2Vs
ZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBS
ZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDsKKyAgICBlbHNlCisgICAgICAgIHJlbmRlcmluZ01v
ZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVyaW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6
U1JHQiwgaG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3
aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJh
Y2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSk7CisKICNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczJkKCkpIHsKICAg
ICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcgcmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJh
dGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Q2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
CmluZGV4IGI1Mjg2NDVjNjU4NzRjZDBjYTA5MzQ0NDYxYjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEy
Mjk0MTQ5NmJmMzFiY2RkNzljNmJjNWMzOTFhNzhhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmgKQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKIAotICAgIGJvb2wgbV91c2VzRGlzcGxheUxpc3RE
cmF3aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxib29sPiBtX3VzZXNEaXNwbGF5TGlzdERy
YXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5IHsgZmFsc2UgfTsKIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBtX2NvbnRleHQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwCmluZGV4IGQ0OTQ3MTIwODMyMzEwYzdjMGQ3YmVmMWM4NzlkYTNm
ZmIyOTNmMGEuLmQyYjhkYjgxNGQzMTM0MTg2NDEyZmE1ZDhhZWFmN2EyMzgwYjEyODUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyREJhc2UuY3BwCkBAIC0yMTU4LDExICsyMTU4LDYgQEAgRXhjZXB0aW9uT3I8UmVm
UHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OmNyZWF0ZUltYWdl
RGF0YShmbG8KIH0KIAogRXhjZXB0aW9uT3I8UmVmUHRyPEltYWdlRGF0YT4+IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREJhc2U6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0
IHN3LCBmbG9hdCBzaCkgY29uc3QKLXsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhKEltYWdlQnVm
ZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSwgc3gsIHN5LCBzdywgc2gpOwotfQotCi1FeGNl
cHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZTo6
Z2V0SW1hZ2VEYXRhKEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW0sIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdAogewogICAg
IGlmICghY2FudmFzQmFzZSgpLm9yaWdpbkNsZWFuKCkpIHsKICAgICAgICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFN0cmluZz4gY29uc29sZU1lc3NhZ2UoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IlVuYWJsZSB0byBnZXQgaW1hZ2UgZGF0YSBmcm9tIGNhbnZhcyBiZWNhdXNlIHRoZSBjYW52YXMg
aGFzIGJlZW4gdGFpbnRlZCBieSBjcm9zcy1vcmlnaW4gZGF0YS4iKSk7CkBAIC0yMTk2LDggKzIx
OTEsOCBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgIGlmICghYnVmZmVyKQogICAgICAg
ICByZXR1cm4gY3JlYXRlRW1wdHlJbWFnZURhdGEoaW1hZ2VEYXRhUmVjdC5zaXplKCkpOwogCi0g
ICAgYXV0byBieXRlQXJyYXkgPSBidWZmZXItPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShpbWFn
ZURhdGFSZWN0LCBudWxscHRyLCBjb29yZGluYXRlU3lzdGVtKTsKLSAgICBpZiAoIWJ5dGVBcnJh
eSkgeworICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBpbWFnZURhdGFSZWN0KTsKKyAgICBpZiAo
IWltYWdlRGF0YSkgewogICAgICAgICBTdHJpbmdCdWlsZGVyIGNvbnNvbGVNZXNzYWdlOwogICAg
ICAgICBjb25zb2xlTWVzc2FnZS5hcHBlbmRMaXRlcmFsKCJVbmFibGUgdG8gZ2V0IGltYWdlIGRh
dGEgZnJvbSBjYW52YXMuIFJlcXVlc3RlZCBzaXplIHdhcyAiKTsKICAgICAgICAgY29uc29sZU1l
c3NhZ2UuYXBwZW5kTnVtYmVyKGltYWdlRGF0YVJlY3Qud2lkdGgoKSk7CkBAIC0yMjA4LDcgKzIy
MDMsNyBAQCBFeGNlcHRpb25PcjxSZWZQdHI8SW1hZ2VEYXRhPj4gQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6Z2V0SW1hZ2VEYXRhKEltYWdlQgogICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IgfTsKICAgICB9CiAKLSAgICByZXR1cm4gSW1hZ2VEYXRhOjpj
cmVhdGUoaW1hZ2VEYXRhUmVjdC5zaXplKCksIGJ5dGVBcnJheS5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSkK
QEAgLTIyMTcsMTEgKzIyMTIsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6
OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGZsb2F0IGR4LCBmbG9hdAogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRh
dGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0
IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQotewotICAgIHB1dEltYWdlRGF0YShkYXRh
LCBJbWFnZUJ1ZmZlcjo6TG9naWNhbENvb3JkaW5hdGVTeXN0ZW0sIGR4LCBkeSwgZGlydHlYLCBk
aXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KTsKLX0KLQotdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0
eUhlaWdodCkKIHsKICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzQmFzZSgpLmJ1ZmZl
cigpOwogICAgIGlmICghYnVmZmVyKQpAQCAtMjI0NSw3ICsyMjM1LDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkRCYXNlOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRhJiBkYXRhLCBJbWFn
ZUJ1ZmZlcjo6Q28KICAgICBJbnRTaXplIGRlc3RPZmZzZXQoc3RhdGljX2Nhc3Q8aW50PihkeCks
IHN0YXRpY19jYXN0PGludD4oZHkpKTsKICAgICBJbnRSZWN0IGRlc3RSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChjbGlwUmVjdCk7CiAgICAgZGVzdFJlY3QubW92ZShkZXN0T2Zmc2V0KTsKLSAgICBk
ZXN0UmVjdC5pbnRlcnNlY3QoSW50UmVjdChJbnRQb2ludCgpLCBjb29yZGluYXRlU3lzdGVtID09
IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbSA/IGJ1ZmZlci0+bG9naWNhbFNp
emUoKSA6IGJ1ZmZlci0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBkZXN0UmVjdC5pbnRlcnNlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBidWZmZXItPmxvZ2ljYWxTaXplKCkpKTsKICAgICBpZiAoZGVz
dFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0
KGRlc3RSZWN0KTsKQEAgLTIyNTMsNyArMjI0Myw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQmFzZTo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSYgZGF0YSwgSW1hZ2VCdWZmZXI6OkNv
CiAgICAgc291cmNlUmVjdC5pbnRlcnNlY3QoSW50UmVjdCgwLCAwLCBkYXRhLndpZHRoKCksIGRh
dGEuaGVpZ2h0KCkpKTsKIAogICAgIGlmICghc291cmNlUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
IGJ1ZmZlci0+cHV0Qnl0ZUFycmF5KCpkYXRhLmRhdGEoKSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6VW5wcmVtdWx0aXBsaWVkLCBJbnRTaXplKGRhdGEud2lkdGgoKSwgZGF0YS5oZWlnaHQoKSks
IHNvdXJjZVJlY3QsIEludFBvaW50KGRlc3RPZmZzZXQpLCBjb29yZGluYXRlU3lzdGVtKTsKKyAg
ICAgICAgYnVmZmVyLT5wdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBkYXRhLCBzb3VyY2VSZWN0LCBJbnRQb2ludChkZXN0T2Zmc2V0KSk7CiAKICAg
ICBkaWREcmF3KGRlc3RSZWN0LCBDYW52YXNEaWREcmF3QXBwbHlOb25lKTsgLy8gaWdub3JlIHRy
YW5zZm9ybSwgc2hhZG93IGFuZCBjbGlwCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNlLmgKaW5kZXggM2RmYzlj
OWZjZTUyYmU4ODkyYmY0OThhZTY3MjIxODdmMWJlZTkxZC4uZGIzZmFjOGIwOGI3MDNiZDU0MWZj
NzJmNGQzMWJkNTE3NzM1MDRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuaApAQCAtMzcxLDkgKzM3MSw2
IEBAIHByb3RlY3RlZDoKIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHZvaWQgZnVsbENhbnZhc0Nv
bXBvc2l0ZWREcmF3SW1hZ2UoVCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYs
IENvbXBvc2l0ZU9wZXJhdG9yKTsKIAotICAgIEV4Y2VwdGlvbk9yPFJlZlB0cjxJbWFnZURhdGE+
PiBnZXRJbWFnZURhdGEoSW1hZ2VCdWZmZXI6OkNvb3JkaW5hdGVTeXN0ZW0sIGZsb2F0IHN4LCBm
bG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoKSBjb25zdDsKLSAgICB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEmLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgZHgsIGZs
b2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlXaWR0aCwgZmxv
YXQgZGlydHlIZWlnaHQpOwotCiAgICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAKICAgICBib29sIGhhc0ludmVydGlibGVUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBzdGF0ZSgpLmhhc0ludmVydGlibGVUcmFuc2Zvcm07IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmNwcAppbmRleCBmNTg2Y2NiMTc4Yzc2ZTU3OGMyMTMwODQ2YTFmYmZhN2VmZmQ3YWY1Li42Mzdl
NzdjNWZlZGFiMzNjNWJkYjgwYzZmZDBlMTFhYjdmNGE4MjE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCkBAIC00OTQsNiArNDk0LDEzIEBAIHZvaWQgQ2hyb21lOjpzZXRDdXJzb3JIaWRkZW5VbnRp
bE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1vdXNlTW92ZXMpCiAgICAgbV9jbGllbnQuc2V0
Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGhpZGRlblVudGlsTW91c2VNb3Zlcyk7CiB9CiAK
K1JlbmRlcmluZ0JhY2tlbmQqIENocm9tZTo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0
Cit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tlbmQpCisgICAgICAgIG1fcmVuZGVyaW5nQmFj
a2VuZCA9IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICByZXR1cm4gbV9y
ZW5kZXJpbmdCYWNrZW5kLmdldCgpOworfQorCiBQbGF0Zm9ybURpc3BsYXlJRCBDaHJvbWU6OmRp
c3BsYXlJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZGlzcGxheUlEOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21l
LmgKaW5kZXggNjYyYmUwMGZhMGFiYWU4YjdiYTdkNjY4ZDQ0NzBlYzUxMzYxYWY0OS4uNmNmY2Fl
Y2EyODVjNGViYzVlMjI0NGU4ZWJkNjRiYWM5YTc2MmUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBA
IC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3Im
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNvckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29s
KSBvdmVycmlkZTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdCBvdmVycmlkZTsKKwogICAgIHZvaWQgc2NoZWR1bGVBbmltYXRpb24oKSBvdmVy
cmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IG92ZXJy
aWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZVN1cHByZXNzZWQg
eyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5n
QmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggOTg5YmFmNGE3ZDdmMzM1NDU5MzJi
ZDkzMDQzZWY0M2JhN2FhNTEyYS4uYjU5Y2UxM2Q5ZWMzMzAxOTNkODAzNDdjMGNmODcxZDkyNThj
YTVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC00Myw2ICs0Myw3IEBACiAj
aW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0cmFibGVEb21haW4u
aCIKICNpbmNsdWRlICJSZW5kZXJFbWJlZGRlZE9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmQuaCIKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VhcmNoUG9wdXBNZW51LmgiCkBAIC0zMDUsNiAr
MzA2LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERpc3BsYXlSZWZyZXNoTW9uaXRv
cj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCB7
IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCB7IHJldHVy
biBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMgdGhlIEdyYXBoaWNzTGF5ZXIg
dG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciopID0gMDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUNvbnNvbGVDbGllbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5jcHAKaW5kZXggNGMzNTMzMDkxNjE5
ZGM2NDNmODcyOTA5Y2I3MWY3ODI4ZWY4NWJiYy4uZTYwY2RlMTRkMWE3YzZjMzA0Mjg5MDc1MDdj
NjEwYmU1NWRlMWEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29s
ZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlQ29uc29sZUNsaWVudC5j
cHAKQEAgLTM3Niw3ICszNzYsNyBAQCB2b2lkIFBhZ2VDb25zb2xlQ2xpZW50OjpzY3JlZW5zaG90
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplY3QsIFJlZgogICAgICAgICAg
ICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IGltYWdlRGF0YS0+c2l6ZSgpOwogICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzb3VyY2VTaXpl
LCBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKSkgewogICAgICAgICAgICAgICAgICAgICBJ
bnRSZWN0IHNvdXJjZVJlY3QoSW50UG9pbnQoKSwgc291cmNlU2l6ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGltYWdlQnVmZmVyLT5wdXRCeXRlQXJyYXkoKmltYWdlRGF0YS0+ZGF0YSgpLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHNvdXJjZVNpemUsIHNvdXJjZVJl
Y3QsIEludFBvaW50KCkpOworICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+cHV0SW1h
Z2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgKmltYWdlRGF0
YSwgc291cmNlUmVjdCk7CiAgICAgICAgICAgICAgICAgICAgIGRhdGFVUkwgPSBpbWFnZUJ1ZmZl
ci0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0
aW9uOjpZZXMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ2Fpcm8uY21ha2UKaW5kZXggNmE5ZWMyYTk1MzkwODA5N2U3MWMwNjZmOTE5Yzg3YjE0
YmFkODRjYy4uZmM2YzVmM2NkMDQ2MjY5NTY2ODIyYzA4YTQ4MmNjM2JkNmE4ODNjMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ2Fpcm8uY21ha2UKQEAgLTEzLDcgKzEzLDEwIEBAIGxpc3QoQVBQRU5E
IFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0NhaXJvT3BlcmF0aW9ucy5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fp
cm9VdGlsaXRpZXMuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4
dEltcGxDYWlyby5oCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRh
Q2Fpcm8uaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9CYWNr
ZW5kLmgKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZC5oCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQuaAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdl
QnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGxhdGZvcm1Db250ZXh0Q2Fpcm8uaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0
ckNhaXJvLmgKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5k
b3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2ZlY2Fk
YzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li44OTg2NTM0NmNmNDgwZjgwNmM1YzBj
ZTkzNTIxZGU2OTIwODE4MDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9I
b3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5oCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjMsMTQgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RXaW5k
b3dfaAotI2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiV2lk
Z2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3MgUmVu
ZGVyaW5nQmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiArNjQs
OCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3Vz
ZU1vdmVzKGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hhcmVk
UmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVs
ZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9Tb3VyY2VzQ2Fpcm8udHh0CmluZGV4IGY5MGQyNDZlYzU5YjRmOGE4ZTEzOGI3MjI0
MGNmMjAyNTgzMTkyYzQuLjZmYTRmZmUxNDYwZWE3MTM4MjFiY2EzNjIyNmQyNmE5N2U1ZDk5ODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NvdXJjZXNDYWlyby50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU291cmNlc0NhaXJvLnR4dApAQCAtMzAsNyArMzAs
MTAgQEAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWlyby5jcHAKIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEdMQ2Fpcm8uY3BwCiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKLXBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZC5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fp
cm9HTFN1cmZhY2VCYWNrZW5kLmNwcAorcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZm
ZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwCitwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9JbWFnZUJ1ZmZlclV0aWxpdGllc0NhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW50UmVjdENhaXJvLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vTmF0aXZlSW1hZ2VDYWly
by5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdl
LmNwcAppbmRleCA0ODIyNDRhNGYyYmRjZWRlN2M4NzRjZDFiNTBlYTkxNGIxNDk5YTIyLi5kZGQ1
YzZjNzM0NWEyYzBkOGJkOWE4ZTRlZmI0ZTNjYjk5NTg3YzZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC0xNjUsMTIgKzE2NSw3
IEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbihjb25zCiAgICAgICAgIHJldHVybiBpbWFnZTsKIAogICAg
IGJ1ZmZlci0+Y29udGV4dCgpLmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgcmVjdC5zaXplKCksIHJl
Y3QsIHJlY3QsIHsgb3JpZW50YXRpb24gfSk7Ci0KLSNpZiBVU0UoQ0cpIHx8IFVTRShESVJFQ1Qy
RCkKICAgICByZXR1cm4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShi
dWZmZXIpKTsKLSNlbGlmIFVTRShDQUlSTykKLSAgICByZXR1cm4gYnVmZmVyLT5uYXRpdmVJbWFn
ZSgpOwotI2VuZGlmCiB9CiAKICNpZiBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhjZWE0OGNiM2QyOTdhZGY4MTFmODg5N2E0ODViYmJlYzUwYWQyM2UKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZm
ZXIuaApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisj
aW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBDb250ZXh0dWFsSW1hZ2VCdWZmZXIgOiBwdWJs
aWMgSW1hZ2VCdWZmZXIgeworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVm
ZmVyVHlwZSA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNl
LCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUs
IHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGlmICgh
YmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gc3Rk
Ojp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3Zl
KGJhY2tlbmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29udGV4dHVhbElt
YWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBhdXRvIGJhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKHNpemUsIGNvbnRleHQp
OworICAgICAgICBpZiAoIWJhY2tlbmQpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclR5cGU+KG5ldyBJbWFnZUJ1
ZmZlclR5cGUoV1RGTW92ZShiYWNrZW5kKSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1l
bnRzKS4uLikpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIENvbnRleHR1YWxJbWFnZUJ1ZmZl
cihzdGQ6OnVuaXF1ZV9wdHI8QmFja2VuZFR5cGU+JiYgYmFja2VuZCkKKyAgICAgICAgOiBtX2Jh
Y2tlbmQoV1RGTW92ZShiYWNrZW5kKSkKKyAgICB7CisgICAgfQorCisgICAgQ29udGV4dHVhbElt
YWdlQnVmZmVyKCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJl
QmFja2VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2JhY2tlbmQpOworICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb250ZXh0KCk7CisgICAg
fQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJh
c2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2Fs
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJh
Y2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgYmFja2Vu
ZFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPmJhY2tlbmRTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1
cmVCYWNrZW5kKCktPnJlc29sdXRpb25TY2FsZSgpIDogMTsgfQorCisgICAgc2l6ZV90IG1lbW9y
eUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPm1lbW9yeUNvc3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlD
b3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFj
a2VuZCgpLT5leHRlcm5hbE1lbW9yeUNvc3QoKSA6IDA7IH0KKworICAgIE5hdGl2ZUltYWdlUHRy
IGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNr
aW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFs
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0cjxJbWFnZT4gY29w
eUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlv
bjo6Tm8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0
dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBk
cmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1
c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3Bh
Y2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBz
aW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIFJlZlB0
cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFn
ZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RD
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAg
ICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25z
dW1pbmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAg
ICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29u
dmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB0cmFu
c2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0
Q29sb3JTcGFjZSkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Cisg
ICAgICAgICAgICBiYWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRl
c3RDb2xvclNwYWNlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFN0cmluZyB0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2
ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgp
OworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0
eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorCisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhp
cykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1p
bWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OworICAgIH0K
KworICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAg
ICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRl
eHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBn
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IElu
dFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byog
YmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250
ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBy
ZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBwdXRJbWFn
ZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRh
JiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0
UG9pbnQgPSB7IH0pIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAg
ICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVj
dCwgZGVzdFBvaW50KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxh
dGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwg
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJl
QmFja2VuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4
dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQs
IHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4gbV9iYWNrZW5kOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM4OTlmODI2
ZTg4NTg3MDU0NjBhOGE3ODg0MWIxMDEzNDU3ZTA3MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIgor
I2luY2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIERpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIgOiBwdWJsaWMgQ29udGV4dHVhbEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiAs
IHB1YmxpYyBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQgeworICAgIHVzaW5nIEJhc2VDb250
ZXh0dWFsSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+Owor
CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRl
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCisgICAgeworICAgICAg
ICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9z
dFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb250ZXh0dWFsSW1hZ2VC
dWZmZXI6OnRlbXBsYXRlIGNyZWF0ZTxEaXNwbGF5TGlzdEltYWdlQnVmZmVyPihzaXplLCBjb250
ZXh0LCBzaXplKTsKKyAgICB9CisKKyAgICBEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHN0ZDo6dW5p
cXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwgY29uc3QgRmxvYXRTaXplJiBzaXpl
KQorICAgICAgICA6IEJhc2VDb250ZXh0dWFsSW1hZ2VCdWZmZXIoV1RGTW92ZShkYXRhQmFja2Vu
ZCkpCisgICAgICAgICwgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0KHNpemUpCisgICAgewor
ICAgIH0KKworICAgIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQorICAgICAgICA6IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAg
ICB9CisKKyAgICB+RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcigpCisgICAgeworICAgICAgICBmbHVz
aERyYXdpbmdDb250ZXh0KCk7CisgICAgfQorCisgICAgRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250
ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRoaXM7IH0KKworICAgIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBy
ZXR1cm4gRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0Ojpjb250ZXh0KCk7CisgICAgfQorCisg
ICAgdm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIERp
c3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlzcGxheUxpc3QoQmFzZUNvbnRleHR1
YWxJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAKaW5kZXggMjBiOTgxMGMyOTE0MWU0NzNlNmE4ODhiYzgwYzE0MTdhZWFjMmZhZi4uYWZh
OGI1YTVkMDhlNTZhODYzZDQwYTlkZGU4MTU5NTBkMjgyZGM2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMSw3ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+
CiAgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI4LDQ0ICsyOCw2NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAKLSNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSAiUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZExlbmd0aCA9IDQw
OTY7CiBzdGF0aWMgY29uc3QgZmxvYXQgTWF4Q2xhbXBlZEFyZWEgPSBNYXhDbGFtcGVkTGVuZ3Ro
ICogTWF4Q2xhbXBlZExlbmd0aDsKIAotV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdl
QnVmZmVyKTsKLQogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdykKIHsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2l6ZSwgcmVz
b2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNj
ZXNzKSk7Ci0gICAgaWYgKCFzdWNjZXNzKQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpz
aGFyZWRSZW5kZXJpbmdCYWNrZW5kKGhvc3RXaW5kb3cpLmNyZWF0ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sK
KyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCgpLmNy
ZWF0ZUltYWdlQnVmZmVyKHNpemUsIGNvbnRleHQpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIGlmIChz
aXplLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGJ1ZmZl
cjsKKworICAgIEludFNpemUgc2NhbGVkU2l6ZSA9IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVm
ZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKKworICAgIGF1dG8gaW1hZ2VCdWZmZXIgPSBJbWFnZUJ1
ZmZlcjo6Y3JlYXRlKHNjYWxlZFNpemUsIGNvbnRleHQpOworICAgIGlmICghaW1hZ2VCdWZmZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gU2V0IHVwIGEgY29ycmVzcG9uZGlu
ZyBzY2FsZSBmYWN0b3Igb24gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisgICAgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS5zY2FsZShzY2FsZWRTaXplIC8gc2l6ZSk7CisgICAgcmV0dXJuIGltYWdlQnVm
ZmVyOworCiB9CiAKLSNpZiBVU0UoRElSRUNUMkQpCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdN
b2RlIHJlbmRlcmluZ01vZGUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogdGFyZ2V0Q29udGV4dCwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVm
ZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBi
dWZmZXIobmV3IEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
cmVuZGVyaW5nTW9kZSwgaG9zdFdpbmRvdywgdGFyZ2V0Q29udGV4dCwgc3VjY2VzcykpOwotICAg
IGlmICghc3VjY2VzcykKKyAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIHJldHVybiBidWZmZXI7CisKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJ
bWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7CisKKyAgICBh
dXRvIGltYWdlQnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2Nh
bGVkU2l6ZSwgMSwgY29sb3JTcGFjZSwgY29udGV4dCk7CisgICAgaWYgKCFpbWFnZUJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5n
IHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKyAgICBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUgLyBzaXplKTsKKyAgICByZXR1cm4gaW1hZ2VCdWZm
ZXI7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0
ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQucmVu
ZGVyaW5nTW9kZSgpLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpOwogfQotI2VuZGlmCiAK
IGJvb2wgSW1hZ2VCdWZmZXI6OnNpemVOZWVkc0NsYW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSkKIHsKICAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIHJldHVybiBmbG9vcmYoc2l6ZS5oZWlnaHQoKSkgKiBmbG9vcmYoc2l6ZS53aWR0aCgpKSA+
IE1heENsYW1wZWRBcmVhOwogfQogCkBAIC0xMDUsOTEgKzEyOCwxMiBAQCBGbG9hdFJlY3QgSW1h
Z2VCdWZmZXI6OmNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICByZXR1cm4g
RmxvYXRSZWN0KHJlY3QubG9jYXRpb24oKSwgY2xhbXBlZFNpemUocmVjdC5zaXplKCkpKTsKIH0K
IAotI2lmICFVU0UoQ0cpICYmICFVU0UoQ0FJUk8pCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBm
b3Igb3RoZXIgYmFja2VuZHMuCi0gICAgcmV0dXJuIHsgfTsKLX0KLSNlbmRpZgotCi0jaWYgIShV
U0UoQ0cpIHx8IFVTRShESVJFQ1QyRCkpCi12b2lkIEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xv
clNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNl
KQotewotICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIG9ubHkgc1JHQiA8LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQg
dGhlIG1vbWVudAotICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJS
R0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpTUkdCKQotICAgICAgICB8fCAoZHN0
Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlOjpTUkdCKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGRzdENvbG9yU3Bh
Y2UgPT0gQ29sb3JTcGFjZTo6TGluZWFyUkdCKSB7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6
OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGluZWFyUmdiTFVUID0gW10gewotICAgICAgICAgICAgc3Rk
OjphcnJheTx1aW50OF90LCAyNTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8g
MjU1LjBmOwotICAgICAgICAgICAgICAgIGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25l
bnQoY29sb3IpOwotICAgICAgICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhf
dD4ocm91bmQoY29sb3IgKiAyNTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVy
biBhcnJheTsKLSAgICAgICAgfSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3Bh
Y2UobGluZWFyUmdiTFVUKTsKLSAgICB9IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JT
cGFjZTo6U1JHQikgewotICAgICAgICBzdGF0aWMgY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGRldmljZVJnYkxVVD0gW10gewotICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAy
NTY+IGFycmF5OwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsr
KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOwotICAgICAgICAg
ICAgICAgIGNvbG9yID0gbGluZWFyVG9TUkdCQ29sb3JDb21wb25lbnQoY29sb3IpOwotICAgICAg
ICAgICAgICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAy
NTUpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBhcnJheTsKLSAgICAgICAg
fSgpOwotICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoZGV2aWNlUmdiTFVUKTsK
LSAgICB9Ci19Ci0KLSNlbmRpZiAvLyBVU0UoQ0cpCi0KLWlubGluZSB2b2lkIEltYWdlQnVmZmVy
OjpnZW5lcmljQ29udmVydFRvTHVtaW5hbmNlTWFzaygpCi17Ci0gICAgSW50UmVjdCBsdW1pbmFu
Y2VSZWN0KEludFBvaW50KCksIGludGVybmFsU2l6ZSgpKTsKLSAgICBhdXRvIHNyY1BpeGVsQXJy
YXkgPSBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEobHVtaW5hbmNlUmVjdCk7Ci0gICAgaWYgKCFz
cmNQaXhlbEFycmF5KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgdW5zaWduZWQgcGl4ZWxB
cnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOwotICAgIGZvciAodW5zaWduZWQg
cGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBpeGVsT2Zm
c2V0ICs9IDQpIHsKLSAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhl
bE9mZnNldCArIDMpOwotICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7Ci0gICAg
ICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAxKTsKLSAg
ICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCArIDIpOwot
ICAgICAgICAKLSAgICAgICAgZG91YmxlIGx1bWEgPSAociAqIDAuMjEyNSArIGcgKiAwLjcxNTQg
KyBiICogMC4wNzIxKSAqICgoZG91YmxlKWEgLyAyNTUuMCk7Ci0gICAgICAgIHNyY1BpeGVsQXJy
YXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwotICAgIH0KLSAgICBwdXRCeXRlQXJyYXko
KnNyY1BpeGVsQXJyYXksIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
bHVtaW5hbmNlUmVjdC5zaXplKCksIGx1bWluYW5jZVJlY3QsIEludFBvaW50KCkpOwotfQotCi12
b2lkIEltYWdlQnVmZmVyOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKLXsKLSAgICAvLyBBZGQg
cGxhdGZvcm0gc3BlY2lmaWMgZnVuY3Rpb25zIHdpdGggcGxhdGZvcm1Db252ZXJ0VG9MdW1pbmFu
Y2VNYXNrIGhlcmUgbGF0ZXIuCi0gICAgZ2VuZXJpY0NvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsK
LX0KLQotI2lmICFVU0UoQ0FJUk8pCi1QbGF0Zm9ybUxheWVyKiBJbWFnZUJ1ZmZlcjo6cGxhdGZv
cm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWJvb2wgSW1hZ2VCdWZmZXI6
OmNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVt
LCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dMZW51bSwgYm9vbCwgYm9vbCkKK0ludFNpemUgSW1hZ2VC
dWZmZXI6OmNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBF
bmxhcmdlIHRoZSBidWZmZXIgc2l6ZSBpZiB0aGUgY29udGV4dCdzIHRyYW5zZm9ybSBpcyBzY2Fs
aW5nIGl0IHNvIHdlIG5lZWQgYSBoaWdoZXIKKyAgICAvLyByZXNvbHV0aW9uIHRoYW4gb25lIHBp
eGVsIHBlciB1bml0LgorICAgIHJldHVybiBleHBhbmRlZEludFNpemUoc2l6ZSAqIGNvbnRleHQu
c2NhbGVGYWN0b3IoKSk7CiB9Ci0jZW5kaWYKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBJbWFnZUJ1ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewpA
QCAtMjA2LDUwICsxNTAsMTkgQEAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1
ZmZlcjo6Y29weVJlY3RUb0J1ZmZlcihjb25zdCBGbG9hdFJlY3QmIHJlY3QKICAgICByZXR1cm4g
YnVmZmVyOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpj
cmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyKQogewotICAgIGlmIChzaXplLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0KLSAgICBhdXRvIGJ1ZmZlciA9
IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9y
U3BhY2UsIGNvbnRleHQpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIFNldCB1cCBhIGNvcnJlc3BvbmRpbmcgc2NhbGUgZmFjdG9yIG9uIHRoZSBn
cmFwaGljcyBjb250ZXh0LgotICAgIGJ1ZmZlci0+Y29udGV4dCgpLnNjYWxlKHNjYWxlZFNpemUg
LyBzaXplKTsKLSAgICByZXR1cm4gYnVmZmVyOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGVDb21wYXRpYmxlQnVmZmVyKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKLXsKLSNpZiBVU0UoRElSRUNUMkQpCi0gICAg
cmV0dXJuIGNyZWF0ZShzaXplLCBjb250ZXh0LnJlbmRlcmluZ01vZGUoKSwgJmNvbnRleHQsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGUoc2l6
ZSwgY29udGV4dC5yZW5kZXJpbmdNb2RlKCksIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSk7
Ci0jZW5kaWYKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXItPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsK
IH0KIAotSW50U2l6ZSBJbWFnZUJ1ZmZlcjo6Y29tcGF0aWJsZUJ1ZmZlclNpemUoY29uc3QgRmxv
YXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCiB7
Ci0gICAgLy8gRW5sYXJnZSB0aGUgYnVmZmVyIHNpemUgaWYgdGhlIGNvbnRleHQncyB0cmFuc2Zv
cm0gaXMgc2NhbGluZyBpdCBzbyB3ZSBuZWVkIGEgaGlnaGVyCi0gICAgLy8gcmVzb2x1dGlvbiB0
aGFuIG9uZSBwaXhlbCBwZXIgdW5pdC4KLSAgICByZXR1cm4gZXhwYW5kZWRJbnRTaXplKHNpemUg
KiBjb250ZXh0LnNjYWxlRmFjdG9yKCkpOworICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+c2lua0lu
dG9JbWFnZShwcmVzZXJ2ZVJlc29sdXRpb24pOwogfQogCi0jaWYgIVVTRShJT1NVUkZBQ0VfQ0FO
VkFTX0JBQ0tJTkdfU1RPUkUpCi1zaXplX3QgSW1hZ2VCdWZmZXI6Om1lbW9yeUNvc3QoKSBjb25z
dAordm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCiB7Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZv
a2VkIGNvbmN1cnJlbnRseSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJl
ZnVsIGFib3V0IHdoYXQgZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mg
c2FmZSB0byBhY2Nlc3MgaW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBw
b2ludGVyIGNoYXNpbmcuCi0gICAgcmV0dXJuIDQgKiBpbnRlcm5hbFNpemUoKS53aWR0aCgpICog
aW50ZXJuYWxTaXplKCkuaGVpZ2h0KCk7CisgICAgaW1hZ2VCdWZmZXItPmRyYXdDb25zdW1pbmco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwogfQogCi1zaXplX3QgSW1hZ2VC
dWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDA7Ci19Ci0j
ZW5kaWYKLQotfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggN2I3NzJhMmYyZDhmNmU3NTc3ZWFm
YzZkYjIyOTMwNmI3Y2ZlZGY5Yi4uMzU1MWY0NWY4MmJlYmEzN2YyOTcxYTA5NTA3ZDJiNWYyZjUy
ZDU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAx
MCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0yNywxNjAgKzI3LDgzIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVz
LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJE
YXRhLmgiCi0jaW5jbHVkZSAiSW1hZ2VQYWludGluZ09wdGlvbnMuaCIKLSNpbmNsdWRlICJJbnRT
aXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1MYXllci5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
QmFja2VuZC5oIgogI2luY2x1ZGUgIlJlbmRlcmluZ01vZGUuaCIKLSNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KLSNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMOwotY2xhc3MgSW1hZ2U7Ci1jbGFzcyBJbWFnZURhdGE7Ci1j
bGFzcyBJbnRQb2ludDsKLWNsYXNzIEludFJlY3Q7Ci1jbGFzcyBIb3N0V2luZG93OwotCi1lbnVt
IEJhY2tpbmdTdG9yZUNvcHkgewotICAgIENvcHlCYWNraW5nU3RvcmUsIC8vIEd1YXJhbnRlZSBz
dWJzZXF1ZW50IGRyYXdzIGRvbid0IGFmZmVjdCB0aGUgY29weS4KLSAgICBEb250Q29weUJhY2tp
bmdTdG9yZSAvLyBTdWJzZXF1ZW50IGRyYXdzIG1heSBhZmZlY3QgdGhlIGNvcHkuCi19OwotCi1l
bnVtIGNsYXNzIFByZXNlcnZlUmVzb2x1dGlvbiB7Ci0gICAgTm8sCi0gICAgWWVzLAotfTsKK25h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CitjbGFzcyBEcmF3aW5nQ29udGV4dDsKK30KIAogY2xhc3Mg
SW1hZ2VCdWZmZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURURfRVhQT1JUKEltYWdlQnVm
ZmVyLCBXRUJDT1JFX0VYUE9SVCk7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZm
ZXIpOwotICAgIGZyaWVuZCBjbGFzcyBJT1N1cmZhY2U7CiBwdWJsaWM6Ci0gICAgLy8gV2lsbCBy
ZXR1cm4gYSBudWxsIHBvaW50ZXIgb24gYWxsb2NhdGlvbiBmYWlsdXJlLgogICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBG
bG9hdFNpemUmLCBSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUgPSAxLCBDb2xv
clNwYWNlID0gQ29sb3JTcGFjZTo6U1JHQiwgY29uc3QgSG9zdFdpbmRvdyogPSBudWxscHRyKTsK
LSNpZiBVU0UoRElSRUNUMkQpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRlcmluZ01vZGUs
IGNvbnN0IEdyYXBoaWNzQ29udGV4dCosIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IDEsIENvbG9y
U3BhY2UgPSBDb2xvclNwYWNlOjpTUkdCLCBjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOwot
I2VuZGlmCi0KLSAgICAvLyBDcmVhdGUgYW4gaW1hZ2UgYnVmZmVyIGNvbXBhdGlibGUgd2l0aCB0
aGUgY29udGV4dCBhbmQgY29weSByZWN0IGZyb20gdGhpcyBidWZmZXIgaW50byB0aGlzIG5ldyBv
bmUuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjb3B5UmVjdFRvQnVmZmVyKGNv
bnN0IEZsb2F0UmVjdCYsIENvbG9yU3BhY2UsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNp
emUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKIAogICAgIC8vIENyZWF0ZSBhbiBpbWFnZSBi
dWZmZXIgY29tcGF0aWJsZSB3aXRoIHRoZSBjb250ZXh0LCB3aXRoIHN1aXRhYmxlIHJlc29sdXRp
b24gZm9yIGRyYXdpbmcgaW50byB0aGUgYnVmZmVyIGFuZCB0aGVuIGludG8gdGhpcyBjb250ZXh0
LgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUNvbXBhdGli
bGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlQ29tcGF0aWJsZUJ1ZmZl
cihjb25zdCBGbG9hdFNpemUmLCBDb2xvclNwYWNlLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
ICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGVDb21wYXRpYmxl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFj
ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICBzdGF0aWMgSW50U2l6ZSBjb21wYXRp
YmxlQnVmZmVyU2l6ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGljc0NvbnRleHQmKTsK
KyAgICAvLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiBjbGFtcGluZyB0aGUgSW1hZ2VC
dWZmZXIgd2hpY2ggaXMgY3JlYXRlZCBmb3IgZmlsdGVyLCBtYXNrZXIgb3IgY2xpcHBlci4KKyAg
ICBzdGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmKTsKKyAgICBz
dGF0aWMgYm9vbCBzaXplTmVlZHNDbGFtcGluZyhjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUm
IHNjYWxlKTsKKyAgICBzdGF0aWMgRmxvYXRTaXplIGNsYW1wZWRTaXplKGNvbnN0IEZsb2F0U2l6
ZSYpOworICAgIHN0YXRpYyBGbG9hdFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJiwg
RmxvYXRTaXplJiBzY2FsZSk7CisgICAgc3RhdGljIEZsb2F0UmVjdCBjbGFtcGVkUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIH5JbWFnZUJ1ZmZlcigpOworICAg
IHN0YXRpYyBJbnRTaXplIGNvbXBhdGlibGVCdWZmZXJTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogCi0gICAgLy8gVGhlIGFjdHVhbCByZXNvbHV0aW9u
IG9mIHRoZSBiYWNraW5nIHN0b3JlCi0gICAgY29uc3QgSW50U2l6ZSYgaW50ZXJuYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgY29uc3QgSW50U2l6ZSYgbG9naWNhbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxTaXplOyB9Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNj
YWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9uU2NhbGU7IH0KKyAgICB2aXJ0dWFsIEdy
YXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1
c2hDb250ZXh0KCkgPSAwOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3Q7CisgICAgdmlydHVhbCBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQq
IGRyYXdpbmdDb250ZXh0KCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgdm9pZCBm
bHVzaERyYXdpbmdDb250ZXh0KCkgeyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8SW1h
Z2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2Vy
dmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Q7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKTsKKyAgICB2aXJ0dWFsIEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBmbG9h
dCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCA9IDA7CisgICAgCisgICAgdmlydHVhbCBzaXplX3Qg
bWVtb3J5Q29zdCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9y
eUNvc3QoKSBjb25zdCA9IDA7CiAKLSAgICBlbnVtIENvb3JkaW5hdGVTeXN0ZW0geyBMb2dpY2Fs
Q29vcmRpbmF0ZVN5c3RlbSwgQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB9OworICAgIHZp
cnR1YWwgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+IGNv
cHlJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVSZXNv
bHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3QgPSAwOwogCi0gICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBnZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVj
dCYsIEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5
c3RlbSA9IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKLSAgICBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYsIElu
dFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gbnVsbHB0ciwgQ29vcmRpbmF0ZVN5c3RlbSA9
IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGNvcHlSZWN0VG9CdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgQ29sb3JTcGFjZSwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CiAKLSAgICB2b2lkIHB1dEJ5dGVBcnJheShjb25zdCBV
aW50OENsYW1wZWRBcnJheSYsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gYnVmZmVyRm9ybWF0LCBj
b25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtID0gTG9naWNhbENvb3JkaW5h
dGVTeXN0ZW0pOwotICAgIAotICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAg
IHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCA9IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEp
LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgPSB7IH0pID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRl
cm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNw
YWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiA9IHsgfSkgPSAwOwogCi0gICAgU3Ry
aW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1
YWxpdHkgPSBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0OwotICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25z
dDsKLSAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0OworICAgIHN0YXRpYyBO
YXRpdmVJbWFnZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4pOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRv
SW1hZ2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiwgUHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObyk7CisgICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwg
MCwgLTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKIAotI2lmIFVT
RShDQUlSTykKLSAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIGNvbnN0OwotI2VuZGlm
CisgICAgdmlydHVhbCB2b2lkIGNvbnZlcnRUb0x1bWluYW5jZU1hc2soKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFjZSBzcmNDb2xvclNwYWNlLCBD
b2xvclNwYWNlIGRzdENvbG9yU3BhY2UpID0gMDsKIAotI2lmICFVU0UoQ0cpCi0gICAgQWZmaW5l
VHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0o
KTsgfQotICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSk7Ci0gICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+Jik7Ci0jZWxzZQotICAg
IEFmZmluZVRyYW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKDEsIDAsIDAsIC0xLCAwLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSk7
IH0KLSNlbmRpZgotICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgVmVjdG9yPHVpbnQ4
X3Q+IHRvQkdSQURhdGEoKSBjb25zdCA9IDA7CiAKLSAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNv
bnN0OwotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQm
IGRlc3RQb2ludCA9IHsgfSkgPSAwOwogCiAgICAgLy8gRklYTUU6IGN1cnJlbnQgaW1wbGVtZW50
YXRpb25zIG9mIHRoaXMgbWV0aG9kIGhhdmUgdGhlIHJlc3RyaWN0aW9uIHRoYXQgdGhleSBvbmx5
IHdvcmsKICAgICAvLyB3aXRoIHRleHR1cmVzIHRoYXQgYXJlIFJHQiBvciBSR0JBIGZvcm1hdCwg
YW5kIFVOU0lHTkVEX0JZVEUgdHlwZS4KLSAgICBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShH
cmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBHQ0dM
ZW51bSwgYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCBib29sIGNvcHlUb1BsYXRmb3JtVGV4dHVy
ZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYsIEdDR0xlbnVtLCBQbGF0Zm9ybUdMT2JqZWN0LCBH
Q0dMZW51bSwgYm9vbCwgYm9vbCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1MYXll
ciogcGxhdGZvcm1MYXllcigpIGNvbnN0ID0gMDsKIAotICAgIC8vIFRoZXNlIGZ1bmN0aW9ucyBh
cmUgdXNlZCB3aGVuIGNsYW1waW5nIHRoZSBJbWFnZUJ1ZmZlciB3aGljaCBpcyBjcmVhdGVkIGZv
ciBmaWx0ZXIsIG1hc2tlciBvciBjbGlwcGVyLgotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0Ns
YW1waW5nKGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHN0YXRpYyBib29sIHNpemVOZWVkc0NsYW1w
aW5nKGNvbnN0IEZsb2F0U2l6ZSYsIEZsb2F0U2l6ZSYgc2NhbGUpOwotICAgIHN0YXRpYyBGbG9h
dFNpemUgY2xhbXBlZFNpemUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgc3RhdGljIEZsb2F0U2l6
ZSBjbGFtcGVkU2l6ZShjb25zdCBGbG9hdFNpemUmLCBGbG9hdFNpemUmIHNjYWxlKTsKLSAgICBz
dGF0aWMgRmxvYXRSZWN0IGNsYW1wZWRSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotCi1wcml2YXRl
OgotI2lmIFVTRShDRykKLSAgICAvLyBUaGUgcmV0dXJuZWQgaW1hZ2UgbWlnaHQgYmUgbGFyZ2Vy
IHRoYW4gdGhlIGludGVybmFsU2l6ZSgpLiBJZiB5b3Ugd2FudCB0aGUgc21hbGxlcgotICAgIC8v
IGltYWdlLCBjcm9wIHRoZSByZXN1bHQuCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvcHlO
YXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5ID0gQ29weUJhY2tpbmdTdG9yZSkgY29uc3Q7Ci0g
ICAgc3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzaW5rSW50b05hdGl2ZUltYWdlKHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4pOwotICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgY29uc3Q7
Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3B5TmF0aXZl
SW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0OwotICAgIHN0
YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IHNpbmtJbnRvTmF0aXZlSW1hZ2Uoc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPik7Ci0gICAgdm9pZCBmbHVzaENvbnRleHQoKSBjb25zdDsKLSNlbmRp
ZgorcHJvdGVjdGVkOgorICAgIEltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwogICAgIAotICAgIHZv
aWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKSwgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLSAgICB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYgPSB7IH0pOwotCi0gICAgc3RhdGljIHZvaWQgZHJhd0NvbnN1bWluZyhzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+LCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QgPSBGbG9hdFJlY3QoMCwgMCwg
LTEsIC0xKSwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmID0geyB9KTsKLQotICAgIGlubGlu
ZSB2b2lkIGdlbmVyaWNDb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7Ci0KLSAgICBmcmllbmQgY2xh
c3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKLSAg
ICBmcmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7Ci0gICAgZnJpZW5kIGNsYXNz
IE5hbWVkSW1hZ2VHZW5lcmF0ZWRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3MgR3JhZGllbnRJbWFn
ZTsKLSAgICBmcmllbmQgY2xhc3MgQ3VzdG9tUGFpbnRJbWFnZTsKLSAgICBmcmllbmQgY2xhc3Mg
Qml0bWFwSW1hZ2U7Ci0KLXByaXZhdGU6Ci0gICAgSW1hZ2VCdWZmZXJEYXRhIG1fZGF0YTsKLSAg
ICBJbnRTaXplIG1fc2l6ZTsKLSAgICBJbnRTaXplIG1fbG9naWNhbFNpemU7Ci0gICAgZmxvYXQg
bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHdpbGwgcGxhY2Ug
aXRzIHN1Y2Nlc3MgaW50byB0aGUgZ2l2ZW4gb3V0LXZhcmlhYmxlCi0gICAgLy8gc28gdGhhdCBj
cmVhdGUoKSBrbm93cyB3aGVuIGl0IHNob3VsZCByZXR1cm4gZmFpbHVyZS4KLSAgICBXRUJDT1JF
X0VYUE9SVCBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBz
dWNjZXNzKTsKLSNpZiBVU0UoQ0cpCi0gICAgSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0NvbG9yU3BhY2VSZWYsIFJlbmRlcmluZ01vZGUsIGNv
bnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiB0b0NGRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Q7Ci0jZWxpZiBVU0UoRElSRUNUMkQpCi0gICAg
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlLCBSZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhpY3ND
b250ZXh0KiwgYm9vbCYgc3VjY2Vzcyk7Ci0jZW5kaWYKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdl
UHRyIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1hZ2U+
IHNpbmtJbnRvSW1hZ2UoUHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpO
bykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VC
dWZmZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40NjNhYTVkYTYyNjI1M2I1MWQ5MmZlZDgxYWJj
YWJkMjc0M2RlZTg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI3NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdl
QnVmZmVyQmFja2VuZDo6SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKKyAgICA6IG1fbG9naWNhbFNpemUobG9naWNhbFNpemUp
CisgICAgLCBtX2JhY2tlbmRTaXplKGJhY2tlbmRTaXplKQorICAgICwgbV9yZXNvbHV0aW9uU2Nh
bGUocmVzb2x1dGlvblNjYWxlKQorICAgICwgbV9jb2xvclNwYWNlKGNvbG9yU3BhY2UpCit7Cit9
CisKK0ludFNpemUgSW1hZ2VCdWZmZXJCYWNrZW5kOjpjYWxjdWxhdGVCYWNrZW5kU2l6ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKK3sKKyAgICBGbG9hdFNp
emUgc2NhbGVkU2l6ZSA9IHsgY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKSwg
Y2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS5oZWlnaHQoKSkgfTsKKyAgICBpZiAoc2NhbGVk
U2l6ZS5pc0VtcHR5KCkgfHwgIXNjYWxlZFNpemUuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IEludFNpemUo
c2NhbGVkU2l6ZSk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0
ZXNQZXJSb3cgPSA0ICogQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGJhY2tlbmRT
aXplLndpZHRoKCkpOworICAgIGlmIChieXRlc1BlclJvdy5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBDaGVja2VkPHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51
bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KGJhY2tlbmRTaXplLmhl
aWdodCgpKSAqIGJ5dGVzUGVyUm93OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gYmFja2VuZFNpemU7Cit9CisKK05h
dGl2ZUltYWdlUHRyIEltYWdlQnVmZmVyQmFja2VuZDo6c2lua0ludG9OYXRpdmVJbWFnZSgpCit7
CisgICAgcmV0dXJuIGNvcHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Cit9CisK
K1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpzaW5rSW50b0ltYWdlKFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCit7CisgICAgcmV0dXJuIGNvcHlJbWFnZShE
b250Q29weUJhY2tpbmdTdG9yZSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OmRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBkcmF3KGRlc3RDb250
ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJC
YWNrZW5kOjpjb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCkKK3sKKyAgICBhdXRvIGltYWdlRGF0YSA9
IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGxv
Z2ljYWxSZWN0KCkpOworICAgIGlmICghaW1hZ2VEYXRhKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvKiBzcmNQaXhlbEFycmF5ID0gaW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdW5zaWduZWQg
cGl4ZWxBcnJheUxlbmd0aCA9IHNyY1BpeGVsQXJyYXktPmxlbmd0aCgpOworICAgIGZvciAodW5z
aWduZWQgcGl4ZWxPZmZzZXQgPSAwOyBwaXhlbE9mZnNldCA8IHBpeGVsQXJyYXlMZW5ndGg7IHBp
eGVsT2Zmc2V0ICs9IDQpIHsKKyAgICAgICAgdWludDhfdCBhID0gc3JjUGl4ZWxBcnJheS0+aXRl
bShwaXhlbE9mZnNldCArIDMpOworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgdWludDhfdCByID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCk7
CisgICAgICAgIHVpbnQ4X3QgZyA9IHNyY1BpeGVsQXJyYXktPml0ZW0ocGl4ZWxPZmZzZXQgKyAx
KTsKKyAgICAgICAgdWludDhfdCBiID0gc3JjUGl4ZWxBcnJheS0+aXRlbShwaXhlbE9mZnNldCAr
IDIpOworCisgICAgICAgIGRvdWJsZSBsdW1hID0gKHIgKiAwLjIxMjUgKyBnICogMC43MTU0ICsg
YiAqIDAuMDcyMSkgKiAoKGRvdWJsZSlhIC8gMjU1LjApOworICAgICAgICBzcmNQaXhlbEFycmF5
LT5zZXQocGl4ZWxPZmZzZXQgKyAzLCBsdW1hKTsKKyAgICB9CisKKyAgICBwdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqaW1hZ2VEYXRhLCBsb2dp
Y2FsUmVjdCgpLCBJbnRQb2ludDo6emVybygpKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdl
QnVmZmVyQmFja2VuZDo6dG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdAoreworICAgIFZlY3Rv
cjx1aW50OF90PiByZXN1bHQoNCAqIG1fbG9naWNhbFNpemUuYXJlYSgpLnVuc2FmZUdldCgpKTsK
KyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gbV9sb2dpY2FsU2l6ZS53aWR0aCgpICogNDsK
KyAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworCisgICAgdWludDhf
dCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpOworCisgICAgY29w
eUltYWdlUGl4ZWxzKAorICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBs
aWVkLCBiYWNrZW5kQ29sb3JGb3JtYXQoKSwgc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAg
ICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgQ29sb3JGb3JtYXQ6
OkJHUkEsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbV9sb2dpY2FsU2l6ZSk7CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVByZW11bHRp
cGxpZWRUb1ByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIGNvbnN0IHVp
bnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29sb3JGb3JtYXQsIHVpbnQ4X3QqIGRl
c3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3JjUGl4ZWxbM107CisgICAgaWYgKCFh
bHBoYSkgeworICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFBpeGVsKVsw
XSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3JjQ29sb3JGb3JtYXQg
PT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3Qq
PihkZXN0UGl4ZWwpWzBdID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHNyY1Bp
eGVsKVswXTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFN3YXAgcGl4ZWwgY2hh
bm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICBkZXN0UGl4ZWxbMF0gPSBzcmNQaXhlbFsyXTsKKyAg
ICBkZXN0UGl4ZWxbMV0gPSBzcmNQaXhlbFsxXTsKKyAgICBkZXN0UGl4ZWxbMl0gPSBzcmNQaXhl
bFswXTsKKyAgICBkZXN0UGl4ZWxbM10gPSBzcmNQaXhlbFszXTsKK30KKworc3RhdGljIGlubGlu
ZSB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11bHRpcGxpZWQoQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqIHNyY1BpeGVsLCBDb2xvckZvcm1hdCBkZXN0Q29s
b3JGb3JtYXQsIHVpbnQ4X3QqIGRlc3RQaXhlbCkKK3sKKyAgICB1aW50OF90IGFscGhhID0gc3Jj
UGl4ZWxbM107CisgICAgaWYgKCFhbHBoYSB8fCBhbHBoYSA9PSAyNTUpIHsKKyAgICAgICAgY29w
eVByZW11bHRpcGxpZWRUb1ByZW11bHRpcGxpZWQoc3JjQ29sb3JGb3JtYXQsIHNyY1BpeGVsLCBk
ZXN0Q29sb3JGb3JtYXQsIGRlc3RQaXhlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoc3JjQ29sb3JGb3JtYXQgPT0gZGVzdENvbG9yRm9ybWF0KSB7CisgICAgICAgIGRlc3RQ
aXhlbFswXSA9IChzcmNQaXhlbFswXSAqIDI1NSkgLyBhbHBoYTsKKyAgICAgICAgZGVzdFBpeGVs
WzFdID0gKHNyY1BpeGVsWzFdICogMjU1KSAvIGFscGhhOworICAgICAgICBkZXN0UGl4ZWxbMl0g
PSAoc3JjUGl4ZWxbMl0gKiAyNTUpIC8gYWxwaGE7CisgICAgICAgIGRlc3RQaXhlbFszXSA9IGFs
cGhhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVs
cyBCR1JBIDwtPiBSR0JBLgorICAgIGRlc3RQaXhlbFswXSA9IChzcmNQaXhlbFsyXSAqIDI1NSkg
LyBhbHBoYTsKKyAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4ZWxbMV0gKiAyNTUpIC8gYWxwaGE7
CisgICAgZGVzdFBpeGVsWzJdID0gKHNyY1BpeGVsWzBdICogMjU1KSAvIGFscGhhOworICAgIGRl
c3RQaXhlbFszXSA9IGFscGhhOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY29weVVucHJlbXVs
dGlwbGllZFRvUHJlbXVsdGlwbGllZChDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgY29uc3Qg
dWludDhfdCogc3JjUGl4ZWwsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdWludDhfdCog
ZGVzdFBpeGVsKQoreworICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNQaXhlbFszXTsKKyAgICBpZiAo
IWFscGhhIHx8IGFscGhhID09IDI1NSkgeworICAgICAgICBjb3B5UHJlbXVsdGlwbGllZFRvUHJl
bXVsdGlwbGllZChzcmNDb2xvckZvcm1hdCwgc3JjUGl4ZWwsIGRlc3RDb2xvckZvcm1hdCwgZGVz
dFBpeGVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1h
dCA9PSBkZXN0Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVs
WzBdICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAgICAgICBkZXN0UGl4ZWxbMV0gPSAoc3JjUGl4
ZWxbMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7CisgICAgICAgIGRlc3RQaXhlbFsyXSA9IChzcmNQ
aXhlbFsyXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgZGVzdFBpeGVsWzNdID0gYWxw
aGE7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTd2FwIHBpeGVsIGNoYW5uZWxz
IEJHUkEgPC0+IFJHQkEuCisgICAgZGVzdFBpeGVsWzBdID0gKHNyY1BpeGVsWzJdICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgIGRlc3RQaXhlbFsxXSA9IChzcmNQaXhlbFsxXSAqIGFscGhhICsg
MjU0KSAvIDI1NTsKKyAgICBkZXN0UGl4ZWxbMl0gPSAoc3JjUGl4ZWxbMF0gKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgZGVzdFBpeGVsWzNdID0gYWxwaGE7Cit9CisKK3RlbXBsYXRlPHZvaWQg
KCpjb3B5RnVuY3RvcikoQ29sb3JGb3JtYXQsIGNvbnN0IHVpbnQ4X3QqLCBDb2xvckZvcm1hdCwg
dWludDhfdCopPgorc3RhdGljIGlubGluZSB2b2lkIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0
ZWQoCisgICAgQ29sb3JGb3JtYXQgc3JjQ29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVy
Um93LCB1aW50OF90KiBzcmNSb3dzLAorICAgIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwg
dW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBzaXplLndpZHRoKCkgKiA0Owor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgc2l6ZS5oZWlnaHQoKTsgKyt5KSB7CisgICAgICAgIGZv
ciAoc2l6ZV90IHggPSAwOyB4IDwgYnl0ZXNQZXJSb3c7IHggKz0gNCkKKyAgICAgICAgICAgIGNv
cHlGdW5jdG9yKHNyY0NvbG9yRm9ybWF0LCAmc3JjUm93c1t4XSwgZGVzdENvbG9yRm9ybWF0LCAm
ZGVzdFJvd3NbeF0pOworICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OworICAgICAg
ICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7CisgICAgfQorfQorCit2b2lkIEltYWdlQnVm
ZmVyQmFja2VuZDo6Y29weUltYWdlUGl4ZWxzKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c3JjQWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNC
eXRlc1BlclJvdywgdWludDhfdCogc3JjUm93cywKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBk
ZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRlc3RSb3dzLCBjb25zdCBJbnRTaXplJiBzaXplKSBj
b25zdAoreworICAgIGlmIChzcmNBbHBoYUZvcm1hdCA9PSBkZXN0QWxwaGFGb3JtYXQpIHsKKyAg
ICAgICAgQVNTRVJUKHNyY0FscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQgJiYgZGVzdEFscGhhRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOworICAgICAgICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNv
cHlQcmVtdWx0aXBsaWVkVG9QcmVtdWx0aXBsaWVkPihzcmNDb2xvckZvcm1hdCwgc3JjQnl0ZXNQ
ZXJSb3csIHNyY1Jvd3MsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93LCBkZXN0Um93
cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZGVzdEFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgeworICAgICAg
ICBjb3B5SW1hZ2VQaXhlbHNVbmFjY2VsZXJhdGVkPGNvcHlQcmVtdWx0aXBsaWVkVG9VbnByZW11
bHRpcGxpZWQ+KHNyY0NvbG9yRm9ybWF0LCBzcmNCeXRlc1BlclJvdywgc3JjUm93cywgZGVzdENv
bG9yRm9ybWF0LCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBzaXplKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNvcHlJbWFnZVBpeGVsc1VuYWNjZWxlcmF0ZWQ8Y29weVVucHJl
bXVsdGlwbGllZFRvUHJlbXVsdGlwbGllZD4oc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93
LCBzcmNSb3dzLCBkZXN0Q29sb3JGb3JtYXQsIGRlc3RCeXRlc1BlclJvdywgZGVzdFJvd3MsIHNp
emUpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCwgdm9pZCogZGF0YSkgY29uc3QKK3sKKyAgICBJbnRSZWN0IHNyY1JlY3RTY2FsZWQg
PSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKKworICAgIGF1dG8gaW1hZ2VEYXRhID0g
SW1hZ2VEYXRhOjpjcmVhdGUoc3JjUmVjdFNjYWxlZC5zaXplKCkpOworICAgIGlmICghaW1hZ2VE
YXRhIHx8ICFpbWFnZURhdGEtPmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICBJbnRSZWN0IHNyY1JlY3RDbGlwcGVkID0gIGludGVyc2VjdGlvbihiYWNrZW5kUmVjdCgpLCBz
cmNSZWN0U2NhbGVkKTsKKyAgICBJbnRSZWN0IGRlc3RSZWN0ID0geyBJbnRQb2ludDo6emVybygp
LCBzcmNSZWN0Q2xpcHBlZC5zaXplKCkgfTsKKworICAgIGlmIChzcmNSZWN0U2NhbGVkLngoKSA8
IDApCisgICAgICAgIGRlc3RSZWN0LnNldFgoLXNyY1JlY3RTY2FsZWQueCgpKTsKKworICAgIGlm
IChzcmNSZWN0U2NhbGVkLnkoKSA8IDApCisgICAgICAgIGRlc3RSZWN0LnNldFkoLXNyY1JlY3RT
Y2FsZWQueSgpKTsKKworICAgIGlmIChkZXN0UmVjdC5zaXplKCkgIT0gc3JjUmVjdFNjYWxlZC5z
aXplKCkpCisgICAgICAgIGltYWdlRGF0YS0+ZGF0YSgpLT56ZXJvRmlsbCgpOworCisgICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIHNyY1JlY3RTY2FsZWQud2lkdGgoKTsKKyAgICB1
aW50OF90KiBkZXN0Um93cyA9IGltYWdlRGF0YS0+ZGF0YSgpLT5kYXRhKCkgKyBkZXN0UmVjdC55
KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3QqIHNyY1Jvd3MgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihkYXRhKSArIHNyY1JlY3RDbGlwcGVkLnkoKSAqIHNy
Y0J5dGVzUGVyUm93ICsgc3JjUmVjdENsaXBwZWQueCgpICogNDsKKworICAgIGNvcHlJbWFnZVBp
eGVscygKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgYmFj
a2VuZENvbG9yRm9ybWF0KCksIHNyY0J5dGVzUGVyUm93LCBzcmNSb3dzLAorICAgICAgICBvdXRw
dXRGb3JtYXQsIENvbG9yRm9ybWF0OjpSR0JBLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RSb3dzLCBk
ZXN0UmVjdC5zaXplKCkpOworCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0
Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgdm9pZCogZGF0YSkKK3sKKyAgICBJbnRSZWN0
IHNyY1JlY3RTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhzcmNSZWN0KTsKKyAgICBJbnRQ
b2ludCBkZXN0UG9pbnRTY2FsZWQgPSB0b0JhY2tlbmRDb29yZGluYXRlcyhkZXN0UG9pbnQpOwor
CisgICAgSW50UmVjdCBzcmNSZWN0Q2xpcHBlZCA9IGludGVyc2VjdGlvbih7IEludFBvaW50Ojp6
ZXJvKCksIGltYWdlRGF0YS5zaXplKCkgfSwgc3JjUmVjdFNjYWxlZCk7CisgICAgSW50UmVjdCBk
ZXN0UmVjdCA9IHNyY1JlY3RDbGlwcGVkOworICAgIGRlc3RSZWN0Lm1vdmVCeShkZXN0UG9pbnRT
Y2FsZWQpOworCisgICAgaWYgKHNyY1JlY3RTY2FsZWQueCgpIDwgMCkKKyAgICAgICAgZGVzdFJl
Y3Quc2V0WChkZXN0UmVjdC54KCkgLSBzcmNSZWN0U2NhbGVkLngoKSk7CisKKyAgICBpZiAoc3Jj
UmVjdFNjYWxlZC55KCkgPCAwKQorICAgICAgICBkZXN0UmVjdC5zZXRZKGRlc3RSZWN0LnkoKSAt
IHNyY1JlY3RTY2FsZWQueSgpKTsKKworICAgIGRlc3RSZWN0LmludGVyc2VjdChiYWNrZW5kUmVj
dCgpKTsKKyAgICBzcmNSZWN0Q2xpcHBlZC5zZXRTaXplKGRlc3RSZWN0LnNpemUoKSk7CisKKyAg
ICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygpOworICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oZGF0YSkgKyBkZXN0UmVjdC55
KCkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0UmVjdC54KCkgKiA0OworCisgICAgdW5zaWduZWQg
c3JjQnl0ZXNQZXJSb3cgPSA0ICogaW1hZ2VEYXRhLnNpemUoKS53aWR0aCgpOworICAgIHVpbnQ4
X3QqIHNyY1Jvd3MgPSBpbWFnZURhdGEuZGF0YSgpLT5kYXRhKCkgKyBzcmNSZWN0Q2xpcHBlZC55
KCkgKiBzcmNCeXRlc1BlclJvdyArIHNyY1JlY3RDbGlwcGVkLngoKSAqIDQ7CisKKyAgICBjb3B5
SW1hZ2VQaXhlbHMoCisgICAgICAgIGlucHV0Rm9ybWF0LCBDb2xvckZvcm1hdDo6UkdCQSwgc3Jj
Qnl0ZXNQZXJSb3csIHNyY1Jvd3MsCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQsIGJhY2tlbmRDb2xvckZvcm1hdCgpLCBkZXN0Qnl0ZXNQZXJSb3csIGRlc3RS
b3dzLCBkZXN0UmVjdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlhM2I2M2NkZjcxNzhhYmIxYjVhMzg4MjljNTVlMTI4ZWRiN2EyNGEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlckJhY2tlbmQuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkFscGhh
UHJlbXVsdGlwbGljYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBlc0dMLmgiCisjaW5jbHVkZSAiSW1h
Z2VQYWludGluZ09wdGlvbnMuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiTmF0
aXZlSW1hZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUxheWVyLmgiCisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHcmFwaGljc0NvbnRleHRHTE9wZW5HTDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFz
cyBJbWFnZTsKK2NsYXNzIEltYWdlRGF0YTsKKworZW51bSBCYWNraW5nU3RvcmVDb3B5IHsKKyAg
ICBDb3B5QmFja2luZ1N0b3JlLCAvLyBHdWFyYW50ZWUgc3Vic2VxdWVudCBkcmF3cyBkb24ndCBh
ZmZlY3QgdGhlIGNvcHkuCisgICAgRG9udENvcHlCYWNraW5nU3RvcmUgLy8gU3Vic2VxdWVudCBk
cmF3cyBtYXkgYWZmZWN0IHRoZSBjb3B5LgorfTsKKworZW51bSBjbGFzcyBQcmVzZXJ2ZVJlc29s
dXRpb24gOiB1aW50OF90IHsKKyAgICBObywKKyAgICBZZXMsCit9OworCitlbnVtIGNsYXNzIENv
bG9yRm9ybWF0IDogdWludDhfdCB7CisgICAgUkdCQSwKKyAgICBCR1JBCit9OworCitjbGFzcyBJ
bWFnZUJ1ZmZlckJhY2tlbmQgeworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwg
fkltYWdlQnVmZmVyQmFja2VuZCgpID0gZGVmYXVsdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBJbnRTaXplIGNhbGN1bGF0ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSk7CisKKyAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmx1c2hDb250ZXh0KCkgeyB9CisKKyAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9sb2dpY2FsU2l6ZTsgfQor
ICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmRTaXplOyB9
CisgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHV0aW9u
U2NhbGU7IH0KKyAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCB7IHJldHVybiBtX2Nv
bG9yU3BhY2U7IH0KKworICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsgfQorICAgIHZpcnR1YWwgc2l6ZV90
IG1lbW9yeUNvc3QoKSBjb25zdCB7IHJldHVybiA0ICogbV9iYWNrZW5kU2l6ZS5hcmVhKCkudW5z
YWZlR2V0KCk7IH0KKyAgICB2aXJ0dWFsIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dCB7IHJldHVybiAwOyB9CisKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJ
bWFnZShCYWNraW5nU3RvcmVDb3B5KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWZQdHI8SW1h
Z2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0
ID0gMDsKKworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkcmF3KEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSA9IDA7CisgICAgV0VCQ09SRV9FWFBPUlQg
dmlydHVhbCB2b2lkIGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYpID0gMDsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFn
ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVmUHRyPEltYWdlPiBzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lk
IGRyYXdDb25zdW1pbmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50
aW5nT3B0aW9ucyYpOworCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb252ZXJ0VG9MdW1pbmFu
Y2VNYXNrKCk7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2UoQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSkgeyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlw
bGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1h
dCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCkgPSAwOworCisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3QgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgYm9vbCBjb3B5
VG9QbGF0Zm9ybVRleHR1cmUoR3JhcGhpY3NDb250ZXh0R0xPcGVuR0wmLCBHQ0dMZW51bSwgUGxh
dGZvcm1HTE9iamVjdCwgR0NHTGVudW0sIGJvb2wsIGJvb2wpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICBXRUJDT1JFX0VYUE9SVCBJbWFnZUJ1ZmZlckJhY2tlbmQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSk7CisKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGJ5dGVzUGVyUm93KCkgY29uc3QgeyByZXR1cm4gNCAqIG1fYmFja2VuZFNpemUud2lkdGgo
KTsgfQorICAgIHZpcnR1YWwgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qg
eyByZXR1cm4gQ29sb3JGb3JtYXQ6OlJHQkE7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCB0b0JhY2tlbmRDb29yZGluYXRlcyhUIHQpIGNvbnN0CisgICAgeworICAgICAgICBz
dGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTxULCBJbnRQb2ludD46OnZhbHVlIHx8IHN0ZDo6aXNf
c2FtZTxULCBJbnRTaXplPjo6dmFsdWUgfHwgc3RkOjppc19zYW1lPFQsIEludFJlY3Q+Ojp2YWx1
ZSk7CisgICAgICAgIGlmIChtX3Jlc29sdXRpb25TY2FsZSAhPSAxKQorICAgICAgICAgICAgdC5z
Y2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisgICAgICAgIHJldHVybiB0OworICAgIH0KKworICAg
IEludFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6
ZXJvKCksIG1fbG9naWNhbFNpemUpOyB9OworICAgIEludFJlY3QgYmFja2VuZFJlY3QoKSBjb25z
dCB7IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fYmFja2VuZFNpemUpOyB9Owor
CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBpeGVscygKKyAgICAg
ICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzcmNBbHBoYUZvcm1hdCwgQ29sb3JGb3JtYXQgc3Jj
Q29sb3JGb3JtYXQsIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93LCB1aW50OF90KiBzcmNSb3dzLAor
ICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc3RBbHBoYUZvcm1hdCwgQ29sb3JGb3Jt
YXQgZGVzdENvbG9yRm9ybWF0LCB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3csIHVpbnQ4X3QqIGRl
c3RSb3dzLCBjb25zdCBJbnRTaXplJikgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0
b3I8dWludDhfdD4gdG9CR1JBRGF0YSh2b2lkKiBkYXRhKSBjb25zdDsKKworICAgIFdFQkNPUkVf
RVhQT1JUIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgdm9pZCogZGF0YSkgY29u
c3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgdm9pZCogZGF0YSk7CisKKyAgICBJbnRT
aXplIG1fbG9naWNhbFNpemU7CisgICAgSW50U2l6ZSBtX2JhY2tlbmRTaXplOworICAgIGZsb2F0
IG1fcmVzb2x1dGlvblNjYWxlOworICAgIENvbG9yU3BhY2UgbV9jb2xvclNwYWNlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NjQyYTVjODg1ZTVjMTAyNDQ3YzczYTEyZjFkNmZiMzJiNWQzOTkwMy4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUJ1ZmZlckRhdGEuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2lmIFVTRShDRykKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlckRhdGFDRy5oIgot
I2VsaWYgVVNFKERJUkVDVDJEKQotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgi
Ci0jZWxpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhQ2Fpcm8uaCIKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1JbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI0M2E4NzE5Y2U0OWQxNzc2Yjk3NTNkNWQ3MjYw
ODc3ZjA1MTQzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgIkNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1h
Z2VCdWZmZXIuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJD
YWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCisjaWYgSEFWRShJT1NVUkZBQ0Up
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJ
Uk8pICYmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQbGF0Zm9ybVVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJh
Y2tlbmQgPSBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDsKKyNlbGlmIFVTRShESVJFQ1QyRCkK
K3VzaW5nIFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kOworI2VsaWYgVVNFKENBSVJPKQordXNpbmcgUGxhdGZvcm1VbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFj
ZUJhY2tlbmQ7CisjZW5kaWYKKworI2lmIEhBVkUoSU9TVVJGQUNFKQordXNpbmcgUGxhdGZvcm1B
Y2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDsKKyNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKK3Vz
aW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5k
OworI2VuZGlmCisKK3VzaW5nIFBsYXRmb3JtSW1hZ2VCdWZmZXIgPSBDb250ZXh0dWFsSW1hZ2VC
dWZmZXI8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IENvbnRleHR1YWxJbWFnZUJ1ZmZlcjxQbGF0
Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI8UGxhdGZvcm1VbmFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKK3VzaW5nIFBsYXRmb3JtQWNjZWxlcmF0ZWREaXNw
bGF5TGlzdEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxQbGF0Zm9ybUFjY2Vs
ZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3Jt
SW1hZ2VCdWZmZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDgxMThhZWFlZDBkZDA1NWJjYTYzZjdl
NTMwZjFlOTk4NmVlYmVhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgor
I2VsaWYgVVNFKERJUkVDVDJEKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5k
LmgiCisjZWxpZiBVU0UoQ0FJUk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
aCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBQ
bGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZCA9IEltYWdlQnVmZmVyQ0dCYWNrZW5kOworI2VsaWYg
VVNFKERJUkVDVDJEKQordXNpbmcgUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZDsKKyNlbGlmIFVTRShDQUlSTykKK3VzaW5nIFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ7CisjZW5kaWYKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wM2NiNmIyNDFhYTVkMTA1
ZjNjYWM4ZWRjMjM5ZDBmNTFmYmE5MzNjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUg
IkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVm
ZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmlu
Z0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihuZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30K
KworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmlu
Z0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKSB9OworICAgIHJldHVybiBob3N0
V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2lu
ZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkgOiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5n
ZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5k
OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUg
cmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkg
eworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9y
bUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJl
bmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGU6CisgICAgICAgIGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9
IFBsYXRmb3JtSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgUmVuZGVyaW5n
TW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0
Zm9ybUFjY2VsZXJhdGVkRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIEZBTExUSFJPVUdI
OworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAgIGlmICghaW1h
Z2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlzcGxheUxpc3RJ
bWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgaG9z
dFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZl
cjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdl
QnVmZmVyOworCisgICAgc3dpdGNoIChjb250ZXh0LnJlbmRlcmluZ01vZGUoKSkgeworICAgIGNh
c2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUFjY2VsZXJh
dGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKKyAgICAgICAgRkFMTFRIUk9V
R0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2UgUmVu
ZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAg
ICAgaW1hZ2VCdWZmZXIgPSBQbGF0Zm9ybUltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4
dCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlz
dEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtQWNjZWxlcmF0ZWRE
aXNwbGF5TGlzdEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIEZB
TExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3Q6CisgICAgICAg
IGlmICghaW1hZ2VCdWZmZXIpCisgICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFBsYXRmb3JtRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9S
ZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFjNzMwNjg1NzVkMjAxZTFjMDFmN2MwMGEz
ODBjZjYxYWU1MjgzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgiCisjaW5jbHVkZSAiUmVu
ZGVyaW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29u
dGV4dDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEludFNp
emU7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFJlbmRlcmluZ0JhY2tlbmQgeworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gY3JlYXRlKCk7CisK
KyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25z
dCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworCisgICAgdmlydHVhbCB+UmVuZGVyaW5nQmFja2Vu
ZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4g
Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVyaW5nTW9kZSwgZmxvYXQg
cmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAgdmly
dHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0
IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCitwcm90ZWN0ZWQ6CisgICAg
UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmlu
Z01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ01vZGUu
aAppbmRleCA2OWQ4YWU4MWM4NDhiMTBlNmYyZDA3YTc4OWIxNmMzMzNkYzIzY2I0Li5hYTQ4MzVk
YmZhYWFhOTc0MmYzNGFjYzM4ZjhhMWUwZTI3MGMyNGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCkBAIC0zMCw2ICszMCwxMCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIFJlbmRlcmluZ01vZGUgOiB1aW50OF90IHsK
ICAgICBBY2NlbGVyYXRlZCwKICAgICBVbmFjY2VsZXJhdGVkLAorICAgIERpc3BsYXlMaXN0QWNj
ZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3QsCisgICAgUmVtb3RlQWNjZWxlcmF0ZWQsCisgICAg
UmVtb3RlCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDY4MWFiNTZlZWIzNDE5NDYy
YjIzNDQ1MGQwMGY0MWY5MzM2NzRkMTguLjNjZmNlNzI5NTQyMDlkMzAzYTlmNzI0MzJmYmI0YjYz
OWQ0YjQyMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00NDksNyArNDUw
LDcgQEAgdm9pZCBTaGFkb3dCbHVyOjpkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNzQ29udGV4dCYg
Z3JhcGhpY3NDb250ZXh0LCBJbWFnZUJ1ZmZlciYKIHsKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKIAotICAgIEludFNpemUgYnVmZmVy
U2l6ZSA9IGxheWVySW1hZ2UuaW50ZXJuYWxTaXplKCk7CisgICAgSW50U2l6ZSBidWZmZXJTaXpl
ID0gbGF5ZXJJbWFnZS5iYWNrZW5kU2l6ZSgpOwogICAgIGlmIChidWZmZXJTaXplICE9IGxheWVy
U2l6ZSkgewogICAgICAgICAvLyBUaGUgcmVjdCBwYXNzZWQgdG8gY2xpcFRvSW1hZ2VCdWZmZXIo
KSBoYXMgdG8gYmUgdGhlIHNpemUgb2YgdGhlIGVudGlyZSBidWZmZXIsCiAgICAgICAgIC8vIGJ1
dCB3ZSBtYXkgbm90IGhhdmUgY2xlYXJlZCBpdCBhbGwsIHNvIGNsaXAgdG8gdGhlIGZpbGxlZCBw
YXJ0IGZpcnN0LgpAQCAtODg0LDEyICs4ODUsMTMgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyU2hh
ZG93QnVmZmVyKEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBJbnRTaXplJiB0ZW1wbGEK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBibHVyUmVjdChJbnRQb2ludCgpLCB0ZW1w
bGF0ZVNpemUpOwotICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5nZXRVbm11bHRpcGxp
ZWRJbWFnZURhdGEoYmx1clJlY3QpOworICAgIGF1dG8gbGF5ZXJEYXRhID0gbGF5ZXJJbWFnZS5n
ZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBibHVy
UmVjdCk7CiAgICAgaWYgKCFsYXllckRhdGEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJsdXJM
YXllckltYWdlKGxheWVyRGF0YS0+ZGF0YSgpLCBibHVyUmVjdC5zaXplKCksIGJsdXJSZWN0Lndp
ZHRoKCkgKiA0KTsKLSAgICBsYXllckltYWdlLnB1dEJ5dGVBcnJheSgqbGF5ZXJEYXRhLCBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIGJsdXJSZWN0LnNpemUoKSwgYmx1
clJlY3QsIHsgfSk7CisgICAgYXV0byogYmx1clBpeGVsQXJyYXkgPSBsYXllckRhdGEtPmRhdGEo
KTsKKyAgICBibHVyTGF5ZXJJbWFnZShibHVyUGl4ZWxBcnJheS0+ZGF0YSgpLCBibHVyUmVjdC5z
aXplKCksIGJsdXJSZWN0LndpZHRoKCkgKiA0KTsKKyAgICBsYXllckltYWdlLnB1dEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICpsYXllckRhdGEsIGJs
dXJSZWN0KTsKIH0KIAogdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIo
SW1hZ2VCdWZmZXImIGxheWVySW1hZ2UsIGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWly
b09wZXJhdGlvbnMuY3BwCmluZGV4IDY4OTg0ZDU2NGE5MjkyN2Q0MjhmY2ViYjgwZTE0YWFjZjlh
ZmE0ZWYuLmNkOGYxZGIzNTllMjZhMDFhMmM4NWJiZDIyZWEzNjhlNmFjODg5NGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvT3BlcmF0aW9u
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQ2Fpcm9P
cGVyYXRpb25zLmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIGVudW0gUGF0aERyYXdpbmdTdHlsZSB7
CiAKIHN0YXRpYyB2b2lkIGRyYXdTaGFkb3dMYXllckJ1ZmZlcihQbGF0Zm9ybUNvbnRleHRDYWly
byYgcGxhdGZvcm1Db250ZXh0LCBJbWFnZUJ1ZmZlciYgbGF5ZXJJbWFnZSwgY29uc3QgRmxvYXRQ
b2ludCYgbGF5ZXJPcmlnaW4sIGNvbnN0IEZsb2F0U2l6ZSYgbGF5ZXJTaXplLCBjb25zdCBTaGFk
b3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1h
Z2UubmF0aXZlSW1hZ2UoKSkgeworICAgIGlmIChhdXRvIHN1cmZhY2UgPSBsYXllckltYWdlLmNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpIHsKICAgICAgICAgZHJhd05hdGl2
ZUltYWdlKHBsYXRmb3JtQ29udGV4dCwgc3VyZmFjZS5nZXQoKSwgRmxvYXRSZWN0KHJvdW5kZWRJ
bnRQb2ludChsYXllck9yaWdpbiksIGxheWVyU2l6ZSksIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IGxheWVyU2l6ZSksIHsgc2hhZG93U3RhdGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0b3IgfSwgc2hh
ZG93U3RhdGUuZ2xvYmFsQWxwaGEsIFNoYWRvd1N0YXRlKCkpOwogICAgIH0KIH0KQEAgLTE4Myw3
ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBkcmF3U2hhZG93TGF5ZXJCdWZmZXIoUGxhdGZvcm1Db250
ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1hZ2VCdQogLy8gRklYTUU6IFRoaXMgaXMgbW9z
dGx5IHNhbWUgYXMgZHJhd1NoYWRvd0xheWVyQnVmZmVyLCBzbyB3ZSBzaG91bGQgbWVyZ2UgdHdv
Lgogc3RhdGljIHZvaWQgZHJhd1NoYWRvd0ltYWdlKFBsYXRmb3JtQ29udGV4dENhaXJvJiBwbGF0
Zm9ybUNvbnRleHQsIEltYWdlQnVmZmVyJiBsYXllckltYWdlLCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFk
b3dTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gbGF5ZXJJbWFnZS5uYXRpdmVJbWFn
ZSgpKSB7CisgICAgaWYgKGF1dG8gc3VyZmFjZSA9IGxheWVySW1hZ2UuY29weU5hdGl2ZUltYWdl
KERvbnRDb3B5QmFja2luZ1N0b3JlKSkgewogICAgICAgICBkcmF3TmF0aXZlSW1hZ2UocGxhdGZv
cm1Db250ZXh0LCBzdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgeyBzaGFkb3dTdGF0
ZS5nbG9iYWxDb21wb3NpdGVPcGVyYXRvciB9LCBzaGFkb3dTdGF0ZS5nbG9iYWxBbHBoYSwgU2hh
ZG93U3RhdGUoKSk7CiAgICAgfQogfQpAQCAtMTkyLDcgKzE5Miw3IEBAIHN0YXRpYyB2b2lkIGZp
bGxTaGFkb3dCdWZmZXIoUGxhdGZvcm1Db250ZXh0Q2Fpcm8mIHBsYXRmb3JtQ29udGV4dCwgSW1h
Z2VCdWZmZXImCiB7CiAgICAgc2F2ZShwbGF0Zm9ybUNvbnRleHQpOwogCi0gICAgaWYgKGF1dG8g
c3VyZmFjZSA9IGxheWVySW1hZ2UubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNl
ID0gbGF5ZXJJbWFnZS5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpKQogICAg
ICAgICBjbGlwVG9JbWFnZUJ1ZmZlcihwbGF0Zm9ybUNvbnRleHQsIHN1cmZhY2UuZ2V0KCksIEZs
b2F0UmVjdChsYXllck9yaWdpbiwgZXhwYW5kZWRJbnRTaXplKGxheWVyU2l6ZSkpKTsKIAogICAg
IEZpbGxTb3VyY2UgZmlsbFNvdXJjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAppbmRl
eCA5YjAyNWUxNDc2NzM1MmUxNGFkNDhmODY3YjA0NTg1ZWU4MDM0MTM0Li40ZTFiZjJiNDM2N2Yz
NDM1OWQ4NTRlYjc4YzIyMDJkZjU3YjI3NDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdl
QnVmZmVyKEltYWdlQnVmZmVyJiBidWZmZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGUKICAgICB9CiAK
ICAgICBBU1NFUlQoaGFzUGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChhdXRvIHN1cmZhY2Ug
PSBidWZmZXIubmF0aXZlSW1hZ2UoKSkKKyAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLmNv
cHlOYXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCiAgICAgICAgIENhaXJvOjpjbGlw
VG9JbWFnZUJ1ZmZlcigqcGxhdGZvcm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dEltcGxDYWlyby5jcHAKaW5kZXggYmNhMjlk
ZmI2OTQ5ODZlODc3NDY2YjhmMDc3ODZmYmQxYmYzOTQ1Ni4uY2Q4NjVhYWEyNjAxOWZmYzc1YWVl
ZTkyNjIwMmNmMTEyNTk1YmM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0SW1wbENhaXJvLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm8u
Y3BwCkBAIC00MTQsNyArNDE0LDcgQEAgSW50UmVjdCBHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86
OmNsaXBCb3VuZHMoKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dEltcGxDYWlybzo6Y2xpcFRvSW1h
Z2VCdWZmZXIoSW1hZ2VCdWZmZXImIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
IHsKLSAgICBpZiAoYXV0byBzdXJmYWNlID0gYnVmZmVyLm5hdGl2ZUltYWdlKCkpCisgICAgaWYg
KGF1dG8gc3VyZmFjZSA9IGJ1ZmZlci5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3Rv
cmUpKQogICAgICAgICBDYWlybzo6Y2xpcFRvSW1hZ2VCdWZmZXIobV9wbGF0Zm9ybUNvbnRleHQs
IHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjYzNWJmNDNmNzNkNzMzY2EzZTIyMmUzMmQ3ZTIx
MTU2ZDExZWFjYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDc1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJp
Z2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxmaXNoLm9y
Zz4KLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcpIENvLiBM
dGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRl
ICJDYWlyb09wZXJhdGlvbnMuaCIKLSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1
ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0SW1wbENhaXJvLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
YWlyby5oIgotI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhdHRlcm4uaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRl
eHRDYWlyby5oIgotI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNDSW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1R5cGVkQXJyYXlJ
bmxpbmVzLmg+Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdMQ29u
dGV4dC5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJHTC5oIgotCi0jaWYgVVNFKEVHTCkKLSNp
ZiBVU0UoTElCRVBPWFkpCi0jaW5jbHVkZSAiRXBveHlFR0wuaCIKLSNlbHNlCi0jaW5jbHVkZSA8
RUdML2VnbC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxjYWlyby1nbC5oPgotCi0jaWYg
VVNFKExJQkVQT1hZKQotI2luY2x1ZGUgPGVwb3h5L2dsLmg+Ci0jZWxpZiBVU0UoT1BFTkdMX0VT
KQotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotI2Vsc2UKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5o
IgotI2VuZGlmCi0KLSNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCi0jaW5jbHVkZSAiVGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXIuaCIKLSNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
UGxhdGZvcm1MYXllclByb3h5LmgiCi0jZW5kaWYKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLUltYWdlQnVmZmVyRGF0YTo6SW1hZ2VCdWZmZXJEYXRhKGNvbnN0IEludFNpemUmIHNp
emUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSkKLSAgICA6IG1fcGxhdGZvcm1Db250ZXh0
KDApCi0gICAgLCBtX3NpemUoc2l6ZSkKLSAgICAsIG1fcmVuZGVyaW5nTW9kZShyZW5kZXJpbmdN
b2RlKQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JESU5B
VEVEX0dSQVBISUNTKQotICAgICwgbV9jb21wb3NpdG9yVGV4dHVyZSgwKQotI2VuZGlmCi0gICAg
LCBtX3RleHR1cmUoMCkKLSNlbmRpZgotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpICYmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9yZW5kZXJpbmdNb2Rl
ID09IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkKSB7Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAg
ICAgIG1fbmljb3NpYUxheWVyID0gTmljb3NpYTo6Q29udGVudExheWVyOjpjcmVhdGUoTmljb3Np
YTo6Q29udGVudExheWVyVGV4dHVyZU1hcHBlckltcGw6OmNyZWF0ZUZhY3RvcnkoKnRoaXMpKTsK
LSNlbHNlCi0gICAgICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3IFRleHR1
cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOwotI2VuZGlmCi0gICAgfQotI2VuZGlmCi19Ci0K
LUltYWdlQnVmZmVyRGF0YTo6fkltYWdlQnVmZmVyRGF0YSgpCi17Ci0gICAgaWYgKG1fcmVuZGVy
aW5nTW9kZSAhPSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpZiBVU0UoQ09PUkRJTkFURURf
R1JBUEhJQ1MpICYmIFVTRShOSUNPU0lBKQotICAgIGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRM
YXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+aW1wbCgpKS5pbnZhbGlkYXRl
Q2xpZW50KCk7Ci0jZW5kaWYKLQotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0
ID0gR0xDb250ZXh0OjpjdXJyZW50KCk7Ci0gICAgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNw
bGF5Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVu
dCgpOwotCi0gICAgaWYgKG1fdGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAm
bV90ZXh0dXJlKTsKLQotI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKLSAgICBpZiAobV9j
b21wb3NpdG9yVGV4dHVyZSkKLSAgICAgICAgZ2xEZWxldGVUZXh0dXJlcygxLCAmbV9jb21wb3Np
dG9yVGV4dHVyZSk7Ci0jZW5kaWYKLQotICAgIGlmIChwcmV2aW91c0FjdGl2ZUNvbnRleHQpCi0g
ICAgICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0jZW5k
aWYKLX0KLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNvbXBvc2l0b3JC
dWZmZXIoKQotewotICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERp
c3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRleHQoKTsKLSAgICBjb250ZXh0LT5t
YWtlQ29udGV4dEN1cnJlbnQoKTsKLQotICAgIGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRv
clRleHR1cmUpOwotICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9y
VGV4dHVyZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7
Ci0gICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRF
UiwgR0xfTElORUFSKTsKLSAgICBnbFBpeGVsU3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEp
OwotICAgIGdsVGV4SW1hZ2UyRChHTF9URVhUVVJFXzJELCAwICwgR0xfUkdCQSwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCwgR0xfUkdCQSwgR0xfVU5TSUdORURfQllURSwgMCk7
Ci0KLSAgICBtX2NvbXBvc2l0b3JTdXJmYWNlID0gYWRvcHRSZWYoY2Fpcm9fZ2xfc3VyZmFjZV9j
cmVhdGVfZm9yX3RleHR1cmUoY29udGV4dC0+Y2Fpcm9EZXZpY2UoKSwgQ0FJUk9fQ09OVEVOVF9D
T0xPUl9BTFBIQSwgbV9jb21wb3NpdG9yVGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSkpOwotICAgIG1fY29tcG9zaXRvckNyID0gYWRvcHRSZWYoY2Fpcm9fY3JlYXRlKG1f
Y29tcG9zaXRvclN1cmZhY2UuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fY29t
cG9zaXRvckNyLmdldCgpLCBDQUlST19BTlRJQUxJQVNfTk9ORSk7Ci19Ci0KLSNpZiAhVVNFKE5J
Q09TSUEpCi1SZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gSW1hZ2VCdWZm
ZXJEYXRhOjpwcm94eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllclByb3h5
LmNvcHlSZWYoKTsKLX0KLSNlbmRpZgotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6c3dhcEJ1ZmZl
cnNJZk5lZWRlZCgpCi17Ci0gICAgR0xDb250ZXh0KiBwcmV2aW91c0FjdGl2ZUNvbnRleHQgPSBH
TENvbnRleHQ6OmN1cnJlbnQoKTsKLQotICAgIGlmICghbV9jb21wb3NpdG9yVGV4dHVyZSkgewot
ICAgICAgICBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7Ci0KLSAgICAgICAgYXV0byBwcm94eU9w
ZXJhdGlvbiA9Ci0gICAgICAgICAgICBbdGhpc10oVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQ
cm94eSYgcHJveHkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgTG9ja0hvbGRlciBo
b2xkZXIocHJveHkubG9jaygpKTsKLSAgICAgICAgICAgICAgICBwcm94eS5wdXNoTmV4dEJ1ZmZl
cihtYWtlVW5pcXVlPFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyQnVmZmVyPihtX2NvbXBvc2l0
b3JUZXh0dXJlLCBtX3NpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEp
KTsKLSAgICAgICAgICAgIH07Ci0jaWYgVVNFKE5JQ09TSUEpCi0gICAgICAgIHByb3h5T3BlcmF0
aW9uKGRvd25jYXN0PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25p
Y29zaWFMYXllci0+aW1wbCgpKS5wcm94eSgpKTsKLSNlbHNlCi0gICAgICAgIHByb3h5T3BlcmF0
aW9uKCptX3BsYXRmb3JtTGF5ZXJQcm94eSk7Ci0jZW5kaWYKLSAgICB9Ci0KLSAgICAvLyBJdCB3
b3VsZCBiZSBncmVhdCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3
ZSBkbyB3aXRoIHdlYmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCi0gICAgLy8gd2hlcmUg
b25lIGZyYW1lIHVzZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlv
dXMgZnJhbWUuIFNvIHdlIGp1c3QgY29weSB0aGUgY29udGVudAotICAgIC8vIGludG8gdGhlIGNv
bXBvc2l0b3IgYnVmZmVyLgotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0
b3JDci5nZXQoKSwgbV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0
b3IobV9jb21wb3NpdG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7Ci0gICAgY2Fp
cm9fcGFpbnQobV9jb21wb3NpdG9yQ3IuZ2V0KCkpOwotCi0gICAgaWYgKHByZXZpb3VzQWN0aXZl
Q29udGV4dCkKLSAgICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLX0KLSNlbmRpZgotCi12b2lkIGNsZWFyU3VyZmFjZShjYWlyb19zdXJmYWNlX3QqIHN1
cmZhY2UpCi17Ci0gICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJP
X1NUQVRVU19TVUNDRVNTKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4g
Y3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUoc3VyZmFjZSkpOwotICAgIGNhaXJvX3NldF9vcGVy
YXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfQ0xFQVIpOwotICAgIGNhaXJvX3BhaW50KGNy
LmdldCgpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OmNyZWF0ZUNhaXJvR0xTdXJmYWNl
KCkKLXsKLSAgICBhdXRvKiBjb250ZXh0ID0gUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5
Rm9yQ29tcG9zaXRpbmcoKS5zaGFyaW5nR0xDb250ZXh0KCk7Ci0gICAgY29udGV4dC0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci0KLSAgICAvLyBXZSBtdXN0IGdlbmVyYXRlIHRoZSB0ZXh0dXJlIG91
cnNlbHZlcywgYmVjYXVzZSB0aGVyZSBpcyBubyBDYWlybyBBUEkgZm9yIGV4dHJhY3RpbmcgaXQK
LSAgICAvLyBmcm9tIGEgcHJlLWV4aXN0aW5nIHN1cmZhY2UuCi0gICAgZ2xHZW5UZXh0dXJlcygx
LCAmbV90ZXh0dXJlKTsKLSAgICBnbEJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVy
ZSk7Ci0gICAgZ2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9T
LCBHTF9DTEFNUF9UT19FREdFKTsKLSAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwg
R0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOwotICAgIGdsVGV4UGFyYW1ldGVy
aShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAg
Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xf
TElORUFSKTsKLQotICAgIGdsUGl4ZWxTdG9yZWkoR0xfVU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0K
LSAgICBnbFRleEltYWdlMkQoR0xfVEVYVFVSRV8yRCwgMCAvKiBsZXZlbCAqLywgR0xfUkdCQSwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEs
IEdMX1VOU0lHTkVEX0JZVEUsIDApOwotCi0gICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNv
bnRleHQtPmNhaXJvRGV2aWNlKCk7Ci0KLSAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVn
ZSBwZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCi0gICAgY2Fpcm9fZ2xfZGV2
aWNlX3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7Ci0KLSAgICBtX3N1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJP
X0NPTlRFTlRfQ09MT1JfQUxQSEEsIG1fdGV4dHVyZSwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5o
ZWlnaHQoKSkpOwotICAgIGNsZWFyU3VyZmFjZShtX3N1cmZhY2UuZ2V0KCkpOwotfQotI2VuZGlm
Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fpcm9TdXJmYWNlQ29weShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAgYXV0byBjb3B5ID0gYWRvcHRSZWYoY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0FSR0IzMiwKLSAgICAgICAgY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksCi0gICAgICAgIGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSkpOwotCi0gICAgYXV0byBjciA9IGFkb3B0UmVmKGNh
aXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7Ci0gICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNyLmdldCgp
LCBDQUlST19PUEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShj
ci5nZXQoKSwgc3VyZmFjZSwgMCwgMCk7Ci0gICAgY2Fpcm9fcGFpbnQoY3IuZ2V0KCkpOwotCi0g
ICAgcmV0dXJuIGNvcHk7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PgotY2Fp
cm9TdXJmYWNlQ29lcmNlVG9JbWFnZShjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCi17Ci0gICAg
aWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoc3VyZmFjZSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFCi0gICAgICAgICYmIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoc3VyZmFjZSkgPT0g
Q0FJUk9fQ09OVEVOVF9DT0xPUl9BTFBIQSkKLSAgICAgICAgcmV0dXJuIHN1cmZhY2U7Ci0KLSAg
ICByZXR1cm4gY2Fpcm9TdXJmYWNlQ29weShzdXJmYWNlKTsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+
IEltYWdlQnVmZmVyOjp0b0JHUkFEYXRhKCkgY29uc3QKLXsKLSAgICBhdXRvIHN1cmZhY2UgPSBj
YWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGNh
aXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBWZWN0b3I8dWludDhfdD4g
aW1hZ2VEYXRhOwotICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkK
LSAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKLQotICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKLSAgICBpbWFnZURhdGEuYXBwZW5k
KHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoK
LSAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsK
LQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVy
OjpuYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS5tX3N1cmZhY2UuZ2V0
KCk7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJp
bmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgYm9vbCYgc3VjY2VzcykKLSAgICA6IG1fZGF0YShJ
bnRTaXplKHNpemUpLCByZW5kZXJpbmdNb2RlKQotICAgICwgbV9sb2dpY2FsU2l6ZShzaXplKQot
ICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewotICAgIHN1Y2Nlc3Mg
PSBmYWxzZTsgIC8vIE1ha2UgZWFybHkgcmV0dXJuIG1lYW4gZXJyb3IuCi0KLSAgICBmbG9hdCBz
Y2FsZWRXaWR0aCA9IGNlaWxmKG1fcmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0aCgpKTsKLSAg
ICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihtX3Jlc29sdXRpb25TY2FsZSAqIHNpemUuaGVp
Z2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0aWNhbGx5IHVzZSBhIGxv
d2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVkV2lkdGgsIHNjYWxlZEhl
aWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQpOwotICAgIG1fZGF0YS5t
X3NpemUgPSBtX3NpemU7Ci0KLSAgICBpZiAobV9zaXplLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAobV9kYXRh
Lm1fcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkgewotICAgICAg
ICBtX2RhdGEuY3JlYXRlQ2Fpcm9HTFN1cmZhY2UoKTsKLSAgICAgICAgaWYgKCFtX2RhdGEubV9z
dXJmYWNlIHx8IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpICE9
IENBSVJPX1NUQVRVU19TVUNDRVNTKQotICAgICAgICAgICAgbV9kYXRhLm1fcmVuZGVyaW5nTW9k
ZSA9IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7IC8vIElmIGFsbG9jYXRpb24gZmFpbHMs
IGZhbGwgYmFjayB0byBub24tYWNjZWxlcmF0ZWQgcGF0aC4KLSAgICB9Ci0gICAgaWYgKG1fZGF0
YS5tX3JlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCkKLSNlbHNl
Ci0gICAgQVNTRVJUKG1fZGF0YS5tX3JlbmRlcmluZ01vZGUgIT0gUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQpOwotI2VuZGlmCi0gICAgewotICAgICAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRh
X2tleV90IHNfc3VyZmFjZURhdGFLZXk7Ci0KLSAgICAgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zv
cm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIsIG1fc2l6ZS53aWR0aCgp
KTsKLSAgICAgICAgdm9pZCogc3VyZmFjZURhdGE7Ci0gICAgICAgIGlmICghdHJ5RmFzdFplcm9l
ZE1hbGxvYyhtX3NpemUuaGVpZ2h0KCkgKiBzdHJpZGUpLmdldFZhbHVlKHN1cmZhY2VEYXRhKSkK
LSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBtX2RhdGEubV9zdXJmYWNlID0gYWRvcHRS
ZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KHN1cmZhY2VEYXRhKSwgQ0FJUk9fRk9STUFUX0FSR0IzMiwgbV9zaXplLndpZHRo
KCksIG1fc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKSk7Ci0gICAgICAgIGNhaXJvX3N1cmZhY2Vfc2V0
X3VzZXJfZGF0YShtX2RhdGEubV9zdXJmYWNlLmdldCgpLCAmc19zdXJmYWNlRGF0YUtleSwgc3Vy
ZmFjZURhdGEsIFtdKHZvaWQqIGRhdGEpIHsgZmFzdEZyZWUoZGF0YSk7IH0pOwotICAgIH0KLQot
ICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhtX2RhdGEubV9zdXJmYWNlLmdldCgpKSAhPSBD
QUlST19TVEFUVVNfU1VDQ0VTUykKLSAgICAgICAgcmV0dXJuOyAgLy8gY3JlYXRlIHdpbGwgbm90
aWNlIHdlIGRpZG4ndCBzZXQgbV9pbml0aWFsaXplZCBhbmQgZmFpbC4KLQotICAgIGNhaXJvU3Vy
ZmFjZVNldERldmljZVNjYWxlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNj
YWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fdD4gY3IgPSBhZG9w
dFJlZihjYWlyb19jcmVhdGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotICAgIG1fZGF0YS5t
X3BsYXRmb3JtQ29udGV4dC5zZXRDcihjci5nZXQoKSk7Ci0gICAgbV9kYXRhLm1fY29udGV4dCA9
IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNy
ZWF0ZUZhY3RvcnkobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7Ci0gICAgc3VjY2VzcyA9IHRy
dWU7Ci19Ci0KLUltYWdlQnVmZmVyOjp+SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZm
ZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgcmV0dXJuIGNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoc2l6ZSwgQ29sb3JTcGFjZTo6
U1JHQiwgY29udGV4dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6OmNvbnRl
eHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLm1fY29udGV4dDsKLX0KLQotUmVmUHRy
PEltYWdlPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGltYWdlQnVmZmVyLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
KQotewotICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weUltYWdlKERvbnRDb3B5QmFja2luZ1N0
b3JlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVy
Ojpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1
dGlvbikgY29uc3QKLXsKLSAgICAvLyBjb3B5Q2Fpcm9JbWFnZVN1cmZhY2UgaW5oZXJpdHMgc3Vy
ZmFjZSdzIGRldmljZSBzY2FsZSBmYWN0b3IuCi0gICAgaWYgKGNvcHlCZWhhdmlvciA9PSBDb3B5
QmFja2luZ1N0b3JlKQotICAgICAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0ZShjb3B5Q2Fp
cm9JbWFnZVN1cmZhY2UobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkpOwotCi0gICAgLy8gQml0bWFw
SW1hZ2Ugd2lsbCByZWxlYXNlIHRoZSBwYXNzZWQgaW4gc3VyZmFjZSBvbiBkZXN0cnVjdGlvbgot
ICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+KG1f
ZGF0YS5tX3N1cmZhY2UpKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyhz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyLCBHcmFwaGljc0NvbnRleHQm
IGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlt
YWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0aW5hdGlv
bkNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQotewotICAgIGlmIChk
ZXN0aW5hdGlvbkNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoYXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkgewotICAgICAgICBpZiAoJmRl
c3RpbmF0aW9uQ29udGV4dCA9PSAmY29udGV4dCgpKQotICAgICAgICAgICAgc3VyZmFjZSA9IGNh
aXJvU3VyZmFjZUNvcHkoc3VyZmFjZS5nZXQoKSk7Ci0KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1
YWxpdHlNYWludGFpbmVyIGludGVycG9sYXRpb25RdWFsaXR5Rm9yVGhpc1Njb3BlKGRlc3RpbmF0
aW9uQ29udGV4dCwgb3B0aW9ucy5pbnRlcnBvbGF0aW9uUXVhbGl0eSgpKTsKLSAgICAgICAgY29u
c3QgYXV0byYgZGVzdGluYXRpb25Db250ZXh0U3RhdGUgPSBkZXN0aW5hdGlvbkNvbnRleHQuc3Rh
dGUoKTsKLSAgICAgICAgZHJhd05hdGl2ZUltYWdlKCpkZXN0aW5hdGlvbkNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIHN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCB7IG9wdGlvbnMs
IGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlLmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkgfSwgZGVz
dGluYXRpb25Db250ZXh0U3RhdGUuYWxwaGEsIFdlYkNvcmU6OkNhaXJvOjpTaGFkb3dTdGF0ZShk
ZXN0aW5hdGlvbkNvbnRleHRTdGF0ZSkpOwotICAgIH0KLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6
ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRl
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
cGF0dGVyblRyYW5zZm9ybSwKLSAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpCi17Ci0gICAgaWYg
KGNvbnRleHQucGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
YXV0byBzdXJmYWNlID0gbmF0aXZlSW1hZ2UoKSkKLSAgICAgICAgQ2Fpcm86OmRyYXdQYXR0ZXJu
KCpjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBzdXJmYWNlLmdldCgpLCBtX3NpemUsIGRlc3RS
ZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgb3B0aW9ucyk7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OnBsYXRmb3JtVHJhbnNmb3JtQ29sb3JTcGFjZShjb25zdCBzdGQ6OmFy
cmF5PHVpbnQ4X3QsIDI1Nj4mIGxvb2tVcFRhYmxlKQotewotICAgIC8vIEZJWE1FOiBFbmFibGUg
Y29sb3Igc3BhY2UgY29udmVyc2lvbnMgb24gYWNjZWxlcmF0ZWQgY2FudmFzZXMuCi0gICAgaWYg
KGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9kYXRhLm1fc3VyZmFjZS5nZXQoKSkgIT0gQ0FJUk9f
U1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhU3JjID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2RhdGEubV9zdXJmYWNl
LmdldCgpKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRl
KG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9zaXpl
LmhlaWdodCgpOyArK3kpIHsKLSAgICAgICAgdW5zaWduZWQqIHJvdyA9IHJlaW50ZXJwcmV0X2Nh
c3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwotICAgICAgICBmb3IgKGlu
dCB4ID0gMDsgeCA8IG1fc2l6ZS53aWR0aCgpOyB4KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
KiBwaXhlbCA9IHJvdyArIHg7Ci0gICAgICAgICAgICBDb2xvciBwaXhlbENvbG9yID0gY29sb3JG
cm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKLSAgICAgICAgICAgIHBpeGVsQ29sb3IgPSBD
b2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgpXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZVtwaXhlbENvbG9yLmdyZWVuKCldLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuYmx1ZSgpXSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAg
ICAgKnBpeGVsID0gcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcikudmFsdWUo
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlfcmVjdGFu
Z2xlKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwg
bV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLVJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGNv
cHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlLCBJ
bnRSZWN0JiByZWN0KQotewotICAgIGNhaXJvX3N1cmZhY2VfdHlwZV90IHN1cmZhY2VUeXBlID0g
Y2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShzdXJmYWNlKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkg
aGF2ZSBhbiBpbWFnZSwgd2Ugd3JpdGUgZGlyZWN0bHkgdG8gdGhlIHVuZGVybHlpbmcgZGF0YTsK
LSAgICAvLyBvdGhlcndpc2Ugd2UgY3JlYXRlIGEgdGVtcG9yYXJ5IHN1cmZhY2UgaW1hZ2UKLSAg
ICBpZiAoc3VyZmFjZVR5cGUgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAgICBy
ZXR1cm4gc3VyZmFjZTsKLSAgICAKLSAgICByZWN0LnNldFgoMCk7Ci0gICAgcmVjdC5zZXRZKDAp
OwotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19G
T1JNQVRfQVJHQjMyLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpKTsKLX0KLQotdGVtcGxh
dGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gcHJlbXVsdGlwbGllZD4KLVJlZlB0cjxVaW50OENs
YW1wZWRBcnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJl
Y3QmIGxvZ2ljYWxSZWN0LCBjb25zdCBJbWFnZUJ1ZmZlckRhdGEmIGRhdGEsIGNvbnN0IEludFNp
emUmIHNpemUsIGNvbnN0IEludFNpemUmIGxvZ2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUpCi17Ci0gICAgLy8gVGhlIGFyZWEgY2FuIG92ZXJmbG93IGlmIHRoZSByZWN0IGlzIHRvbyBi
aWcuCi0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0OwotICAg
IGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsKLSAgICBp
ZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAg
YXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChh
cmVhLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZsb3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAg
IGludCBlbmR4ID0gMDsKLSAgICBpZiAoIVdURjo6c2FmZUFkZChyZWN0LngoKSwgcmVjdC53aWR0
aCgpLCBlbmR4KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBDYW4gb3ZlcmZs
b3csIGFzIHdlIGFyZSBhZGRpbmcgMiBpbnRzLgotICAgIGludCBlbmR5ID0gMDsKLSAgICBpZiAo
IVdURjo6c2FmZUFkZChyZWN0LnkoKSwgcmVjdC5oZWlnaHQoKSwgZW5keSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDAgfHwg
ZW5keCA+IHNpemUud2lkdGgoKSB8fCBlbmR5ID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVz
dWx0LT56ZXJvRmlsbCgpOwotCi0gICAgaW50IG9yaWdpbnggPSByZWN0LngoKTsKLSAgICBpbnQg
ZGVzdHggPSAwOwotICAgIGlmIChvcmlnaW54IDwgMCkgewotICAgICAgICBkZXN0eCA9IC1vcmln
aW54OwotICAgICAgICBvcmlnaW54ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keCA+IHNpemUu
d2lkdGgoKSkKLSAgICAgICAgZW5keCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgbnVtQ29sdW1u
cyA9IGVuZHggLSBvcmlnaW54OwotCi0gICAgaW50IG9yaWdpbnkgPSByZWN0LnkoKTsKLSAgICBp
bnQgZGVzdHkgPSAwOwotICAgIGlmIChvcmlnaW55IDwgMCkgewotICAgICAgICBkZXN0eSA9IC1v
cmlnaW55OwotICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZW5keSA+IHNp
emUuaGVpZ2h0KCkpCi0gICAgICAgIGVuZHkgPSBzaXplLmhlaWdodCgpOwotICAgIGludCBudW1S
b3dzID0gZW5keSAtIG9yaWdpbnk7Ci0KLSAgICAvLyBOb3RoaW5nIHdpbGwgYmUgY29waWVkLCBz
byBqdXN0IHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChudW1Db2x1bW5zIDw9IDAgfHwgbnVt
Um93cyA8PSAwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLy8gVGhlIHNpemUgb2Yg
dGhlIGRlcml2ZWQgc3VyZmFjZSBpcyBpbiBCYWNraW5nU3RvcmVDb29yZGluYXRlU3lzdGVtLgot
ICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSBkZXZpY2Ugc2NhbGUgZm9yIHRoZSBkZXJpdmVkIHN1
cmZhY2UgZnJvbSB0aGlzIEltYWdlQnVmZmVyLgotICAgIEludFJlY3QgaW1hZ2VSZWN0KG9yaWdp
bngsIG9yaWdpbnksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IGltYWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QoZGF0
YS5tX3N1cmZhY2UuZ2V0KCksIGltYWdlUmVjdCk7Ci0gICAgY2Fpcm9TdXJmYWNlU2V0RGV2aWNl
U2NhbGUoaW1hZ2VTdXJmYWNlLmdldCgpLCByZXNvbHV0aW9uU2NhbGUsIHJlc29sdXRpb25TY2Fs
ZSk7Ci0gICAgb3JpZ2lueCA9IGltYWdlUmVjdC54KCk7Ci0gICAgb3JpZ2lueSA9IGltYWdlUmVj
dC55KCk7Ci0gICAgaWYgKGltYWdlU3VyZmFjZSAhPSBkYXRhLm1fc3VyZmFjZS5nZXQoKSkgewot
ICAgICAgICAvLyBUaGlzIGNhaXJvIHN1cmZhY2Ugb3BlcmF0aW9uIGlzIGRvbmUgaW4gTG9naWNh
bENvb3JkaW5hdGVTeXN0ZW0uCi0gICAgICAgIEludFJlY3QgbG9naWNhbEFyZWEgPSBpbnRlcnNl
Y3Rpb24obG9naWNhbFJlY3QsIEludFJlY3QoMCwgMCwgbG9naWNhbFNpemUud2lkdGgoKSwgbG9n
aWNhbFNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgY29weVJlY3RGcm9tT25lU3VyZmFjZVRvQW5v
dGhlcihkYXRhLm1fc3VyZmFjZS5nZXQoKSwgaW1hZ2VTdXJmYWNlLmdldCgpLCBJbnRTaXplKC1s
b2dpY2FsQXJlYS54KCksIC1sb2dpY2FsQXJlYS55KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGxv
Z2ljYWxBcmVhLnNpemUoKSksIEludFNpemUoKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY2hh
ciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoaW1hZ2VTdXJmYWNlLmdl
dCgpKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBkYXRhRHN0ID0gcmVzdWx0LT5kYXRhKCk7Ci0gICAg
aW50IHN0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShpbWFnZVN1cmZhY2Uu
Z2V0KCkpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7
Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IGRhdGFEc3QgKyBkZXN0eSAqIGRlc3RC
eXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7
ICsreSkgewotICAgICAgICB1bnNpZ25lZCogcm93ID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8dW5z
aWduZWQqPihkYXRhU3JjICsgc3RyaWRlICogKHkgKyBvcmlnaW55KSk7Ci0gICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7Ci0gICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHggKyBvcmlnaW54
OwotCi0gICAgICAgICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigpIGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBl
ciBwaXhlbCBpcyB0b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSAo
KnBpeGVsICYgMHhGRjAwMDAwMCkgPj4gMjQ7Ci0gICAgICAgICAgICB1bnNpZ25lZCByZWQgPSAo
KnBpeGVsICYgMHgwMEZGMDAwMCkgPj4gMTY7Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9
ICgqcGl4ZWwgJiAweDAwMDBGRjAwKSA+PiA4OwotICAgICAgICAgICAgdW5zaWduZWQgYmx1ZSA9
ICgqcGl4ZWwgJiAweDAwMDAwMEZGKTsKLQotICAgICAgICAgICAgaWYgKHByZW11bHRpcGxpZWQg
PT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBy
ZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVl
biAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1NSAv
IGFscGhhOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXhdICAgICA9IHJlZDsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsg
MV0gPSBncmVlbjsKLSAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBibHVlOwotICAg
ICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICB9Ci0gICAgICAg
IGRlc3RSb3dzICs9IGRlc3RCeXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBVbml0PgotaW5saW5lIFVuaXQgbG9naWNhbFVuaXQo
Y29uc3QgVW5pdCYgdmFsdWUsIEltYWdlQnVmZmVyOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW1PZlZhbHVlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCi17Ci0gICAgaWYgKGNvb3Jk
aW5hdGVTeXN0ZW1PZlZhbHVlID09IEltYWdlQnVmZmVyOjpMb2dpY2FsQ29vcmRpbmF0ZVN5c3Rl
bSB8fCByZXNvbHV0aW9uU2NhbGUgPT0gMS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAg
VW5pdCByZXN1bHQodmFsdWUpOwotICAgIHJlc3VsdC5zY2FsZSgxLjAgLyByZXNvbHV0aW9uU2Nh
bGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFVuaXQ+Ci1p
bmxpbmUgVW5pdCBiYWNraW5nU3RvcmVVbml0KGNvbnN0IFVuaXQmIHZhbHVlLCBJbWFnZUJ1ZmZl
cjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSwgZmxvYXQgcmVzb2x1
dGlvblNjYWxlKQotewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtT2ZWYWx1ZSA9PSBJbWFnZUJ1
ZmZlcjo6QmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbSB8fCByZXNvbHV0aW9uU2NhbGUgPT0g
MS4wKQotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgVW5pdCByZXN1bHQodmFsdWUpOwotICAg
IHJlc3VsdC5zY2FsZShyZXNvbHV0aW9uU2NhbGUpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIEludFJl
Y3QgbG9naWNhbFJlY3QgPSBsb2dpY2FsVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jl
c29sdXRpb25TY2FsZSk7Ci0gICAgSW50UmVjdCBiYWNraW5nU3RvcmVSZWN0ID0gYmFja2luZ1N0
b3JlVW5pdChyZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
aWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMg
PSBiYWNraW5nU3RvcmVSZWN0LnNpemUoKTsKLSAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oYmFja2luZ1N0b3JlUmVjdCwgbG9n
aWNhbFJlY3QsIG1fZGF0YSwgbV9zaXplLCBtX2xvZ2ljYWxTaXplLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFByZW11
bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgSW50U2l6ZSogcGl4ZWxBcnJh
eURpbWVuc2lvbnMsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkgY29uc3QKLXsK
LSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0ID0gbG9naWNhbFVuaXQocmVjdCwgY29vcmRpbmF0ZVN5
c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUpOwotICAgIEludFJlY3QgYmFja2luZ1N0b3JlUmVjdCA9
IGJhY2tpbmdTdG9yZVVuaXQocmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2Nh
bGUpOwotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlE
aW1lbnNpb25zID0gYmFja2luZ1N0b3JlUmVjdC5zaXplKCk7Ci0gICAgcmV0dXJuIGdldEltYWdl
RGF0YTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihiYWNraW5nU3RvcmVS
ZWN0LCBsb2dpY2FsUmVjdCwgbV9kYXRhLCBtX3NpemUsIG1fbG9naWNhbFNpemUsIG1fcmVzb2x1
dGlvblNjYWxlKTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0Qnl0ZUFycmF5KGNvbnN0IFVp
bnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9y
bWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVT
eXN0ZW0pCi17Ci0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gYmFja2luZ1N0b3JlVW5p
dChzb3VyY2VSZWN0LCBjb29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAg
SW50U2l6ZSBzY2FsZWRTb3VyY2VTaXplID0gYmFja2luZ1N0b3JlVW5pdChzb3VyY2VTaXplLCBj
b29yZGluYXRlU3lzdGVtLCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgSW50UG9pbnQgc2NhbGVk
RGVzdFBvaW50ID0gYmFja2luZ1N0b3JlVW5pdChkZXN0UG9pbnQsIGNvb3JkaW5hdGVTeXN0ZW0s
IG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBJbnRSZWN0IGxvZ2ljYWxTb3VyY2VSZWN0ID0gbG9n
aWNhbFVuaXQoc291cmNlUmVjdCwgY29vcmRpbmF0ZVN5c3RlbSwgbV9yZXNvbHV0aW9uU2NhbGUp
OwotICAgIEludFBvaW50IGxvZ2ljYWxEZXN0UG9pbnQgPSBsb2dpY2FsVW5pdChkZXN0UG9pbnQs
IGNvb3JkaW5hdGVTeXN0ZW0sIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIEFTU0VSVChzY2Fs
ZWRTb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc2NhbGVkU291cmNlUmVjdC5o
ZWlnaHQoKSA+IDApOwotCi0gICAgaW50IG9yaWdpbnggPSBzY2FsZWRTb3VyY2VSZWN0LngoKTsK
LSAgICBpbnQgZGVzdHggPSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC54
KCk7Ci0gICAgaW50IGxvZ2ljYWxEZXN0eCA9IGxvZ2ljYWxEZXN0UG9pbnQueCgpICsgbG9naWNh
bFNvdXJjZVJlY3QueCgpOwotICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKLSAgICBBU1NFUlQoZGVz
dHggPCBtX3NpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnggPj0gMCk7Ci0gICAgQVNT
RVJUKG9yaWdpbnggPD0gc2NhbGVkU291cmNlUmVjdC5tYXhYKCkpOwotCi0gICAgaW50IGVuZHgg
PSBzY2FsZWREZXN0UG9pbnQueCgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhYKCk7Ci0gICAgaW50
IGxvZ2ljYWxFbmR4ID0gbG9naWNhbERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC5t
YXhYKCk7Ci0gICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOwotCi0gICAgaW50IG51
bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7Ci0gICAgaW50IGxvZ2ljYWxOdW1Db2x1bW5zID0gbG9n
aWNhbEVuZHggLSBsb2dpY2FsRGVzdHg7Ci0KLSAgICBpbnQgb3JpZ2lueSA9IHNjYWxlZFNvdXJj
ZVJlY3QueSgpOwotICAgIGludCBkZXN0eSA9IHNjYWxlZERlc3RQb2ludC55KCkgKyBzY2FsZWRT
b3VyY2VSZWN0LnkoKTsKLSAgICBpbnQgbG9naWNhbERlc3R5ID0gbG9naWNhbERlc3RQb2ludC55
KCkgKyBsb2dpY2FsU291cmNlUmVjdC55KCk7Ci0gICAgQVNTRVJUKGRlc3R5ID49IDApOwotICAg
IEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPj0g
MCk7Ci0gICAgQVNTRVJUKG9yaWdpbnkgPD0gc2NhbGVkU291cmNlUmVjdC5tYXhZKCkpOwotCi0g
ICAgaW50IGVuZHkgPSBzY2FsZWREZXN0UG9pbnQueSgpICsgc2NhbGVkU291cmNlUmVjdC5tYXhZ
KCk7Ci0gICAgaW50IGxvZ2ljYWxFbmR5ID0gbG9naWNhbERlc3RQb2ludC55KCkgKyBsb2dpY2Fs
U291cmNlUmVjdC5tYXhZKCk7Ci0gICAgQVNTRVJUKGVuZHkgPD0gbV9zaXplLmhlaWdodCgpKTsK
LSAgICBpbnQgbnVtUm93cyA9IGVuZHkgLSBkZXN0eTsKLSAgICBpbnQgbG9naWNhbE51bVJvd3Mg
PSBsb2dpY2FsRW5keSAtIGxvZ2ljYWxEZXN0eTsKLQotICAgIC8vIFRoZSBzaXplIG9mIHRoZSBk
ZXJpdmVkIHN1cmZhY2UgaXMgaW4gQmFja2luZ1N0b3JlQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICAv
LyBXZSBuZWVkIHRvIHNldCB0aGUgZGV2aWNlIHNjYWxlIGZvciB0aGUgZGVyaXZlZCBzdXJmYWNl
IGZyb20gdGhpcyBJbWFnZUJ1ZmZlci4KLSAgICBJbnRSZWN0IGltYWdlUmVjdChkZXN0eCwgZGVz
dHksIG51bUNvbHVtbnMsIG51bVJvd3MpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGlt
YWdlU3VyZmFjZSA9IGNvcHlTdXJmYWNlVG9JbWFnZUFuZEFkanVzdFJlY3QobV9kYXRhLm1fc3Vy
ZmFjZS5nZXQoKSwgaW1hZ2VSZWN0KTsKLSAgICBjYWlyb1N1cmZhY2VTZXREZXZpY2VTY2FsZShp
bWFnZVN1cmZhY2UuZ2V0KCksIG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7
Ci0gICAgZGVzdHggPSBpbWFnZVJlY3QueCgpOwotICAgIGRlc3R5ID0gaW1hZ2VSZWN0LnkoKTsK
LQotICAgIHVpbnQ4X3QqIHBpeGVsRGF0YSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEo
aW1hZ2VTdXJmYWNlLmdldCgpKTsKLQotICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAq
IHNjYWxlZFNvdXJjZVNpemUud2lkdGgoKTsKLSAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfc3RyaWRlKGltYWdlU3VyZmFjZS5nZXQoKSk7Ci0KLSAgICBjb25zdCB1aW50
OF90KiBzcmNSb3dzID0gc291cmNlLmRhdGEoKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyAr
IG9yaWdpbnggKiA0OwotICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5KSB7Ci0g
ICAgICAgIHVuc2lnbmVkKiByb3cgPSByZWludGVycHJldF9jYXN0X3B0cjx1bnNpZ25lZCo+KHBp
eGVsRGF0YSArIHN0cmlkZSAqICh5ICsgZGVzdHkpKTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBudW1Db2x1bW5zOyB4KyspIHsKLSAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0Owot
ICAgICAgICAgICAgdW5zaWduZWQqIHBpeGVsID0gcm93ICsgeCArIGRlc3R4OwotCi0gICAgICAg
ICAgICAvLyBBdm9pZCBjYWxsaW5nIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigp
IGJlY2F1c2Ugb25lCi0gICAgICAgICAgICAvLyBmdW5jdGlvbiBjYWxsIHBlciBwaXhlbCBpcyB0
b28gZXhwZW5zaXZlLgotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93c1tiYXNleF07
Ci0gICAgICAgICAgICB1bnNpZ25lZCBncmVlbiA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICB1
bnNpZ25lZCBhbHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLQotICAgICAgICAgICAgaWYgKHNv
dXJjZUZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpIHsK
LSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdy
ZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBi
bHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwgcmVkICA8
PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKLSAgICAgICAgfQotICAgICAgICBzcmNSb3dzICs9
IHNyY0J5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIFRoaXMgY2Fpcm8gc3VyZmFjZSBvcGVy
YXRpb24gaXMgZG9uZSBpbiBMb2dpY2FsQ29vcmRpbmF0ZVN5c3RlbS4KLSAgICBjYWlyb19zdXJm
YWNlX21hcmtfZGlydHlfcmVjdGFuZ2xlKGltYWdlU3VyZmFjZS5nZXQoKSwgbG9naWNhbERlc3R4
LCBsb2dpY2FsRGVzdHksIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyk7Ci0KLSAg
ICBpZiAoaW1hZ2VTdXJmYWNlICE9IG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpIHsKLSAgICAgICAg
Ly8gVGhpcyBjYWlybyBzdXJmYWNlIG9wZXJhdGlvbiBpcyBkb25lIGluIExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtLgotICAgICAgICBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKGltYWdl
U3VyZmFjZS5nZXQoKSwgbV9kYXRhLm1fc3VyZmFjZS5nZXQoKSwgSW50U2l6ZSgpLCBJbnRSZWN0
KDAsIDAsIGxvZ2ljYWxOdW1Db2x1bW5zLCBsb2dpY2FsTnVtUm93cyksIEludFNpemUobG9naWNh
bERlc3RQb2ludC54KCkgKyBsb2dpY2FsU291cmNlUmVjdC54KCksIGxvZ2ljYWxEZXN0UG9pbnQu
eSgpICsgbG9naWNhbFNvdXJjZVJlY3QueSgpKSk7Ci0gICAgfQotfQotCi1TdHJpbmcgSW1hZ2VC
dWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+
IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKLXsKLSAgICBWZWN0b3I8dWludDhf
dD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKLSAgICBpZiAoZW5j
b2RlZEltYWdlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuICJkYXRhOiwiOwotCi0gICAgVmVj
dG9yPGNoYXI+IGJhc2U2NERhdGE7Ci0gICAgYmFzZTY0RW5jb2RlKGVuY29kZWRJbWFnZS5kYXRh
KCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOwotCi0gICAgcmV0dXJuICJkYXRh
OiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwotfQotCi1WZWN0b3I8dWlu
dDhfdD4gSW1hZ2VCdWZmZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25h
bDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7Ci0gICAgY2Fp
cm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dldF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpLT5jcigpKTsKLSAgICByZXR1cm4gZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxp
dHkpOwotfQotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgIVVTRShDT09S
RElOQVRFRF9HUkFQSElDUykKLXZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwYWludFRvVGV4dHVyZU1h
cHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHkp
Ci17Ci0gICAgQVNTRVJUKG1fdGV4dHVyZSk7Ci0KLSAgICAvLyBDYWlybyBtYXkgY2hhbmdlIHRo
ZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFmdGVy
IGZsdXNoaW5nLgotICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xDb250
ZXh0OjpjdXJyZW50KCk7Ci0gICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0KCkp
OwotICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0KLSAg
ICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4dHVy
ZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fc2l6ZSwgdGFyZ2V0
UmVjdCwgbWF0cml4LCBvcGFjaXR5KTsKLX0KLSNlbmRpZgotCi1QbGF0Zm9ybUxheWVyKiBJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKLSNpZiBVU0UoTklDT1NJQSkKLSAgICBpZiAobV9kYXRhLm1fcmVuZGVyaW5n
TW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCkKLSAgICAgICAgcmV0dXJuIG1fZGF0
YS5tX25pY29zaWFMYXllci5nZXQoKTsKLSNlbHNlCi0gICAgaWYgKG1fZGF0YS5tX3RleHR1cmUp
Ci0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PEltYWdlQnVmZmVyRGF0YSo+KCZtX2RhdGEpOwot
I2VuZGlmCi0jZW5kaWYKLSAgICByZXR1cm4gMDsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiwgR0NHTGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVudW0gaW50ZXJu
YWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkKLXsKLSNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9yZXNv
bHV0aW9uU2NhbGUgPT0gMS4wLCAiU2luY2UgdGhlIEhpRFBJIENhbnZhcyBmZWF0dXJlIGlzIHJl
bW92ZWQsIHRoZSByZXNvbHV0aW9uIGZhY3RvciBoZXJlIGlzIGFsd2F5cyAxLiIpOwotICAgIGlm
IChwcmVtdWx0aXBseUFscGhhIHx8IGZsaXBZKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoIW1fZGF0YS5tX3RleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdD
R0xlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0OwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgotICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVf
MkQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9YOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgotICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBiaW5k
VGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfQ1VCRV9NQVA7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBjYWlyb19zdXJm
YWNlX2ZsdXNoKG1fZGF0YS5tX3N1cmZhY2UuZ2V0KCkpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRy
PEdMQ29udGV4dD4gY29udGV4dCA9IEdMQ29udGV4dDo6Y3JlYXRlT2Zmc2NyZWVuQ29udGV4dCgm
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5Rm9yQ29tcG9zaXRpbmcoKSk7Ci0gICAgY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdWludDMyX3QgZmJvOwotICAgIGdsR2Vu
RnJhbWVidWZmZXJzKDEsICZmYm8pOwotICAgIGdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVG
RkVSLCBmYm8pOwotICAgIGdsRnJhbWVidWZmZXJUZXh0dXJlMkQoR0xfRlJBTUVCVUZGRVIsIEdM
X0NPTE9SX0FUVEFDSE1FTlQwLCBHTF9URVhUVVJFXzJELCBtX2RhdGEubV90ZXh0dXJlLCAwKTsK
LSAgICBnbEJpbmRUZXh0dXJlKGJpbmRUZXh0dXJlVGFyZ2V0LCBkZXN0aW5hdGlvblRleHR1cmUp
OwotICAgIGdsQ29weVRleEltYWdlMkQodGFyZ2V0LCAwLCBpbnRlcm5hbGZvcm1hdCwgMCwgMCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSwgMCk7Ci0gICAgZ2xCaW5kVGV4dHVyZShi
aW5kVGV4dHVyZVRhcmdldCwgMCk7Ci0gICAgZ2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZG
RVIsIDApOwotICAgIGdsRmx1c2goKTsKLSAgICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJv
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGRlc3RpbmF0aW9uVGV4dHVyZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGlu
dGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0ocHJlbXVsdGlwbHlBbHBoYSk7Ci0gICAg
VU5VU0VEX1BBUkFNKGZsaXBZKTsKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0Jh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb0JhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA3NmFmNDA4OTZiYWFjZDgwZDlmMWM1
ZWZhYTc5MGExNDliOGRkN2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5jcHAKQEAgLTAsMCAr
MSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6
aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIgPHplY2tlQHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAy
MDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEw
IFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJp
dG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fpcm8uaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorCisjaWYgVVNFKENBSVJPKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6
OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlc2VydmVSZXNvbHV0
aW9uKSBjb25zdAoreworICAgIC8vIEJpdG1hcEltYWdlIHdpbGwgcmVsZWFzZSB0aGUgcGFzc2Vk
IGluIHN1cmZhY2Ugb24gZGVzdHJ1Y3Rpb24KKyAgICByZXR1cm4gQml0bWFwSW1hZ2U6OmNyZWF0
ZShjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKSk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBh
aW50aW5nT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50
YWluZXIgaW50ZXJwb2xhdGlvblF1YWxpdHlGb3JUaGlzU2NvcGUoZGVzdENvbnRleHQsIG9wdGlv
bnMuaW50ZXJwb2xhdGlvblF1YWxpdHkoKSk7CisgICAgY29uc3QgYXV0byYgZGVzdGluYXRpb25D
b250ZXh0U3RhdGUgPSBkZXN0Q29udGV4dC5zdGF0ZSgpOworCisgICAgaWYgKGF1dG8gaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RDb250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2lu
Z1N0b3JlIDogRG9udENvcHlCYWNraW5nU3RvcmUpKQorICAgICAgICBkcmF3TmF0aXZlSW1hZ2Uo
KmRlc3RDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBpbWFnZS5nZXQoKSwgZGVzdFJlY3QsIHNy
Y1JlY3QsIHsgb3B0aW9ucywgZGVzdGluYXRpb25Db250ZXh0U3RhdGUuaW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSB9LCBkZXN0aW5hdGlvbkNvbnRleHRTdGF0ZS5hbHBoYSwgV2ViQ29yZTo6Q2Fp
cm86OlNoYWRvd1N0YXRlKGRlc3RpbmF0aW9uQ29udGV4dFN0YXRlKSk7Cit9CisKK3ZvaWQgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwaGFzZSwgY29uc3QgRmxvYXRTaXplJiwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMm
IG9wdGlvbnMpCit7CisgICAgaWYgKGF1dG8gaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoJmRlc3RD
b250ZXh0ID09ICZjb250ZXh0KCkgPyBDb3B5QmFja2luZ1N0b3JlIDogRG9udENvcHlCYWNraW5n
U3RvcmUpKQorICAgICAgICBDYWlybzo6ZHJhd1BhdHRlcm4oKmRlc3RDb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLCBpbWFnZS5nZXQoKSwgbV9sb2dpY2FsU2l6ZSwgZGVzdFJlY3QsIHNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBvcHRpb25zKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZl
ckNhaXJvQmFja2VuZDo6dHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3Bh
Y2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpCit7CisgICAgaWYgKHNyY0NvbG9yU3BhY2Ug
PT0gZGVzdENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIG9ubHkgc1JHQiA8
LT4gbGluZWFyUkdCIGFyZSBzdXBwb3J0ZWQgYXQgdGhlIG1vbWVudAorICAgIGlmICgoc3JjQ29s
b3JTcGFjZSAhPSBDb2xvclNwYWNlOjpMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xv
clNwYWNlOjpTUkdCKQorICAgICAgICB8fCAoZGVzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZTo6
TGluZWFyUkdCICYmIGRlc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2U6OlNSR0IpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZGVzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZTo6TGluZWFy
UkdCKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PHVpbnQ4X3QsIDI1Nj4gbGlu
ZWFyUmdiTFVUID0gW10geworICAgICAgICAgICAgc3RkOjphcnJheTx1aW50OF90LCAyNTY+IGFy
cmF5OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1LjBmOworICAgICAgICAgICAgICAg
IGNvbG9yID0gc1JHQlRvTGluZWFyQ29sb3JDb21wb25lbnQoY29sb3IpOworICAgICAgICAgICAg
ICAgIGFycmF5W2ldID0gc3RhdGljX2Nhc3Q8dWludDhfdD4ocm91bmQoY29sb3IgKiAyNTUpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnJheTsKKyAgICAgICAgfSgpOwor
ICAgICAgICBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UobGluZWFyUmdiTFVUKTsKKyAgICB9
IGVsc2UgaWYgKGRlc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2U6OlNSR0IpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBkZXZpY2VSZ2JMVVQ9IFtdIHsK
KyAgICAgICAgICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiBhcnJheTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAgICAgICAgICAgICAgIGZs
b2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IGxpbmVhclRv
U1JHQkNvbG9yQ29tcG9uZW50KGNvbG9yKTsKKyAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHN0
YXRpY19jYXN0PHVpbnQ4X3Q+KHJvdW5kKGNvbG9yICogMjU1KSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gYXJyYXk7CisgICAgICAgIH0oKTsKKyAgICAgICAgcGxhdGZvcm1U
cmFuc2Zvcm1Db2xvclNwYWNlKGRldmljZVJnYkxVVCk7CisgICAgfQorfQorCitTdHJpbmcgSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBP
cHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAg
ICBWZWN0b3I8dWludDhfdD4gZW5jb2RlZEltYWdlID0gdG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5
KTsKKyAgICBpZiAoZW5jb2RlZEltYWdlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuICJkYXRh
OiwiOworCisgICAgVmVjdG9yPGNoYXI+IGJhc2U2NERhdGE7CisgICAgYmFzZTY0RW5jb2RlKGVu
Y29kZWRJbWFnZS5kYXRhKCksIGVuY29kZWRJbWFnZS5zaXplKCksIGJhc2U2NERhdGEpOworCisg
ICAgcmV0dXJuICJkYXRhOiIgKyBtaW1lVHlwZSArICI7YmFzZTY0LCIgKyBiYXNlNjREYXRhOwor
fQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQ6OnRvRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVu
Y29kaW5nKG1pbWVUeXBlKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2dl
dF90YXJnZXQoY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpKTsKKyAgICByZXR1cm4g
ZGF0YShpbWFnZSwgbWltZVR5cGUsIHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvQmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yM2I5MTlhZDUyMmVhMTc4YjMyYzAwOWY1ZDg4ZDVkNzE2ZGVmM2ExCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
SW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyIDx6ZWNrZUBzZWxm
aXNoLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRA
d2Via2l0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUb3JjaCBNb2JpbGUgKEJlaWppbmcp
IENvLiBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQgewor
cHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBD
b3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246
Ok5vKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1h
Z2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JT
cGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2Up
IG92ZXJyaWRlOworCisgICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3Zl
cnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6
CisgICAgdXNpbmcgSW1hZ2VCdWZmZXJCYWNrZW5kOjpJbWFnZUJ1ZmZlckJhY2tlbmQ7CisKKyAg
ICBDb2xvckZvcm1hdCBiYWNrZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBDb2xvckZvcm1hdDo6QkdSQTsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybVRyYW5zZm9y
bUNvbG9yU3BhY2UoY29uc3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JikgeyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDM2
MzcyZjkxOWU3ZWNlOGNiYzZhMjYzYzQ4OWM5OWUwZTg3NjI0MwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDI2OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtp
dC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4g
THRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNh
aXJvR0xTdXJmYWNlQmFja2VuZC5oIgorCisjaWYgVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpbmNsdWRlICJHTENv
bnRleHQuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorCisjaWYgVVNFKEVHTCkKKyNpZiBVU0UoTElCRVBPWFkpCisjaW5j
bHVkZSAiRXBveHlFR0wuaCIKKyNlbHNlCisjaW5jbHVkZSA8RUdML2VnbC5oPgorI2VuZGlmCisj
ZW5kaWYKKyNpbmNsdWRlIDxjYWlyby1nbC5oPgorCisjaWYgVVNFKExJQkVQT1hZKQorI2luY2x1
ZGUgPGVwb3h5L2dsLmg+CisjZWxpZiBVU0UoT1BFTkdMX0VTKQorI2luY2x1ZGUgPEdMRVMyL2ds
Mi5oPgorI2Vsc2UKKyNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgorI2VuZGlmCisKKyNpZiBVU0Uo
Q09PUkRJTkFURURfR1JBUEhJQ1MpCisjaW5jbHVkZSAiVGV4dHVyZU1hcHBlclBsYXRmb3JtTGF5
ZXJCdWZmZXIuaCIKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5Lmgi
CisjZW5kaWYKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9H
TFN1cmZhY2VCYWNrZW5kKTsKKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyU3VyZmFjZShjYWly
b19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+IGNyID0gYWRvcHRS
ZWYoY2Fpcm9fY3JlYXRlKHN1cmZhY2UpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY3IuZ2V0
KCksIENBSVJPX09QRVJBVE9SX0NMRUFSKTsKKyAgICBjYWlyb19wYWludChjci5nZXQoKSk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1h
Z2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBI
b3N0V2luZG93KikKK3sKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2Vu
ZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8qIGNvbnRleHQgPSBQbGF0
Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJpbmdHTENvbnRl
eHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIC8vIFdlIG11
c3QgZ2VuZXJhdGUgdGhlIHRleHR1cmUgb3Vyc2VsdmVzLCBiZWNhdXNlIHRoZXJlIGlzIG5vIENh
aXJvIEFQSSBmb3IgZXh0cmFjdGluZyBpdAorICAgIC8vIGZyb20gYSBwcmUtZXhpc3Rpbmcgc3Vy
ZmFjZS4KKyAgICB1aW50MzJfdCB0ZXh0dXJlCisgICAgZ2xHZW5UZXh0dXJlcygxLCAmdGV4dHVy
ZSk7CisgICAgZ2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfVCwgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOworCisg
ICAgZ2xQaXhlbFN0b3JlaShHTF9VTlBBQ0tfQUxJR05NRU5ULCAxKTsKKworICAgIGdsVGV4SW1h
Z2UyRChHTF9URVhUVVJFXzJELCAwIC8qIGxldmVsICovLCBHTF9SR0JBLCBiYWNrZW5kU2l6ZS53
aWR0aCgpLCBiYWNrZW5kU2l6ZS5oZWlnaHQoKSwgMCAvKiBib3JkZXIgKi8sIEdMX1JHQkEsIEdM
X1VOU0lHTkVEX0JZVEUsIDApOworCisgICAgY2Fpcm9fZGV2aWNlX3QqIGRldmljZSA9IGNvbnRl
eHQtPmNhaXJvRGV2aWNlKCk7CisKKyAgICAvLyBUaHJlYWQtYXdhcmVuZXNzIGlzIGEgaHVnZSBw
ZXJmb3JtYW5jZSBoaXQgb24gbm9uLUludGVsIGRyaXZlcnMuCisgICAgY2Fpcm9fZ2xfZGV2aWNl
X3NldF90aHJlYWRfYXdhcmUoZGV2aWNlLCBGQUxTRSk7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBh
ZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4dHVyZShkZXZpY2UsIENBSVJP
X0NPTlRFTlRfQ09MT1JfQUxQSEEsIHRleHR1cmUsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tl
bmRTaXplLmhlaWdodCgpKSk7CisgICAgaWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2Up
ICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGNsZWFyU3VyZmFjZShzdXJmYWNlLmdldCgpKTsKKworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlckNhaXJv
R0xTdXJmYWNlQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpLCB0ZXh0dXJlKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpCit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5k
OjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgbnVsbHB0cik7Cit9CisKK0ltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFj
a2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5k
U2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+JiYgc3VyZmFjZSwgdWludDMyX3QgdGV4dHVyZSkKKyAgICA6IElt
YWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJl
c29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShzdXJmYWNlKSkKKyAgICAsIG1fdGV4
dHVyZSh0ZXh0dXJlKQoreworI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKKyNpZiBVU0Uo
TklDT1NJQSkKKyAgICBtX25pY29zaWFMYXllciA9IE5pY29zaWE6OkNvbnRlbnRMYXllcjo6Y3Jl
YXRlKE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsOjpjcmVhdGVGYWN0b3J5
KCp0aGlzKSk7CisjZWxzZQorICAgIG1fcGxhdGZvcm1MYXllclByb3h5ID0gYWRvcHRSZWYobmV3
IFRleHR1cmVNYXBwZXJQbGF0Zm9ybUxheWVyUHJveHkpOworI2VuZGlmCisjZW5kaWYKK30KKwor
SW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ6On5JbWFnZUJ1ZmZlckNhaXJvR0xTdXJm
YWNlQmFja2VuZCgpCit7CisjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKSAmJiBVU0UoTklD
T1NJQSkKKyAgICBkb3duY2FzdDxOaWNvc2lhOjpDb250ZW50TGF5ZXJUZXh0dXJlTWFwcGVySW1w
bD4obV9uaWNvc2lhTGF5ZXItPmltcGwoKSkuaW52YWxpZGF0ZUNsaWVudCgpOworI2VuZGlmCisK
KyAgICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVu
dCgpOworICAgIFBsYXRmb3JtRGlzcGxheTo6c2hhcmVkRGlzcGxheUZvckNvbXBvc2l0aW5nKCku
c2hhcmluZ0dMQ29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChtX3Rl
eHR1cmUpCisgICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisKKyNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAgaWYgKG1fY29tcG9zaXRvclRleHR1cmUpCisg
ICAgICAgIGdsRGVsZXRlVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworI2VuZGlm
CisKKyAgICBpZiAocHJldmlvdXNBY3RpdmVDb250ZXh0KQorICAgICAgICBwcmV2aW91c0FjdGl2
ZUNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitQbGF0Zm9ybUxheWVyKiBJbWFn
ZUJ1ZmZlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisjaWYgVVNFKE5JQ09TSUEpCisgICAg
cmV0dXJuIG1fbmljb3NpYUxheWVyLmdldCgpOworI2Vsc2UKKyAgICBpZiAobV90ZXh0dXJlKQor
ICAgICAgICByZXR1cm4gdGhpczsKKyNlbmRpZgorICAgIHJldHVybiBudWxscHRyOworfQorCiti
b29sIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpjb3B5VG9QbGF0Zm9ybVRleHR1
cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fcmVzb2x1dGlvblNjYWxlID09IDEuMCwg
IlNpbmNlIHRoZSBIaURQSSBDYW52YXMgZmVhdHVyZSBpcyByZW1vdmVkLCB0aGUgcmVzb2x1dGlv
biBmYWN0b3IgaGVyZSBpcyBhbHdheXMgMS4iKTsKKyAgICBpZiAocHJlbXVsdGlwbHlBbHBoYSB8
fCBmbGlwWSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX3RleHR1cmUpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEdDM0RlbnVtIGJpbmRUZXh0dXJlVGFyZ2V0Owor
ICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICBi
aW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVfMkQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9ZOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2Ug
R0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICBiaW5kVGV4dHVyZVRhcmdldCA9IEdMX1RFWFRVUkVf
Q1VCRV9NQVA7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBjYWlyb19zdXJmYWNlX2ZsdXNoKG1fc3VyZmFjZS5nZXQoKSk7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R0xDb250ZXh0PiBjb250ZXh0ID0gR0xDb250ZXh0Ojpj
cmVhdGVPZmZzY3JlZW5Db250ZXh0KCZQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JD
b21wb3NpdGluZygpKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB1
aW50MzJfdCBmYm87CisgICAgZ2xHZW5GcmFtZWJ1ZmZlcnMoMSwgJmZibyk7CisgICAgZ2xCaW5k
RnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIGZibyk7CisgICAgZ2xGcmFtZWJ1ZmZlclRleHR1
cmUyRChHTF9GUkFNRUJVRkZFUiwgR0xfQ09MT1JfQVRUQUNITUVOVDAsIEdMX1RFWFRVUkVfMkQs
IG1fdGV4dHVyZSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgZGVz
dGluYXRpb25UZXh0dXJlKTsKKyAgICBnbENvcHlUZXhJbWFnZTJEKHRhcmdldCwgMCwgaW50ZXJu
YWxmb3JtYXQsIDAsIDAsIG1fYmFja2VuZFNpemUud2lkdGgoKSwgbV9iYWNrZW5kU2l6ZS5oZWln
aHQoKSwgMCk7CisgICAgZ2xCaW5kVGV4dHVyZShiaW5kVGV4dHVyZVRhcmdldCwgMCk7CisgICAg
Z2xCaW5kRnJhbWVidWZmZXIoR0xfRlJBTUVCVUZGRVIsIDApOworICAgIGdsRmx1c2goKTsKKyAg
ICBnbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZmJvKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
I2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKK3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQ6OmNyZWF0ZUNvbXBvc2l0b3JCdWZmZXIoKQoreworICAgIGF1dG8qIGNvbnRl
eHQgPSBQbGF0Zm9ybURpc3BsYXk6OnNoYXJlZERpc3BsYXlGb3JDb21wb3NpdGluZygpLnNoYXJp
bmdHTENvbnRleHQoKTsKKyAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IGdsR2VuVGV4dHVyZXMoMSwgJm1fY29tcG9zaXRvclRleHR1cmUpOworICAgIGdsQmluZFRleHR1
cmUoR0xfVEVYVFVSRV8yRCwgbV9jb21wb3NpdG9yVGV4dHVyZSk7CisgICAgZ2xUZXhQYXJhbWV0
ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKTsK
KyAgICBnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpOworICAgIGdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgZ2xUZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICBnbFBpeGVs
U3RvcmVpKEdMX1VOUEFDS19BTElHTk1FTlQsIDEpOworICAgIGdsVGV4SW1hZ2UyRChHTF9URVhU
VVJFXzJELCAwICwgR0xfUkdCQSwgbV9iYWNrZW5kU2l6ZS53aWR0aCgpLCBtX2JhY2tlbmRTaXpl
LmhlaWdodCgpLCAwLCBHTF9SR0JBLCBHTF9VTlNJR05FRF9CWVRFLCAwKTsKKworICAgIG1fY29t
cG9zaXRvclN1cmZhY2UgPSBhZG9wdFJlZihjYWlyb19nbF9zdXJmYWNlX2NyZWF0ZV9mb3JfdGV4
dHVyZShjb250ZXh0LT5jYWlyb0RldmljZSgpLCBDQUlST19DT05URU5UX0NPTE9SX0FMUEhBLCBt
X2NvbXBvc2l0b3JUZXh0dXJlLCBtX2JhY2tlbmRTaXplLndpZHRoKCksIG1fYmFja2VuZFNpemUu
aGVpZ2h0KCkpKTsKKyAgICBtX2NvbXBvc2l0b3JDciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZSht
X2NvbXBvc2l0b3JTdXJmYWNlLmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2Nv
bXBvc2l0b3JDci5nZXQoKSwgQ0FJUk9fQU5USUFMSUFTX05PTkUpOworfQorCit2b2lkIEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpzd2FwQnVmZmVyc0lmTmVlZGVkKCkKK3sKKyAg
ICBHTENvbnRleHQqIHByZXZpb3VzQWN0aXZlQ29udGV4dCA9IEdMQ29udGV4dDo6Y3VycmVudCgp
OworCisgICAgaWYgKCFtX2NvbXBvc2l0b3JUZXh0dXJlKSB7CisgICAgICAgIGNyZWF0ZUNvbXBv
c2l0b3JCdWZmZXIoKTsKKworICAgICAgICBhdXRvIHByb3h5T3BlcmF0aW9uID0KKyAgICAgICAg
ICAgIFt0aGlzXShUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5JiBwcm94eSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBMb2NrSG9sZGVyIGhvbGRlcihwcm94eS5sb2NrKCkp
OworICAgICAgICAgICAgICAgIHByb3h5LnB1c2hOZXh0QnVmZmVyKG1ha2VVbmlxdWU8VGV4dHVy
ZU1hcHBlclBsYXRmb3JtTGF5ZXJCdWZmZXI+KG1fY29tcG9zaXRvclRleHR1cmUsIG1fYmFja2Vu
ZFNpemUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIEdMX1JHQkEpKTsKKyAgICAgICAg
ICAgIH07CisjaWYgVVNFKE5JQ09TSUEpCisgICAgICAgIHByb3h5T3BlcmF0aW9uKGRvd25jYXN0
PE5pY29zaWE6OkNvbnRlbnRMYXllclRleHR1cmVNYXBwZXJJbXBsPihtX25pY29zaWFMYXllci0+
aW1wbCgpKS5wcm94eSgpKTsKKyNlbHNlCisgICAgICAgIHByb3h5T3BlcmF0aW9uKCptX3BsYXRm
b3JtTGF5ZXJQcm94eSk7CisjZW5kaWYKKyAgICB9CisKKyAgICAvLyBJdCB3b3VsZCBiZSBncmVh
dCBpZiB3ZSBjb3VsZCBqdXN0IHN3YXAgdGhlIGJ1ZmZlcnMgaGVyZSBhcyB3ZSBkbyB3aXRoIHdl
YmdsLCBidXQgdGhhdCBicmVha3MgdGhlIGNhc2VzCisgICAgLy8gd2hlcmUgb25lIGZyYW1lIHVz
ZXMgdGhlIGNvbnRlbnQgYWxyZWFkeSByZW5kZXJlZCBpbiB0aGUgcHJldmlvdXMgZnJhbWUuIFNv
IHdlIGp1c3QgY29weSB0aGUgY29udGVudAorICAgIC8vIGludG8gdGhlIGNvbXBvc2l0b3IgYnVm
ZmVyLgorICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShtX2NvbXBvc2l0b3JDci5nZXQoKSwg
bV9zdXJmYWNlLmdldCgpLCAwLCAwKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9jb21wb3Np
dG9yQ3IuZ2V0KCksIENBSVJPX09QRVJBVE9SX1NPVVJDRSk7CisgICAgY2Fpcm9fcGFpbnQobV9j
b21wb3NpdG9yQ3IuZ2V0KCkpOworCisgICAgaWYgKHByZXZpb3VzQWN0aXZlQ29udGV4dCkKKyAg
ICAgICAgcHJldmlvdXNBY3RpdmVDb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKyNl
bHNlCit2b2lkIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOjpwYWludFRvVGV4dHVy
ZU1hcHBlcihUZXh0dXJlTWFwcGVyJiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBGbG9hdFJlY3QmIHRh
cmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNp
dHkpCit7CisgICAgQVNTRVJUKG1fdGV4dHVyZSk7CisKKyAgICAvLyBDYWlybyBtYXkgY2hhbmdl
IHRoZSBhY3RpdmUgY29udGV4dCwgc28gd2UgbWFrZSBzdXJlIHRvIGNoYW5nZSBpdCBiYWNrIGFm
dGVyIGZsdXNoaW5nLgorICAgIEdMQ29udGV4dCogcHJldmlvdXNBY3RpdmVDb250ZXh0ID0gR0xD
b250ZXh0OjpjdXJyZW50KCk7CisgICAgY2Fpcm9fc3VyZmFjZV9mbHVzaChtX3N1cmZhY2UuZ2V0
KCkpOworICAgIHByZXZpb3VzQWN0aXZlQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wmPih0ZXh0dXJlTWFwcGVyKS5kcmF3VGV4
dHVyZShtX3RleHR1cmUsIFRleHR1cmVNYXBwZXJHTDo6U2hvdWxkQmxlbmQsIG1fYmFja2VuZFNp
emUsIHRhcmdldFJlY3QsIG1hdHJpeCwgb3BhY2l0eSk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2RmMGZhZTdlMmMzNDllMjE2NDE5ODQ1NWQ0MThjM2NhYjY3NDdi
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw5MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5A
a2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhl
ciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBT
Y2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9i
aWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENB
SVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQorCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CisjaWYgVVNFKE5JQ09TSUEpCisjaW5jbHVkZSAiTmljb3NpYUNvbnRlbnRMYXllclRleHR1cmVN
YXBwZXJJbXBsLmgiCisjZWxzZQorI2luY2x1ZGUgIlBsYXRmb3JtTGF5ZXIuaCIKKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VC
YWNrZW5kCisjaWYgVVNFKE5JQ09TSUEpCisgICAgOiBwdWJsaWMgTmljb3NpYTo6Q29udGVudExh
eWVyVGV4dHVyZU1hcHBlckltcGw6OkNsaWVudAorI2Vsc2UKKyAgICA6IHB1YmxpYyBQbGF0Zm9y
bUxheWVyCisjZW5kaWYKKyAgICAsIHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tl
bmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0dMU3VyZmFj
ZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyQ2Fpcm9HTFN1
cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93Kik7CisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvR0xTdXJmYWNlQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCisgICAg
fkltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kKCk7CisKKyAgICBQbGF0Zm9ybUxheWVy
KiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBjb3B5VG9QbGF0Zm9y
bVRleHR1cmUoR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4
dHVyZSwgR0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9v
bCBmbGlwWSkgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCdWZmZXJDYWlyb0dMU3Vy
ZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYg
YmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4mJik7CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisgICAg
dm9pZCBjcmVhdGVDb21wb3NpdG9yQnVmZmVyKCk7CisgICAgdm9pZCBzd2FwQnVmZmVyc0lmTmVl
ZGVkKCkgb3ZlcnJpZGU7CisjaWYgIVVTRShOSUNPU0lBKQorICAgIFJlZlB0cjxUZXh0dXJlTWFw
cGVyUGxhdGZvcm1MYXllclByb3h5PiBwcm94eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
cGxhdGZvcm1MYXllclByb3h5LmNvcHlSZWYoKTsgfQorI2VuZGlmCisjZWxzZQorICAgIHZvaWQg
cGFpbnRUb1RleHR1cmVNYXBwZXIoVGV4dHVyZU1hcHBlciYsIGNvbnN0IEZsb2F0UmVjdCYgdGFy
Z2V0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOworI2VuZGlm
CisKKyNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCisjaWYgVVNFKE5JQ09TSUEpCisgICAg
UmVmUHRyPE5pY29zaWE6OkNvbnRlbnRMYXllcj4gbV9uaWNvc2lhTGF5ZXI7CisjZWxzZQorICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5PiBtX3BsYXRmb3JtTGF5ZXJQ
cm94eTsKKyNlbmRpZgorICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBtX2NvbXBvc2l0b3JTdXJmYWNlOworICAgIFJlZlB0cjxjYWlyb190PiBtX2Nv
bXBvc2l0b3JDcjsKKyAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlIHsgMCB9OworI2Vu
ZGlmCisgICAgdWludDMyX3QgbV90ZXh0dXJlIHsgMCB9OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKSAmJiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJh
Y2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwYmY3MzRjMGFjNjQxYWVkY2UwYjBiOWNjNzgwZmE2ZjQ5
NzA4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5jcHAKQEAgLTAsMCAr
MSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHpp
bW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
VG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oIgorCisj
aWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqKQoreworICAgIHN0YXRpYyBjYWlyb191c2VyX2Rh
dGFfa2V5X3Qgc19zdXJmYWNlRGF0YUtleTsKKworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBj
YWxjdWxhdGVCYWNrZW5kU2l6ZShzaXplLCByZXNvbHV0aW9uU2NhbGUpOworICAgIGlmIChiYWNr
ZW5kU2l6ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaW50IHN0
cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BUkdCMzIs
IGJhY2tlbmRTaXplLndpZHRoKCkpOworICAgIHZvaWQqIHN1cmZhY2VEYXRhOworICAgIGlmICgh
dHJ5RmFzdFplcm9lZE1hbGxvYyhiYWNrZW5kU2l6ZS5oZWlnaHQoKSAqIHN0cmlkZSkuZ2V0VmFs
dWUoc3VyZmFjZURhdGEpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc3Vy
ZmFjZSA9IGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihzdXJmYWNlRGF0YSksIENBSVJPX0ZPUk1BVF9BUkdCMzIs
IGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdodCgpLCBzdHJpZGUpKTsKKyAg
ICBjYWlyb19zdXJmYWNlX3NldF91c2VyX2RhdGEoc3VyZmFjZS5nZXQoKSwgJnNfc3VyZmFjZURh
dGFLZXksIHN1cmZhY2VEYXRhLCBbXSh2b2lkKiBkYXRhKSB7CisgICAgICAgIGZhc3RGcmVlKGRh
dGEpOworICAgIH0pOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNh
aXJvSW1hZ2VTdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9J
bWFnZVN1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6
Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JikKK3sK
KyAgICByZXR1cm4gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShz
aXplLCAxLCBDb2xvclNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJDYWly
b0ltYWdlU3VyZmFjZUJhY2tlbmQ6OkltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXpl
LCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4mJiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VC
YWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCBXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX2dldF90
eXBlKG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKTsKK30KKwor
dm9pZCBJbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zv
cm1Db2xvclNwYWNlKGNvbnN0IHN0ZDo6YXJyYXk8dWludDhfdCwgMjU2PiYgbG9va1VwVGFibGUp
Cit7CisgICAgdW5zaWduZWQgY2hhciogZGF0YVNyYyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X2RhdGEobV9zdXJmYWNlLmdldCgpKTsKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7CisgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBtX2xvZ2ljYWxTaXplLmhlaWdodCgpOyArK3kpIHsKKyAgICAgICAgdW5zaWduZWQqIHJvdyA9
IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPHVuc2lnbmVkKj4oZGF0YVNyYyArIHN0cmlkZSAqIHkpOwor
ICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG1fbG9naWNhbFNpemUud2lkdGgoKTsgeCsrKSB7
CisgICAgICAgICAgICB1bnNpZ25lZCogcGl4ZWwgPSByb3cgKyB4OworICAgICAgICAgICAgQ29s
b3IgcGl4ZWxDb2xvciA9IGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7CisgICAg
ICAgICAgICBwaXhlbENvbG9yID0gQ29sb3IobG9va1VwVGFibGVbcGl4ZWxDb2xvci5yZWQoKV0s
IGxvb2tVcFRhYmxlW3BpeGVsQ29sb3IuZ3JlZW4oKV0sIGxvb2tVcFRhYmxlW3BpeGVsQ29sb3Iu
Ymx1ZSgpXSwgcGl4ZWxDb2xvci5hbHBoYSgpKTsKKyAgICAgICAgICAgICpwaXhlbCA9IHByZW11
bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHBpeGVsQ29sb3IpLnZhbHVlKCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5X3JlY3RhbmdsZShtX3N1cmZhY2UuZ2V0
KCksIDAsIDAsIG1fbG9naWNhbFNpemUud2lkdGgoKSwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVm
ZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjE2MDAzNzk0ZmRhYTk0NzMyYjYxNTU3YzQxZTg0NDIzMWE5OGE3MDEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgPHplY2tl
QHNlbGZpc2gub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRvcmNoIE1vYmlsZSAoQmVp
amluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShDQUlSTykKKwor
I2luY2x1ZGUgIkltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0
Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFnZUJ1ZmZl
ckNhaXJvSW1hZ2VTdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFj
ZUJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVy
Q2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0
V2luZG93Kik7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNhaXJvSW1h
Z2VTdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYpOworCitwcml2YXRlOgorICAgIEltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VC
YWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tl
bmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+JiYpOworCisgICAgdm9pZCBwbGF0Zm9ybVRyYW5zZm9ybUNvbG9yU3BhY2UoY29u
c3Qgc3RkOjphcnJheTx1aW50OF90LCAyNTY+JiBsb29rVXBUYWJsZSkgb3ZlcnJpZGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNh
aXJvU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMmQx
NWYwYmEyMjIxMGY3YTE3NGJhNzA3ZWQyNjE4MGMxOGZlYTRjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNhaXJv
U3VyZmFjZUJhY2tlbmQuaCIKKworI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAi
Q2Fpcm9PcGVyYXRpb25zLmgiCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclV0
aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dEltcGxDYWlyby5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyVXRpbGl0aWVzQ2Fp
cm8uaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCisjaWYg
VVNFKENBSVJPKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ltYWdlQnVmZmVyQ2Fpcm9TdXJm
YWNlQmFja2VuZDo6SW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
JiBzdXJmYWNlKQorICAgIDogSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQobG9naWNhbFNpemUsIGJh
Y2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAgLCBtX3N1cmZhY2Uo
V1RGTW92ZShzdXJmYWNlKSkKK3sKKyAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0dXMobV9z
dXJmYWNlLmdldCgpKSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CisKKyAgICBSZWZQdHI8Y2Fp
cm9fdD4gY3IgPSBhZG9wdFJlZihjYWlyb19jcmVhdGUobV9zdXJmYWNlLmdldCgpKSk7CisgICAg
bV9wbGF0Zm9ybUNvbnRleHQuc2V0Q3IoY3IuZ2V0KCkpOworICAgIG1fY29udGV4dCA9IG1ha2VV
bmlxdWU8R3JhcGhpY3NDb250ZXh0PihHcmFwaGljc0NvbnRleHRJbXBsQ2Fpcm86OmNyZWF0ZUZh
Y3RvcnkobV9wbGF0Zm9ybUNvbnRleHQpKTsKK30KKworR3JhcGhpY3NDb250ZXh0JiBJbWFnZUJ1
ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAq
bV9jb250ZXh0OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQ6
OmJ5dGVzUGVyUm93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfc3RyaWRlKG1fc3VyZmFjZS5nZXQoKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
Y29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAg
Y2FzZSBDb3B5QmFja2luZ1N0b3JlOiB7CisgICAgICAgIGF1dG8gY29weSA9IGFkb3B0UmVmKGNh
aXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BUkdCMzIsCisgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1fc3VyZmFjZS5nZXQoKSksCisgICAgICAgIGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX3N1cmZhY2UuZ2V0KCkpKSk7CisKKyAgICAg
ICAgYXV0byBjciA9IGFkb3B0UmVmKGNhaXJvX2NyZWF0ZShjb3B5LmdldCgpKSk7CisgICAgICAg
IGNhaXJvX3NldF9vcGVyYXRvcihjci5nZXQoKSwgQ0FJUk9fT1BFUkFUT1JfU09VUkNFKTsKKyAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNyLmdldCgpLCBtX3N1cmZhY2UuZ2V0KCks
IDAsIDApOworICAgICAgICBjYWlyb19wYWludChjci5nZXQoKSk7CisKKyAgICAgICAgcmV0dXJu
IGNvcHk7CisgICAgfQorCisgICAgY2FzZSBEb250Q29weUJhY2tpbmdTdG9yZToKKyAgICAgICAg
cmV0dXJuIG1fc3VyZmFjZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCdWZmZXJDYWlyb1N1
cmZhY2VCYWNrZW5kOjpjYWlyb1N1cmZhY2VDb2VyY2VUb0ltYWdlKCkgY29uc3QKK3sKKyAgICBC
YWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvcjsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRf
dHlwZShtX3N1cmZhY2UuZ2V0KCkpID09IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSAmJiBjYWly
b19zdXJmYWNlX2dldF9jb250ZW50KG1fc3VyZmFjZS5nZXQoKSkgPT0gQ0FJUk9fQ09OVEVOVF9D
T0xPUl9BTFBIQSkKKyAgICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7
CisgICAgZWxzZQorICAgICAgICBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0b3JlOworICAg
IHJldHVybiBjb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7
CisgICAgYXV0byBzdXJmYWNlID0gY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFnZSgpOworICAgIGNh
aXJvX3N1cmZhY2VfZmx1c2goc3VyZmFjZS5nZXQoKSk7CisKKyAgICBWZWN0b3I8dWludDhfdD4g
aW1hZ2VEYXRhOworICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlLmdldCgpKSkK
KyAgICAgICAgcmV0dXJuIGltYWdlRGF0YTsKKworICAgIGF1dG8gcGl4ZWxzID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShzdXJmYWNlLmdldCgpKTsKKyAgICBpbWFnZURhdGEuYXBwZW5k
KHBpeGVscywgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKHN1cmZhY2UuZ2V0KCkpICoK
KyAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UuZ2V0KCkpKTsK
KworICAgIHJldHVybiBpbWFnZURhdGE7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVm
ZmVyQ2Fpcm9TdXJmYWNlQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QsIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEobV9zdXJmYWNlLmdldCgpKSk7Cit9CisK
K3ZvaWQgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEs
IGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCit7Cisg
ICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0
YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1fc3Vy
ZmFjZS5nZXQoKSkpOworCisgICAgSW50UmVjdCBzcmNSZWN0U2NhbGVkID0gdG9CYWNrZW5kQ29v
cmRpbmF0ZXMoc3JjUmVjdCk7CisgICAgSW50UG9pbnQgZGVzdFBvaW50U2NhbGVkID0gdG9CYWNr
ZW5kQ29vcmRpbmF0ZXMoZGVzdFBvaW50KTsKKyAgICBjYWlyb19zdXJmYWNlX21hcmtfZGlydHlf
cmVjdGFuZ2xlKG1fc3VyZmFjZS5nZXQoKSwgZGVzdFBvaW50U2NhbGVkLngoKSwgZGVzdFBvaW50
U2NhbGVkLnkoKSwgc3JjUmVjdFNjYWxlZC53aWR0aCgpLCBzcmNSZWN0U2NhbGVkLmhlaWdodCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VC
dWZmZXJDYWlyb1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
OTQ5ZmYzNzM3NDg4MjQ1NTFlM2U0ZWZlNWEyYjRkNjY5M2YwNTUzCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
b1N1cmZhY2VCYWNrZW5kLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciA8emVja2VAc2VsZmlzaC5vcmc+
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5v
cmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVG9yY2ggTW9iaWxlIChCZWlqaW5nKSBDby4gTHRk
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiSW1h
Z2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVmZmVyQ2Fpcm9TdXJmYWNl
QmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNhaXJvQmFja2VuZCB7CitwdWJsaWM6CisgICAg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRpdmVJ
bWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAg
IFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdl
RGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQp
IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAgSW1hZ2VCdWZmZXJDYWlyb1N1cmZhY2VCYWNr
ZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UsIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+JiYpOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY2Fpcm9TdXJmYWNlQ29lcmNlVG9JbWFn
ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICBtdXRhYmxlIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKKyAgICBQbGF0
Zm9ybUNvbnRleHRDYWlybyBtX3BsYXRmb3JtQ29udGV4dCB7IG51bGxwdHIgfTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckRhdGFDYWlyby5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJEYXRhQ2Fp
cm8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE2MWUzNTk5NDZlZjRiYWQ2OTIz
ZmRiZjc1NjRhMmUzOWY3NjljNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckRhdGFDYWlyby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDggR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBJbWFnZUJ1ZmZl
ckRhdGFDYWlyb19oCi0jZGVmaW5lIEltYWdlQnVmZmVyRGF0YUNhaXJvX2gKLQotI2lmIFVTRShD
QUlSTykKLQotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiUmVm
UHRyQ2Fpcm8uaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVk
ZSAiUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXIuaCIKLSNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oIgotI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJQ
bGF0Zm9ybUxheWVyUHJveHlQcm92aWRlci5oIgotI2VuZGlmCi0KLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoTklDT1NJQSkKLSNpbmNsdWRlICJOaWNvc2lhQ29udGVu
dExheWVyVGV4dHVyZU1hcHBlckltcGwuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEludFNpemU7Ci1jbGFzcyBUZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllclByb3h5
OwotCi1jbGFzcyBJbWFnZUJ1ZmZlckRhdGEKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIDogcHVibGljIE5pY29zaWE6OkNvbnRlbnRMYXll
clRleHR1cmVNYXBwZXJJbXBsOjpDbGllbnQKLSNlbHNlCi0gICAgOiBwdWJsaWMgUGxhdGZvcm1M
YXllcgotI2VuZGlmCi0jZW5kaWYKLXsKLXB1YmxpYzoKLSAgICBJbWFnZUJ1ZmZlckRhdGEoY29u
c3QgSW50U2l6ZSYsIFJlbmRlcmluZ01vZGUpOwotICAgIHZpcnR1YWwgfkltYWdlQnVmZmVyRGF0
YSgpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlOwotICAgIFBsYXRm
b3JtQ29udGV4dENhaXJvIG1fcGxhdGZvcm1Db250ZXh0OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxH
cmFwaGljc0NvbnRleHQ+IG1fY29udGV4dDsKLSAgICBJbnRTaXplIG1fc2l6ZTsKLSAgICBSZW5k
ZXJpbmdNb2RlIG1fcmVuZGVyaW5nTW9kZTsKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0gICAgdm9pZCBjcmVhdGVDYWlyb0dMU3VyZmFjZSgpOwotCi0jaWYgVVNFKENPT1JE
SU5BVEVEX0dSQVBISUNTKQotI2lmIFVTRShOSUNPU0lBKQotICAgIHZvaWQgc3dhcEJ1ZmZlcnNJ
Zk5lZWRlZCgpIG92ZXJyaWRlOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclBsYXRm
b3JtTGF5ZXJQcm94eT4gcHJveHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHN3YXBCdWZm
ZXJzSWZOZWVkZWQoKSBvdmVycmlkZTsKLSNlbmRpZgotICAgIHZvaWQgY3JlYXRlQ29tcG9zaXRv
ckJ1ZmZlcigpOwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9jb21wb3NpdG9yU3Vy
ZmFjZTsKLSAgICB1aW50MzJfdCBtX2NvbXBvc2l0b3JUZXh0dXJlOwotICAgIFJlZlB0cjxjYWly
b190PiBtX2NvbXBvc2l0b3JDcjsKLQotI2lmIFVTRShOSUNPU0lBKQotICAgIFJlZlB0cjxOaWNv
c2lhOjpDb250ZW50TGF5ZXI+IG1fbmljb3NpYUxheWVyOwotI2Vsc2UKLSAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclBsYXRmb3JtTGF5ZXJQcm94eT4gbV9wbGF0Zm9ybUxheWVyUHJveHk7Ci0jZW5k
aWYKLSNlbHNlCi0gICAgdmlydHVhbCB2b2lkIHBhaW50VG9UZXh0dXJlTWFwcGVyKFRleHR1cmVN
YXBwZXImLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmLCBmbG9hdCBvcGFjaXR5KTsKLSNlbmRpZgotICAgIHVpbnQzMl90IG1fdGV4dHVyZTsKLSNl
bmRpZgotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJP
KQotCi0jZW5kaWYgLy8gSW1hZ2VCdWZmZXJEYXRhQ2Fpcm9faApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYWZkNWU0ZWM3MTllZGI0OTNmNzlkYmJmYWJlNWFmOTNjYTA2
NzA5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDA4
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VCdWZmZXJVdGlsaXRpZXND
Ry5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNs
dWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPENv
cmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4K
LSNpbmNsdWRlIDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0NoZWNrZWRBcml0aG1ldGljLmg+Ci0jaW5jbHVk
ZSA8d3RmL0RlYnVnSGVhcC5oPgotI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVk
ZSAiVVRJVXRpbGl0aWVzLmgiCi0jZW5kaWYKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JB
Q0tJTkdfU1RPUkUpCi0jaW5jbHVkZSAiSU9TdXJmYWNlLmgiCi0jaW5jbHVkZSA8cGFsL3NwaS9j
b2NvYS9JT1N1cmZhY2VTUEkuaD4KLSNlbmRpZgotCi0vLyBDQSB1c2VzIEFSR0IzMiBmb3IgdGV4
dHVyZXMgYW5kIEFSR0IzMiAtPiBBUkdCMzIgcmVzYW1wbGluZyBpcyBvcHRpbWl6ZWQuCi0jZGVm
aW5lIFVTRV9BUkdCMzIgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1ERUNMQVJFX0FMTE9DQVRPUl9XSVRIX0hFQVBfSURFTlRJRklFUihJbWFnZUJ1ZmZlcik7
Ci1ERUZJTkVfQUxMT0NBVE9SX1dJVEhfSEVBUF9JREVOVElGSUVSKEltYWdlQnVmZmVyKTsKLQot
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBJbWFnZUJ1ZmZlcjo6Y3JlYXRlQ29tcGF0aWJs
ZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29u
dGV4dCkKLXsKLSAgICBpZiAoc2l6ZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZTsKLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gY29udGV4dC5wbGF0Zm9y
bUNvbnRleHQoKTsKLSAgICBzd2l0Y2ggKENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSkgewot
ICAgIGNhc2Uga0NHQ29udGV4dFR5cGVCaXRtYXA6Ci0gICAgICAgIGNvbG9yU3BhY2UgPSBDR0Jp
dG1hcENvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4dCk7Ci0gICAgICAgIGJyZWFrOwotI2lm
IEhBVkUoSU9TVVJGQUNFKQotICAgIGNhc2Uga0NHQ29udGV4dFR5cGVJT1N1cmZhY2U6Ci0gICAg
ICAgIGNvbG9yU3BhY2UgPSBDR0lPU3VyZmFjZUNvbnRleHRHZXRDb2xvclNwYWNlKGNnQ29udGV4
dCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgZGVmYXVsdDoKLSAgICAgICAgY29sb3JT
cGFjZSA9IGFkb3B0Q0YoQ0dDb250ZXh0Q29weURldmljZUNvbG9yU3BhY2UoY2dDb250ZXh0KSk7
Ci0gICAgfQotCi0gICAgaWYgKCFjb2xvclNwYWNlKQotICAgICAgICBjb2xvclNwYWNlID0gc1JH
QkNvbG9yU3BhY2VSZWYoKTsKLSNlbHNlCi0gICAgY29sb3JTcGFjZSA9IHNSR0JDb2xvclNwYWNl
UmVmKCk7Ci0jZW5kaWYKLSAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUgPSBjb250ZXh0
LnJlbmRlcmluZ01vZGUoKTsKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBJbWFnZUJ1ZmZlcjo6
Y29tcGF0aWJsZUJ1ZmZlclNpemUoc2l6ZSwgY29udGV4dCk7Ci0gICAgYm9vbCBzdWNjZXNzID0g
ZmFsc2U7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBidWZmZXIobmV3IEltYWdl
QnVmZmVyKHNjYWxlZFNpemUsIDEsIGNvbG9yU3BhY2UuZ2V0KCksIHJlbmRlcmluZ01vZGUsIG51
bGxwdHIsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNwb25kaW5nIHNjYWxlIGZhY3RvciBvbiB0
aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXItPmNvbnRleHQoKS5zY2FsZShzY2FsZWRT
aXplIC8gc2l6ZSk7Ci0gICAgcmV0dXJuIGJ1ZmZlcjsKLX0KLQotSW1hZ2VCdWZmZXI6OkltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDR0Nv
bG9yU3BhY2VSZWYgY29sb3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25z
dCBIb3N0V2luZG93KiBob3N0V2luZG93LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2Fs
U2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewot
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgot
ICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gY2VpbGYocmVzb2x1dGlvblNjYWxlICogc2l6ZS53aWR0
aCgpKTsKLSAgICBmbG9hdCBzY2FsZWRIZWlnaHQgPSBjZWlsZihyZXNvbHV0aW9uU2NhbGUgKiBz
aXplLmhlaWdodCgpKTsKLQotICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYXV0b21hdGljYWxseSB1
c2UgYSBsb3dlciByZXNvbHV0aW9uPwotICAgIGlmICghRmxvYXRTaXplKHNjYWxlZFdpZHRoLCBz
Y2FsZWRIZWlnaHQpLmlzRXhwcmVzc2libGVBc0ludFNpemUoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zaXplID0gSW50U2l6ZShzY2FsZWRXaWR0aCwgc2NhbGVkSGVpZ2h0KTsKLSAgICBt
X2RhdGEuYmFja2luZ1N0b3JlU2l6ZSA9IG1fc2l6ZTsKLQotICAgIGJvb2wgYWNjZWxlcmF0ZVJl
bmRlcmluZyA9IHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ7Ci0g
ICAgaWYgKG1fc2l6ZS53aWR0aCgpIDw9IDAgfHwgbV9zaXplLmhlaWdodCgpIDw9IDApCi0gICAg
ICAgIHJldHVybjsKLQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgQ2hlY2tlZDxpbnQsIFJlY29yZE92ZXJmbG93PiB3aWR0aCA9IG1fc2l6ZS53aWR0aCgpOwot
ICAgIENoZWNrZWQ8aW50LCBSZWNvcmRPdmVyZmxvdz4gaGVpZ2h0ID0gbV9zaXplLmhlaWdodCgp
OwotI2VuZGlmCi0KLSAgICAvLyBQcmV2ZW50IGludGVnZXIgb3ZlcmZsb3dzCi0gICAgbV9kYXRh
LmJ5dGVzUGVyUm93ID0gNCAqIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2Rh
dGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpKTsKLSAgICBDaGVja2VkPHNpemVfdCwgUmVjb3Jk
T3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+KG1f
ZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5ieXRlc1BlclJvdzsKLSAg
ICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBV
U0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIEludFNpemUgbWF4U2l6ZSA9
IElPU3VyZmFjZTo6bWF4aW11bVNpemUoKTsKLSAgICBpZiAod2lkdGgudW5zYWZlR2V0KCkgPiBt
YXhTaXplLndpZHRoKCkgfHwgaGVpZ2h0LnVuc2FmZUdldCgpID4gbWF4U2l6ZS5oZWlnaHQoKSkK
LSAgICAgICAgYWNjZWxlcmF0ZVJlbmRlcmluZyA9IGZhbHNlOwotI2Vsc2UKLSAgICBBU1NFUlQo
cmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkKTsKLSNlbmRpZgot
Ci0gICAgbV9kYXRhLmNvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwotCi0gICAgUmV0YWluUHRyPENH
Q29udGV4dFJlZj4gY2dDb250ZXh0OwotICAgIGlmIChhY2NlbGVyYXRlUmVuZGVyaW5nKSB7Ci0j
aWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAgICAgRmxvYXRTaXpl
IHVzZXJCb3VuZHMgPSBGbG9hdFNpemUod2lkdGgudW5zYWZlR2V0KCksIGhlaWdodC51bnNhZmVH
ZXQoKSk7Ci0gICAgICAgIG1fZGF0YS5zdXJmYWNlID0gSU9TdXJmYWNlOjpjcmVhdGUobV9kYXRh
LmJhY2tpbmdTdG9yZVNpemUsIEludFNpemUodXNlckJvdW5kcyksIGNvbG9yU3BhY2UpOwotICAg
ICAgICBpZiAobV9kYXRhLnN1cmZhY2UpIHsKLSAgICAgICAgICAgIGNnQ29udGV4dCA9IG1fZGF0
YS5zdXJmYWNlLT5lbnN1cmVQbGF0Zm9ybUNvbnRleHQoaG9zdFdpbmRvdyk7Ci0gICAgICAgICAg
ICBpZiAoY2dDb250ZXh0KQotICAgICAgICAgICAgICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0Nv
bnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHVzZXJCb3VuZHMpKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2RhdGEuc3VyZmFjZSA9IG51bGxwdHI7Ci0g
ICAgICAgIH0KLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTShob3N0V2luZG93KTsKLSNlbmRp
ZgotICAgICAgICBpZiAoIWNnQ29udGV4dCkKLSAgICAgICAgICAgIGFjY2VsZXJhdGVSZW5kZXJp
bmcgPSBmYWxzZTsgLy8gSWYgYWxsb2NhdGlvbiBmYWlscywgZmFsbCBiYWNrIHRvIG5vbi1hY2Nl
bGVyYXRlZCBwYXRoLgotICAgIH0KLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewot
ICAgICAgICBtX2RhdGEuZGF0YSA9IEltYWdlQnVmZmVyTWFsbG9jOjp0cnlaZXJvZWRNYWxsb2Mo
bV9kYXRhLmJhY2tpbmdTdG9yZVNpemUuaGVpZ2h0KCkgKiBtX2RhdGEuYnl0ZXNQZXJSb3cudW5z
YWZlR2V0KCkpOwotICAgICAgICBpZiAoIW1fZGF0YS5kYXRhKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX2RhdGEuZGF0
YSkgJiAzKSk7Ci0KLSNpZiBVU0VfQVJHQjMyCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0g
a0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9z
dDsKLSNlbHNlCi0gICAgICAgIG1fZGF0YS5iaXRtYXBJbmZvID0ga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0OwotI2VuZGlmCi0gICAgICAgIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRt
YXBDb250ZXh0Q3JlYXRlKG1fZGF0YS5kYXRhLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0
aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgbV9kYXRhLmJ5dGVzUGVy
Um93LnVuc2FmZUdldCgpLCBtX2RhdGEuY29sb3JTcGFjZSwgbV9kYXRhLmJpdG1hcEluZm8pKTsK
LSAgICAgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2
b2lkKiBkYXRhLCBzaXplX3QpIHsKLSAgICAgICAgICAgIEltYWdlQnVmZmVyTWFsbG9jOjpmcmVl
KGNvbnN0X2Nhc3Q8dm9pZCo+KGRhdGEpKTsKLSAgICAgICAgfTsKLSAgICAgICAgLy8gQ3JlYXRl
IGEgbGl2ZSBpbWFnZSB0aGF0IHdyYXBzIHRoZSBkYXRhLgotICAgICAgICB2ZXJpZnlJbWFnZUJ1
ZmZlcklzQmlnRW5vdWdoKG1fZGF0YS5kYXRhLCBudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAg
ICAgIG1fZGF0YS5kYXRhUHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEoMCwgbV9kYXRhLmRhdGEsIG51bUJ5dGVzLnVuc2FmZUdldCgpLCByZWxlYXNlSW1hZ2VE
YXRhKSk7Ci0KLSAgICAgICAgaWYgKCFjZ0NvbnRleHQpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4oY2dD
b250ZXh0LmdldCgpKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0KCkuc2NhbGUoRmxvYXRTaXplKDEs
IC0xKSk7Ci0gICAgY29udGV4dCgpLnRyYW5zbGF0ZSgwLCAtbV9kYXRhLmJhY2tpbmdTdG9yZVNp
emUuaGVpZ2h0KCkpOwotICAgIGNvbnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1JbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUs
IENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wmIHN1Y2Nlc3MpCi0gICAgOiBJbWFn
ZUJ1ZmZlcihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNhY2hlZENHQ29sb3JTcGFjZShpbWFnZUNv
bG9yU3BhY2UpLCByZW5kZXJpbmdNb2RlLCBob3N0V2luZG93LCBzdWNjZXNzKQotewotfQotCi1J
bWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkgPSBkZWZhdWx0OwotCi0jaWYgVVNFKElPU1VSRkFD
RV9DQU5WQVNfQkFDS0lOR19TVE9SRSkKLXNpemVfdCBJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCgp
IGNvbnN0Ci17Ci0gICAgLy8gbWVtb3J5Q29zdCgpIG1heSBiZSBpbnZva2VkIGNvbmN1cnJlbnRs
eSBmcm9tIGEgR0MgdGhyZWFkLCBhbmQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IHdoYXQg
ZGF0YSB3ZSBhY2Nlc3MgaGVyZSBhbmQgaG93LgotICAgIC8vIEl0J3Mgc2FmZSB0byBhY2Nlc3Mg
aW50ZXJuYWxTaXplKCkgYmVjYXVzZSBpdCBkb2Vzbid0IGRvIGFueSBwb2ludGVyIGNoYXNpbmcu
Ci0gICAgLy8gSXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBz
dXJmYWNlIGNhbiBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJ
bWFnZUJ1ZmZlci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50
b3RhbEJ5dGVzKCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4K
LSAgICBpZiAobV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+
dG90YWxCeXRlcygpOwotICAgIHJldHVybiA0ICogaW50ZXJuYWxTaXplKCkud2lkdGgoKSAqIGlu
dGVybmFsU2l6ZSgpLmhlaWdodCgpOwotfQotCi1zaXplX3QgSW1hZ2VCdWZmZXI6OmV4dGVybmFs
TWVtb3J5Q29zdCgpIGNvbnN0Ci17Ci0gICAgLy8gZXh0ZXJuYWxNZW1vcnlDb3N0KCkgbWF5IGJl
IGludm9rZWQgY29uY3VycmVudGx5IGZyb20gYSBHQyB0aHJlYWQsIGFuZCB3ZSBuZWVkIHRvIGJl
IGNhcmVmdWwgYWJvdXQgd2hhdCBkYXRhIHdlIGFjY2VzcyBoZXJlIGFuZCBob3cuCi0gICAgLy8g
SXQncyBzYWZlIHRvIGFjY2VzcyBtX2RhdGEuc3VyZmFjZSBiZWNhdXNlIHRoZSBzdXJmYWNlIGNh
biBvbmx5IGJlIGFzc2lnbmVkIGR1cmluZyBjb25zdHJ1Y3Rpb24gb2YgdGhpcyBJbWFnZUJ1ZmZl
ci4KLSAgICAvLyBJdCdzIHNhZmUgdG8gYWNjZXNzIG1fZGF0YS5zdXJmYWNlLT50b3RhbEJ5dGVz
KCkgYmVjYXVzZSB0b3RhbEJ5dGVzKCkgZG9lc24ndCBjaGFzZSBwb2ludGVycy4KLSAgICBpZiAo
bV9kYXRhLnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBtX2RhdGEuc3VyZmFjZS0+dG90YWxCeXRl
cygpOwotICAgIHJldHVybiAwOwotfQotI2VuZGlmCi0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VC
dWZmZXI6OmNvbnRleHQoKSBjb25zdAotewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJ
TkdfU1RPUkUpCi0gICAgaWYgKG1fZGF0YS5zdXJmYWNlKQotICAgICAgICByZXR1cm4gbV9kYXRh
LnN1cmZhY2UtPmVuc3VyZUdyYXBoaWNzQ29udGV4dCgpOwotI2VuZGlmCi0gICAgcmV0dXJuICpt
X2RhdGEuY29udGV4dDsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZlcjo6Zmx1c2hDb250ZXh0KCkgY29u
c3QKLXsKLSAgICBDR0NvbnRleHRGbHVzaChjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCkpOwot
fQotCi1zdGF0aWMgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVj
ZXNzYXJ5KENHSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKLXsKLSAgICBp
ZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
Pihib3VuZHMud2lkdGgoKSkgfHwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgIT0gc3RhdGljX2Nh
c3Q8c2l6ZV90Pihib3VuZHMuaGVpZ2h0KCkpKSkKLSAgICAgICAgcmV0dXJuIGFkb3B0Q0YoQ0dJ
bWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdChpbWFnZSwgQ0dSZWN0TWFrZSgwLCAwLCBib3VuZHMu
d2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKSkpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotc3Rh
dGljIFJlZlB0cjxJbWFnZT4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4mJiBpbWFnZSwgSW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6
ZSBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikKLXsKLSAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwg
cHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBp
bWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5h
bFNpemUpOwotICAgIGVsc2UgewotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0
bWFwQ29udGV4dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZS53aWR0aCgpLCBsb2dpY2FsU2l6ZS5oZWln
aHQoKSwgOCwgNCAqIGxvZ2ljYWxTaXplLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtD
R0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4
dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgRmxvYXRSZWN0KEZsb2F0UG9pbnQ6Onplcm8oKSwg
bG9naWNhbFNpemUpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdlU2l6ZUluVXNlclNwYWNlID0g
bG9naWNhbFNpemU7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LmdldCgpLCBG
bG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBpbWFnZVNpemVJblVzZXJTcGFjZSksIGltYWdl
LmdldCgpKTsKLSAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUlt
YWdlKGNvbnRleHQuZ2V0KCkpKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRlKFdURk1vdmUo
aW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKEJhY2tp
bmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNv
bHV0aW9uKSBjb25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBp
ZiAobV9yZXNvbHV0aW9uU2NhbGUgPT0gMSB8fCBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gUHJlc2Vy
dmVSZXNvbHV0aW9uOjpZZXMpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKGNvcHlC
ZWhhdmlvcik7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShEb250
Q29weUJhY2tpbmdTdG9yZSk7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNj
YWxpbmdJZk5lZWRlZChXVEZNb3ZlKGltYWdlKSwgbG9naWNhbFNpemUoKSwgaW50ZXJuYWxTaXpl
KCksIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8
SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24p
Ci17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNpemUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXpl
KCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgp
OwotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25T
Y2FsZTsKLQotICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVk
KHNpbmtJbnRvTmF0aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBsb2dpY2FsU2l6ZSwg
aW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Ci19Ci0K
LVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZUJ1ZmZlcjo6c2lua0ludG9OYXRpdmVJbWFnZShz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyKQotewotI2lmIFVTRShJT1NV
UkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgaWYgKCFpbWFnZUJ1ZmZlci0+bV9kYXRh
LnN1cmZhY2UpCi0gICAgICAgIHJldHVybiBpbWFnZUJ1ZmZlci0+Y29weU5hdGl2ZUltYWdlKERv
bnRDb3B5QmFja2luZ1N0b3JlKTsKLQotICAgIHJldHVybiBJT1N1cmZhY2U6OnNpbmtJbnRvSW1h
Z2UoSU9TdXJmYWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikp
KTsKLSNlbHNlCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENv
cHlCYWNraW5nU3RvcmUpOwotI2VuZGlmCi19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFn
ZUJ1ZmZlcjo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBj
b25zdAotewotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBpZiAoIWNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoY29weUJlaGF2
aW9yKSB7Ci0gICAgICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBp
bWFnZSA9IGFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZShtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS53aWR0
aCgpLCBtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSwgOCwgMzIsIG1fZGF0YS5ieXRl
c1BlclJvdy51bnNhZmVHZXQoKSwgbV9kYXRhLmNvbG9yU3BhY2UsIG1fZGF0YS5iaXRtYXBJbmZv
LCBtX2RhdGEuZGF0YVByb3ZpZGVyLmdldCgpLCAwLCB0cnVlLCBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDb3B5QmFja2luZ1N0
b3JlOgotICAgICAgICAgICAgaW1hZ2UgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZUlt
YWdlKGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFT
X0JBQ0tJTkdfU1RPUkUpCi0gICAgZWxzZQotICAgICAgICBpbWFnZSA9IG1fZGF0YS5zdXJmYWNl
LT5jcmVhdGVJbWFnZSgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXZvaWQg
SW1hZ2VCdWZmZXI6OmRyYXdDb25zdW1pbmcoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBp
bWFnZUJ1ZmZlciwgR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NU
T1JFKQotICAgIGlmICghaW1hZ2VCdWZmZXItPm1fZGF0YS5zdXJmYWNlKSB7Ci0gICAgICAgIGlt
YWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKGRlc3RDb250ZXh0Lmlz
QWNjZWxlcmF0ZWRDb250ZXh0KCkpOwotICAgIAotICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSA9
IGltYWdlQnVmZmVyLT5tX3Jlc29sdXRpb25TY2FsZTsKLSAgICBJbnRTaXplIGJhY2tpbmdTdG9y
ZVNpemUgPSBpbWFnZUJ1ZmZlci0+bV9kYXRhLmJhY2tpbmdTdG9yZVNpemU7Ci0KLSAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2UgPSBJT1N1cmZhY2U6OnNpbmtJbnRvSW1hZ2UoSU9TdXJm
YWNlOjpjcmVhdGVGcm9tSW1hZ2VCdWZmZXIoV1RGTW92ZShpbWFnZUJ1ZmZlcikpKTsKLSAgICAK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNy
Y1JlY3Quc2NhbGUocmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0Q29udGV4dC5kcmF3TmF0aXZl
SW1hZ2UoaW1hZ2UuZ2V0KCksIGJhY2tpbmdTdG9yZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNy
Y1JlY3QsIG9wdGlvbnMpOwotI2Vsc2UKLSAgICBpbWFnZUJ1ZmZlci0+ZHJhdyhkZXN0Q29udGV4
dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOwotI2VuZGlmCi19Ci0KLXZvaWQgSW1hZ2VC
dWZmZXI6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKLXsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0g
ICAgaWYgKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpIHx8IGRlc3RDb250ZXh0LmlzQWNjZWxl
cmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGltYWdlID0gY29weU5hdGl2ZUltYWdlKENvcHlCYWNr
aW5nU3RvcmUpOyAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBj
b3B5LgotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlC
YWNraW5nU3RvcmUpOwotCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7
Ci0gICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICBkZXN0
Q29udGV4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UuZ2V0KCksIG1fZGF0YS5iYWNraW5nU3RvcmVT
aXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKLX0KLQotdm9pZCBJbWFn
ZUJ1ZmZlcjo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBj
b25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRp
b25zKQotewotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGFk
anVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7Ci0KLSAgICBpZiAoIWNvbnRl
eHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgIGlmICgmZGVzdENvbnRleHQg
PT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0g
ICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5n
U3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZmZXIsIG5lZWQgdG8gZGVlcCBjb3B5
LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVj
dCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0
aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBp
bWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSkpCi0gICAg
ICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2lu
Zywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoUmVmUHRy
PEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKQotICAgICAgICAgICAg
Y29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3Qs
IHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKLSAgICB9Ci19Ci0K
LVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXplKiBwaXhlbEFycmF5RGltZW5zaW9u
cywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKSBjb25zdAotewotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7
Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVt
ID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAgICBzcmNSZWN0LnNjYWxlKG1fcmVz
b2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5RGltZW5zaW9ucykKLSAgICAgICAg
KnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXplKCk7Ci0KLSAgICByZXR1cm4gbV9k
YXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBzcmNS
ZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpOwot
fQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBs
aWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIEludFNpemUqIHBpeGVsQXJyYXlEaW1l
bnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAg
aWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBmbHVzaENvbnRl
eHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJlY3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVT
eXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0pCi0gICAgICAgIHNyY1JlY3Quc2NhbGUo
bV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBpeGVsQXJyYXlEaW1lbnNpb25zKQotICAg
ICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNSZWN0LnNpemUoKTsKLQotICAgIHJldHVy
biBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBz
cmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkp
OwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRCeXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVk
QXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNvbnN0
IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IElu
dFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsK
LSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNo
Q29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2FsZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsK
LSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUgPSBzb3VyY2VTaXplOwotICAgIGlmIChjb29y
ZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxl
ZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotICAgICAgICBzY2FsZWRTb3Vy
Y2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0
RGF0YShzb3VyY2UsIHNvdXJjZUZvcm1hdCwgc2NhbGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNl
UmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRD
b250ZXh0KCkpOwotICAgIAotICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBj
YWNoZWQgaW1hZ2UgaWYgaXQgaXMgcmVxdWVzdGVkIHRocm91Z2ggQ0dJT1N1cmZhY2VDb250ZXh0
Q3JlYXRlSW1hZ2UoKS4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1Nzk2NiBmb3IgZXhwbGFpbmluZyB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuCi0g
ICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0
KCkuZmlsbFJlY3QoRmxvYXRSZWN0KDEsIDEsIDAsIDApKTsKLX0KLQotU3RyaW5nIEltYWdlQnVm
ZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBx
dWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdAotewot
ICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVS
ZXNvbHV0aW9uKSkKLSAgICAgICAgcmV0dXJuIGRhdGFVUkwoZGF0YS5nZXQoKSwgbWltZVR5cGUp
OwotICAgIHJldHVybiAiZGF0YTosIl9zOwotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXI6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8gZGF0YSA9IHRvQ0ZEYXRhKG1pbWVUeXBlLCBxdWFs
aXR5LCBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSkKLSAgICAgICAgcmV0dXJuIGRhdGFWZWN0b3Io
ZGF0YS5nZXQoKSk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotUmV0YWluUHRyPENGRGF0YVJlZj4g
SW1hZ2VCdWZmZXI6OnRvQ0ZEYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRv
dWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29u
c3QKLXsKLSAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKLQotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVy
YXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBhdXRvIHV0aSA9
IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsKLSAgICBBU1NFUlQodXRpKTsK
LQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+IHByZW11bHRpcGxpZWREYXRhOwotCi0gICAgaWYgKENGRXF1YWwodXRpLmdldCgp
LCBqcGVnVVRJKCkpKSB7Ci0gICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hh
bm5lbCwgc28gd2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgot
ICAgICAgICBwcmVtdWx0aXBsaWVkRGF0YSA9IGdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW50
UmVjdChJbnRQb2ludCgpLCBsb2dpY2FsU2l6ZSgpKSk7Ci0gICAgICAgIGlmICghcHJlbXVsdGlw
bGllZERhdGEpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBzaXplX3Qg
ZGF0YVNpemUgPSA0ICogbG9naWNhbFNpemUoKS53aWR0aCgpICogbG9naWNhbFNpemUoKS5oZWln
aHQoKTsKLSAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcmVtdWx0aXBsaWVk
RGF0YS0+ZGF0YSgpLCBkYXRhU2l6ZSk7Ci0gICAgICAgIGF1dG8gZGF0YVByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKG51bGxwdHIsIHByZW11bHRpcGxpZWRE
YXRhLT5kYXRhKCksIGRhdGFTaXplLCBudWxscHRyKSk7Ci0gICAgICAgIGlmICghZGF0YVByb3Zp
ZGVyKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgaW1hZ2UgPSBhZG9w
dENGKENHSW1hZ2VDcmVhdGUobG9naWNhbFNpemUoKS53aWR0aCgpLCBsb2dpY2FsU2l6ZSgpLmhl
aWdodCgpLCA4LCAzMiwgNCAqIGxvZ2ljYWxTaXplKCkud2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VS
ZWYoKSwga0NHQml0bWFwQnl0ZU9yZGVyRGVmYXVsdCB8IGtDR0ltYWdlQWxwaGFOb25lU2tpcExh
c3QsIGRhdGFQcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpKTsKLSAgICB9IGVsc2UgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVS
ZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKSB7Ci0gICAgICAgIGltYWdlID0g
Y29weU5hdGl2ZUltYWdlKENvcHlCYWNraW5nU3RvcmUpOwotICAgICAgICBpbWFnZSA9IGNyZWF0
ZUNyb3BwZWRJbWFnZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUoKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNr
aW5nU3RvcmUpOwotICAgICAgICBhdXRvIGNvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4
dENyZWF0ZSgwLCBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCks
IDgsIDQgKiBsb2dpY2FsU2l6ZSgpLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkpOwotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1v
ZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgICAgIENHQ29udGV4dENs
aXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCBsb2dpY2FsU2l6ZSgpLndp
ZHRoKCksIGxvZ2ljYWxTaXplKCkuaGVpZ2h0KCkpKTsKLSAgICAgICAgRmxvYXRTaXplIGltYWdl
U2l6ZUluVXNlclNwYWNlID0gbG9naWNhbFNpemUoKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgaW1hZ2VTaXplSW5Vc2VyU3BhY2Uu
d2lkdGgoKSwgaW1hZ2VTaXplSW5Vc2VyU3BhY2UuaGVpZ2h0KCkpLCBpbWFnZS5nZXQoKSk7Ci0g
ICAgICAgIGltYWdlID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0
LmdldCgpKSk7Ci0gICAgfQotCi0gICAgYXV0byBjZkRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0
ZU11dGFibGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgMCkpOwotICAgIGlmICghZW5jb2RlSW1hZ2Uo
aW1hZ2UuZ2V0KCksIHV0aS5nZXQoKSwgcXVhbGl0eSwgY2ZEYXRhLmdldCgpKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gV1RGTW92ZShjZkRhdGEpOwotfQotCi1WZWN0
b3I8dWludDhfdD4gSW1hZ2VCdWZmZXI6OnRvQkdSQURhdGEoKSBjb25zdAotewotICAgIGlmIChj
b250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAgICAgICAgZmx1c2hDb250ZXh0KCk7
Ci0gICAgcmV0dXJuIG1fZGF0YS50b0JHUkFEYXRhKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29u
dGV4dCgpLCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zMWNkMjM3NTgxZjk1ZDBjY2FjYjgyYzg0ZmMyNjRmOTJhNzliM2ViCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlckNHQmFja2VuZC5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
VXRpbGl0aWVzQ0cuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEUp
CisjaW5jbHVkZSA8QWNjZWxlcmF0ZS9BY2NlbGVyYXRlLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxD
b3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzLmg+CisjaW5jbHVkZSA8cGFsL3NwaS9jZy9Db3JlR3Jh
cGhpY3NTUEkuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZXRhaW5QdHI8Q0dDb2xvclNw
YWNlUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29udGV4dENvbG9yU3BhY2UoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIENHQ29u
dGV4dFJlZiBjZ0NvbnRleHQgPSBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgaWYg
KENHQ29udGV4dEdldFR5cGUoY2dDb250ZXh0KSA9PSBrQ0dDb250ZXh0VHlwZUJpdG1hcCkKKyAg
ICAgICAgcmV0dXJuIENHQml0bWFwQ29udGV4dEdldENvbG9yU3BhY2UoY2dDb250ZXh0KTsKKyAg
ICAKKyAgICByZXR1cm4gYWRvcHRDRihDR0NvbnRleHRDb3B5RGV2aWNlQ29sb3JTcGFjZShjZ0Nv
bnRleHQpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOworICAgIHJldHVybiBu
dWxscHRyOworI2VuZGlmCit9CisjCisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OnNldHVw
Q29udGV4dCgpCit7CisgICAgY29udGV4dCgpLnNjYWxlKEZsb2F0U2l6ZSgxLCAtMSkpOworICAg
IGNvbnRleHQoKS50cmFuc2xhdGUoMCwgLW1fYmFja2VuZFNpemUuaGVpZ2h0KCkpOworICAgIGNv
bnRleHQoKS5hcHBseURldmljZVNjYWxlRmFjdG9yKG1fcmVzb2x1dGlvblNjYWxlKTsKK30KKwor
c3RhdGljIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2Fy
eShDR0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSkKK3sKKyAgICBp
ZiAoaW1hZ2UgJiYgKENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90
PihiYWNrZW5kU2l6ZS53aWR0aCgpKSB8fCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSAhPSBzdGF0
aWNfY2FzdDxzaXplX3Q+KGJhY2tlbmRTaXplLmhlaWdodCgpKSkpCisgICAgICAgIHJldHVybiBh
ZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QoaW1hZ2UsIENHUmVjdE1ha2UoMCwg
MCwgYmFja2VuZFNpemUud2lkdGgoKSwgYmFja2VuZFNpemUuaGVpZ2h0KCkpKSk7CisgICAgcmV0
dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKFJldGFpblB0cjxDR0ltYWdlUmVmPiYmIGltYWdlLCBjb25zdCBJ
bnRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sK
KyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFBy
ZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJbWFn
ZUlmTmVjZXNzYXJ5KGltYWdlLmdldCgpLCBiYWNrZW5kU2l6ZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIGF1dG8gY29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKDAsIGxvZ2lj
YWxTaXplLndpZHRoKCksIGxvZ2ljYWxTaXplLmhlaWdodCgpLCA4LCA0ICogbG9naWNhbFNpemUu
d2lkdGgoKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRM
YXN0KSk7CisgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LmdldCgpLCBrQ0dC
bGVuZE1vZGVDb3B5KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LmdldCgp
LCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSkpOworICAgICAgICBG
bG9hdFNpemUgaW1hZ2VTaXplSW5Vc2VyU3BhY2UgPSBsb2dpY2FsU2l6ZTsKKyAgICAgICAgQ0dD
b250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJv
KCksIGltYWdlU2l6ZUluVXNlclNwYWNlKSwgaW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9
IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAg
IH0KKworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIEJpdG1hcEltYWdlOjpjcmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8SW1h
Z2U+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5
QmVoYXZpb3IsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7
CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09
IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAg
ICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAg
ICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAg
IHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUoaW1h
Z2UpLCBtX2xvZ2ljYWxTaXplLCBtX2JhY2tlbmRTaXplLCBtX3Jlc29sdXRpb25TY2FsZSwgcHJl
c2VydmVSZXNvbHV0aW9uKTsKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlckNHQmFja2Vu
ZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKQor
eworICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKHNpbmtJ
bnRvTmF0aXZlSW1hZ2UoKSwgbV9sb2dpY2FsU2l6ZSwgbV9iYWNrZW5kU2l6ZSwgbV9yZXNvbHV0
aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0Jh
Y2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5n
T3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICBGbG9hdFJlY3Qgc3JjUmVjdFNjYWxlZCA9IHNyY1Jl
Y3Q7CisgICAgc3JjUmVjdFNjYWxlZC5zY2FsZShtX3Jlc29sdXRpb25TY2FsZSk7CisKKyAgICBp
ZiAoYXV0byBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZSgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQo
KSA/IENvcHlCYWNraW5nU3RvcmUgOiBEb250Q29weUJhY2tpbmdTdG9yZSkpCisgICAgICAgIGRl
c3RDb250ZXh0LmRyYXdOYXRpdmVJbWFnZShpbWFnZS5nZXQoKSwgbV9iYWNrZW5kU2l6ZSwgZGVz
dFJlY3QsIHNyY1JlY3RTY2FsZWQsIG9wdGlvbnMpOworfQorCit2b2lkIEltYWdlQnVmZmVyQ0dC
YWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNv
bnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRq
dXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKKworICAgIGlmIChhdXRvIGlt
YWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4dCgpID8gQ29weUJhY2tpbmdT
dG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK0FmZmluZVRyYW5zZm9ybSBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6YmFzZVRyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEFmZmlu
ZVRyYW5zZm9ybSgxLCAwLCAwLCAtMSwgMCwgbV9sb2dpY2FsU2l6ZS5oZWlnaHQoKSk7Cit9CisK
K1JldGFpblB0cjxDRkRhdGFSZWY+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0NGRGF0YShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZlUmVz
b2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgQVNTRVJUKE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7
CisKKyAgICBhdXRvIHV0aSA9IHV0aUZyb21JbWFnZUJ1ZmZlck1JTUVUeXBlKG1pbWVUeXBlKTsK
KyAgICBBU1NFUlQodXRpKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKKyAg
ICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHByb3RlY3RlZFBpeGVsQXJyYXk7CisKKyAgICBp
ZiAoQ0ZFcXVhbCh1dGkuZ2V0KCksIGpwZWdVVEkoKSkpIHsKKyAgICAgICAgLy8gSlBFR3MgZG9u
J3QgaGF2ZSBhbiBhbHBoYSBjaGFubmVsLCBzbyB3ZSBoYXZlIHRvIG1hbnVhbGx5IGNvbXBvc2l0
ZSBvbiB0b3Agb2YgYmxhY2suCisgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gZ2V0SW1hZ2VEYXRh
KEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIGxvZ2ljYWxSZWN0KCkpOwor
ICAgICAgICBpZiAoIWltYWdlRGF0YSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIHByb3RlY3RlZFBpeGVsQXJyYXkgPSBtYWtlUmVmUHRyKGltYWdlRGF0YS0+ZGF0YSgp
KTsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplID0gcHJvdGVjdGVkUGl4ZWxBcnJheS0+Ynl0ZUxl
bmd0aCgpOworICAgICAgICBJbnRTaXplIHBpeGVsQXJyYXlEaW1lbnNpb25zID0gaW1hZ2VEYXRh
LT5zaXplKCk7CisKKyAgICAgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChwcm90ZWN0
ZWRQaXhlbEFycmF5LT5kYXRhKCksIGRhdGFTaXplKTsKKyAgICAgICAgYXV0byBkYXRhUHJvdmlk
ZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEobnVsbHB0ciwgcHJvdGVj
dGVkUGl4ZWxBcnJheS0+ZGF0YSgpLCBkYXRhU2l6ZSwgbnVsbHB0cikpOworICAgICAgICBpZiAo
IWRhdGFQcm92aWRlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlt
YWdlID0gYWRvcHRDRihDR0ltYWdlQ3JlYXRlKHBpeGVsQXJyYXlEaW1lbnNpb25zLndpZHRoKCks
IHBpeGVsQXJyYXlEaW1lbnNpb25zLmhlaWdodCgpLCA4LCAzMiwgNCAqIHBpeGVsQXJyYXlEaW1l
bnNpb25zLndpZHRoKCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0JpdG1hcEJ5dGVPcmRlckRl
ZmF1bHQgfCBrQ0dJbWFnZUFscGhhTm9uZVNraXBMYXN0LCBkYXRhUHJvdmlkZXIuZ2V0KCksIDAs
IGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KSk7CisgICAgfSBlbHNlIGlmIChtX3Jl
c29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVzZXJ2ZVJlc29s
dXRpb246OlllcykgeworICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFnZShDb3B5QmFja2lu
Z1N0b3JlKTsKKyAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5lY2Vzc2FyeShp
bWFnZS5nZXQoKSwgYmFja2VuZFNpemUoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworICAgICAgICBhdXRvIGNv
bnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZSgwLCBiYWNrZW5kU2l6ZSgpLndp
ZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0KCksIDgsIDQgKiBiYWNrZW5kU2l6ZSgpLndpZHRo
KCksIHNSR0JDb2xvclNwYWNlUmVmKCksIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkp
OworICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dC5nZXQoKSwga0NHQmxlbmRN
b2RlQ29weSk7CisgICAgICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCBiYWNrZW5kU2l6ZSgpLndpZHRoKCksIGJhY2tlbmRTaXplKCkuaGVpZ2h0
KCkpKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQuZ2V0KCksIENHUmVjdE1h
a2UoMCwgMCwgYmFja2VuZFNpemUoKS53aWR0aCgpLCBiYWNrZW5kU2l6ZSgpLmhlaWdodCgpKSwg
aW1hZ2UuZ2V0KCkpOworICAgICAgICBpbWFnZSA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlSW1hZ2UoY29udGV4dC5nZXQoKSkpOworICAgIH0KKworICAgIGF1dG8gY2ZEYXRhID0gYWRv
cHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKGtDRkFsbG9jYXRvckRlZmF1bHQsIDApKTsKKyAgICBp
ZiAoIWVuY29kZUltYWdlKGltYWdlLmdldCgpLCB1dGkuZ2V0KCksIHF1YWxpdHksIGNmRGF0YS5n
ZXQoKSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFdURk1vdmUoY2ZE
YXRhKTsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyQ0dCYWNrZW5kOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAor
eworICAgIGlmIChhdXRvIGRhdGEgPSB0b0NGRGF0YShtaW1lVHlwZSwgcXVhbGl0eSwgUHJlc2Vy
dmVSZXNvbHV0aW9uOjpObykpCisgICAgICAgIHJldHVybiBkYXRhVmVjdG9yKGRhdGEuZ2V0KCkp
OworICAgIHJldHVybiB7IH07Cit9CisKK1N0cmluZyBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBpZiAo
YXV0byBkYXRhID0gdG9DRkRhdGEobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1dGlv
bikpCisgICAgICAgIHJldHVybiBkYXRhVVJMKGRhdGEuZ2V0KCksIG1pbWVUeXBlKTsKKyAgICBy
ZXR1cm4gImRhdGE6LCJfczsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFKQorc3RhdGljIGlubGlu
ZSB2SW1hZ2VfQnVmZmVyIG1ha2VWSW1hZ2VCdWZmZXIodW5zaWduZWQgYnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIHJvd3MsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgdkltYWdlX0J1ZmZlciB2
SW1hZ2VCdWZmZXI7CisKKyAgICB2SW1hZ2VCdWZmZXIuaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8dklt
YWdlUGl4ZWxDb3VudD4oc2l6ZS5oZWlnaHQoKSk7CisgICAgdkltYWdlQnVmZmVyLndpZHRoID0g
c3RhdGljX2Nhc3Q8dkltYWdlUGl4ZWxDb3VudD4oc2l6ZS53aWR0aCgpKTsKKyAgICB2SW1hZ2VC
dWZmZXIucm93Qnl0ZXMgPSBieXRlc1BlclJvdzsKKyAgICB2SW1hZ2VCdWZmZXIuZGF0YSA9IHJv
d3M7CisgICAgcmV0dXJuIHZJbWFnZUJ1ZmZlcjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNv
cHlJbWFnZVBpeGVsc0FjY2VsZXJhdGVkKAorICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3Jj
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB2SW1hZ2VfQnVmZmVyJiBz
cmMsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3JtYXQsIENvbG9yRm9y
bWF0IGRlc3RDb2xvckZvcm1hdCwgdkltYWdlX0J1ZmZlciYgZGVzdCkKK3sKKyAgICBpZiAoc3Jj
QWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0KSB7CisgICAgICAgIEFTU0VSVChzcmNDb2xv
ckZvcm1hdCAhPSBkZXN0Q29sb3JGb3JtYXQpOworICAgICAgICBBU1NFUlQoZGVzdEFscGhhRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworCisgICAgICAg
IC8vIFN3YXAgcGl4ZWwgY2hhbm5lbHMgQkdSQSA8LT4gUkdCQS4KKyAgICAgICAgY29uc3QgdWlu
dDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKKyAgICAgICAgdkltYWdlUGVybXV0ZUNoYW5u
ZWxzX0FSR0I4ODg4KCZzcmMsICZkZXN0LCBtYXAsIGt2SW1hZ2VOb0ZsYWdzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChkZXN0QWxwaGFGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7CisgICAgICAgIGlmIChzcmNDb2xvckZvcm1h
dCA9PSBDb2xvckZvcm1hdDo6UkdCQSkKKyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX0JHUkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNyY0NvbG9yRm9y
bWF0ID09IENvbG9yRm9ybWF0OjpSR0JBKQorICAgICAgICAgICAgdkltYWdlUHJlbXVsdGlwbHlE
YXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9GbGFncyk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwg
a3ZJbWFnZU5vRmxhZ3MpOworICAgIH0KKworICAgIGlmIChzcmNDb2xvckZvcm1hdCAhPSBkZXN0
Q29sb3JGb3JtYXQpIHsKKyAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBCR1JBIDwtPiBS
R0JBLgorICAgICAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9OworICAg
ICAgICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJmRlc3QsICZkZXN0LCBtYXAsIGt2
SW1hZ2VOb0ZsYWdzKTsKKyAgICB9Cit9CisKK3ZvaWQgSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNv
cHlJbWFnZVBpeGVscygKKyAgICBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNyY0FscGhhRm9ybWF0
LCBDb2xvckZvcm1hdCBzcmNDb2xvckZvcm1hdCwgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3csIHVp
bnQ4X3QqIHNyY1Jvd3MsCisgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0QWxwaGFGb3Jt
YXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3sKKyAgICBp
ZiAoc3JjQWxwaGFGb3JtYXQgPT0gZGVzdEFscGhhRm9ybWF0ICYmIHNyY0NvbG9yRm9ybWF0ID09
IGRlc3RDb2xvckZvcm1hdCkgeworICAgICAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvcHlJbWFn
ZVBpeGVscyhzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyY0J5dGVzUGVyUm93LCBz
cmNSb3dzLCBkZXN0QWxwaGFGb3JtYXQsIGRlc3RDb2xvckZvcm1hdCwgZGVzdEJ5dGVzUGVyUm93
LCBkZXN0Um93cywgc2l6ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2SW1hZ2Vf
QnVmZmVyIHNyYyA9IG1ha2VWSW1hZ2VCdWZmZXIoc3JjQnl0ZXNQZXJSb3csIHNyY1Jvd3MsIHNp
emUpOworICAgIHZJbWFnZV9CdWZmZXIgZGVzdCA9IG1ha2VWSW1hZ2VCdWZmZXIoZGVzdEJ5dGVz
UGVyUm93LCBkZXN0Um93cywgc2l6ZSk7CisKKyAgICBjb3B5SW1hZ2VQaXhlbHNBY2NlbGVyYXRl
ZChzcmNBbHBoYUZvcm1hdCwgc3JjQ29sb3JGb3JtYXQsIHNyYywgZGVzdEFscGhhRm9ybWF0LCBk
ZXN0Q29sb3JGb3JtYXQsIGRlc3QpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3
Y2EzOTgwMzRmMjVhMzM0OTI0N2Q0MzRmNWY2NTlmOTJhZjNkNDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXRUJDT1JF
X0VYUE9SVCBJbWFnZUJ1ZmZlckNHQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckJhY2tlbmQg
eworcHVibGljOgorICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkg
PSBDb3B5QmFja2luZ1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRp
b246Ok5vKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IHNpbmtJbnRvSW1hZ2Uo
UHJlc2VydmVSZXNvbHV0aW9uKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkcmF3
UGF0dGVybihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywg
Y29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmKSBvdmVycmlkZTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgdG9EYXRh
VVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0b3I8dWludDhfdD4gdG9E
YXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSkgY29u
c3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB1c2luZyBJbWFnZUJ1ZmZlckJhY2tlbmQ6
OkltYWdlQnVmZmVyQmFja2VuZDsKKworICAgIHN0YXRpYyBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmKTsKKyAgICB2b2lk
IHNldHVwQ29udGV4dCgpOworICAgIHZpcnR1YWwgUmV0YWluUHRyPENGRGF0YVJlZj4gdG9DRkRh
dGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEUpCisgICAgdm9pZCBj
b3B5SW1hZ2VQaXhlbHMoCisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc3JjQWxwaGFG
b3JtYXQsIENvbG9yRm9ybWF0IHNyY0NvbG9yRm9ybWF0LCB1bnNpZ25lZCBzcmNCeXRlc1BlclJv
dywgdWludDhfdCogc3JjUm93cywKKyAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXN0
QWxwaGFGb3JtYXQsIENvbG9yRm9ybWF0IGRlc3RDb2xvckZvcm1hdCwgdW5zaWduZWQgZGVzdEJ5
dGVzUGVyUm93LCB1aW50OF90KiBkZXN0Um93cywgY29uc3QgSW50U2l6ZSYpIGNvbnN0IG92ZXJy
aWRlOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9J
bWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTM4
M2M5OTZlNTRkMGIwNDcxM2ZkYzc0MmMyMTQzNmQzODA3ZTg0NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJVdGlsaXRpZXNDRy5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorY29uc3RleHByIGNv
bnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3Q7CisjZWxzZQorY29uc3RleHBy
IGNvbnN0IENHQml0bWFwSW5mbyBEZWZhdWx0Qml0bWFwSW5mbyA9IGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdDsKKyNlbmRpZgorCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1h
Z2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQpOworCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JT
cGFjZSwgQ0dDb2xvclNwYWNlUmVmIGNnQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7
CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJl
c29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICB2b2lkKiBkYXRhOworICAgIHVuc2lnbmVkIGJ5dGVzUGVy
Um93ID0gNCAqIGJhY2tlbmRTaXplLndpZHRoKCk7CisKKyAgICBpZiAoIXRyeUZhc3RDYWxsb2Mo
YmFja2VuZFNpemUuaGVpZ2h0KCksIGJ5dGVzUGVyUm93KS5nZXRWYWx1ZShkYXRhKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQoIShyZWludGVycHJldF9jYXN0PGludHB0
cl90PihkYXRhKSAmIDMpKTsKKworICAgIHNpemVfdCBudW1CeXRlcyA9IGJhY2tlbmRTaXplLmhl
aWdodCgpICogYnl0ZXNQZXJSb3c7CisgICAgdmVyaWZ5SW1hZ2VCdWZmZXJJc0JpZ0Vub3VnaChk
YXRhLCBudW1CeXRlcyk7CisKKyAgICBhdXRvIGNnQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBD
b250ZXh0Q3JlYXRlKGRhdGEsIGJhY2tlbmRTaXplLndpZHRoKCksIGJhY2tlbmRTaXplLmhlaWdo
dCgpLCA4LCBieXRlc1BlclJvdywgY2dDb2xvclNwYWNlLCBEZWZhdWx0Qml0bWFwSW5mbykpOwor
ICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8g
Y29udGV4dCA9IG1ha2VVbmlxdWU8R3JhcGhpY3NDb250ZXh0PihjZ0NvbnRleHQuZ2V0KCkpOwor
CisgICAgY29uc3QgYXV0byByZWxlYXNlSW1hZ2VEYXRhID0gW10gKHZvaWQqLCBjb25zdCB2b2lk
KiBkYXRhLCBzaXplX3QpIHsKKyAgICAgICAgZmFzdEZyZWUoY29uc3RfY2FzdDx2b2lkKj4oZGF0
YSkpOworICAgIH07CisKKyAgICBhdXRvIGRhdGFQcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJv
dmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBkYXRhLCBudW1CeXRlcywgcmVsZWFzZUltYWdlRGF0YSkp
OworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZD4obmV3IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNv
bHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGRhdGEsIFdURk1vdmUoZGF0YVByb3ZpZGVyKSwgV1RG
TW92ZShjb250ZXh0KSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQ+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGF1
dG8gY2dDb2xvclNwYWNlID0gY29udGV4dENvbG9yU3BhY2UoY29udGV4dCkpCisgICAgICAgIHJl
dHVybiBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENvbG9yU3Bh
Y2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisgICAgcmV0dXJu
IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpjcmVhdGUoc2l6ZSwgMSwgQ29sb3JTcGFjZTo6
U1JHQiwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFw
QmFja2VuZD4gSW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBj
b25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZDo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwg
Y2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpLCBob3N0V2luZG93KTsKK30KKworSW1hZ2VC
dWZmZXJDR0JpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kKGNvbnN0IEZs
b2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWlu
UHRyPENHRGF0YVByb3ZpZGVyUmVmPiYmIGRhdGFQcm92aWRlciwgc3RkOjp1bmlxdWVfcHRyPEdy
YXBoaWNzQ29udGV4dD4mJiBjb250ZXh0KQorICAgIDogSW1hZ2VCdWZmZXJDR0JhY2tlbmQobG9n
aWNhbFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UpCisgICAg
LCBtX2RhdGEoZGF0YSkKKyAgICAsIG1fZGF0YVByb3ZpZGVyKFdURk1vdmUoZGF0YVByb3ZpZGVy
KSkKKyAgICAsIG1fY29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworICAgIEFTU0VSVChtX2Rh
dGEpOworICAgIEFTU0VSVChtX2RhdGFQcm92aWRlcik7CisgICAgQVNTRVJUKG1fY29udGV4dCk7
CisgICAgc2V0dXBDb250ZXh0KCk7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0
OworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZDo6Y29weU5h
dGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25zdAoreworICAgIHN3
aXRjaCAoY29weUJlaGF2aW9yKSB7CisgICAgY2FzZSBDb3B5QmFja2luZ1N0b3JlOgorICAgICAg
ICByZXR1cm4gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGVJbWFnZShjb250ZXh0KCkucGxh
dGZvcm1Db250ZXh0KCkpKTsKKworICAgIGNhc2UgRG9udENvcHlCYWNraW5nU3RvcmU6CisgICAg
ICAgIHJldHVybiBhZG9wdENGKENHSW1hZ2VDcmVhdGUoCisgICAgICAgICAgICBtX2JhY2tlbmRT
aXplLndpZHRoKCksIG1fYmFja2VuZFNpemUuaGVpZ2h0KCksIDgsIDMyLCBieXRlc1BlclJvdygp
LAorICAgICAgICAgICAgY2FjaGVkQ0dDb2xvclNwYWNlKG1fY29sb3JTcGFjZSksIERlZmF1bHRC
aXRtYXBJbmZvLCBtX2RhdGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgIDAsIHRydWUsIGtD
R1JlbmRlcmluZ0ludGVudERlZmF1bHQpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kOjp0b0JHUkFEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1h
Z2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKG1fZGF0YSk7Cit9CisKK1JlZlB0cjxJbWFnZURh
dGE+IEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1h
dCwgc3JjUmVjdCwgbV9kYXRhKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1hZ2VEYXRh
KGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbV9kYXRhKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JpdG1h
cEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyQ0dCaXRtYXBCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjZhZjY2MmExYzc2YThiODliNzc2ZjIz
OTZjYjg1MzQ3ZDZhNDkxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kLmgKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5k
LmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEltYWdlQnVmZmVyQ0dCaXRtYXBCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQ0dC
YWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdlQnVmZmVyQ0dCaXRtYXBC
YWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlckNHQml0bWFwQmFj
a2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNH
Qml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgQ0dDb2xvclNwYWNlUmVmLCBjb25zdCBIb3N0V2luZG93Kik7Cisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwg
Y29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJDR0JpdG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmLCBjb25zdCBHcmFwaGlj
c0NvbnRleHQmKTsKKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgTmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNv
cHkgPSBDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZlY3Rvcjx1aW50
OF90PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0
IEludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmLCBjb25zdCBJbnRS
ZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSwgdm9pZCogZGF0YSwgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVm
PiYmLCBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiYmKTsKKworI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gQ29sb3JGb3JtYXQ6OkJHUkE7IH0KKyNlbmRpZgorCisgICAgdm9p
ZCogbV9kYXRhOworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gbV9kYXRhUHJvdmlk
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4gbV9jb250ZXh0OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRh
Q0cuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWZjMDMxY2MwNjY0ZGU3YTU3
N2QxYmNiNWI0OTYyZmRkMmVhYmFjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVm
ZmVyRGF0YUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyRGF0YS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9Db3JlR3JhcGhpY3MuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVHlwZWRBcnJheUlubGluZXMu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0KLSNpZiBVU0UoQUNDRUxFUkFURSkKLSNpbmNsdWRlIDxB
Y2NlbGVyYXRlL0FjY2VsZXJhdGUuaD4KLSNlbmRpZgotCi0jaWYgVVNFKElPU1VSRkFDRV9DQU5W
QVNfQkFDS0lOR19TVE9SRSkKLSNpbmNsdWRlICJJT1N1cmZhY2UuaCIKLSNpbmNsdWRlIDxkaXNw
YXRjaC9kaXNwYXRjaC5oPgotI2luY2x1ZGUgPHBhbC9zcGkvY29jb2EvSU9TdXJmYWNlU1BJLmg+
Ci0jZW5kaWYKLQotLy8gQ0EgdXNlcyBBUkdCMzIgZm9yIHRleHR1cmVzIGFuZCBBUkdCMzIgLT4g
QVJHQjMyIHJlc2FtcGxpbmcgaXMgb3B0aW1pemVkLgotI2RlZmluZSBVU0VfQVJHQjMyIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotI2lmIFVTRShBQ0NFTEVS
QVRFKSAmJiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KSkKLXN0YXRpYyB2b2lkIHVucHJlbXVsdGlwbHlCdWZmZXJEYXRhKGNvbnN0IHZJbWFnZV9CdWZm
ZXImIHNyYywgY29uc3QgdkltYWdlX0J1ZmZlciYgZGVzdCkKLXsKLSAgICBBU1NFUlQoc3JjLmRh
dGEpOwotICAgIEFTU0VSVChkZXN0LmRhdGEpOwotCi0gICAgaWYgKGt2SW1hZ2VOb0Vycm9yICE9
IHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBrdkltYWdlTm9G
bGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5lbHMgMSBhbmQgMywg
dG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwgSW1hZ2VEYXRhIGV4
cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwgMSwgMCwgMyB9Owot
ICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRlc3QsIG1hcCwga3ZJ
bWFnZU5vRmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBwcmVtdWx0aXBseUJ1ZmZlckRhdGEoY29u
c3QgdkltYWdlX0J1ZmZlciYgc3JjLCBjb25zdCB2SW1hZ2VfQnVmZmVyJiBkZXN0KQotewotICAg
IEFTU0VSVChzcmMuZGF0YSk7Ci0gICAgQVNTRVJUKGRlc3QuZGF0YSk7Ci0KLSAgICBpZiAoa3ZJ
bWFnZU5vRXJyb3IgIT0gdkltYWdlUHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0
LCBrdkltYWdlTm9GbGFncykpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFN3YXAgY2hhbm5l
bHMgMSBhbmQgMywgdG8gY29udmVydCBCR1JBPC0+UkdCQS4gSU9TdXJmYWNlcyBhcmUgQkdSQSwg
SW1hZ2VEYXRhIGV4cGVjdHMgUkdCQS4KLSAgICBjb25zdCB1aW50OF90IG1hcFs0XSA9IHsgMiwg
MSwgMCwgMyB9OwotICAgIHZJbWFnZVBlcm11dGVDaGFubmVsc19BUkdCODg4OCgmZGVzdCwgJmRl
c3QsIG1hcCwga3ZJbWFnZU5vRmxhZ3MpOwotfQotI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFKSAm
JiAoVVNFX0FSR0IzMiB8fCBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSkKLQot
c3RhdGljIGlubGluZSB2b2lkIHRyYW5zZmVyRGF0YSh2b2lkKiBvdXRwdXQsIHZvaWQqIGlucHV0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHNpemVfdCBpbnB1dEJ5dGVzUGVyUm93KQotewotI2lm
IFVTRShBQ0NFTEVSQVRFKQotICAgIEFTU0VSVChpbnB1dCk7Ci0gICAgQVNTRVJUKG91dHB1dCk7
Ci0KLSAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICBzcmMud2lkdGggPSB3aWR0aDsKLSAgICBz
cmMuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHNyYy5yb3dCeXRlcyA9IGlucHV0Qnl0ZXNQZXJSb3c7
Ci0gICAgc3JjLmRhdGEgPSBpbnB1dDsKLQotICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICBk
ZXN0LndpZHRoID0gd2lkdGg7Ci0gICAgZGVzdC5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgZGVzdC5y
b3dCeXRlcyA9IHdpZHRoICogNDsKLSAgICBkZXN0LmRhdGEgPSBvdXRwdXQ7Ci0KLSAgICB2SW1h
Z2VVbnByZW11bHRpcGx5RGF0YV9CR1JBODg4OCgmc3JjLCAmZGVzdCwga3ZJbWFnZU5vRmxhZ3Mp
OwotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0ob3V0cHV0KTsKLSAgICBVTlVTRURfUEFSQU0oaW5w
dXQpOwotICAgIFVOVVNFRF9QQVJBTSh3aWR0aCk7Ci0gICAgVU5VU0VEX1BBUkFNKGhlaWdodCk7
Ci0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBub3QgQUNDRUxFUkFURS4KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotfQotCi1WZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZm
ZXJEYXRhOjp0b0JHUkFEYXRhKGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZywgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KSBjb25zdAotewotICAgIFZlY3Rvcjx1aW50OF90PiByZXN1bHQoNCAqIHdpZHRo
ICogaGVpZ2h0KTsKLQotICAgIGlmICghYWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICB0
cmFuc2ZlckRhdGEocmVzdWx0LmRhdGEoKSwgZGF0YSwgd2lkdGgsIGhlaWdodCwgNCAqIGJhY2tp
bmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotI2lm
IFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0gICAgSU9TdXJmYWNlOjpMb2Nr
ZXIgbG9jaygqc3VyZmFjZSk7Ci0gICAgdHJhbnNmZXJEYXRhKHJlc3VsdC5kYXRhKCksIGxvY2su
c3VyZmFjZUJhc2VBZGRyZXNzKCksIHdpZHRoLCBoZWlnaHQsIHN1cmZhY2UtPmJ5dGVzUGVyUm93
KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSNlbmRpZgotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRh
OjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIGFjY2VsZXJhdGVSZW5kZXJpbmcp
IGNvbnN0Ci17Ci0gICAgQ2hlY2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IGFyZWEgPSA0
OwotICAgIGFyZWEgKj0gcmVjdC53aWR0aCgpOwotICAgIGFyZWEgKj0gcmVjdC5oZWlnaHQoKTsK
LSAgICBpZiAoYXJlYS5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFs
aXplZChhcmVhLnVuc2FmZUdldCgpKTsKLSAgICB1aW50OF90KiByZXN1bHREYXRhID0gcmVzdWx0
ID8gcmVzdWx0LT5kYXRhKCkgOiBudWxscHRyOwotICAgIGlmICghcmVzdWx0RGF0YSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDaGVja2VkPGludD4gZW5keCA9IHJlY3QubWF4WCgp
OwotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gcmVjdC5tYXhZKCk7Ci0gICAgaWYgKHJlY3QueCgp
IDwgMCB8fCByZWN0LnkoKSA8IDAgfHwgZW5keC51bnNhZmVHZXQoKSA+IHNpemUud2lkdGgoKSB8
fCBlbmR5LnVuc2FmZUdldCgpID4gc2l6ZS5oZWlnaHQoKSkKLSAgICAgICAgcmVzdWx0LT56ZXJv
RmlsbCgpOwotICAgIAotICAgIGludCBvcmlnaW54ID0gcmVjdC54KCk7Ci0gICAgaW50IGRlc3R4
ID0gMDsKLSAgICBDaGVja2VkPGludD4gZGVzdHcgPSByZWN0LndpZHRoKCk7Ci0gICAgaWYgKG9y
aWdpbnggPCAwKSB7Ci0gICAgICAgIGRlc3R3ICs9IG9yaWdpbng7Ci0gICAgICAgIGRlc3R4ID0g
LW9yaWdpbng7Ci0gICAgICAgIG9yaWdpbnggPSAwOwotICAgIH0KLSAgICBkZXN0dyA9IHN0ZDo6
bWluPGludD4oZGVzdHcudW5zYWZlR2V0KCksIHNpemUud2lkdGgoKSAtIG9yaWdpbngpOwotICAg
IGlmIChlbmR4LnVuc2FmZUdldCgpID4gc2l6ZS53aWR0aCgpKQotICAgICAgICBlbmR4ID0gc2l6
ZS53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50PiB3aWR0aCA9IGVuZHggLSBvcmlnaW54OwotICAg
IAotICAgIGludCBvcmlnaW55ID0gcmVjdC55KCk7Ci0gICAgaW50IGRlc3R5ID0gMDsKLSAgICBD
aGVja2VkPGludD4gZGVzdGggPSByZWN0LmhlaWdodCgpOwotICAgIGlmIChvcmlnaW55IDwgMCkg
ewotICAgICAgICBkZXN0aCArPSBvcmlnaW55OwotICAgICAgICBkZXN0eSA9IC1vcmlnaW55Owot
ICAgICAgICBvcmlnaW55ID0gMDsKLSAgICB9Ci0gICAgZGVzdGggPSBzdGQ6Om1pbjxpbnQ+KGRl
c3RoLnVuc2FmZUdldCgpLCBzaXplLmhlaWdodCgpIC0gb3JpZ2lueSk7Ci0gICAgaWYgKGVuZHku
dW5zYWZlR2V0KCkgPiBzaXplLmhlaWdodCgpKQotICAgICAgICBlbmR5ID0gc2l6ZS5oZWlnaHQo
KTsKLSAgICBDaGVja2VkPGludD4gaGVpZ2h0ID0gZW5keSAtIG9yaWdpbnk7Ci0gICAgCi0gICAg
aWYgKHdpZHRoLnVuc2FmZUdldCgpIDw9IDAgfHwgaGVpZ2h0LnVuc2FmZUdldCgpIDw9IDApCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgCi0gICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93
ID0gNCAqIHJlY3Qud2lkdGgoKTsKLSAgICB1aW50OF90KiBkZXN0Um93cyA9IHJlc3VsdERhdGEg
KyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKLSAgICAKLSAgICB1bnNpZ25l
ZCBzcmNCeXRlc1BlclJvdzsKLSAgICB1aW50OF90KiBzcmNSb3dzOwotICAgIAotICAgIGlmICgh
YWNjZWxlcmF0ZVJlbmRlcmluZykgewotICAgICAgICBpZiAoIWRhdGEpCi0gICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotCi0gICAgICAgIHNyY0J5dGVzUGVyUm93ID0gYnl0ZXNQZXJSb3cudW5z
YWZlR2V0KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihk
YXRhKSArIG9yaWdpbnkgKiBzcmNCeXRlc1BlclJvdyArIG9yaWdpbnggKiA0OwotCi0jaWYgVVNF
KEFDQ0VMRVJBVEUpCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIg
c3JjOwotICAgICAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZlR2V0KCk7Ci0gICAgICAg
ICAgICBzcmMuaGVpZ2h0ID0gaGVpZ2h0LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLnJv
d0J5dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICBzcmMuZGF0YSA9IHNyY1Jvd3M7
Ci0KLSAgICAgICAgICAgIHZJbWFnZV9CdWZmZXIgZGVzdDsKLSAgICAgICAgICAgIGRlc3Qud2lk
dGggPSBkZXN0dy51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgu
dW5zYWZlR2V0KCk7Ci0gICAgICAgICAgICBkZXN0LnJvd0J5dGVzID0gZGVzdEJ5dGVzUGVyUm93
OwotICAgICAgICAgICAgZGVzdC5kYXRhID0gZGVzdFJvd3M7Ci0KLSNpZiBVU0VfQVJHQjMyCi0g
ICAgICAgICAgICB1bnByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAg
ICAgICAgICAgIHZJbWFnZVVucHJlbXVsdGlwbHlEYXRhX1JHQkE4ODg4KCZzcmMsICZkZXN0LCBr
dkltYWdlTm9GbGFncyk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotI2VuZGlmCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBpZiAoKHdpZHRoICog
NCkuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICAgICAgICAgIENSQVNIKCk7Ci0gICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotI2lmIFVTRV9BUkdCMzIKLSAg
ICAgICAgICAgICAgICAgICAgLy8gQnl0ZSBvcmRlciBpcyBkaWZmZXJlbnQgYXMgd2UgdXNlIGlt
YWdlIGJ1ZmZlcnMgb2YgQVJHQjMyCi0gICAgICAgICAgICAgICAgICAgIGlmIChhbHBoYSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jvd3NbYmFzZXgg
KyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgMV0gPSAoc3JjUm93c1tiYXNleCArIDFdICogMjU1KSAvIGFscGhhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4XSAqIDI1
NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgM10g
PSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gc3JjUm93c1tiYXNl
eF07Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlmIChh
bHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gKHNyY1Jv
d3NbYmFzZXhdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKHNyY1Jvd3NbYmFzZXgg
KyAyXSAqIDI1NSkgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3MgKyBiYXNl
eClbMF0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3JjUm93cyArIGJhc2V4
KVswXTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBzcmNSb3dz
ICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyArK3kpIHsKLSNpZiBVU0VfQVJH
QjMyCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQo
KTsgeCsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAg
ICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07
Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4
XTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IHNyY1Jvd3NbYmFz
ZXggKyAzXTsKLSAgICAgICAgICAgICAgICB9Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgKHdpZHRoICogNCkudW5zYWZlR2V0KCk7IHggKz0gNCkKLSAgICAgICAg
ICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRlc3RSb3dzICsgeClbMF0g
PSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgpWzBdOwotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKLSAgICAgICAgICAgICAg
ICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9IGVsc2UgewotI2lmIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUpCi0g
ICAgICAgIElPU3VyZmFjZTo6TG9ja2VyIGxvY2soKnN1cmZhY2UpOwotICAgICAgICBzcmNCeXRl
c1BlclJvdyA9IHN1cmZhY2UtPmJ5dGVzUGVyUm93KCk7Ci0gICAgICAgIHNyY1Jvd3MgPSBzdGF0
aWNfY2FzdDx1aW50OF90Kj4obG9jay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyBvcmlnaW55ICog
c3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAg
ICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgc3JjLndpZHRoID0gd2lkdGgudW5zYWZl
R2V0KCk7Ci0gICAgICAgIHNyYy5oZWlnaHQgPSBoZWlnaHQudW5zYWZlR2V0KCk7Ci0gICAgICAg
IHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICBzcmMuZGF0YSA9IHNyY1Jv
d3M7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBkZXN0LndpZHRoID0g
ZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVzdGgudW5zYWZlR2V0
KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0gICAgICAgIGRl
c3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAgICAgdW5wcmVtdWx0
aXBseUJ1ZmZlckRhdGEoc3JjLCBkZXN0KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAv
LyBTd2FwIHBpeGVsIGNoYW5uZWxzIGZyb20gQkdSQSB0byBSR0JBLgotICAgICAgICAgICAgY29u
c3QgdWludDhfdCBtYXBbNF0gPSB7IDIsIDEsIDAsIDMgfTsKLSAgICAgICAgICAgIHZJbWFnZVBl
cm11dGVDaGFubmVsc19BUkdCODg4OCgmc3JjLCAmZGVzdCwgbWFwLCBrdkltYWdlTm9GbGFncyk7
Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGlmICgod2lkdGggKiA0KS5oYXNPdmVyZmxvd2Vk
KCkpCi0gICAgICAgICAgICBDUkFTSCgpOwotCi0gICAgICAgIGlmIChvdXRwdXRGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKSB7Ci0gICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aC51bnNhZmVHZXQoKTsgeCsrKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAgICAgICAgICB1
aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAgICAgICAgICAgICAgICAgICAgdWludDhfdCBh
bHBoYSA9IHNyY1Jvd3NbYmFzZXggKyAzXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGFscGhh
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1ti
YXNleCArIDJdICogMjU1KSAvIGFscGhhOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiAyNTUpIC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gKGIgKiAyNTUpIC8gYWxw
aGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7
Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNleCArIDFdOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleCArIDNdID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNyY1Jv
d3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVzdFJvd3MgKz0gZGVzdEJ5
dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQudW5zYWZlR2V0KCk7ICsreSkgewotICAgICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7IHgrKykgewotICAg
ICAgICAgICAgICAgICAgICBpbnQgYmFzZXggPSB4ICogNDsKLSAgICAgICAgICAgICAgICAgICAg
dWludDhfdCBiID0gc3JjUm93c1tiYXNleF07Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dz
W2Jhc2V4XSA9IHNyY1Jvd3NbYmFzZXggKyAyXTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJv
d3NbYmFzZXggKyAxXSA9IHNyY1Jvd3NbYmFzZXggKyAxXTsKLSAgICAgICAgICAgICAgICAgICAg
ZGVzdFJvd3NbYmFzZXggKyAyXSA9IGI7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgICAgICAgICAgZGVz
dFJvd3MgKz0gZGVzdEJ5dGVzUGVyUm93OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0jZW5k
aWYgLy8gVVNFKEFDQ0VMRVJBVEUpCi0jZWxzZQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSNlbmRpZiAvLyBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgIH0K
LSAgICAKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0
RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0
aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKQotewotICAgIEFTU0VSVChzb3VyY2VSZWN0
LndpZHRoKCkgPiAwKTsKLSAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwotICAg
IAotICAgIENoZWNrZWQ8aW50PiBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7Ci0gICAgQ2hlY2tl
ZDxpbnQ+IGRlc3R4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3Qu
eCgpKTsKLSAgICBBU1NFUlQoZGVzdHgudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUX1VO
VVNFRChzaXplLCBkZXN0eC51bnNhZmVHZXQoKSA8IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJU
KG9yaWdpbngudW5zYWZlR2V0KCkgPj0gMCk7Ci0gICAgQVNTRVJUKG9yaWdpbngudW5zYWZlR2V0
KCkgPD0gc291cmNlUmVjdC5tYXhYKCkpOwotICAgIAotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0g
KENoZWNrZWQ8aW50PihkZXN0UG9pbnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBB
U1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotICAgIAotICAgIENoZWNr
ZWQ8aW50PiB3aWR0aCA9IHNvdXJjZVJlY3Qud2lkdGgoKTsKLSAgICBDaGVja2VkPGludD4gZGVz
dHcgPSBlbmR4IC0gZGVzdHg7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueSA9IHNvdXJjZVJl
Y3QueSgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50
LnkoKSkgKyBzb3VyY2VSZWN0LnkoKSk7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49
IDApOwotICAgIEFTU0VSVChkZXN0eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAg
IEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVu
c2FmZUdldCgpIDw9IHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICAKLSAgICBDaGVja2VkPGludD4g
ZW5keSA9IChDaGVja2VkPGludD4oZGVzdFBvaW50LnkoKSkgKyBzb3VyY2VSZWN0Lm1heFkoKSk7
Ci0gICAgQVNTRVJUKGVuZHkudW5zYWZlR2V0KCkgPD0gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBD
aGVja2VkPGludD4gaGVpZ2h0ID0gc291cmNlUmVjdC5oZWlnaHQoKTsKLSAgICBDaGVja2VkPGlu
dD4gZGVzdGggPSBlbmR5IC0gZGVzdHk7Ci0gICAgCi0gICAgaWYgKHdpZHRoIDw9IDAgfHwgaGVp
Z2h0IDw9IDApCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB1bnNpZ25lZCBzcmNCeXRlc1Bl
clJvdyA9IDQgKiBzb3VyY2VTaXplLndpZHRoKCk7Ci0gICAgY29uc3QgdWludDhfdCogc3JjUm93
cyA9IHNvdXJjZS5kYXRhKCkgKyAob3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAq
IDQpLnVuc2FmZUdldCgpOwotICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdzsKLSAgICB1aW50
OF90KiBkZXN0Um93czsKLSAgICAKLSAgICBpZiAoIWFjY2VsZXJhdGVSZW5kZXJpbmcpIHsKLSAg
ICAgICAgaWYgKCFkYXRhKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGRlc3RCeXRl
c1BlclJvdyA9IGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpOwotICAgICAgICBkZXN0Um93cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRhdGEpICsgKGRlc3R5ICogZGVzdEJ5dGVzUGVyUm93
ICsgZGVzdHggKiA0KS51bnNhZmVHZXQoKTsKLQotI2lmIFVTRShBQ0NFTEVSQVRFKQotICAgICAg
ICBpZiAoc291cmNlRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZCkgewotCi0gICAgICAgICAgICB2SW1hZ2VfQnVmZmVyIHNyYzsKLSAgICAgICAgICAgIHNy
Yy53aWR0aCA9IHdpZHRoLnVuc2FmZUdldCgpOwotICAgICAgICAgICAgc3JjLmhlaWdodCA9IGhl
aWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIHNyYy5yb3dCeXRlcyA9IHNyY0J5dGVzUGVy
Um93OwotICAgICAgICAgICAgc3JjLmRhdGEgPSBjb25zdF9jYXN0PHVpbnQ4X3QqPihzcmNSb3dz
KTsKLQotICAgICAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICAgICAgZGVzdC53
aWR0aCA9IGRlc3R3LnVuc2FmZUdldCgpOwotICAgICAgICAgICAgZGVzdC5oZWlnaHQgPSBkZXN0
aC51bnNhZmVHZXQoKTsKLSAgICAgICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJS
b3c7Ci0gICAgICAgICAgICBkZXN0LmRhdGEgPSBkZXN0Um93czsKLQotI2lmIFVTRV9BUkdCMzIK
LSAgICAgICAgICAgIHByZW11bHRpcGx5QnVmZmVyRGF0YShzcmMsIGRlc3QpOwotI2Vsc2UKLSAg
ICAgICAgICAgIHZJbWFnZVByZW11bHRpcGx5RGF0YV9SR0JBODg4OCgmc3JjLCAmZGVzdCwga3ZJ
bWFnZU5vRmxhZ3MpOwotI2VuZGlmCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSNl
bmRpZgotCi0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0LnVuc2FmZUdldCgpOyAr
K3kpIHsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGgudW5zYWZlR2V0KCk7
IHgrKykgewotICAgICAgICAgICAgICAgIGludCBiYXNleCA9IHggKiA0OwotICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgYWxwaGEgPSBzcmNSb3dzW2Jhc2V4ICsgM107Ci0jaWYgVVNFX0FSR0IzMgot
ICAgICAgICAgICAgICAgIC8vIEJ5dGUgb3JkZXIgaXMgZGlmZmVyZW50IGFzIHdlIHVzZSBpbWFn
ZSBidWZmZXJzIG9mIEFSR0IzMgotICAgICAgICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0g
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkg
ewotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCAr
IDJdICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1ti
YXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXggKyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAyXSA9IChzcmNSb3dzW2Jhc2V4ICsg
MF0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jh
c2V4ICsgM10gPSBhbHBoYTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBkZXN0Um93c1tiYXNleF0gPSBzcmNSb3dzW2Jhc2V4ICsgMl07Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMV0gPSBzcmNSb3dzW2Jhc2V4ICsgMV07Ci0gICAg
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSBzcmNSb3dzW2Jhc2V4XTsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgJiYgYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4XSA9IChzcmNSb3dzW2Jhc2V4XSAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAx
XSA9IChzcmNSb3dzW2Jhc2V4ICsgMV0gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAg
ICAgICAgICAgIGRlc3RSb3dzW2Jhc2V4ICsgMl0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxw
aGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDNd
ID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGJhc2V4KVswXSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsgYmFzZXgpWzBdOwotI2VuZGlmCi0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZXN0Um93cyArPSBkZXN0Qnl0ZXNQZXJSb3c7Ci0g
ICAgICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93OwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKQotICAgICAgICBJ
T1N1cmZhY2U6OkxvY2tlciBsb2NrKCpzdXJmYWNlLCBJT1N1cmZhY2U6OkxvY2tlcjo6QWNjZXNz
TW9kZTo6UmVhZFdyaXRlKTsKLSAgICAgICAgZGVzdEJ5dGVzUGVyUm93ID0gc3VyZmFjZS0+Ynl0
ZXNQZXJSb3coKTsKLSAgICAgICAgZGVzdFJvd3MgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4obG9j
ay5zdXJmYWNlQmFzZUFkZHJlc3MoKSkgKyAoZGVzdHkgKiBkZXN0Qnl0ZXNQZXJSb3cgKyBkZXN0
eCAqIDQpLnVuc2FmZUdldCgpOwotCi0jaWYgVVNFKEFDQ0VMRVJBVEUpCi0gICAgICAgIHZJbWFn
ZV9CdWZmZXIgc3JjOwotICAgICAgICBzcmMud2lkdGggPSB3aWR0aC51bnNhZmVHZXQoKTsKLSAg
ICAgICAgc3JjLmhlaWdodCA9IGhlaWdodC51bnNhZmVHZXQoKTsKLSAgICAgICAgc3JjLnJvd0J5
dGVzID0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAgIHNyYy5kYXRhID0gY29uc3RfY2FzdDx1aW50
OF90Kj4oc3JjUm93cyk7Ci0KLSAgICAgICAgdkltYWdlX0J1ZmZlciBkZXN0OwotICAgICAgICBk
ZXN0LndpZHRoID0gZGVzdHcudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3QuaGVpZ2h0ID0gZGVz
dGgudW5zYWZlR2V0KCk7Ci0gICAgICAgIGRlc3Qucm93Qnl0ZXMgPSBkZXN0Qnl0ZXNQZXJSb3c7
Ci0gICAgICAgIGRlc3QuZGF0YSA9IGRlc3RSb3dzOwotCi0gICAgICAgIGlmIChzb3VyY2VGb3Jt
YXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICAg
ICAgcHJlbXVsdGlwbHlCdWZmZXJEYXRhKHNyYywgZGVzdCk7Ci0gICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgLy8gU3dhcCBwaXhlbCBjaGFubmVscyBmcm9tIFJHQkEgdG8gQkdSQS4KLSAgICAg
ICAgICAgIGNvbnN0IHVpbnQ4X3QgbWFwWzRdID0geyAyLCAxLCAwLCAzIH07Ci0gICAgICAgICAg
ICB2SW1hZ2VQZXJtdXRlQ2hhbm5lbHNfQVJHQjg4ODgoJnNyYywgJmRlc3QsIG1hcCwga3ZJbWFn
ZU5vRmxhZ3MpOwotICAgICAgICB9Ci0jZWxzZQotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodC51bnNhZmVHZXQoKTsgKyt5KSB7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoLnVuc2FmZUdldCgpOyB4KyspIHsKLSAgICAgICAgICAgICAgICBpbnQgYmFzZXgg
PSB4ICogNDsKLSAgICAgICAgICAgICAgICB1aW50OF90IGIgPSBzcmNSb3dzW2Jhc2V4XTsKLSAg
ICAgICAgICAgICAgICB1aW50OF90IGFscGhhID0gc3JjUm93c1tiYXNleCArIDNdOwotICAgICAg
ICAgICAgICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5w
cmVtdWx0aXBsaWVkICYmIGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgICAgICBkZXN0
Um93c1tiYXNleF0gPSAoc3JjUm93c1tiYXNleCArIDJdICogYWxwaGEgKyAyNTQpIC8gMjU1Owot
ICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gKHNyY1Jvd3NbYmFzZXgg
KyAxXSAqIGFscGhhICsgMjU0KSAvIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3Nb
YmFzZXggKyAyXSA9IChiICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAg
ICBkZXN0Um93c1tiYXNleCArIDNdID0gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXhdID0gc3JjUm93c1tiYXNleCArIDJd
OwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDFdID0gc3JjUm93c1tiYXNl
eCArIDFdOwotICAgICAgICAgICAgICAgICAgICBkZXN0Um93c1tiYXNleCArIDJdID0gYjsKLSAg
ICAgICAgICAgICAgICAgICAgZGVzdFJvd3NbYmFzZXggKyAzXSA9IGFscGhhOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlc3RSb3dzICs9IGRlc3RCeXRl
c1BlclJvdzsKLSAgICAgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7Ci0gICAgICAg
IH0KLSNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURSkKLSNlbHNlCi0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotI2VuZGlmIC8vIFVTRShJT1NVUkZBQ0VfQ0FOVkFTX0JBQ0tJTkdfU1RPUkUp
Ci0gICAgfQotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJEYXRhQ0cu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyRGF0YUNH
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMjM3NGJhZDI0ZjA3ODdmZWYwNTQz
YzFiNTFiOTEyMGYxMjMwZDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJE
YXRhQ0cuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA4IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbi5oIgotI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFy
aXRobWV0aWMuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgQ0dDb2xv
clNwYWNlICpDR0NvbG9yU3BhY2VSZWY7Ci10eXBlZGVmIHN0cnVjdCBDR0RhdGFQcm92aWRlciAq
Q0dEYXRhUHJvdmlkZXJSZWY7Ci10eXBlZGVmIHVpbnQzMl90IENHQml0bWFwSW5mbzsKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBJT1N1cmZhY2U7Ci0KLXN0cnVjdCBJbWFnZUJ1ZmZl
ckRhdGEgewotICAgIEludFNpemUgYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBDaGVja2VkPHVuc2ln
bmVkLCBSZWNvcmRPdmVyZmxvdz4gYnl0ZXNQZXJSb3c7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNv
bG9yU3BhY2U7Ci0KLSAgICAvLyBPbmx5IGZvciBzb2Z0d2FyZSBJbWFnZUJ1ZmZlcnMuCi0gICAg
dm9pZCogZGF0YSB7IG51bGxwdHIgfTsKLSAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+
IGRhdGFQcm92aWRlcjsKLSAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotCi0jaWYgVVNFKElPU1VSRkFDRV9D
QU5WQVNfQkFDS0lOR19TVE9SRSkKLSAgICAvLyBPbmx5IGZvciBhY2NlbGVyYXRlZCBJbWFnZUJ1
ZmZlcnMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gc3VyZmFjZTsKLSNlbmRpZgot
Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5n
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0OwotICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gZ2V0RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uLCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50U2l6ZSYsIGJvb2wgYWNjZWxlcmF0ZVJlbmRlcmluZykgY29uc3Q7Ci0gICAgdm9pZCBw
dXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXpl
JiwgYm9vbCBhY2NlbGVyYXRlUmVuZGVyaW5nKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0N2Nm
NWNkZTYzOTM5N2U3YjAxNTQ3ZmZkZGM4YjY4YmQ2NjA0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1
ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCIKKworI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJT1N1cmZhY2UuaCIKKyNpbmNsdWRl
ICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljcy5oPgorI2luY2x1ZGUgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJ
Lmg+CisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJJT1N1cmZhY2VC
YWNrZW5kKTsKKworSW50U2l6ZSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNhbGN1bGF0
ZUJhY2tlbmRTaXplKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KQoreworICAgIEludFNpemUgYmFja2VuZFNpemUgPSBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y2Fs
Y3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKKyAgICBpZiAoYmFja2Vu
ZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgSW50U2l6ZSBtYXhT
aXplID0gSU9TdXJmYWNlOjptYXhpbXVtU2l6ZSgpOworICAgIGlmIChiYWNrZW5kU2l6ZS53aWR0
aCgpID4gbWF4U2l6ZS53aWR0aCgpIHx8IGJhY2tlbmRTaXplLmhlaWdodCgpID4gbWF4U2l6ZS5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBiYWNrZW5kU2l6ZTsK
K30KKworUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNr
ZW5kOjpjb250ZXh0Q29sb3JTcGFjZShjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCit7
CisgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCk7
CisKKyAgICBpZiAoQ0dDb250ZXh0R2V0VHlwZShjZ0NvbnRleHQpID09IGtDR0NvbnRleHRUeXBl
SU9TdXJmYWNlKQorICAgICAgICByZXR1cm4gQ0dJT1N1cmZhY2VDb250ZXh0R2V0Q29sb3JTcGFj
ZShjZ0NvbnRleHQpOworICAgIAorICAgIHJldHVybiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6Y29u
dGV4dENvbG9yU3BhY2UoY29udGV4dCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cklPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UsIENHQ29sb3JTcGFjZVJlZiBjZ0NvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cq
IGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tl
bmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1
cmZhY2U6OmNyZWF0ZShiYWNrZW5kU2l6ZSwgYmFja2VuZFNpemUsIGNnQ29sb3JTcGFjZSk7Cisg
ICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0
cjxDR0NvbnRleHRSZWY+IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4
dChob3N0V2luZG93KTsKKyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBDR0NvbnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludDo6emVybygpLCBiYWNrZW5kU2l6ZSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlcklPU3Vy
ZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJ
T1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBpZiAoYXV0byBjZ0NvbG9yU3BhY2UgPSBjb250ZXh0Q29sb3JTcGFjZShjb250ZXh0KSkKKyAg
ICAgICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEs
IENvbG9yU3BhY2U6OlNSR0IsIGNnQ29sb3JTcGFjZS5nZXQoKSwgbnVsbHB0cik7CisgICAgCisg
ICAgcmV0dXJuIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKHNpemUsIDEsIENv
bG9yU3BhY2U6OlNSR0IsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQoreworICAgIHJldHVybiBJ
bWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUs
IGNvbG9yU3BhY2UsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSwgaG9zdFdpbmRvdyk7
Cit9CisKKworSW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kOjpJbWFnZUJ1ZmZlcklPU3VyZmFj
ZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFj
a2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBz
dGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiYmIHN1cmZhY2UpCisgICAgOiBJbWFnZUJ1ZmZlckNH
QmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSkKKyAgICAsIG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQoreworICAgIEFTU0VSVCht
X3N1cmZhY2UpOworICAgIHNldHVwQ29udGV4dCgpOworfQorCitHcmFwaGljc0NvbnRleHQmIElt
YWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6Y29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc3VyZmFjZS0+ZW5zdXJlR3JhcGhpY3NDb250ZXh0KCk7Cit9CisKK3ZvaWQgSW1hZ2VCdWZm
ZXJJT1N1cmZhY2VCYWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIENHQ29udGV4dEZsdXNo
KGNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3NpemVfdCBJbWFnZUJ1ZmZlcklP
U3VyZmFjZUJhY2tlbmQ6Om1lbW9yeUNvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZh
Y2UtPnRvdGFsQnl0ZXMoKTsKK30KKworc2l6ZV90IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2Vu
ZDo6ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWVtb3J5Q29zdCgp
OworfQorCit1bnNpZ25lZCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJ5dGVzUGVyUm93
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXJmYWNlLT5ieXRlc1BlclJvdygpOworfQorCitD
b2xvckZvcm1hdCBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmJhY2tlbmRDb2xvckZvcm1h
dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIENvbG9yRm9ybWF0OjpCR1JBOworfQorCitOYXRpdmVJ
bWFnZVB0ciBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5KSBjb25zdAoreworICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdl
KCk7Cit9CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6c2lu
a0ludG9OYXRpdmVJbWFnZSgpCit7CisgICAgcmV0dXJuIElPU3VyZmFjZTo6c2lua0ludG9JbWFn
ZShXVEZNb3ZlKG1fc3VyZmFjZSkpOworfQorCit2b2lkIEltYWdlQnVmZmVySU9TdXJmYWNlQmFj
a2VuZDo6ZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdl
UGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKQoreworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3QgPSBzcmNSZWN0OworICAgIGFkanVzdGVkU3JjUmVjdC5zY2FsZShtX3Jlc29sdXRpb25TY2Fs
ZSk7CisKKyAgICBpZiAoYXV0byBpbWFnZSA9IHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSkKKyAgICAg
ICAgZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLmdldCgpLCBtX2JhY2tlbmRTaXpl
LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcHRpb25zKTsKK30KKworVmVjdG9yPHVpbnQ4
X3Q+IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6dG9CR1JBRGF0YSgpIGNvbnN0Cit7Cisg
ICAgSU9TdXJmYWNlOjpMb2NrZXIgbG9jaygqbV9zdXJmYWNlKTsKKyAgICByZXR1cm4gSW1hZ2VC
dWZmZXJCYWNrZW5kOjp0b0JHUkFEYXRhKGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQor
CitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ6OmdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3QKK3sKKyAgICBJT1N1cmZhY2U6OkxvY2tlciBsb2NrKCptX3N1cmZhY2Up
OworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3Jt
YXQsIHNyY1JlY3QsIGxvY2suc3VyZmFjZUJhc2VBZGRyZXNzKCkpOworfQorCit2b2lkIEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIElPU3VyZmFjZTo6
TG9ja2VyIGxvY2soKm1fc3VyZmFjZSwgSU9TdXJmYWNlOjpMb2NrZXI6OkFjY2Vzc01vZGU6OlJl
YWRXcml0ZSk7CisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kOjpwdXRJbWFnZURhdGEoaW5wdXRGb3Jt
YXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50LCBsb2NrLnN1cmZhY2VCYXNlQWRkcmVz
cygpKTsKKworICAgIC8vIEZvcmNlIHJlY3JlYXRpbmcgdGhlIElPU3VyZmFjZSBjYWNoZWQgaW1h
Z2UuCisgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTc5NjYgZm9yIGV4cGxhaW5pbmcgd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LgorICAgIGNvbnRleHQo
KS5maWxsUmVjdChGbG9hdFJlY3QoMSwgMSwgMCwgMCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJJT1N1cmZh
Y2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZjMGYwNDNmMDU1YTc3ZGNlZjY2M2VlNGZjN2JmNjVi
OTZmNjg1ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBIQVZFKElPU1VSRkFDRSkKKworI2luY2x1ZGUgIklPU3VyZmFjZS5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyQ0dCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIEltYWdlQnVmZmVy
SU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBJbWFnZUJ1ZmZlckNHQmFja2VuZCB7CisgICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQpOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCk7CitwdWJsaWM6
CisgICAgc3RhdGljIEludFNpemUgY2FsY3VsYXRlQmFja2VuZFNpemUoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKTsKKworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBDR0NvbG9yU3BhY2VS
ZWYsIGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVySU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopOworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29u
c3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhpY3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IG92ZXJyaWRlOworCisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBOYXRp
dmVJbWFnZVB0ciBjb3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSA9IENvcHlCYWNraW5n
U3RvcmUpIGNvbnN0IG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIHNpbmtJbnRvTmF0aXZl
SW1hZ2UoKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJikgb3ZlcnJpZGU7CisKKyAgICBWZWN0b3I8dWlu
dDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRyPEltYWdlRGF0
YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25z
dCBJbnRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50
UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkgb3ZlcnJpZGU7CisKK3By
b3RlY3RlZDoKKyAgICBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQoY29uc3QgRmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UsIHN0ZDo6dW5pcXVlX3B0cjxJT1N1cmZhY2U+JiYpOworCisg
ICAgc3RhdGljIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbnRleHRDb2xvclNwYWNlKGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYpOworICAgIHVuc2lnbmVkIGJ5dGVzUGVyUm93KCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgQ29sb3JGb3JtYXQgYmFja2VuZENvbG9yRm9ybWF0KCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJmYWNlPiBtX3N1cmZhY2U7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50
SW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1l
bnRJbWFnZS5jcHAKaW5kZXggMjgyMWVmODFkNzVkZmIwZmYwNWE4NWJlNWM5ZmJjMjU4YjU2MmVi
My4uMmFhODIzMzJkZTJkMTExYmRjZTFlMDgwNjM1OTBkY2UyMWI2YzNlMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUERGRG9jdW1lbnRJbWFn
ZS5jcHAKQEAgLTI1NCw4ICsyNTQsOCBAQCB2b2lkIFBERkRvY3VtZW50SW1hZ2U6OnVwZGF0ZUNh
Y2hlZEltYWdlSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdAogICAgIG1f
Y2FjaGVkU291cmNlUmVjdCA9IHNyY1JlY3Q7CiAgICAgKyttX2NhY2hpbmdDb3VudEZvclRlc3Rp
bmc7CiAKLSAgICBJbnRTaXplIGludGVybmFsU2l6ZSA9IG1fY2FjaGVkSW1hZ2VCdWZmZXItPmlu
dGVybmFsU2l6ZSgpOwotICAgIGRlY29kZWRTaXplQ2hhbmdlZChpbnRlcm5hbFNpemUudW5jbGFt
cGVkQXJlYSgpICogNCk7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IG1fY2FjaGVkSW1hZ2VC
dWZmZXItPmJhY2tlbmRTaXplKCk7CisgICAgZGVjb2RlZFNpemVDaGFuZ2VkKGJhY2tlbmRTaXpl
LnVuY2xhbXBlZEFyZWEoKSAqIDQpOwogfQogCiBJbWFnZURyYXdSZXN1bHQgUERGRG9jdW1lbnRJ
bWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9u
cyYgb3B0aW9ucykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL0lPU3VyZmFjZS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL0lPU3VyZmFjZS5tbQppbmRleCBjMjEyNWMzZWYxNjBjMDgxMDEwOTgyM2I0YjkwMzZkZGY2
ZmJjZjY3Li4zOTFmYzIzY2QwYThmODY5YWNjMTA3MzJkMTRmZGY0NTBmYzI4NTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9JT1N1cmZhY2UubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvSU9TdXJmYWNlLm1t
CkBAIC0zMyw3ICszMyw2IEBACiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCiAjaW1wb3J0ICJJT1N1
cmZhY2VQb29sLmgiCiAjaW1wb3J0ICJJbWFnZUJ1ZmZlci5oIgotI2ltcG9ydCAiSW1hZ2VCdWZm
ZXJEYXRhQ0cuaCIKICNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIlBsYXRmb3JtU2NyZWVu
LmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgpAQCAtMTEwLDEzICsx
MDksNiBAQCB2b2lkIElPU3VyZmFjZTo6bW92ZVRvUG9vbChzdGQ6OnVuaXF1ZV9wdHI8SU9TdXJm
YWNlPiYmIHN1cmZhY2UpCiAgICAgSU9TdXJmYWNlUG9vbDo6c2hhcmVkUG9vbCgpLmFkZFN1cmZh
Y2UoV1RGTW92ZShzdXJmYWNlKSk7CiB9CiAKLSNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNL
SU5HX1NUT1JFKQotc3RkOjp1bmlxdWVfcHRyPElPU3VyZmFjZT4gSU9TdXJmYWNlOjpjcmVhdGVG
cm9tSW1hZ2VCdWZmZXIoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikK
LXsKLSAgICByZXR1cm4gV1RGTW92ZShpbWFnZUJ1ZmZlci0+bV9kYXRhLnN1cmZhY2UpOwotfQot
I2VuZGlmCi0KIHN0YXRpYyBOU0RpY3Rpb25hcnkgKm9wdGlvbnNGb3JCaXBsYW5hclN1cmZhY2Uo
SW50U2l6ZSBzaXplLCB1bnNpZ25lZCBwaXhlbEZvcm1hdCwgc2l6ZV90IGZpcnN0UGxhbmVCeXRl
c1BlclBpeGVsLCBzaXplX3Qgc2Vjb25kUGxhbmVCeXRlc1BlclBpeGVsKQogewogICAgIGludCB3
aWR0aCA9IHNpemUud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NwdS9hcm0vZmlsdGVycy9GRUJsZW5kTkVPTi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKaW5kZXggZmQ4
ZTVlOGUyZTk0ZTcwNTQ4OTZmOWFiYmJhN2E0NmY1MDIxNDFjOS4uYzk2ZTMzY2E1ZjYxMzFlNTJl
MWU5ZDQ1ZDdjMDIxNjNkZTRhY2MzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY3B1L2FybS9maWx0ZXJzL0ZFQmxlbmRORU9OLmgKQEAg
LTExMSw3ICsxMTEsOCBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAg
ICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIEZpbHRlckVmZmVjdCog
aW4yID0gaW5wdXRFZmZlY3QoMSk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxB
cnJheSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGltYWdl
UmVzdWx0ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0
UGl4ZWxBcnJheSA9IGltYWdlUmVzdWx0ID8gaW1hZ2VSZXN1bHQtPmRhdGEoKSA6IG51bGxwdHI7
CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlz
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKaW5kZXggMjhlMjY0NGUyNmVkYjUwZDAyNWRlYWU1NDNhMTE0OWUzZjJhZTQ5Mi4u
MmM2NzdmNmI3MzZlNzUyZTQxZjhiM2YyNDM0NzZkNDUwODQyNDM3MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3Bs
YXlMaXN0LmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2xp
c3RbaW5kZXhdLmdldCgpOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGNsZWFyKCk7CiAgICAgdm9pZCByZW1vdmVJdGVtc0Zyb21JbmRleChzaXpl
X3QpOwogCiAgICAgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXpl
KCk7IH0KQEAgLTI1MSw2ICsyNTEsMyBAQCBPcHRpb25hbDxEaXNwbGF5TGlzdD4gRGlzcGxheUxp
c3Q6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwogCiB9
IC8vIFdlYkNvcmUKLQotdXNpbmcgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Owot
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4xMjkyYjFjZTQ4ZmM0NGMxODE1Y2U3NzRjZTFiOTVjNzM2NTUyZWJmCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUg
IkRpc3BsYXlMaXN0UmVjb3JkZXIuaCIKKyNpbmNsdWRlICJEaXNwbGF5TGlzdFJlcGxheWVyLmgi
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIERyYXdpbmdDb250ZXh0IHsKK3B1YmxpYzoK
KyAgICBEcmF3aW5nQ29udGV4dChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplKQorICAgICAg
ICA6IG1fY29udGV4dChbJl0oR3JhcGhpY3NDb250ZXh0JiBkaXNwbGF5TGlzdENvbnRleHQpIHsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihkaXNwbGF5TGlzdENvbnRl
eHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCksIEZsb2F0UmVjdCh7IH0s
IGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCkpOworICAgICAgICB9KQorICAgIHsKKyAg
ICB9CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBjb25z
dF9jYXN0PERyYXdpbmdDb250ZXh0Jj4oKnRoaXMpLm1fY29udGV4dDsgIH0KKyAgICBEaXNwbGF5
TGlzdCYgZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CisgICAgY29uc3Qg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsg
fQorICAgIGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXlEaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwbGF5RGlzcGxheUxpc3QuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICB7CisgICAg
ICAgIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPSB0cmFja3NEaXNwbGF5TGlzdFJlcGxheTsK
KyAgICAgICAgbV9yZXBsYXlEaXNwbGF5TGlzdC5yZXNldCgpOworICAgIH0KKworICAgIHZvaWQg
cmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBSZXBsYXllciByZXBsYXllcihkZXN0Q29udGV4dCwgbV9kaXNwbGF5TGlz
dCk7CisgICAgICAgIGlmIChtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KQorICAgICAgICAgICAg
bV9yZXBsYXlEaXNwbGF5TGlzdCA9IHJlcGxheWVyLnJlcGxheSh7IH0sIG1fdHJhY2tzRGlzcGxh
eUxpc3RSZXBsYXkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBsYXllci5yZXBsYXko
KTsKKyAgICAgICAgbV9kaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBHcmFwaGljc0NvbnRleHQgbV9jb250ZXh0OworICAgIERpc3BsYXlMaXN0IG1fZGlzcGxheUxp
c3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPERpc3BsYXlMaXN0PiBtX3JlcGxheURpc3BsYXlMaXN0
OworICAgIGJvb2wgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSB7IGZhbHNlIH07Cit9OworCit9
IC8vIERpc3BsYXlMaXN0Cit9IC8vIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGU2
MTQxYmRlMzIwNGMxNzdhYjY5ZjUxYzVkMDM0MjVhNDdmYzU5NzUuLjk1MTgwMGVkYTkxNzQxMWM4
OGI5YTRiZTU1MTRjZjFmNjhjNzg3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjUsNyAr
MjUsNyBAQAogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtMjg2LDEzICsyODYsMTUgQEAgdm9pZCBGRUNv
bG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgICAgICByZXN1bHRJbWFnZS0+
Y29udGV4dCgpLmRyYXdJbWFnZUJ1ZmZlcigqaW5CdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKIAogICAgIEludFJlY3QgaW1hZ2VSZWN0
KEludFBvaW50KCksIHJlc3VsdEltYWdlLT5sb2dpY2FsU2l6ZSgpKTsKLSAgICBJbnRTaXplIHBp
eGVsQXJyYXlEaW1lbnNpb25zOwotICAgIGF1dG8gcGl4ZWxBcnJheSA9IHJlc3VsdEltYWdlLT5n
ZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoaW1hZ2VSZWN0LCAmcGl4ZWxBcnJheURpbWVuc2lvbnMp
OwotICAgIGlmICghcGl4ZWxBcnJheSkKKyAgICBhdXRvIGltYWdlRGF0YSA9IHJlc3VsdEltYWdl
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBp
bWFnZVJlY3QpOworICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8ZmxvYXQ+IHZhbHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIGF1
dG8qIHBpeGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBJbnRTaXplIHBpeGVsQXJy
YXlEaW1lbnNpb25zID0gaW1hZ2VEYXRhLT5zaXplKCk7CiAKKyAgICBWZWN0b3I8ZmxvYXQ+IHZh
bHVlcyA9IG5vcm1hbGl6ZWRGbG9hdHMobV92YWx1ZXMpOworICAgIAogICAgIHN3aXRjaCAobV90
eXBlKSB7CiAgICAgY2FzZSBGRUNPTE9STUFUUklYX1RZUEVfVU5LTk9XTjoKICAgICAgICAgYnJl
YWs7CkBAIC0zMTEsNyArMzEzLDcgQEAgdm9pZCBGRUNvbG9yTWF0cml4OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUoKQogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXN1bHRJbWFnZS0+cHV0
Qnl0ZUFycmF5KCpwaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsIGltYWdlUmVjdC5zaXplKCksIGltYWdlUmVjdCwgSW50UG9pbnQoKSk7CisgICAgcmVz
dWx0SW1hZ2UtPnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIGltYWdlUmVjdCk7CiB9CiAKIHN0YXRpYyBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvck1hdHJpeFR5cGUmIHR5cGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29t
cG9uZW50VHJhbnNmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmNwcAppbmRleCBmYTA0MTNjMDBkYTQzYWM1ZGY1NWU1
ZTAxZjY5NDRhYjllZGE3NDgzLi45NzhjNTVhNjdiOGRlNzIwZTlmYTc5YmQ4Y2MzNGQ3NDUyOGEw
MjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9uZW50VHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5jcHAKQEAgLTI2LDcgKzI2LDcgQEAK
IAogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgpAQCAtMTA4LDcg
KzEwOCw4IEBAIHZvaWQgRkVDb21wb25lbnRUcmFuc2Zlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJl
KCkKIHsKICAgICBGaWx0ZXJFZmZlY3QqIGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50
OENsYW1wZWRBcnJheSogcGl4ZWxBcnJheSA9IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CisgICAgYXV0byogaW1hZ2VSZXN1bHQgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOworICAgIGF1dG8qIHBpeGVsQXJyYXkgPSBpbWFnZVJlc3VsdCA/IGltYWdlUmVzdWx0LT5k
YXRhKCkgOiBudWxscHRyOwogICAgIGlmICghcGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDb21wb3NpdGUuY3BwCmluZGV4IGExOWVhMDUzNzU4MTljZWNkYWMyNWQ1ZDk2M2Q1NDRkZDRk
MWE5NjkuLjI2NTQ0MGY0Mzk0MmFmYTZhYTI5OGRhZjRlYzAyZWUzZDk1Y2VjODAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3NpdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21w
b3NpdGUuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiRkVDb21wb3NpdGVBcml0aG1l
dGljTkVPTi5oIgogI2luY2x1ZGUgIkZpbHRlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5j
bHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjksNyArMjI5LDggQEAgdm9pZCBGRUNvbXBvc2l0ZTo6
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBGaWx0ZXJFZmZlY3QqIGluMiA9IGlucHV0RWZm
ZWN0KDEpOwogCiAgICAgaWYgKG1fdHlwZSA9PSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1F
VElDKSB7Ci0gICAgICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gY3JlYXRl
UHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8qIHJlc3VsdEltYWdlID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgICAgIGF1dG8qIGRzdFBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAg
ICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29u
dm9sdmVNYXRyaXguY3BwCmluZGV4IDYyYzJmODMzNjUzNTg2ODQ0ZDlmMzkwZWVhNWVkYzEwOGUz
MGEzODguLmE2ZTNmNGJiYWEyNDQ5N2Y5MjYzNDY1Njk3NWZmYjg3ZGM3YWI5ZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb252b2x2ZU1h
dHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbnZvbHZlTWF0cml4LmNwcApAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgIkZFQ29udm9s
dmVNYXRyaXguaCIKIAogI2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVk
ZSA8d3RmL1BhcmFsbGVsSm9icy5oPgogI2luY2x1ZGUgPHd0Zi9Xb3JrUXVldWUuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zNzEsMTIgKzM3MSwxMyBAQCB2b2lkIEZF
Q29udm9sdmVNYXRyaXg6OnBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZm
ZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIHJlc3Vs
dEltYWdlOworICAgIEltYWdlRGF0YSogcmVzdWx0SW1hZ2U7CiAgICAgaWYgKG1fcHJlc2VydmVB
bHBoYSkKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCgpOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKLSAgICBpZiAoIXJlc3VsdEltYWdlKQorICAgIGF1dG8qIGRzdFBpeGVs
QXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOworICAg
IGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW50UmVjdCBlZmZl
Y3REcmF3aW5nUmVjdCA9IHJlcXVlc3RlZFJlZ2lvbk9mSW5wdXRJbWFnZURhdGEoaW4tPmFic29s
dXRlUGFpbnRSZWN0KCkpOwpAQCAtMzk1LDcgKzM5Niw3IEBAIHZvaWQgRkVDb252b2x2ZU1hdHJp
eDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIAogICAgIFBhaW50aW5nRGF0YSBwYWludGluZ0Rh
dGEgPSB7CiAgICAgICAgICpzcmNQaXhlbEFycmF5LAotICAgICAgICAqcmVzdWx0SW1hZ2UsCisg
ICAgICAgICpkc3RQaXhlbEFycmF5LAogICAgICAgICBwYWludFNpemUud2lkdGgoKSwKICAgICAg
ICAgcGFpbnRTaXplLmhlaWdodCgpLAogICAgICAgICBtX2JpYXMgKiAyNTUsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRGlzcGxhY2VtZW50
TWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNw
bGFjZW1lbnRNYXAuY3BwCmluZGV4IDBlOTQ0ZGYwMGE5NWNjMDZkMjZhYTQyZjE2OWVlNmE0NmY1
YTI3ODIuLjUzNzM1NTA0NTNlNDk4NjJjMGU0MTZmMmRjYzI1NmI0NzBjOTE5NTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEaXNwbGFjZW1l
bnRNYXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEaXNwbGFjZW1lbnRNYXAuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiQ29sb3JV
dGlsaXRpZXMuaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTQsNyArOTQsOCBAQCB2b2lkIEZFRGlzcGxhY2VtZW50
TWFwOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIEFTU0VSVChtX3hDaGFubmVsU2VsZWN0
b3IgIT0gQ0hBTk5FTF9VTktOT1dOKTsKICAgICBBU1NFUlQobV95Q2hhbm5lbFNlbGVjdG9yICE9
IENIQU5ORUxfVU5LTk9XTik7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJh
eSA9IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIHJlc3VsdElt
YWdlID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4
ZWxBcnJheSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAg
ICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVEcm9wU2hhZG93LmNw
cAppbmRleCAyMzY2NmExYWVmNTM1MzIxNDkzYzllYTJkNTYxOGU4ZmRkZDg0ZWNiLi4xMzk1YTJk
Yjg1MDMyYzllMmFlODY0YzYzOTY2NjhiMzc0MWNjMzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNoYWRvdy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BTaGFkb3cuY3BwCkBA
IC0yMyw4ICsyMyw4IEBACiAjaW5jbHVkZSAiRkVHYXVzc2lhbkJsdXIuaCIKICNpbmNsdWRlICJG
aWx0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCi0jaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
VWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIApAQCAtOTksMTQgKzk5LDE1IEBAIHZvaWQgRkVE
cm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIFNoYWRvd0JsdXIgY29udGV4
dFNoYWRvdyhibHVyUmFkaXVzLCBvZmZzZXQsIG1fc2hhZG93Q29sb3IpOwogCiAgICAgLy8gVE9E
TzogRGlyZWN0IHBpeGVsIGFjY2VzcyB0byBJbWFnZUJ1ZmZlciB3b3VsZCBhdm9pZCBjb3B5aW5n
IHRoZSBJbWFnZURhdGEuCi0gICAgSW50UmVjdCBzaGFkb3dBcmVhKEludFBvaW50KCksIHJlc3Vs
dEltYWdlLT5pbnRlcm5hbFNpemUoKSk7Ci0gICAgYXV0byBzcmNQaXhlbEFycmF5ID0gcmVzdWx0
SW1hZ2UtPmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoc2hhZG93QXJlYSwgbnVsbHB0ciwgSW1h
Z2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOwotICAgIGlmICghc3JjUGl4
ZWxBcnJheSkKKyAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2Ut
PmxvZ2ljYWxTaXplKCkpOworICAgIGF1dG8gaW1hZ2VEYXRhID0gcmVzdWx0SW1hZ2UtPmdldElt
YWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzaGFkb3dBcmVh
KTsKKyAgICBpZiAoIWltYWdlRGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29udGV4dFNo
YWRvdy5ibHVyTGF5ZXJJbWFnZShzcmNQaXhlbEFycmF5LT5kYXRhKCksIHNoYWRvd0FyZWEuc2l6
ZSgpLCA0ICogc2hhZG93QXJlYS5zaXplKCkud2lkdGgoKSk7Ci0KLSAgICByZXN1bHRJbWFnZS0+
cHV0Qnl0ZUFycmF5KCpzcmNQaXhlbEFycmF5LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBzaGFkb3dBcmVhLnNpemUoKSwgc2hhZG93QXJlYSwgSW50UG9pbnQoKSwgSW1h
Z2VCdWZmZXI6OkJhY2tpbmdTdG9yZUNvb3JkaW5hdGVTeXN0ZW0pOworICAgIGF1dG8qIHNyY1Bp
eGVsQXJyYXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKKyAgICBjb250ZXh0U2hhZG93LmJsdXJMYXll
ckltYWdlKHNyY1BpeGVsQXJyYXktPmRhdGEoKSwgaW1hZ2VEYXRhLT5zaXplKCksIDQgKiBpbWFn
ZURhdGEtPnNpemUoKS53aWR0aCgpKTsKKyAgICAKKyAgICByZXN1bHRJbWFnZS0+cHV0SW1hZ2VE
YXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHNo
YWRvd0FyZWEpOwogCiAgICAgcmVzdWx0Q29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZUluKTsKICAgICByZXN1bHRDb250ZXh0LmZpbGxSZWN0KEZs
b2F0UmVjdChGbG9hdFBvaW50KCksIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpKSwgbV9zaGFk
b3dDb2xvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCmluZGV4IDQ5YmE4NDE3M2MyZDFhOTk1NGU1
NjEzOTBjZTAzYzI0YmM5MGM4MWIuLmQ3ZWQ5YjI0NDkwMTc4ZmZiZmJlYjFjZDQyYmVhNWU4ZmYx
NTllNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVHYXVzc2lhbkJsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVHYXVzc2lhbkJsdXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVk
ZSAiRkVHYXVzc2lhbkJsdXJORU9OLmgiCiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvVGV4dFN0cmVhbS5oPgogCiAjaWYgVVNFKEFDQ0VMRVJBVEUpCkBAIC01MjIsMTQgKzUy
MywxNSBAQCB2b2lkIEZFR2F1c3NpYW5CbHVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogewog
ICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKIAotICAgIFVpbnQ4Q2xhbXBl
ZEFycmF5KiByZXN1bHRQaXhlbEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7Ci0gICAgaWYgKCFyZXN1bHRQaXhlbEFycmF5KQorICAgIGF1dG8qIHJlc3VsdEltYWdlID0g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogZHN0UGl4ZWxBcnJh
eSA9IHJlc3VsdEltYWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CisgICAgaWYg
KCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRJc0FscGhhSW1hZ2Uo
aW4tPmlzQWxwaGFJbWFnZSgpKTsKIAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSBy
ZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsK
LSAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKnJlc3VsdFBpeGVsQXJyYXksIGVmZmVj
dERyYXdpbmdSZWN0KTsKKyAgICBpbi0+Y29weVByZW11bHRpcGxpZWRSZXN1bHQoKmRzdFBpeGVs
QXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKIAogICAgIGlmICghbV9zdGRYICYmICFtX3N0ZFkp
CiAgICAgICAgIHJldHVybjsKQEAgLTU0Myw3ICs1NDUsNyBAQCB2b2lkIEZFR2F1c3NpYW5CbHVy
OjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIGlmICghdG1wSW1hZ2VEYXRhKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUFwcGx5KCpyZXN1bHRQaXhlbEFycmF5LCAqdG1wSW1h
Z2VEYXRhLCBrZXJuZWxTaXplLndpZHRoKCksIGtlcm5lbFNpemUuaGVpZ2h0KCksIHBhaW50U2l6
ZSk7CisgICAgcGxhdGZvcm1BcHBseSgqZHN0UGl4ZWxBcnJheSwgKnRtcEltYWdlRGF0YSwga2Vy
bmVsU2l6ZS53aWR0aCgpLCBrZXJuZWxTaXplLmhlaWdodCgpLCBwYWludFNpemUpOwogfQogCiBJ
bnRPdXRzZXRzIEZFR2F1c3NpYW5CbHVyOjpvdXRzZXRzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmlu
ZGV4IDBiYTUxYjc2MTJmMmNiMmY2OWY0ZjYwMjFjZWZjYmUzYzJlNzQyZDMuLjZkYjg3ZmQ1NDVh
OGYxZGRhN2Q5YjU4OGEyNTQwNjU1YTU3OGZiMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogCiAjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJGRUxpZ2h0
aW5nTkVPTi5oIgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDczLDcgKzQ3NCw4IEBAIHZvaWQg
RkVMaWdodGluZzo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKIHsKICAgICBGaWx0ZXJFZmZlY3Qq
IGluID0gaW5wdXRFZmZlY3QoMCk7CiAKLSAgICBVaW50OENsYW1wZWRBcnJheSogcmVzdXRQaXhl
bEFycmF5ID0gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcmVz
dWx0SW1hZ2UgPSBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiBy
ZXN1dFBpeGVsQXJyYXkgPSByZXN1bHRJbWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxs
cHRyOwogICAgIGlmICghcmVzdXRQaXhlbEFycmF5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3JwaG9s
b2d5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVNb3Jw
aG9sb2d5LmNwcAppbmRleCAyNTE3ODFjYTVhYTUxZjc4MDI3YWQ1MDhkZjlhYzYxMGM2Nzk0ZmE1
Li5jYmQ0MjQxOTc2NTcwYTg3Mzk0NTIwMGE5MTNlMGU5ZTY1OWFiNDI1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTW9ycGhvbG9neS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRU1vcnBob2xv
Z3kuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgog
I2luY2x1ZGUgIkZpbHRlci5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBl
ZEFycmF5Lmg+CisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSA8d3RmL1BhcmFsbGVs
Sm9icy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+CkBAIC0yMzQsNyArMjM0LDggQEAgdm9pZCBGRU1vcnBob2xvZ3k6OnBsYXRmb3Jt
QXBwbHlTb2Z0d2FyZSgpCiB7CiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDAp
OwogCi0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdCgpOworICAgIGF1dG8qIGRzdFBpeGVsQXJyYXkgPSByZXN1bHRJ
bWFnZSA/IHJlc3VsdEltYWdlLT5kYXRhKCkgOiBudWxscHRyOwogICAgIGlmICghZHN0UGl4ZWxB
cnJheSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5jcHAKaW5kZXggNmQ2MGNkZGVi
YjEwMmY1MmRjM2MyMWFlY2MyYTUwZGI0YmY3ODM0Yi4uZjE2YjliMzFhNTU5ZDc0NjIxZmYyMzI0
NGRhOTMyZGY0MzE2OGQ0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmNwcApAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgogCiAjaW5jbHVkZSAiRmlsdGVyLmgiCi0jaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvVWludDhDbGFtcGVkQXJyYXkuaD4KKyNpbmNsdWRlICJJbWFnZURh
dGEuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9QYXJhbGxl
bEpvYnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CkBAIC0zOTUsNyArMzk1
LDggQEAgdm9pZCBGRVR1cmJ1bGVuY2U6OmZpbGxSZWdpb25Xb3JrZXIoRmlsbFJlZ2lvblBhcmFt
ZXRlcnMqIHBhcmFtZXRlcnMpCiAKIHZvaWQgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKQogewotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBwaXhlbEFycmF5ID0gY3JlYXRlVW5t
dWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBhdXRvKiByZXN1bHRJbWFnZSA9IGNyZWF0ZVVu
bXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgYXV0byogcGl4ZWxBcnJheSA9IHJlc3VsdElt
YWdlID8gcmVzdWx0SW1hZ2UtPmRhdGEoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFwaXhlbEFycmF5
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCA2ZTk4NmQ0ZWMyYTk3
OTI5NjYzODRmYzU1MDc0YTJmOTcyYjU5MGZhLi5hOWU4ZmNhMmM1ZDFkY2JiNjY3YTViN2NjMGQ0
Zjc3MDI0ODRmMzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yNywxMCArMjcsMTAgQEAKICNp
bmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiTG9n
Z2luZy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgogCiAjaWYgSEFWRShBUk1fTkVPTl9JTlRSSU5TSUNTKQpAQCAtMTk5LDcgKzE5OSw3IEBA
IHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVsdGlwbGllZFBpeGVscygpCiAgICAg
aWYgKCFtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VWludDhDbGFtcGVkQXJyYXkqIGltYWdlQXJyYXkgPSBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJheSogaW1hZ2VBcnJheSA9IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0LT5kYXRhKCk7CiAgICAgdWludDhfdCogcGl4ZWxEYXRhID0gaW1hZ2VB
cnJheS0+ZGF0YSgpOwogICAgIGludCBwaXhlbEFycmF5TGVuZ3RoID0gaW1hZ2VBcnJheS0+bGVu
Z3RoKCk7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6Y2xlYXJSZXN1
bHRzUmVjdXJzaXZlKCkKIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJS
ZXN1bHQoKQogewotICAgIExPR19XSVRIX1NUUkVBTShGaWx0ZXJzLCBzdHJlYW0gPDwgIkZpbHRl
ckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwgdGhpcyA8PCAiIGltYWdlQnVmZmVy
UmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZlciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQu
Z2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmdldCgpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oRmls
dGVycywgc3RyZWFtIDw8ICJGaWx0ZXJFZmZlY3QgIiA8PCBmaWx0ZXJOYW1lKCkgPDwgIiAiIDw8
IHRoaXMgPDwgIiBpbWFnZUJ1ZmZlclJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8
PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVz
dWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQgIiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkp
OwogCiAgICAgaWYgKCFoYXNSZXN1bHQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0y
NzksOSArMjc5LDkgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6aW1hZ2VCdWZmZXJSZXN1
bHQoKQogCiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0
ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
LSAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KCptX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgZGVz
dGluYXRpb25SZWN0LnNpemUoKSwgZGVzdGluYXRpb25SZWN0LCBJbnRQb2ludCgpKTsKKyAgICAg
ICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC0+cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsICptX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCwgZGVzdGluYXRp
b25SZWN0KTsKICAgICBlbHNlCi0gICAgICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnB1dEJ5dGVB
cnJheSgqbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3Qs
IEludFBvaW50KCkpOworICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRJbWFnZURhdGEo
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCAqbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdCwgZGVzdGluYXRpb25SZWN0KTsKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKTsKIH0KIApAQCAtNDM4LDUyICs0MzgsNTIgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6
OmNvcHlVbm11bHRpcGxpZWRSZXN1bHQoVWludDhDbGFtcGVkQXJyYXkmIGRlc3RpbmF0aW9uLCBj
b25zdAogewogICAgIEFTU0VSVChoYXNSZXN1bHQoKSk7CiAgICAgCi0gICAgTE9HX1dJVEhfU1RS
RUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8
ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlwbGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFn
ZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkgPDwg
IiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dC5nZXQoKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVy
RWZmZWN0ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVVubXVsdGlw
bGllZFJlc3VsdCgpLiBFeGlzdGluZyBpbWFnZSBidWZmZXIgIiA8PCBtX2ltYWdlQnVmZmVyUmVz
dWx0LmdldCgpIDw8ICAiIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ICIgPDwgbV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSA8PCAiIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQg
IiA8PCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCkpOwogCiAgICAgaWYgKCFtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAgIC8vIFdlIHByZWZlciBhIGNvbnZlcnNp
b24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlclJlc3Vs
dCkgewotICAgICAgICAgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IG1faW1hZ2VCdWZm
ZXJSZXN1bHQtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKSk7CisgICAgICAgICAgICBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3VsdC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LnNpemUoKSB9KTsKICAgICAgICAgICAgIGlmICghbV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBJbnRTaXplIGlucHV0U2l6ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIUltYWdlQnVmZmVyOjpzaXplTmVlZHNDbGFtcGluZyhpbnB1dFNpemUp
KTsKICAgICAgICAgICAgIGlucHV0U2l6ZS5zY2FsZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsK
LSAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5wdXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdl
dCgpKTsKKyAgICAgICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBJbWFnZURhdGE6
OmNyZWF0ZShpbnB1dFNpemUpOwogICAgICAgICAgICAgaWYgKCFtX3VubXVsdGlwbGllZEltYWdl
UmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgY29weVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQs
ICptX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LCBpbnB1dFNpemUpOworICAgICAgICAgICAgY29w
eVVucHJlbXVsdGlwbHlpbmdBbHBoYSgqbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEo
KSwgKm1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgaW5wdXRTaXplKTsKICAgICAg
ICAgfQogICAgIH0KLSAgICBjb3B5SW1hZ2VCeXRlcygqbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCwgZGVzdGluYXRpb24sIHJlY3QpOworICAgIGNvcHlJbWFnZUJ5dGVzKCptX3VubXVsdGlwbGll
ZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0aW9uLCByZWN0KTsKIH0KIAogdm9pZCBGaWx0
ZXJFZmZlY3Q6OmNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KFVpbnQ4Q2xhbXBlZEFycmF5JiBkZXN0
aW5hdGlvbiwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaGFzUmVzdWx0KCkp
OwogCi0gICAgTE9HX1dJVEhfU1RSRUFNKEZpbHRlcnMsIHN0cmVhbSA8PCAiRmlsdGVyRWZmZWN0
ICIgPDwgZmlsdGVyTmFtZSgpIDw8ICIgIiA8PCB0aGlzIDw8ICIgY29weVByZW11bHRpcGxpZWRS
ZXN1bHQoKS4gRXhpc3RpbmcgaW1hZ2UgYnVmZmVyICIgPDwgbV9pbWFnZUJ1ZmZlclJlc3VsdC5n
ZXQoKSA8PCAgIiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0LmdldCgpIDw8ICIgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCkpOworICAgIExPR19XSVRIX1NUUkVBTShGaWx0
ZXJzLCBzdHJlYW0gPDwgIkZpbHRlckVmZmVjdCAiIDw8IGZpbHRlck5hbWUoKSA8PCAiICIgPDwg
dGhpcyA8PCAiIGNvcHlQcmVtdWx0aXBsaWVkUmVzdWx0KCkuIEV4aXN0aW5nIGltYWdlIGJ1ZmZl
ciAiIDw8IG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCkgPDwgICIgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgIiA8PCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC0+ZGF0YSgpIDw8ICIgbV91
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAiIDw8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQtPmRh
dGEoKSk7CiAKICAgICBpZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KSB7CiAgICAgICAg
IC8vIFdlIHByZWZlciBhIGNvbnZlcnNpb24gZnJvbSB0aGUgaW1hZ2UgYnVmZmVyLgogICAgICAg
ICBpZiAobV9pbWFnZUJ1ZmZlclJlc3VsdCkgewotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQgPSBtX2ltYWdlQnVmZmVyUmVzdWx0LT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VE
YXRhKEludFJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpKTsKKyAg
ICAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0ID0gbV9pbWFnZUJ1ZmZlclJlc3Vs
dC0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsIHsg
SW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkgfSk7CiAgICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEludFNpemUgaW5wdXRTaXplKG1fYWJzb2x1
dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNp
emVOZWVkc0NsYW1waW5nKGlucHV0U2l6ZSkpOwogICAgICAgICAgICAgaW5wdXRTaXplLnNjYWxl
KG1fZmlsdGVyLmZpbHRlclNjYWxlKCkpOwotICAgICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgoaW5w
dXRTaXplLmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICAgICAgICAgIG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0ID0gSW1hZ2VEYXRhOjpjcmVhdGUoaW5wdXRTaXplKTsKICAgICAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBjb3B5UHJlbXVsdGlwbHlpbmdBbHBoYSgq
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBp
bnB1dFNpemUpOworICAgICAgICAgICAgY29weVByZW11bHRpcGx5aW5nQWxwaGEoKm1fdW5tdWx0
aXBsaWVkSW1hZ2VSZXN1bHQtPmRhdGEoKSwgKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5k
YXRhKCksIGlucHV0U2l6ZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgY29weUltYWdlQnl0ZXMo
Km1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LCBkZXN0aW5hdGlvbiwgcmVjdCk7CisgICAgY29w
eUltYWdlQnl0ZXMoKm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LT5kYXRhKCksIGRlc3RpbmF0
aW9uLCByZWN0KTsKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6Y3JlYXRlSW1hZ2VC
dWZmZXJSZXN1bHQoKQpAQCAtNDk3LDEzICs0OTcsMTAgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVm
ZmVjdDo6Y3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKQogCiAgICAgRmxvYXRTaXplIGNsYW1wZWRT
aXplID0gSW1hZ2VCdWZmZXI6OmNsYW1wZWRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgp
KTsKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjbGFtcGVk
U2l6ZSwgbV9maWx0ZXIucmVuZGVyaW5nTW9kZSgpLCBtX2ZpbHRlci5maWx0ZXJTY2FsZSgpLCBt
X3Jlc3VsdENvbG9yU3BhY2UpOwotICAgIGlmICghbV9pbWFnZUJ1ZmZlclJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQo
KTsKIH0KIAotVWludDhDbGFtcGVkQXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlVW5tdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCkKIHsKICAgICBMT0coRmlsdGVycywgIkZpbHRlckVmZmVjdCAlcyAl
cCBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCIsIGZpbHRlck5hbWUoKSwgdGhpcyk7CiAK
QEAgLTUxNSwxMSArNTEyLDExIEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJFZmZlY3Q6OmNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICBJbnRTaXplIHJlc3VsdFNpemUobV9h
YnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOwogICAgIEFTU0VSVCghSW1hZ2VCdWZmZXI6OnNpemVO
ZWVkc0NsYW1waW5nKHJlc3VsdFNpemUpKTsKICAgICByZXN1bHRTaXplLnNjYWxlKG1fZmlsdGVy
LmZpbHRlclNjYWxlKCkpOwotICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQgPSBVaW50OENs
YW1wZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCgocmVzdWx0U2l6ZS5hcmVhKCkgKiA0
KS51bnNhZmVHZXQoKSk7CisgICAgbV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCA9IEltYWdlRGF0
YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0LmdldCgpOwogfQogCi1VaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQorSW1hZ2VEYXRhKiBGaWx0ZXJFZmZlY3Q6OmNyZWF0
ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiB7CiAgICAgTE9HKEZpbHRlcnMsICJGaWx0ZXJF
ZmZlY3QgJXMgJXAgY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0IiwgZmlsdGVyTmFtZSgp
LCB0aGlzKTsKIApAQCAtNTMxLDcgKzUyOCw3IEBAIFVpbnQ4Q2xhbXBlZEFycmF5KiBGaWx0ZXJF
ZmZlY3Q6OmNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpCiAgICAgSW50U2l6ZSByZXN1
bHRTaXplKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBBU1NFUlQoIUltYWdlQnVm
ZmVyOjpzaXplTmVlZHNDbGFtcGluZyhyZXN1bHRTaXplKSk7CiAgICAgcmVzdWx0U2l6ZS5zY2Fs
ZShtX2ZpbHRlci5maWx0ZXJTY2FsZSgpKTsKLSAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKChyZXN1bHRTaXpl
LmFyZWEoKSAqIDQpLnVuc2FmZUdldCgpKTsKKyAgICBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3Vs
dCA9IEltYWdlRGF0YTo6Y3JlYXRlKHJlc3VsdFNpemUpOwogICAgIHJldHVybiBtX3ByZW11bHRp
cGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggYzk2NmZjYzIx
NjM5ZGU1YTQwNGE3YzYyZjNlYTJiNmU5MzMyZmU0Mi4uYWY0NjNlZmViMDEzNmFjNjE4ZTI5OWNk
MDhkNDQ4MzhkMGVmNTY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC00MCw2ICs0MCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZpbHRlcjsKIGNsYXNzIEZpbHRlckVmZmVjdDsKIGNsYXNz
IEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOwogCiB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8
RmlsdGVyRWZmZWN0Pj4gRmlsdGVyRWZmZWN0VmVjdG9yOwogCkBAIC0xNTMsOCArMTU0LDggQEAg
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogZmlsdGVyTmFtZSgpIGNvbnN0ID0g
MDsKIAogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBJ
bWFnZURhdGEqIGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgSW1hZ2VEYXRh
KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKIAogICAgIC8vIFJldHVybiB0cnVl
IGlmIHRoZSBmaWx0ZXIgd2lsbCBvbmx5IG9wZXJhdGUgY29ycmVjdGx5IG9uIHZhbGlkIFJHQkEg
dmFsdWVzLCB3aXRoCiAgICAgLy8gYWxwaGEgaW4gWzAsMjU1XSBhbmQgZWFjaCBjb2xvciBjb21w
b25lbnQgaW4gWzAsIGFscGhhXS4KQEAgLTE4Miw4ICsxODMsOCBAQCBwcml2YXRlOgogICAgIEZp
bHRlckVmZmVjdFZlY3RvciBtX2lucHV0RWZmZWN0czsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gbV9pbWFnZUJ1ZmZlclJlc3VsdDsKLSAgICBSZWZQdHI8VWludDhDbGFtcGVk
QXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7Ci0gICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OworICAgIFJlZlB0cjxJbWFnZURhdGE+IG1fcHJl
bXVsdGlwbGllZEltYWdlUmVzdWx0OwogCiAgICAgSW50UmVjdCBtX2Fic29sdXRlUGFpbnRSZWN0
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3Bl
bmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHRHTE9wZW5HTENvbW1vbi5jcHAK
aW5kZXggMWUwMzVhN2VlZjI4MDNjZjY1OTkyZDA0OWM5ZjhiNTU2YmNlY2FlYy4uOTE4ZTE4YWY1
ZTEyZmY5MDQ5NDgzYTc4ZWYxYmE4MmQ3MzU4YzJhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0dyYXBoaWNzQ29udGV4dEdMT3BlbkdMQ29tbW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhp
Y3NDb250ZXh0R0xPcGVuR0xDb21tb24uY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHRHTE9wZW5HTDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoSW1hZ2VC
dWZmZXIqIGltYWdlQnUKICAgICAgICAgfQogICAgIH0KIAotICAgIHBhaW50VG9DYW52YXMocGl4
ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpLCBpbWFn
ZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCkpOworICAgIHBh
aW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBJbnRTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJl
bnRIZWlnaHQpLCBpbWFnZUJ1ZmZlci0+YmFja2VuZFNpemUoKSwgaW1hZ2VCdWZmZXItPmNvbnRl
eHQoKSk7CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKE9QRU5HTF9FUykKICAgICBwcmVz
ZW50UmVuZGVyYnVmZmVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmYxYjM5NDE1ZWJiMjFiZTZjZWZhYzU5MDZmN2Q0MjUx
YjgzNTkzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0
MkQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiSW1hZ2VCdWZmZXJEYXRhLmgiCi0KLSNpZiBVU0UoRElSRUNUMkQpCi0KLSNpbmNs
dWRlICJCaXRtYXBJbmZvLmgiCi0jaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIV25kREMuaCIKLSNpbmNsdWRlICJJ
bnRSZWN0LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRC5oIgotI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQ0lubGluZXMu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+Ci0jaW5jbHVkZSA8ZDJkMS5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaXF1ZUFycmF5
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVl
IGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKLXRlbXBsYXRlIDxBbHBoYVByZW11bHRp
cGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Ci12b2lkIHN3aXp6bGVBbmRQcmVtdWx0aXBseShjb25z
dCB1aW50OF90KiBzcmNSb3dzLCB1bnNpZ25lZCByb3dDb3VudCwgdW5zaWduZWQgY29sQ291bnQs
IHVuc2lnbmVkIHNyY1N0cmlkZSwgdW5zaWduZWQgZGVzdFN0cmlkZSwgdWludDhfdCogZGVzdFJv
d3MpCi17Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHJvd0NvdW50OyArK3kpIHsKLSAg
ICAgICAgLy8gU291cmNlIGRhdGEgbWF5IGJlIHBvd2VyLW9mLXR3byBzaXplZCwgc28gd2UgbmVl
ZCB0byBvbmx5IGNvcHkgdGhlIGJpdHMgdGhhdAotICAgICAgICAvLyBjb3JyZXNwb25kIHRvIHRo
ZSByZWN0YW5nbGUgc3VwcGxpZWQgYnkgdGhlIGNhbGxlci4KLSAgICAgICAgY29uc3QgdWludDMy
X3QqIHNyY1JvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDMyX3QqPihzcmNSb3dzICsg
c3JjU3RyaWRlICogeSk7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRl
c3RTdHJpZGUgKiB5OwotICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgY29sQ291bnQ7
ICsreCkgewotICAgICAgICAgICAgdW5zaWduZWQgYnl0ZVBvc2l0aW9uID0geCAqIDQ7Ci0gICAg
ICAgICAgICBjb25zdCB1aW50MzJfdCogc3JjUGl4ZWwgPSBzcmNSb3cgKyB4OwotCi0gICAgICAg
ICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCAoUClSR0JBIGJ5dGVzLiBXZSBuZWVkIHRv
IHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIFBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCi0gICAgICAg
ICAgICB1aW50MzJfdCBhbHBoYSA9ICgqc3JjUGl4ZWwgJiAweEZGMDAwMDAwKSA+PiAyNDsKLSAg
ICAgICAgICAgIHVpbnQzMl90IHJlZCA9ICgqc3JjUGl4ZWwgJiAweDAwRkYwMDAwKSA+PiAxNjsK
LSAgICAgICAgICAgIHVpbnQzMl90IGdyZWVuID0gKCpzcmNQaXhlbCAmIDB4MDAwMEZGMDApID4+
IDg7Ci0gICAgICAgICAgICB1aW50MzJfdCBibHVlID0gKCpzcmNQaXhlbCAmIDB4MDAwMDAwRkYp
OwotCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpVbnByZW11bHRpcGxpZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxw
aGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhh
OwotICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAg
ICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbl0g
ICAgID0gcmVkOwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAxXSA9IGdyZWVu
OwotICAgICAgICAgICAgZGVzdFJvd1tieXRlUG9zaXRpb24gKyAyXSA9IGJsdWU7Ci0gICAgICAg
ICAgICBkZXN0Um93W2J5dGVQb3NpdGlvbiArIDNdID0gYWxwaGE7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXN0YXRpYyBib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50
OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0
LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0aW9uKQotewotICAgIGlmICghSW50UmVj
dCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJbnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlv
biwgc291cmNlUmVjdC5zaXplKCkpKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFJbnRSZWN0KHsgfSwgc291cmNlQnVmZmVyU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1
ZmZlclNpemUud2lkdGgoKSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZm
ZXJTaXplLndpZHRoKCkgKiA0OwotCi0gICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNl
UmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7Ci0gICAgdW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRl
c3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwotCi0gICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9
IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7Ci0gICAgdWlu
dDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55
KCk7Ci0KLSAgICBjb25zdCB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgo
KSAqIDQ7Ci0gICAgZm9yICh1bnNpZ25lZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7
ICsreSkgewotICAgICAgICBjb25zdCB1aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3Ry
aWRlICogeSArIHNyY1Jvd09mZnNldDsKLSAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RS
b3dzICsgZGVzdFN0cmlkZSAqIHkgKyBkZXN0Um93T2Zmc2V0OwotICAgICAgICBtZW1jcHkoZGVz
dFJvdywgc3JjUm93LCBieXRlc1BlclJvdyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1h
dAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLWJvb2wg
Y29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb24oY29uc3QgSW50
UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50U2l6ZSYgc291cmNlQnVmZmVyU2l6ZSwgY29uc3Qg
dWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwgdWludDhfdCog
ZGVzdCwgY29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQb3NpdGlvbikKLXsKLSAgICBpZiAoIUlu
dFJlY3QoeyB9LCBkZXN0QnVmZmVyU2l6ZSkuY29udGFpbnMoSW50UmVjdChkZXN0QnVmZmVyUG9z
aXRpb24sIHNvdXJjZVJlY3Quc2l6ZSgpKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICghSW50UmVjdCh7IH0sIHNvdXJjZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3Qp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3Vy
Y2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0
QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKLQotICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNv
dXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OwotICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQg
PSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKLQotICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jv
d3MgPSBzb3VyY2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOwotICAg
IHVpbnQ4X3QqIGRlc3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRp
b24ueSgpOwotCi0gICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0Lndp
ZHRoKCkgKiA0OwotICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdo
dCgpOyArK3kpIHsKLSAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNy
Y1N0cmlkZSAqIHkgKyBzcmNSb3dPZmZzZXQ7Ci0gICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBk
ZXN0Um93cyArIGRlc3RTdHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKLQotICAgICAgICBmb3Ig
KHNpemVfdCB4ID0gMDsgeCA8IHNvdXJjZVJlY3Qud2lkdGgoKTsgKyt4KSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBwb3MgPSB4ICogNDsKLQotICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3Jj
Um93W3hdOwotICAgICAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBzcmNSb3dbeCArIDFdOwotICAg
ICAgICAgICAgdW5zaWduZWQgYmx1ZSA9IHNyY1Jvd1t4ICsgMl07Ci0gICAgICAgICAgICB1bnNp
Z25lZCBhbHBoYSA9IHNyY1Jvd1t4ICsgM107Ci0KLSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9y
bWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZCA9IChy
ZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdy
ZWVuICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJs
dWUgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAg
ICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgICAg
IGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICB1aW50MzJfdCogcGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVp
bnQzMl90Kj4oZGVzdFJvdykgKyB4OwotICAgICAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8IDI0
KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJv
bURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYgcmVz
dWx0KSBjb25zdAotewotICAgIGF1dG8gcmF3Qml0bWFwU2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgp
OwotCi0gICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBiYWNraW5nU3RvcmVTaXplLndpZHRoKCkgLyBy
YXdCaXRtYXBTaXplLndpZHRoOwotCi0gICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gcmVjdDsKLSAg
ICBzY2FsZWRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKLQotICAgIGlmICghSW50UmVjdChJbnRQ
b2ludCgpLCBiYWNraW5nU3RvcmVTaXplKS5jb250YWlucyhzY2FsZWRSZWN0KSkgewotICAgICAg
ICAvLyBSZXF1ZXN0ZWQgcmVjdCBpcyBvdXRzaWRlIHRoZSBidWZmZXIuIFJldHVybiB6ZXJvLWZp
bGxlZCBidWZmZXIuCi0gICAgICAgIHJlc3VsdC0+emVyb0ZpbGwoKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChzY2Fs
ZWRSZWN0LCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEoKSwgcmVjdC5zaXplKCksIHJlc3Vs
dC0+ZGF0YSgpLCBJbnRQb2ludCgpKTsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmVuc3Vy
ZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAotewotICAgIGlmIChzaXpl
ID09IGJhY2tpbmdTdG9yZVNpemUgJiYgIWRhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGF1dG8gbnVtQnl0ZXMgPSBzaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGJhY2tpbmdTdG9yZVNpemUgPSBzaXplOwotICAgIGRhdGEucmVzaXplVG9G
aXQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIHJldHVybiBkYXRhLmNhcGFjaXR5KCkgPT0g
bnVtQnl0ZXMudW5zYWZlR2V0KCk7Ci19Ci0KLS8vIFN3aXp6bGUgdGhlIHJlZCBhbmQgYmx1ZSBi
eXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCi10ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBzb3VyY2VGb3JtYXQ+Ci12b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVE
YXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCi17Ci0gICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRl
Q291bnQgLyA0OwotICAgIGF1dG8qIHBpeGVsRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihieXRlRGF0YSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7
ICsraSkgewotICAgICAgICB1aW50MzJfdCBwaXhlbCA9ICpwaXhlbERhdGE7Ci0gICAgICAgIHNp
emVfdCBieXRlUG9zaXRpb24gPSBpICogNDsKLQotICAgICAgICB1aW50MzJfdCBhbHBoYSA9IChw
aXhlbCAmIDB4RkYwMDAwMDApID4+IDI0OwotICAgICAgICB1aW50MzJfdCByZWQgPSAocGl4ZWwg
JiAweDAwRkYwMDAwKSA+PiAxNjsKLSAgICAgICAgdWludDMyX3QgZ3JlZW4gPSAocGl4ZWwgJiAw
eDAwMDBGRjAwKSA+PiA4OwotICAgICAgICB1aW50MzJfdCBibHVlID0gKHBpeGVsICYgMHgwMDAw
MDBGRik7Ci0KLSAgICAgICAgLy8gKFApUkdCQSAtPiBQQkdSQQotICAgICAgICBpZiAoc291cmNl
Rm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkgewotICAg
ICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAgICAgICAgIHJlZCA9IChyZWQg
KiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBh
bHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEg
KyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKnBpeGVs
RGF0YSA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOwot
ICAgICAgICArK3BpeGVsRGF0YTsKLSAgICB9Ci19Ci0KLS8vIE5vdGU6IEFzc3VtZXMgdGhhdCBi
eXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1hdAotdGVtcGxhdGUgPEFscGhhUHJlbXVsdGlw
bGljYXRpb24gZGVzaXJlZEZvcm1hdD4KLXZvaWQgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0
aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRlQ291bnQpCi17Ci0gICAgc2l6ZV90
IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwaXhlbENvdW50OyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgeCA9IHBpeGVsQ291bnQgKiA0
OwotCi0gICAgICAgIHVuc2lnbmVkIHJlZCA9IGJ5dGVEYXRhW3hdOwotICAgICAgICB1bnNpZ25l
ZCBncmVlbiA9IGJ5dGVEYXRhW3ggKyAxXTsKLSAgICAgICAgdW5zaWduZWQgYmx1ZSA9IGJ5dGVE
YXRhW3ggKyAyXTsKLSAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBieXRlRGF0YVt4ICsgM107Ci0K
LSAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJl
bXVsdGlwbGllZCkgewotICAgICAgICAgICAgaWYgKGFscGhhICE9IDI1NSkgewotICAgICAgICAg
ICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAg
Z3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7Ci0gICAgICAgICAgICAgICAgYmx1
ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OwotICAgICAgICAgICAgfQotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgewotICAgICAg
ICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwotICAgICAgICAgICAgICAgIGdyZWVu
ID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKLSAgICAgICAgICAgICAgICBibHVlID0gYmx1ZSAqIDI1
NSAvIGFscGhhOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgdWludDMyX3Qq
IHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGJ5dGVEYXRhKSArIGk7Ci0gICAg
ICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBi
bHVlOwotICAgIH0KLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRh
dGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJ
bnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5k
ZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKLXsKLSAgICBhdXRv
IG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVt
Qnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVt
Qnl0ZXMudW5zYWZlR2V0KCkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4gcmVzdWx0OwotCi0gICAg
aWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNpcmVkRm9ybWF0KSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdldFNp
emUoKTsKLSAgICBJbnRTaXplIGJpdG1hcFNpemUoY2xhbXBUbzxpbnQ+KHJhd0JpdG1hcFNpemUu
d2lkdGgpLCBjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS5oZWlnaHQpKTsKLQotICAgIGlmIChy
ZWN0LmxvY2F0aW9uKCkgPT0gSW50UG9pbnQoKSAmJiByZWN0LnNpemUoKSA9PSBiaXRtYXBTaXpl
KSB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUJ5dGVzLnVuc2FmZUdldCgpID09IGRhdGEu
c2l6ZSgpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShkYXRhLmRhdGEoKSwgZGF0YS5zaXpl
KCksIDApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIE9ubHkgd2FudCBwYXJ0IG9mIHRoZSBi
aXRtYXAuCi0gICAgICAgIGlmICghY29weVJlY3RGcm9tRGF0YShyZWN0LCByZXN1bHQpKQotICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgaWYgKGJ5dGVGb3JtYXQgIT0g
ZGVzaXJlZEZvcm1hdCkgewotICAgICAgICAvLyBJbi1tZW1vcnkgZGF0YSBkb2VzIG5vdCBtYXRj
aCBkZXNpcmVkIGZvcm1hdC4gTmVlZCB0byBzd2l6emxlIHRoZSByZXN1bHRzLgotICAgICAgICBp
ZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxp
ZWQpCi0gICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5s
ZW5ndGgoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGluUGxhY2VDaGFuZ2VQcmVtdWx0
aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihyZXN1bHQt
PmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFs
cGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3QKLXsKLSAgICBpZiAoYml0
bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBp
eGVsU2l6ZSgpOwotCi0gICAgYXV0byBudW1CeXRlcyA9IHBpeGVsU2l6ZS5hcmVhPFJlY29yZE92
ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8
SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5k
ZXZpY2VDb250ZXh0KCk7Ci0gICAgQVNTRVJUKCEhZDJkRGV2aWNlQ29udGV4dCk7Ci0KLSAgICBh
dXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gcGl4ZWxTaXplLndpZHRoKCkgKiA0OwotCi0gICAgLy8g
Q29weSBHUFUgZGF0YSBmcm9tIHRoZSBJRDJEMUJpdG1hcCB0byBhIENQVS1iYWNrZWQgSUQyRDFC
aXRtYXAxCi0gICAgQ09NUHRyPElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwotICAgIEQyRDFfQklU
TUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGll
czEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FO
Tk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxUIGhyID0gZDJk
RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHBpeGVsU2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJS
b3dJbkRhdGEsIGJpdG1hcFByb3BlcnRpZXMyLCAmY3B1Qml0bWFwKTsKLSAgICBpZiAoIVNVQ0NF
RURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gdGFyZ2V0UG9zID0g
RDJEMTo6UG9pbnQyVSgpOwotICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUo
MCwgMCwgcGl4ZWxTaXplLndpZHRoKCksIHBpeGVsU2l6ZS5oZWlnaHQoKSk7Ci0gICAgaHIgPSBj
cHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFS
ZWN0KTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsKLSAgICBociA9IGNwdUJpdG1hcC0+TWFw
KEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFtYXBwZWREYXRhLmJpdHMp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHBp
eGVsU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFNvZnR3YXJlIGZpbHRl
cnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3Mg
QkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJl
bXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpCi0gICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0
aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJp
dHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0
Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0gICAgZWxzZQotICAgICAgICBz
d2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBs
aWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRo
KCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7Ci0K
LSAgICBieXRlRm9ybWF0ID0gZGVzaXJlZEZvcm1hdDsKLQotICAgIGJpdG1hcEJ1ZmZlclN5bmMg
PSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci0KLSAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAo
KTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRyYXco
KTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0
YShjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNvdXJjZUZvcm1hdCwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYg
c291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUp
Ci17Ci0gICAgQVNTRVJUKHNvdXJjZVJlY3Qud2lkdGgoKSA+IDApOwotICAgIEFTU0VSVChzb3Vy
Y2VSZWN0LmhlaWdodCgpID4gMCk7Ci0KLSAgICBDaGVja2VkPGludD4gb3JpZ2lueCA9IHNvdXJj
ZVJlY3QueCgpOwotICAgIENoZWNrZWQ8aW50PiBkZXN0eCA9IChDaGVja2VkPGludD4oZGVzdFBv
aW50LngoKSkgKyBzb3VyY2VSZWN0LngoKSk7Ci0gICAgZGVzdHggKj0gcmVzb2x1dGlvblNjYWxl
OwotICAgIEFTU0VSVChkZXN0eC51bnNhZmVHZXQoKSA+PSAwKTsKLSAgICBBU1NFUlQoZGVzdHgu
dW5zYWZlR2V0KCkgPCBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdl
dCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW54LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJlY3Qu
bWF4WCgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR4ID0gKENoZWNrZWQ8aW50PihkZXN0UG9p
bnQueCgpKSArIHNvdXJjZVJlY3QubWF4WCgpKTsKLSAgICBlbmR4ICo9IHJlc29sdXRpb25TY2Fs
ZTsKLSAgICBBU1NFUlQoZW5keC51bnNhZmVHZXQoKSA8PSBzaXplLndpZHRoKCkpOwotCi0gICAg
Q2hlY2tlZDxpbnQ+IHdpZHRoID0gc291cmNlUmVjdC53aWR0aCgpOwotICAgIENoZWNrZWQ8aW50
PiBkZXN0dyA9IGVuZHggLSBkZXN0eDsKLQotICAgIENoZWNrZWQ8aW50PiBvcmlnaW55ID0gc291
cmNlUmVjdC55KCk7Ci0gICAgQ2hlY2tlZDxpbnQ+IGRlc3R5ID0gKENoZWNrZWQ8aW50PihkZXN0
UG9pbnQueSgpKSArIHNvdXJjZVJlY3QueSgpKTsKLSAgICBkZXN0eSAqPSByZXNvbHV0aW9uU2Nh
bGU7Ci0gICAgQVNTRVJUKGRlc3R5LnVuc2FmZUdldCgpID49IDApOwotICAgIEFTU0VSVChkZXN0
eS51bnNhZmVHZXQoKSA8IHNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2Fm
ZUdldCgpID49IDApOwotICAgIEFTU0VSVChvcmlnaW55LnVuc2FmZUdldCgpIDw9IHNvdXJjZVJl
Y3QubWF4WSgpKTsKLQotICAgIENoZWNrZWQ8aW50PiBlbmR5ID0gKENoZWNrZWQ8aW50PihkZXN0
UG9pbnQueSgpKSArIHNvdXJjZVJlY3QubWF4WSgpKTsKLSAgICBlbmR5ICo9IHJlc29sdXRpb25T
Y2FsZTsKLSAgICBBU1NFUlQoZW5keS51bnNhZmVHZXQoKSA8PSBzaXplLmhlaWdodCgpKTsKLQot
ICAgIENoZWNrZWQ8aW50PiBoZWlnaHQgPSBzb3VyY2VSZWN0LmhlaWdodCgpOwotICAgIENoZWNr
ZWQ8aW50PiBkZXN0aCA9IGVuZHkgLSBkZXN0eTsKLQotICAgIGlmICh3aWR0aCA8PSAwIHx8IGhl
aWdodCA8PSAwKQotICAgICAgICByZXR1cm47Ci0KLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGlm
IChiaXRtYXApIHsKLSAgICAgICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6
ZSgpOwotICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgo
KSk7Ci0gICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAg
ICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOwotICAgIH0K
LSNlbmRpZgotCi0gICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChzb3VyY2VTaXplID09IHNpemUpIHsKLSAgICAgICAgbWVtY3B5KGRh
dGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOwotICAgICAgICBieXRl
Rm9ybWF0ID0gc291cmNlRm9ybWF0OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJlYWREYXRhRnJv
bUJpdG1hcElmTmVlZGVkKGJ5dGVGb3JtYXQpOwotICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbVNv
dXJjZVRvRGF0YShzb3VyY2VSZWN0LCBzb3VyY2UsIHNvdXJjZUZvcm1hdCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5
bmM6OkJpdG1hcE91dE9mU3luYzsKLX0KLQotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0
RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBVaW50OENs
YW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCkK
LXsKLSAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0KLSAg
ICBJbnRSZWN0IHNvdXJjZVJlY3RUb0NvcHkgPSBzb3VyY2VSZWN0OwotICAgIGlmICghSW50UmVj
dChJbnRQb2ludCgpLCBwaXhlbFNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGRlc3RCdWZmZXJQb3NpdGlvbiA9IHNvdXJjZVJlY3Qu
bG9jYXRpb24oKTsKLQotICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gYnl0ZUZvcm1hdCkKLSAgICAg
ICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChzb3VyY2VSZWN0LCBzb3VyY2VSZWN0
LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRl
c3RCdWZmZXJQb3NpdGlvbik7Ci0KLSAgICBpZiAoYnl0ZUZvcm1hdCA9PSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgIHJldHVybiBjb3B5UmVjdEZyb21T
b3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9u
OjpVbnByZW11bHRpcGxpZWQ+KHNvdXJjZVJlY3QsIHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2Uu
ZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9u
KTsKLQotICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBs
aWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPihzb3VyY2VSZWN0
LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0
YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXJEYXRh
Ojpsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKQotewotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5j
ICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYyB8fCBkYXRhLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVs
U2l6ZSgpOwotICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gYmFja2luZ1N0b3JlU2l6ZS53
aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+PSBiYWNraW5nU3RvcmVTaXpl
LmhlaWdodCgpKTsKLQotICAgIENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PiBudW1C
eXRlcyA9IHBpeGVsU2l6ZS53aWR0aCAqIHBpeGVsU2l6ZS5oZWlnaHQgKiA0OwotICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvZnR3
YXJlIGdlbmVyYXRlZCBiaXRtYXAgZGF0YSBpcyBpbiBSR0JBLiBXZSBuZWVkIHRvIHN3aXp6bGUg
dG8gcHJlbXVsdGlwbGllZCBCR1JBIHRvIGJlIGNvbXBhdGlibGUKLSAgICAvLyB3aXRoIHRoZSBI
V05EL0hEQyByZW5kZXIgYmFja2luZyB3ZSB1c2UuCi0gICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQotICAgICAgICBpblBsYWNlU3dp
enpsZTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KGRhdGEuZGF0YSgp
LCBkYXRhLnNpemUoKSk7IC8vIFJHQkEgLT4gUEJHUkEKLSAgICBlbHNlCi0gICAgICAgIGluUGxh
Y2VTd2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSk7IC8vIFBSR0JBIC0+IFBCR1JBCi0KLSAgICBhdXRvIGJ5dGVzUGVy
Um93SW5EYXRhID0gYmFja2luZ1N0b3JlU2l6ZS53aWR0aCgpICogNDsKLQotICAgIEhSRVNVTFQg
aHIgPSBiaXRtYXAtPkNvcHlGcm9tTWVtb3J5KG51bGxwdHIsIGRhdGEuZGF0YSgpLCBieXRlc1Bl
clJvd0luRGF0YSk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAgYml0bWFwQnVm
ZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKLX0KLQotQ09NUHRyPElEMkQxQml0
bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNvbXBhdGlibGVCaXRtYXAoSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkKLXsKLSAgICBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLQotICAg
IGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZXR1cm4gYml0bWFwOwotCi0gICAgaWYgKHBs
YXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVyVGFyZ2V0KSB7Ci0gICAgICAg
IENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCByZW5k
ZXJUYXJnZXQpOwotICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7Ci0gICAgICAgICAgICBDT01Q
dHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7Ci0gICAgICAgICAgICBpZiAoU1VDQ0VFREVE
KGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFwKSkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBiaXRtYXApCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybiBiaXRtYXA7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBkcmF3IGFuIElEMkQx
Qml0bWFwIHRvIGl0c2VsZi4gTXVzdCByZXR1cm4gYSBjb3B5LgotICAgICAgICAgICAgICAgIENP
TVB0cjxJRDJEMUJpdG1hcD4gY29waWVkQml0bWFwOwotICAgICAgICAgICAgICAgIGlmIChTVUND
RUVERUQocmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwg
RGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvcGllZEJpdG1hcCkpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChTVUNDRUVERUQoY29waWVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChu
dWxscHRyLCBiaXRtYXAuZ2V0KCksIG51bGxwdHIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjb3BpZWRCaXRtYXA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUo
KTsKLSAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6ZS53aWR0aCk7Ci0KLSAgICBDaGVja2Vk
PHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5o
ZWlnaHQgKiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgLy8gQ29weSB0aGUgYml0cyBmcm9tIGN1cnJlbnQgcmVuZGVy
VGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgotICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhl
IGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24g
aXMgb3Blbi4KLSAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZp
Y2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VD
b250ZXh0KCk7Ci0gICAgaWYgKCFzb3VyY2VEZXZpY2VDb250ZXh0KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKLSAg
ICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFw
UHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09Q
VElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICBIUkVTVUxU
IGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxT
aXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVz
LCAmc291cmNlQ1BVQml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKCFzb3VyY2VDUFVCaXRtYXApCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgaHIgPSBzb3VyY2VDUFVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKG51
bGxwdHIsIGJpdG1hcC5nZXQoKSwgbnVsbHB0cik7Ci0gICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291
cmNlRGF0YTsKLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNf
UkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJn
ZXREZXZpY2VDb250ZXh0OwotICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgm
dGFyZ2V0RGV2aWNlQ29udGV4dCk7Ci0gICAgQVNTRVJUKFNVQ0NFRURFRChocikpOwotCi0gICAg
Q09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwOwotICAgIGhyID0gdGFyZ2V0RGV2
aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNv
dXJjZURhdGEuYml0cywgbWFwcGVkU291cmNlRGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFBy
b3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRtYXApOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5t
YXAoKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAgICBjb250ZXh0LT5iZWdpbkRy
YXcoKTsKLQotICAgIHJldHVybiBjb21wYXRpYmxlQml0bWFwOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggOWM5NGQ4YTQ4MjJmMTI1ZjQwNmYzMDA3NzQ3ZmY5MzU4YzE1
NmEzMC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiSW1h
Z2UuaCIKLSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9VaW50OENsYW1wZWRBcnJheS5oPgot
I2luY2x1ZGUgPHd0Zi9DaGVja2VkQXJpdGhtZXRpYy5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLWludGVyZmFjZSBJRDJEMVJlbmRlclRh
cmdldDsKLWludGVyZmFjZSBJRDJEMUJpdG1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKLQotc3RydWN0IEltYWdlQnVmZmVyRGF0YSB7
Ci0gICAgbXV0YWJsZSBJbnRTaXplIGJhY2tpbmdTdG9yZVNpemU7Ci0gICAgQ2hlY2tlZDx1bnNp
Z25lZCwgUmVjb3JkT3ZlcmZsb3c+IGJ5dGVzUGVyUm93OwotCi0gICAgLy8gT25seSBmb3Igc29m
dHdhcmUgSW1hZ2VCdWZmZXJzLgotICAgIG11dGFibGUgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0g
ICAgbXV0YWJsZSBBbHBoYVByZW11bHRpcGxpY2F0aW9uIGJ5dGVGb3JtYXQgeyBBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQgfTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ+IHBsYXRmb3JtQ29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8R3JhcGhpY3NDb250ZXh0PiBjb250ZXh0OwotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0
bWFwOwotCi0gICAgZW51bSBjbGFzcyBCaXRtYXBCdWZmZXJTeW5jIHsgSW5TeW5jLCBCaXRtYXBP
dXRPZlN5bmMsIEJ1ZmZlck91dE9mU3luYyB9OwotICAgIG11dGFibGUgQml0bWFwQnVmZmVyU3lu
YyBiaXRtYXBCdWZmZXJTeW5jIHsgQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jIH07
Ci0KLSAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGdldERhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmLCBib29sIGFjY2VsZXJhdGVS
ZW5kZXJpbmcsIGZsb2F0IHJlc29sdXRpb25TY2FsZSkgY29uc3Q7Ci0gICAgdm9pZCBwdXREYXRh
KGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24g
c291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50LCBjb25zdCBJbnRTaXplJiwgYm9v
bCBhY2NlbGVyYXRlUmVuZGVyaW5nLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgQ09N
UHRyPElEMkQxQml0bWFwPiBjb21wYXRpYmxlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0Kik7Ci0K
LSAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJikgY29uc3Q7Ci0gICAg
dm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICBib29sIHJlYWREYXRhRnJvbUJp
dG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkgY29uc3Q7
Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmLCBSZWZQdHI8VWludDhD
bGFtcGVkQXJyYXk+JikgY29uc3Q7Ci0gICAgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEo
Y29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbik7Ci0gICAgdm9pZCBtYXJrQnVmZmVyT3V0T2ZTeW5jKCkgeyBiaXRtYXBCdWZmZXJT
eW5jID0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jOyB9Ci19OwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyRC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGUwNDIxOGYxZWY0ZjU3OGNlMDdmOTRiN2E4ZWNiYjgzMGE1MjY3ZjkuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkQuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMzUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgotCi0jaWYgVVNFKERJUkVDVDJEKQotCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LSNpbmNsdWRlICJDT01QdHIuaCIKLSNpbmNsdWRlICJEaXJlY3QyRFV0aWxpdGllcy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkltYWdlRGVjb2RlckRpcmVjdDJELmgiCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1
ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCi0jaW5jbHVkZSA8ZDJkMV8xLmg+Ci0j
aW5jbHVkZSA8bWF0aC5oPgotI2luY2x1ZGUgPHdpbmNvZGVjLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KLSNpbmNsdWRlIDx3dGYvQ2hlY2tlZEFyaXRobWV0aWMuaD4KLSNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9CYXNlNjQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gSW1h
Z2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBj
b25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKHNpemUuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSA9IGNvbnRleHQucmVuZGVyaW5nTW9kZSgpOwotICAgIEludFNpemUgc2NhbGVkU2l6ZSA9
IEltYWdlQnVmZmVyOjpjb21wYXRpYmxlQnVmZmVyU2l6ZShzaXplLCBjb250ZXh0KTsKLSAgICBi
b29sIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1
ZmZlcihuZXcgSW1hZ2VCdWZmZXIoc2NhbGVkU2l6ZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgcmVu
ZGVyaW5nTW9kZSwgbnVsbHB0ciwgJmNvbnRleHQsIHN1Y2Nlc3MpKTsKLQotICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBTZXQgdXAgYSBjb3JyZXNw
b25kaW5nIHNjYWxlIGZhY3RvciBvbiB0aGUgZ3JhcGhpY3MgY29udGV4dC4KLSAgICBidWZmZXIt
PmNvbnRleHQoKS5zY2FsZShGbG9hdFNpemUoc2NhbGVkU2l6ZS53aWR0aCgpIC8gc2l6ZS53aWR0
aCgpLCBzY2FsZWRTaXplLmhlaWdodCgpIC8gc2l6ZS5oZWlnaHQoKSkpOwotICAgIHJldHVybiBi
dWZmZXI7Ci19Ci0KLUltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSAvKmNvbG9yU3BhY2UqLywgUmVu
ZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBjb25zdCBIb3N0V2luZG93KiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0KiB0YXJnZXRDb250ZXh0LCBib29sJiBzdWNjZXNzKQotICAgIDogbV9sb2dpY2Fs
U2l6ZShzaXplKQotICAgICwgbV9yZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlKQotewot
ICAgIHN1Y2Nlc3MgPSBmYWxzZTsgLy8gTWFrZSBlYXJseSByZXR1cm4gbWVhbiBmYWlsdXJlLgot
ICAgIGZsb2F0IHNjYWxlZFdpZHRoID0gc3RkOjpjZWlsKHJlc29sdXRpb25TY2FsZSAqIHNpemUu
d2lkdGgoKSk7Ci0gICAgZmxvYXQgc2NhbGVkSGVpZ2h0ID0gc3RkOjpjZWlsKHJlc29sdXRpb25T
Y2FsZSAqIHNpemUuaGVpZ2h0KCkpOwotCi0gICAgLy8gRklYTUU6IFNob3VsZCB3ZSBhdXRvbWF0
aWNhbGx5IHVzZSBhIGxvd2VyIHJlc29sdXRpb24/Ci0gICAgaWYgKCFGbG9hdFNpemUoc2NhbGVk
V2lkdGgsIHNjYWxlZEhlaWdodCkuaXNFeHByZXNzaWJsZUFzSW50U2l6ZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX3NpemUgPSBJbnRTaXplKHNjYWxlZFdpZHRoLCBzY2FsZWRIZWlnaHQp
OwotICAgIG1fZGF0YS5iYWNraW5nU3RvcmVTaXplID0gbV9zaXplOwotCi0gICAgYm9vbCBhY2Nl
bGVyYXRlUmVuZGVyaW5nID0gcmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpBY2NlbGVy
YXRlZDsKLSAgICBpZiAobV9zaXplLndpZHRoKCkgPD0gMCB8fCBtX3NpemUuaGVpZ2h0KCkgPD0g
MCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gUHJldmVudCBpbnRlZ2VyIG92ZXJmbG93cwot
ICAgIG1fZGF0YS5ieXRlc1BlclJvdyA9IDQgKiBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVy
Zmxvdz4obV9kYXRhLmJhY2tpbmdTdG9yZVNpemUud2lkdGgoKSk7Ci0gICAgQ2hlY2tlZDxzaXpl
X3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRlcyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92
ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3JlU2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQ
ZXJSb3c7Ci0gICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgYXV0byogcGxhdGZvcm1Db250ZXh0ID0gdGFyZ2V0Q29udGV4dCA/IHRhcmdldENv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogbnVsbHB0cjsKLSAgICBhdXRvKiByZW5kZXJUYXJn
ZXQgPSBwbGF0Zm9ybUNvbnRleHQgPyBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpIDog
bnVsbHB0cjsKLQotICAgIGlmICghcmVuZGVyVGFyZ2V0KQotICAgICAgICByZW5kZXJUYXJnZXQg
PSBHcmFwaGljc0NvbnRleHQ6OmRlZmF1bHRSZW5kZXJUYXJnZXQoKTsKLQotICAgIGF1dG8gYml0
bWFwQ29udGV4dCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUobV9s
b2dpY2FsU2l6ZSwgcmVuZGVyVGFyZ2V0LCBtX3Jlc29sdXRpb25TY2FsZSk7Ci0gICAgaWYgKCFi
aXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBIUkVTVUxUIGhyID0gYml0bWFw
Q29udGV4dC0+R2V0Qml0bWFwKCZtX2RhdGEuYml0bWFwKTsKLSAgICBpZiAoIVNVQ0NFRURFRCho
cikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGF0YS5wbGF0Zm9ybUNvbnRleHQgPSBtYWtl
VW5pcXVlPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPihiaXRtYXBDb250ZXh0LmdldCgpLCBbdGhp
c10oKSB7Ci0gICAgICAgIG1fZGF0YS5sb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKLSAgICB9
LCBbdGhpc10oKSB7Ci0gICAgICAgIG1fZGF0YS5tYXJrQnVmZmVyT3V0T2ZTeW5jKCk7Ci0gICAg
fSk7Ci0gICAgbV9kYXRhLmNvbnRleHQgPSBtYWtlVW5pcXVlPEdyYXBoaWNzQ29udGV4dD4obV9k
YXRhLnBsYXRmb3JtQ29udGV4dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJp
bmdDb250ZXh0VHlwZTo6R1BVTWVtb3J5KTsKLQotICAgIHN1Y2Nlc3MgPSB0cnVlOwotfQotCi1J
bWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgaW1hZ2VDb2xvclNwYWNlLCBSZW5kZXJpbmdNb2RlIHJl
bmRlcmluZ01vZGUsIGNvbnN0IEhvc3RXaW5kb3cqLCBib29sJiBzdWNjZXNzKQotICAgIDogSW1h
Z2VCdWZmZXIoc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBpbWFnZUNvbG9yU3BhY2UsIHJlbmRlcmlu
Z01vZGUsIG51bGxwdHIsIG51bGxwdHIsIHN1Y2Nlc3MpCi17Ci19Ci0KLUltYWdlQnVmZmVyOjp+
SW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7Ci0KLUdyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXI6
OmNvbnRleHQoKSBjb25zdAotewotICAgIHJldHVybiAqbV9kYXRhLmNvbnRleHQ7Ci19Ci0KLXZv
aWQgSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCgpIGNvbnN0Ci17Ci0gICAgY29udGV4dCgpLmZs
dXNoKCk7Ci19Ci0KLXN0YXRpYyBDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUNyb3BwZWRJbWFn
ZUlmTmVjZXNzYXJ5KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQsIElEMkQx
Qml0bWFwKiBpbWFnZSwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQotewotICAgIEZsb2F0U2l6ZSBp
bWFnZVNpemUgPSBpbWFnZSA/IG5hdGl2ZUltYWdlU2l6ZShpbWFnZSkgOiBGbG9hdFNpemUoKTsK
LQotICAgIGlmIChpbWFnZSAmJiAoc3RhdGljX2Nhc3Q8c2l6ZV90PihpbWFnZVNpemUud2lkdGgo
KSkgIT0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihib3VuZHMud2lkdGgoKSkgfHwgc3RhdGljX2Nhc3Q8
c2l6ZV90PihpbWFnZVNpemUuaGVpZ2h0KCkpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRz
LmhlaWdodCgpKSkpIHsKLSAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkQml0bWFw
ID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcChiaXRtYXBUYXJnZXQsIGJvdW5kcyk7Ci0gICAgICAg
IGlmIChjcm9wcGVkQml0bWFwKSB7Ci0gICAgICAgICAgICBhdXRvIHNvdXJjZVJlY3QgPSBEMkQx
OjpSZWN0VSgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpKTsKLSAgICAgICAg
ICAgIEhSRVNVTFQgaHIgPSBjcm9wcGVkQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBp
bWFnZSwgJnNvdXJjZVJlY3QpOwotICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChocikpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNyb3BwZWRCaXRtYXA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gaW1hZ2U7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8SW1hZ2U+IGNyZWF0ZUJpdG1hcElt
YWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoSUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQqIGJpdG1hcFRh
cmdldCwgQ09NUHRyPElEMkQxQml0bWFwPiYmIGltYWdlLCBJbnRTaXplIGludGVybmFsU2l6ZSwg
SW50U2l6ZSBsb2dpY2FsU2l6ZSwgSW50U2l6ZSBiYWNraW5nU3RvcmVTaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0g
ICAgaWYgKHJlc29sdXRpb25TY2FsZSA9PSAxIHx8IHByZXNlcnZlUmVzb2x1dGlvbiA9PSBQcmVz
ZXJ2ZVJlc29sdXRpb246OlllcykKLSAgICAgICAgaW1hZ2UgPSBjcmVhdGVDcm9wcGVkSW1hZ2VJ
Zk5lY2Vzc2FyeShiaXRtYXBUYXJnZXQsIGltYWdlLmdldCgpLCBpbnRlcm5hbFNpemUpOwotICAg
IGVsc2UgewotICAgICAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgc2NhbGVkIHZlcnNp
b24KLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBCaXRtYXBJbWFnZTo6Y3JlYXRl
KFdURk1vdmUoaW1hZ2UpKTsKLX0KLQotUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUlt
YWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJl
c2VydmVSZXNvbHV0aW9uKSBjb25zdAotewotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gaW1hZ2U7
Ci0gICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQotICAgICAgICBpbWFnZSA9IGNvcHlOYXRpdmVJbWFn
ZShjb3B5QmVoYXZpb3IpOwotICAgIGVsc2UKLSAgICAgICAgaW1hZ2UgPSBjb3B5TmF0aXZlSW1h
Z2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwotCi0gICAgYXV0byBiaXRtYXBUYXJnZXQgPSByZWlu
dGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29udGV4dCgpLnBsYXRmb3Jt
Q29udGV4dCgpKTsKLSAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxpbmdJZk5l
ZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNpemUoKSwgbG9naWNh
bFNpemUoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUsIG1fcmVzb2x1dGlvblNjYWxlLCBwcmVz
ZXJ2ZVJlc29sdXRpb24pOwotfQotCi1SZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpzaW5rSW50
b0ltYWdlKHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXIsIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pCi17Ci0gICAgSW50U2l6ZSBpbnRlcm5hbFNp
emUgPSBpbWFnZUJ1ZmZlci0+aW50ZXJuYWxTaXplKCk7Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6
ZSA9IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwotICAgIEludFNpemUgYmFja2luZ1N0b3Jl
U2l6ZSA9IGltYWdlQnVmZmVyLT5tX2RhdGEuYmFja2luZ1N0b3JlU2l6ZTsKLSAgICBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUgPSBpbWFnZUJ1ZmZlci0+bV9yZXNvbHV0aW9uU2NhbGU7Ci0KLSAgICBD
T01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKLSAgICBIUkVTVUxU
IGhyID0gaW1hZ2VCdWZmZXItPmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFy
Z2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRtYXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gY3JlYXRlQml0bWFw
SW1hZ2VBZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCksIHNpbmtJbnRvTmF0
aXZlSW1hZ2UoV1RGTW92ZShpbWFnZUJ1ZmZlcikpLCBpbnRlcm5hbFNpemUsIGxvZ2ljYWxTaXpl
LCBiYWNraW5nU3RvcmVTaXplLCByZXNvbHV0aW9uU2NhbGUsIHByZXNlcnZlUmVzb2x1dGlvbik7
Ci19Ci0KLUNPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1h
Z2Uoc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcikKLXsKLSAgICAvLyBG
SVhNRTogU2VlIGlmIHdlIGNhbiByZXVzZSB0aGUgb24taGFyZHdhcmUgaW1hZ2UuCi0gICAgcmV0
dXJuIGltYWdlQnVmZmVyLT5jb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOwot
fQotCi1DT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyOjpjb3B5TmF0aXZlSW1hZ2UoQmFj
a2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IpIGNvbnN0Ci17Ci0gICAgQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQ7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQo
KS5wbGF0Zm9ybUNvbnRleHQoKS0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKCZiaXRt
YXBUYXJnZXQpOwotICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGltYWdlOwotICAgIGhyID0gYml0bWFwVGFy
Z2V0LT5HZXRCaXRtYXAoJmltYWdlKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7Ci0KLSAg
ICAvLyBGSVhNRTogbV9kYXRhLmRhdGEgaXMgbnVsbHB0ciBldmVuIHdoZW4gYXNraW5nIHRvIGNv
cHkgYmFja2luZyBzdG9yZSBsZWFkaW5nIHRvIHRlc3QgZmFpbHVyZXMuCi0gICAgaWYgKGNvcHlC
ZWhhdmlvciA9PSBDb3B5QmFja2luZ1N0b3JlICYmIG1fZGF0YS5kYXRhLmlzRW1wdHkoKSkKLSAg
ICAgICAgY29weUJlaGF2aW9yID0gRG9udENvcHlCYWNraW5nU3RvcmU7Ci0KLSAgICBDaGVja2Vk
PHNpemVfdCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gQ2hlY2tlZDx1bnNpZ25lZCwgUmVj
b3JkT3ZlcmZsb3c+KG1fZGF0YS5iYWNraW5nU3RvcmVTaXplLmhlaWdodCgpKSAqIG1fZGF0YS5i
eXRlc1BlclJvdzsKLSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0
KCkpIHsKLSAgICAgICAgc3dpdGNoIChjb3B5QmVoYXZpb3IpIHsKLSAgICAgICAgY2FzZSBEb250
Q29weUJhY2tpbmdTdG9yZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENvcHlC
YWNraW5nU3RvcmU6Ci0gICAgICAgICAgICBEMkQxX1JFQ1RfVSBiYWNraW5nU3RvcmVEaW1lbnN0
aW9ucyA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9kYXRhLmJhY2tpbmdTdG9yZVNpemUpOwotICAg
ICAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1lbnN0aW9ucywg
bV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19T
VE9SRSkKLSAgICBlbHNlCi0gICAgICAgIGltYWdlID0gbV9kYXRhLnN1cmZhY2UtPmNyZWF0ZUlt
YWdlKCk7Ci0jZW5kaWYKLQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotdm9pZCBJbWFnZUJ1ZmZl
cjo6ZHJhd0NvbnN1bWluZyhzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVy
LCBHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0
LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKQotewotICAgIGltYWdlQnVmZmVyLT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKLXsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKLSAgICBhZGp1c3RlZFNy
Y1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUsIG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAg
IGF1dG8gY29tcGF0aWJsZUJpdG1hcCA9IG1fZGF0YS5jb21wYXRpYmxlQml0bWFwKGRlc3RDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7Ci0KLSAgICBGbG9hdFNpemUg
Y3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKLSAg
ICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
ZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFn
ZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOwotfQotCi12b2lkIElt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpCi17Ci0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAg
YWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2Fs
ZSk7Ci0KLSAgICBpZiAoIWNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAg
ICAgIGlmICgmZGVzdENvbnRleHQgPT0gJmNvbnRleHQoKSB8fCBkZXN0Q29udGV4dC5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0g
Y29weUltYWdlKENvcHlCYWNraW5nU3RvcmUpKSAvLyBEcmF3aW5nIGludG8gb3VyIG93biBidWZm
ZXIsIG5lZWQgdG8gZGVlcCBjb3B5LgotICAgICAgICAgICAgICAgIGNvcHktPmRyYXdQYXR0ZXJu
KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3Jt
LCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBpZiAoUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlcmluZyA9IGNvcHlJbWFnZShEb250Q29w
eUJhY2tpbmdTdG9yZSkpCi0gICAgICAgICAgICAgICAgaW1hZ2VGb3JSZW5kZXJpbmctPmRyYXdQ
YXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBwYXR0ZXJuVHJh
bnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug
ewotICAgICAgICBpZiAoUmVmUHRyPEltYWdlPiBjb3B5ID0gY29weUltYWdlKENvcHlCYWNraW5n
U3RvcmUpKQotICAgICAgICAgICAgY29weS0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBv
cHRpb25zKTsKLSAgICB9Ci19Ci0KLVJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZm
ZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBJbnRTaXpl
KiBwaXhlbEFycmF5RGltZW5zaW9ucywgQ29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVt
KSBjb25zdAotewotICAgIGlmIChjb250ZXh0KCkuaXNBY2NlbGVyYXRlZENvbnRleHQoKSkKLSAg
ICAgICAgZmx1c2hDb250ZXh0KCk7Ci0KLSAgICBJbnRSZWN0IHNyY1JlY3QgPSByZWN0OwotICAg
IGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGluYXRlU3lzdGVtKQotICAgICAg
ICBzcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsKLQotICAgIGlmIChwaXhlbEFycmF5
RGltZW5zaW9ucykKLSAgICAgICAgKnBpeGVsQXJyYXlEaW1lbnNpb25zID0gc3JjUmVjdC5zaXpl
KCk7Ci0KLSAgICByZXR1cm4gbV9kYXRhLmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgpLmlzQWNj
ZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi1SZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IElt
YWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3Qs
IEludFNpemUqIHBpeGVsQXJyYXlEaW1lbnNpb25zLCBDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5h
dGVTeXN0ZW0pIGNvbnN0Ci17Ci0gICAgaWYgKGNvbnRleHQoKS5pc0FjY2VsZXJhdGVkQ29udGV4
dCgpKQotICAgICAgICBmbHVzaENvbnRleHQoKTsKLQotICAgIEludFJlY3Qgc3JjUmVjdCA9IHJl
Y3Q7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gTG9naWNhbENvb3JkaW5hdGVTeXN0ZW0p
Ci0gICAgICAgIHNyY1JlY3Quc2NhbGUobV9yZXNvbHV0aW9uU2NhbGUpOwotCi0gICAgaWYgKHBp
eGVsQXJyYXlEaW1lbnNpb25zKQotICAgICAgICAqcGl4ZWxBcnJheURpbWVuc2lvbnMgPSBzcmNS
ZWN0LnNpemUoKTsKLQotICAgIHJldHVybiBtX2RhdGEuZ2V0RGF0YShBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpQcmVtdWx0aXBsaWVkLCBzcmNSZWN0LCBpbnRlcm5hbFNpemUoKSwgY29udGV4dCgp
LmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi12b2lkIEltYWdlQnVmZmVyOjpwdXRC
eXRlQXJyYXkoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBidWZmZXJGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IElu
dFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIENvb3JkaW5hdGVT
eXN0ZW0gY29vcmRpbmF0ZVN5c3RlbSkKLXsKLSAgICBpZiAoY29udGV4dCgpLmlzQWNjZWxlcmF0
ZWRDb250ZXh0KCkpCi0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotCi0gICAgSW50UmVjdCBzY2Fs
ZWRTb3VyY2VSZWN0ID0gc291cmNlUmVjdDsKLSAgICBJbnRTaXplIHNjYWxlZFNvdXJjZVNpemUg
PSBzb3VyY2VTaXplOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IExvZ2ljYWxDb29yZGlu
YXRlU3lzdGVtKSB7Ci0gICAgICAgIHNjYWxlZFNvdXJjZVJlY3Quc2NhbGUobV9yZXNvbHV0aW9u
U2NhbGUpOwotICAgICAgICBzY2FsZWRTb3VyY2VTaXplLnNjYWxlKG1fcmVzb2x1dGlvblNjYWxl
KTsKLSAgICB9Ci0KLSAgICBtX2RhdGEucHV0RGF0YShzb3VyY2UsIGJ1ZmZlckZvcm1hdCwgc2Nh
bGVkU291cmNlU2l6ZSwgc2NhbGVkU291cmNlUmVjdCwgZGVzdFBvaW50LCBpbnRlcm5hbFNpemUo
KSwgY29udGV4dCgpLmlzQWNjZWxlcmF0ZWRDb250ZXh0KCksIDEpOwotfQotCi1TdHJpbmcgSW1h
Z2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxkb3VibGU+LCBQcmVz
ZXJ2ZVJlc29sdXRpb24pIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gImRhdGE6LCJfczsKLX0KLQotVmVjdG9yPHVpbnQ4X3Q+IEltYWdlQnVmZmVyOjp0b0RhdGEo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5KSBjb25zdAot
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHsgfTsKLX0KLQotU3RyaW5nIElt
YWdlRGF0YVRvRGF0YVVSTChjb25zdCBJbWFnZURhdGEmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5KQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuICJkYXRhOiwiX3M7Ci19Ci0KLXZvaWQgSW1hZ2VCdWZmZXI6OnRyYW5zZm9y
bUNvbG9yU3BhY2UoQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSkKLXsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1
ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjcwYWJlZGYwYTYzNTBmZDU1OTQ4
ZDQ4MWFiNzg5NWY2MjBiNDhjMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kLmgiCisKKyNpZiBVU0UoRElSRUNUMkQpCisKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgor
I2luY2x1ZGUgIkNPTVB0ci5oIgorI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCisjaW5jbHVk
ZSAiSW1hZ2VEZWNvZGVyRGlyZWN0MkQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaCIKKyNpbmNsdWRlIDxkMmQxXzEuaD4KKyNp
bmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8d2luY29kZWMuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyRGlyZWN0MkRCYWNr
ZW5kPiBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0
IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNh
bGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKGJhY2tl
bmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvKiBw
bGF0Zm9ybUNvbnRleHQgPSB0YXJnZXRDb250ZXh0ID8gdGFyZ2V0Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCkgOiBudWxscHRyOworICAgIGF1dG8qIHJlbmRlclRhcmdldCA9IHBsYXRmb3JtQ29u
dGV4dCA/IHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgOiBudWxscHRyOworCisgICAg
aWYgKCFyZW5kZXJUYXJnZXQpCisgICAgICAgIHJlbmRlclRhcmdldCA9IEdyYXBoaWNzQ29udGV4
dDo6ZGVmYXVsdFJlbmRlclRhcmdldCgpOworCisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gRGly
ZWN0MkQ6OmNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldE9mU2l6ZShzaXplLCByZW5kZXJUYXJnZXQs
IHJlc29sdXRpb25TY2FsZSk7CisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAgICByZXR1
cm47CisKKyAgICBOYXRpdmVJbWFnZVB0ciBiaXRtYXA7CisgICAgSFJFU1VMVCBociA9IGJpdG1h
cENvbnRleHQtPkdldEJpdG1hcCgmYml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcGxhdGZvcm1Db250ZXh0ID0gbWFrZVVuaXF1ZTxQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRD4oYml0bWFwQ29udGV4dC5nZXQoKSwgW3RoaXNdKCkgewor
ICAgICAgICBtX2RhdGEubG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisgICAgfSwgW3RoaXNd
KCkgeworICAgICAgICBtX2RhdGEubWFya0J1ZmZlck91dE9mU3luYygpOworICAgIH0pOworCisg
ICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
YXV0byBjb250ZXh0ID0gbWFrZVVuaXF1ZTxHcmFwaGljc0NvbnRleHQ+KHBsYXRmb3JtQ29udGV4
dC5nZXQoKSwgR3JhcGhpY3NDb250ZXh0OjpCaXRtYXBSZW5kZXJpbmdDb250ZXh0VHlwZTo6R1BV
TWVtb3J5KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZD4obmV3
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKHNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9u
U2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUocGxhdGZvcm1Db250ZXh0KSwgV1RGTW92ZShjb250
ZXh0KSwgV1RGTW92ZShiaXRtYXApKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
ckRpcmVjdDJEQmFja2VuZD4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICByZXR1cm4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OmNyZWF0ZShzaXplLCAxLCBDb2xv
clNwYWNlOjpTUkdCLCBudWxscHRyKTsKK30KKworSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6
OkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUs
IGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
PiYmIHBsYXRmb3JtQ29udGV4dCwgc3RkOjp1bmlxdWVfcHRyPEdyYXBoaWNzQ29udGV4dD4mJiBj
b250ZXh0LCBOYXRpdmVJbWFnZVB0ciYmIGJpdG1hcCkKKyAgICA6IEltYWdlQnVmZmVyQ0dCYWNr
ZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
KQorICAgICwgbV9wbGF0Zm9ybUNvbnRleHQoV1RGTW92ZShwbGF0Zm9ybUNvbnRleHQpKQorICAg
ICwgbV9jb250ZXh0KFdURk1vdmUoY29udGV4dCkpCisgICAgLCBtX2JpdG1hcChXVEZNb3ZlKGJp
dG1hcCkpCit7Cit9CisKK0dyYXBoaWNzQ29udGV4dCYgSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ6OmNvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9jb250ZXh0OworfQorCit2b2lk
IEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpmbHVzaENvbnRleHQoKQoreworICAgIGNvbnRl
eHQoKS5mbHVzaCgpOworfQorCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFj
a2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yKSBjb25z
dAoreworICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0Owor
ICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPnJlbmRlclRhcmdl
dCgpLT5RdWVyeUludGVyZmFjZSgmYml0bWFwVGFyZ2V0KTsKKyAgICBpZiAoIVNVQ0NFRURFRCho
cikpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBp
bWFnZTsKKyAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZpbWFnZSk7CisgICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOworCisgICAgLy8gRklYTUU6IG1fZGF0YS5kYXRhIGlzIG51bGxw
dHIgZXZlbiB3aGVuIGFza2luZyB0byBjb3B5IGJhY2tpbmcgc3RvcmUgbGVhZGluZyB0byB0ZXN0
IGZhaWx1cmVzLgorICAgIGlmIChjb3B5QmVoYXZpb3IgPT0gQ29weUJhY2tpbmdTdG9yZSAmJiBt
X2RhdGEuZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIGNvcHlCZWhhdmlvciA9IERvbnRDb3B5QmFj
a2luZ1N0b3JlOworCisgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBudW1CeXRl
cyA9IENoZWNrZWQ8dW5zaWduZWQsIFJlY29yZE92ZXJmbG93PihtX2RhdGEuYmFja2luZ1N0b3Jl
U2l6ZS5oZWlnaHQoKSkgKiBtX2RhdGEuYnl0ZXNQZXJSb3c7CisgICAgaWYgKG51bUJ5dGVzLmhh
c092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoY29weUJl
aGF2aW9yID09IENvcHlCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgRDJEMV9SRUNUX1UgYmFja2lu
Z1N0b3JlRGltZW5zdGlvbnMgPSBJbnRSZWN0KEludFBvaW50KCksIG1fZGF0YS5iYWNraW5nU3Rv
cmVTaXplKTsKKyAgICAgICAgaW1hZ2UtPkNvcHlGcm9tTWVtb3J5KCZiYWNraW5nU3RvcmVEaW1l
bnN0aW9ucywgbV9kYXRhLmRhdGEuZGF0YSgpLCAzMik7CisKKyAgICB9CisKKyAgICByZXR1cm4g
aW1hZ2U7Cit9CisKK3N0YXRpYyBOYXRpdmVJbWFnZVB0ciBjcmVhdGVDcm9wcGVkSW1hZ2VJZk5l
Y2Vzc2FyeShJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBJRDJEMUJpdG1h
cCogaW1hZ2UsIGNvbnN0IEludFNpemUmIGJvdW5kcykKK3sKKyAgICBGbG9hdFNpemUgaW1hZ2VT
aXplID0gaW1hZ2UgPyBuYXRpdmVJbWFnZVNpemUoaW1hZ2UpIDogRmxvYXRTaXplKCk7CisKKyAg
ICBpZiAoaW1hZ2UgJiYgKHN0YXRpY19jYXN0PHNpemVfdD4oaW1hZ2VTaXplLndpZHRoKCkpICE9
IHN0YXRpY19jYXN0PHNpemVfdD4oYm91bmRzLndpZHRoKCkpIHx8IHN0YXRpY19jYXN0PHNpemVf
dD4oaW1hZ2VTaXplLmhlaWdodCgpKSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KGJvdW5kcy5oZWln
aHQoKSkpKSB7CisgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JvcHBlZEJpdG1hcCA9IERp
cmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBib3VuZHMpOworICAgICAgICBpZiAo
Y3JvcHBlZEJpdG1hcCkgeworICAgICAgICAgICAgYXV0byBzb3VyY2VSZWN0ID0gRDJEMTo6UmVj
dFUoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CisgICAgICAgICAgICBI
UkVTVUxUIGhyID0gY3JvcHBlZEJpdG1hcC0+Q29weUZyb21CaXRtYXAobnVsbHB0ciwgaW1hZ2Us
ICZzb3VyY2VSZWN0KTsKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQoaHIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBjcm9wcGVkQml0bWFwOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIGltYWdlOworfQorCitzdGF0aWMgUmVmUHRyPEltYWdlPiBjcmVhdGVCaXRtYXBJbWFnZUFm
dGVyU2NhbGluZ0lmTmVlZGVkKElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRtYXBUYXJnZXQs
IENPTVB0cjxJRDJEMUJpdG1hcD4mJiBpbWFnZSwgSW50U2l6ZSBpbnRlcm5hbFNpemUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikK
K3sKKyAgICBpZiAocmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2VydmVSZXNvbHV0aW9uID09
IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9IGNyZWF0ZUNyb3BwZWRJ
bWFnZUlmTmVjZXNzYXJ5KGJpdG1hcFRhcmdldCwgaW1hZ2UuZ2V0KCksIGludGVybmFsU2l6ZSk7
CisgICAgZWxzZSB7CisgICAgICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBzY2FsZWQg
dmVyc2lvbgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKworICAgIGlmICghaW1h
Z2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIEJpdG1hcEltYWdlOjpj
cmVhdGUoV1RGTW92ZShpbWFnZSkpOworfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyRGly
ZWN0MkRCYWNrZW5kOjpjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IsIFBy
ZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0Cit7CisgICAgTmF0aXZl
SW1hZ2VQdHIgaW1hZ2U7CisgICAgaWYgKG1fcmVzb2x1dGlvblNjYWxlID09IDEgfHwgcHJlc2Vy
dmVSZXNvbHV0aW9uID09IFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKQorICAgICAgICBpbWFnZSA9
IGNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgIGVsc2UKKyAgICAgICAgaW1hZ2Ug
PSBjb3B5TmF0aXZlSW1hZ2UoRG9udENvcHlCYWNraW5nU3RvcmUpOworCisgICAgYXV0byBiaXRt
YXBUYXJnZXQgPSByZWludGVycHJldF9jYXN0PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kj4oY29u
dGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VB
ZnRlclNjYWxpbmdJZk5lZWRlZChiaXRtYXBUYXJnZXQsIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5h
bFNpemUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK1Jl
ZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnNpbmtJbnRvSW1hZ2UoUHJl
c2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikKK3sKKyAgICBDT01QdHI8SUQyRDFC
aXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldDsKKyAgICBIUkVTVUxUIGhyID0gY29udGV4
dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoJmJp
dG1hcFRhcmdldCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlID0gY29weU5hdGl2ZUltYWdlKERvbnRD
b3B5QmFja2luZ1N0b3JlKTsKKyAgICByZXR1cm4gY3JlYXRlQml0bWFwSW1hZ2VBZnRlclNjYWxp
bmdJZk5lZWRlZChiaXRtYXBUYXJnZXQuZ2V0KCksIFdURk1vdmUoaW1hZ2UpLCBpbnRlcm5hbFNp
emUoKSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVzb2x1dGlvbik7Cit9CisKK05hdGl2
ZUltYWdlUHRyIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpjb21wYXRpYmxlQml0bWFwKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCit7CisgICAgbG9hZERhdGFUb0JpdG1hcElm
TmVlZGVkKCk7CisKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKKyAgICAgICAgcmV0dXJuIGJpdG1h
cDsKKworICAgIGlmIChtX3BsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkgPT0gcmVuZGVy
VGFyZ2V0KSB7CisgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFw
VGFyZ2V0KFF1ZXJ5LCByZW5kZXJUYXJnZXQpOworICAgICAgICBpZiAoYml0bWFwVGFyZ2V0KSB7
CisgICAgICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJhY2tpbmdCaXRtYXA7CisgICAgICAg
ICAgICBpZiAoU1VDQ0VFREVEKGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiYWNraW5nQml0bWFw
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmFja2luZ0JpdG1hcCAhPSBtX2JpdG1hcCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGJpdG1hcDsKKworICAgICAgICAgICAgICAgIC8vIFdl
IGNhbid0IGRyYXcgYW4gSUQyRDFCaXRtYXAgdG8gaXRzZWxmLiBNdXN0IHJldHVybiBhIGNvcHku
CisgICAgICAgICAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb3BpZWRCaXRtYXA7CisgICAg
ICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZW5kZXJUYXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRt
YXAtPkdldFBpeGVsU2l6ZSgpLCBEaXJlY3QyRDo6Yml0bWFwUHJvcGVydGllcygpLCAmY29waWVk
Qml0bWFwKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChjb3BpZWRCaXRt
YXAtPkNvcHlGcm9tQml0bWFwKG51bGxwdHIsIG1fYml0bWFwLmdldCgpLCBudWxscHRyKSkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29waWVkQml0bWFwOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGF1dG8gc2l6ZSA9
IG1fYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAgICBBU1NFUlQoc2l6ZS5oZWlnaHQgJiYgc2l6
ZS53aWR0aCk7CisKKyAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVyZmxvdz4gbnVtQnl0
ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNP
dmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgLy8gQ29weSB0aGUg
Yml0cyBmcm9tIGN1cnJlbnQgcmVuZGVyVGFyZ2V0IHRvIHRoZSBvdXRwdXQgdGFyZ2V0LgorICAg
IC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdoaWxl
IGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KKyAgICBjb250ZXh0LT5lbmREcmF3KCk7
CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0ID0g
bV9wbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsKKyAgICBpZiAoIXNvdXJjZURldmlj
ZUNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQ09NUHRyPElEMkQxQml0
bWFwMT4gc291cmNlQ1BVQml0bWFwOworICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1h
cFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05T
X0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBp
eGVsRm9ybWF0KCkpOworICAgIEhSRVNVTFQgaHIgPSBzb3VyY2VEZXZpY2VDb250ZXh0LT5DcmVh
dGVCaXRtYXAobV9iaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51
bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7CisgICAgaWYg
KCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghc291
cmNlQ1BVQml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGhyID0gc291cmNl
Q1BVQml0bWFwLT5Db3B5RnJvbUJpdG1hcChudWxscHRyLCBtX2JpdG1hcC5nZXQoKSwgbnVsbHB0
cik7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkU291cmNlRGF0YTsKKyAgICBociA9IHNvdXJjZUNQ
VUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZFNvdXJjZURhdGEpOwor
ICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBD
T01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiB0YXJnZXREZXZpY2VDb250ZXh0OworICAgIGhyID0g
cmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmdGFyZ2V0RGV2aWNlQ29udGV4dCk7CisgICAg
QVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjb21wYXRp
YmxlQml0bWFwOworICAgIGhyID0gdGFyZ2V0RGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJp
dG1hcC0+R2V0UGl4ZWxTaXplKCksIG1hcHBlZFNvdXJjZURhdGEuYml0cywgbWFwcGVkU291cmNl
RGF0YS5waXRjaCwgRGlyZWN0MkQ6OmJpdG1hcFByb3BlcnRpZXMoKSwgJmNvbXBhdGlibGVCaXRt
YXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBociA9IHNvdXJjZUNQVUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisKKyAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKKworICAgIHJldHVybiBjb21wYXRp
YmxlQml0bWFwOworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgYWRq
dXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlLCBtX3Jlc29sdXRpb25TY2FsZSk7
CisKKyAgICBhdXRvIGNvbXBhdGlibGVCaXRtYXAgPSBjb21wYXRpYmxlQml0bWFwKGRlc3RDb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5yZW5kZXJUYXJnZXQoKSk7CisKKyAgICBGbG9hdFNpemUg
Y3VycmVudEltYWdlU2l6ZSA9IG5hdGl2ZUltYWdlU2l6ZShjb21wYXRpYmxlQml0bWFwKTsKKyAg
ICBpZiAoY3VycmVudEltYWdlU2l6ZS5pc1plcm8oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZGVzdENvbnRleHQuZHJhd05hdGl2ZUltYWdlKGNvbXBhdGlibGVCaXRtYXAsIGN1cnJlbnRJbWFn
ZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wdGlvbnMpOworfQorCit2b2lkIElt
YWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRl
c3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9
IHNyY1JlY3Q7CisgICAgYWRqdXN0ZWRTcmNSZWN0LnNjYWxlKG1fcmVzb2x1dGlvblNjYWxlKTsK
KworICAgIGlmIChhdXRvIGltYWdlID0gY29weUltYWdlKCZkZXN0Q29udGV4dCA9PSAmY29udGV4
dCgpID8gQ29weUJhY2tpbmdTdG9yZSA6IERvbnRDb3B5QmFja2luZ1N0b3JlKSkKKyAgICAgICAg
aW1hZ2UtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNSZWN0
LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7Cit9CisKK1N0cmlu
ZyBJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIE9w
dGlvbmFsPGRvdWJsZT4sIFByZXNlcnZlUmVzb2x1dGlvbikgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAiZGF0YTosIl9zOworfQorCitWZWN0b3I8dWludDhfdD4g
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ6OnRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBl
LCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OnRvQkdSQURhdGEoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXJEaXJl
Y3QyREJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZv
cm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRG
b3JtYXQsIHNyY1JlY3QsIG51bGxwdHIpOworfQorCit2b2lkIEltYWdlQnVmZmVyRGlyZWN0MkRC
YWNrZW5kOjpwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwg
Y29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmQ6OnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNS
ZWN0LCBkZXN0UG9pbnQsIG51bGxwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNkMTU2MDdmMzY0M2RiYTdlZTVlZWZmMmY3MWFjMzkzOTYwMDdlMTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1h
Z2VCdWZmZXJEaXJlY3QyREJhY2tlbmQuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KERJUkVDVDJEKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8
d3RmL0lzb01hbGxvYy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kIDogcHVibGljIEltYWdlQnVmZmVyQmFja2VuZCB7CisgICAgV1RG
X01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlckRpcmVjdDJEQmFja2VuZCk7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQpOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ+IGNy
ZWF0ZShjb25zdCBGbG9hdFNpemUmLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqKTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVm
ZmVyRGlyZWN0MkRCYWNrZW5kPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiwgY29uc3QgR3JhcGhp
Y3NDb250ZXh0Jik7CisKKyAgICBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlOworCisgICAgTmF0aXZlSW1h
Z2VQdHIgY29weU5hdGl2ZUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgPSBDb3B5QmFja2luZ1N0b3Jl
KSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3Rv
cmVDb3B5LCBQcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlOworCisgICAgUmVmUHRy
PEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbikgb3ZlcnJpZGU7CisKKyAg
ICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICBWZWN0
b3I8dWludDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJs
ZT4gcXVhbGl0eSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURh
dGEoKSBjb25zdCBvdmVycmlkZTsKKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRp
b24gaW5wdXRGb3JtYXQsIGNvbnN0IEltYWdlRGF0YSYsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAg
SW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtQ29udGV4dERpcmVjdDJEPiBt
X3BsYXRmb3JtQ29udGV4dDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R3JhcGhpY3NDb250ZXh0PiBt
X2NvbnRleHQ7CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9iaXRtYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoRElSRUNUMkQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvTW9ja0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKaW5kZXggNDkz
NjdjYjI5ZDBmMjBkMTcxMjIwYjMyMDBjOTRlNWNjZDM3MDFiZC4uMzJiZjg2YmM2ZmI2OGMxZTZk
NjNkZWQ4NzYyNzUzNTNkNTRhZmI4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
b2NrR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAtNTgsNyArNTgsNyBAQCBwdWJs
aWM6CiAKICAgICAgICAgaW50IGZwc051bWVyYXRvciwgZnBzRGVub21pbmF0b3I7CiAgICAgICAg
IGdzdF91dGlsX2RvdWJsZV90b19mcmFjdGlvbihmcmFtZVJhdGUoKSwgJmZwc051bWVyYXRvciwg
JmZwc0Rlbm9taW5hdG9yKTsKLSAgICAgICAgYXV0byBpbWFnZVNpemUgPSBpbWFnZUJ1ZmZlci0+
aW50ZXJuYWxTaXplKCk7CisgICAgICAgIGF1dG8gaW1hZ2VTaXplID0gaW1hZ2VCdWZmZXItPmJh
Y2tlbmRTaXplKCk7CiAgICAgICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdf
c2ltcGxlKCJ2aWRlby94LXJhdyIsCiAgICAgICAgICAgICAiZm9ybWF0IiwgR19UWVBFX1NUUklO
RywgIkJHUkEiLAogICAgICAgICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgaW1hZ2VTaXplLndp
ZHRoKCksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc2hhcGVzL1NoYXBl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFwZXMvU2hhcGUuY3BwCmluZGV4IDg1
MWE4NjY3ODliNDgzNTQyMmM1N2E0MWRkYTc1YTBiY2FkN2Q2NzUuLjA0MmQ1ZGQ3YmI4MzRmMWUz
YmVhMWE5ZTFhOTAyZmUzZGI2ZWZmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zaGFwZXMvU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zaGFw
ZXMvU2hhcGUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIlBvbHlnb25TaGFwZS5oIgogI2luY2x1ZGUgIlJhc3RlclNoYXBlLmgiCkBAIC0xODgsOCAr
MTg5LDkgQEAgc3RkOjp1bmlxdWVfcHRyPFNoYXBlPiBTaGFwZTo6Y3JlYXRlUmFzdGVyU2hhcGUo
SW1hZ2UqIGltYWdlLCBmbG9hdCB0aHJlc2hvbGQsIGMKICAgICAgICAgaWYgKGltYWdlKQogICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmRyYXdJbWFnZSgqaW1hZ2UsIEludFJlY3QoSW50UG9p
bnQoKSwgaW1hZ2VSZWN0LnNpemUoKSkpOwogCi0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRB
cnJheT4gcGl4ZWxBcnJheSA9IGltYWdlQnVmZmVyLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEo
SW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHBpeGVsQXJyYXkpOworICAgICAgICBhdXRvIGltYWdlRGF0YSA9IGltYWdlQnVmZmVy
LT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCB7
IEludFBvaW50KCksIGltYWdlUmVjdC5zaXplKCkgfSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KGltYWdlRGF0YSAmJiBpbWFnZURhdGEtPmRhdGEoKSk7CisgICAgICAgIGF1dG8qIHBpeGVsQXJy
YXkgPSBpbWFnZURhdGEtPmRhdGEoKTsKICAgICAgICAgdW5zaWduZWQgcGl4ZWxBcnJheUxlbmd0
aCA9IHBpeGVsQXJyYXktPmxlbmd0aCgpOwogICAgICAgICB1bnNpZ25lZCBwaXhlbEFycmF5T2Zm
c2V0ID0gMzsgLy8gRWFjaCBwaXhlbCBpcyBmb3VyIGJ5dGVzOiBSR0JBLgogICAgICAgICB1aW50
OF90IGFscGhhUGl4ZWxUaHJlc2hvbGQgPSBzdGF0aWNfY2FzdDx1aW50OF90Pihscm91bmRmKGNs
YW1wVG88ZmxvYXQ+KHRocmVzaG9sZCwgMCwgMSkgKiAyNTUuMGYpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1JlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDYw
NzVmNjNlMWMyODAwN2Y2NzdlMjkzN2M1Y2E3YmM2NzkzMzIwMjguLmY2YTk1NDU4OTg1OGUwMGU0
ZTdiNmEzYzE5ZjIyYmFmYTU3NjFkMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzQ2LDcgKzM0Niw3IEBAIGJv
b2wgU1ZHUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRm9yZWdyb3VuZChzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+JiBpbWFnZUJ1CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSB0cmFuc2Zvcm0g
PSBtX3BhaW50SW5mby0+Y29udGV4dCgpLmdldENUTShHcmFwaGljc0NvbnRleHQ6OkRlZmluaXRl
bHlJbmNsdWRlRGV2aWNlU2NhbGUpOwogICAgICAgICBJbnRTaXplIGV4cGFuZGVkQm91bmRpbmdC
b3ggPSBleHBhbmRlZEludFNpemUoYm91bmRpbmdCb3guc2l6ZSgpKTsKICAgICAgICAgSW50U2l6
ZSBidWZmZXJTaXplKHN0YXRpY19jYXN0PGludD4oY2VpbChleHBhbmRlZEJvdW5kaW5nQm94Lndp
ZHRoKCkgKiB0cmFuc2Zvcm0ueFNjYWxlKCkpKSwgc3RhdGljX2Nhc3Q8aW50PihjZWlsKGV4cGFu
ZGVkQm91bmRpbmdCb3guaGVpZ2h0KCkgKiB0cmFuc2Zvcm0ueVNjYWxlKCkpKSk7Ci0gICAgICAg
IGlmIChidWZmZXJTaXplICE9IGltYWdlQnVmZmVyLT5pbnRlcm5hbFNpemUoKSkKKyAgICAgICAg
aWYgKGJ1ZmZlclNpemUgIT0gaW1hZ2VCdWZmZXItPmJhY2tlbmRTaXplKCkpCiAgICAgICAgICAg
ICBpbWFnZUJ1ZmZlci5yZXNldCgpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dlYktpdC9EZXJpdmVk
U291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDUxZDMxOGI3MjRlNzUxOWQ3Mjc3YWU3NTA3
NzNkMWIyOGU4ZGRhYTMuLmIwMWI1NGMxNzA5MDA5NzNlYmJlYWMxNmQzODhkYjFkMGY4MjI1ZjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlz
dAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKQEAg
LTE1LDYgKzE1LDggQEAgJChKQVZBU0NSSVBUQ09SRV9QUklWQVRFX0hFQURFUlNfRElSKS9tb2Rl
bHMucHkKICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikveHhkLnBsCiAkKFBS
T0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMu
aW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvR1BVUHJvY2Vzcy5tZXNzYWdlcy5pbgorJChQ
Uk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQuR1BVUHJvY2Vzcy5zYi5pbgogJChQ
Uk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRp
YVBsYXllclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xMDcsNiArMTA5LDcgQEAgJChQUk9KRUNUX0RJ
UikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLm1lc3NhZ2VzLmlu
CiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNlcy9JbmRleGVkREIvV2ViSURCQ29u
bmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0Z1
bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIp
L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmluCiskKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
Lm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRpYS9NZWRpYVBs
YXllclByaXZhdGVSZW1vdGUubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3Mv
R1BVL21lZGlhL1JlbW90ZU1lZGlhUGxheWVyTWFuYWdlci5tZXNzYWdlcy5pbgogJChQUk9KRUNU
X0RJUikvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5tZXNzYWdlcy5pbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlz
dCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKaW5kZXgg
NWM5MmI4MTMzNTNkZjcxZmU2ZDY4NTBmMzdjNGY3M2ZjY2Y3MWU1ZS4uMGE3NzdmNzIzNzEwOGQx
MTRmNmE0OGVkMWFjNGI3YjI2MjhjMzI4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJp
dmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRT
b3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CkBAIC0xMjksNiArMTI5LDEyIEBAICQoQlVJTFRfUFJP
RFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1U
cmFja1JlbmRlcmVyCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0
Mi9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1lc3NhZ2VSZWNlaXZlci5jcHAK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUF1ZGlv
TWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVy
ZXJNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2Vz
L1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlck1lc3Nh
Z2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90
ZUltYWdlQnVmZmVyTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJveHlNZXNzYWdlUmVjZWl2ZXIu
Y3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1lc3NhZ2VzUmVwbGllcy5oCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAogJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94
eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdlc1JlcGxpZXMuaApAQCAtMTU0
LDYgKzE2MCw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQy
L1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAkKEJVSUxUX1BST0RVQ1RTX0RJ
UikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RSZWdpc3RyeU1lc3NhZ2VSZWNl
aXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1Jl
bW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2
ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlNZXNzYWdlc1JlcGxpZXMuaAor
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChCVUlMVF9QUk9EVUNUU19ESVIp
L0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2Fn
ZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgKICQoQlVJTFRfUFJPRFVDVFNf
RElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZl
ZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVz
c2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VzUmVwbGllcy5oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViS2l0
L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMzQ5ZTU0ZGMzMGM0NDk4MmJjZDgyZTA5ZTk0YmI2
NmRlOTlkY2IxMS4uNjBiZTE5OGU4ZGZjY2Y5ZmE4NjA5OTJhYzdiNjVmMDljNmE5ZjIwYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9X
ZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUsNyBAQCBWUEFUSCA9IFwKICAg
ICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tYWMg
XAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisgICAgJChXZWJLaXQyKS9HUFVQ
cm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy93ZWJy
dGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAogICAgICQoV2ViS2l0MikvTmV0
d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBAIFZQQVRIID0gXAogICAgICQo
V2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9j
ZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9tZWRpYSBcCisgICAgJChX
ZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kIFwKICAgICAkKFdlYktpdDIp
L1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0ljb25E
YXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0luc3BlY3RvciBcCkBAIC0xNDUs
NiArMTQ3LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAgUGx1Z2luUHJveHkgXAogICAg
IFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWFuYWdlciBcCiAgICAgUmVtb3Rl
QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgXAorCVJlbW90ZUltYWdlQnVmZmVyIFwKKwlS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5IFwKICAgICBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5IFwKICAgICBSZW1vdGVNZWRpYVBsYXllck1hbmFnZXIgXAogICAgIFJlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlclByb3h5IFwKQEAgLTE1Myw2ICsxNTcsNyBAQCBNRVNTQUdFX1JFQ0VJVkVSUyA9
IFwKICAgICBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFSZXNv
dXJjZU1hbmFnZXIgXAogICAgIFJlbW90ZU9iamVjdFJlZ2lzdHJ5IFwKKyAgICBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkgXAogICAgIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllciBc
CiAgICAgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlciBcCiAgICAgUmVtb3Rl
U2Nyb2xsaW5nQ29vcmRpbmF0b3IgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IGE2Y2VlNTRjOTdjOTIxNWE2
ODczZjRkY2IxMmJkZTQ3YzFkYzQwZWMuLmE2YTU0ZmUxMThkMDdkOGQ0NDkyZjFkNmM5M2VjZWFl
ZDAzNzFkNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTE4Niw3OSArMTg2LDkyIEBAIExpYldlYlJUQ0Nv
ZGVjc1Byb3h5JiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpsaWJXZWJSVENDb2RlY3NQcm94
eSgpCiB9CiAjZW5kaWYKIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNl
aXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVj
b2RlcikKK3ZvaWQgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6Y3JlYXRlUmVuZGVyaW5nQmFj
a2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKK3sKKyAgICBBU1NFUlQoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Y3JlYXRlKCp0aGlzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7Cit9CisKK3ZvaWQg
R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6cmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQoUmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAg
QVNTRVJUKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KTsKKyAgICBBU1NFUlQobV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHktPnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgPT0g
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5ID0gbnVsbHB0cjsKK30KKworYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpk
aXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXIm
IGRlY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1l
c3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFt
ZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllclByb3h5OjptZXNz
YWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHkoKS5kaWRSZWNlaXZlUGxheWVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGRlY29kZXIu
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVJlc291cmNlTWFu
YWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUmVzb3Vy
Y2VNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3Nh
Z2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkp
IHsKICAgICAgICAgdXNlck1lZGlhQ2FwdHVyZU1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXI6Om1lc3Nh
Z2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBtZWRpYVJlY29yZGVyTWFuYWdlcigpLmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIGlmIChkZWNvZGVyLm1l
c3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlTWVkaWFSZWNvcmRlcjo6bWVz
c2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlk
UmVjZWl2ZVJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBQTEFURk9S
TShDT0NPQSkgJiYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVu
ZGVyZXJNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgYXVkaW9UcmFj
a1JlbmRlcmVyTWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVj
dGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6
UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICBhdWRpb1RyYWNrUmVuZGVyZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVJlbmRl
cmVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFt
ZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgc2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
TWFuYWdlcigpLmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVj
b2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAg
IGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVtb3RlU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAg
c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpLmRpZFJlY2VpdmVMYXllck1lc3NhZ2Uo
Y29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogI2VuZGlmCiAjZW5kaWYKICNpZiBQTEFURk9STShDT0NPQSkgJiYgVVNFKExJ
QldFQlJUQykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OkxpYldlYlJUQ0NvZGVjc1Byb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAg
ICAgbGliV2ViUlRDQ29kZWNzUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNz
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICNlbmRpZgorICAgIHJldHVybiBtZXNzYWdlUmVjZWl2ZXJNYXAoKS5kaXNw
YXRjaE1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7CiB9CiAKLXZvaWQgR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6ZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29u
bmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNv
ZGVyPiYgcmVwbHlFbmNvZGVyKQorYm9vbCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaXNw
YXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVy
JiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQog
ewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAg
ICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVTeW5jTWVzc2Fn
ZUZyb21XZWJQcm9jZXNzKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2Rlcik7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAjaWYgRU5BQkxFKE1F
RElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVz
c2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5hZ2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUo
KSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5
bmNNZXNzYWdlRnJvbUdQVVByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVy
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgUExB
VEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAoZGVjb2Rlci5tZXNz
YWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlM
YXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBzYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nl
c3MoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNlbmRpZgotCi0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNo
U3luY01lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKIH0KIAogY29u
c3QgU3RyaW5nJiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjptZWRpYUNhY2hlRGlyZWN0b3J5
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCmluZGV4IDJiOWJkMWY4ODdiYWRhZmE0ZWE1YzRiYTM0MTY5ZDhiOTc4
ZmQ2MmQuLjQwZmFlYmRmOGUxMjk2MTJlYjczY2Y1OGJhZDQ3Y2IyZTkzMmQ4NDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgK
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mu
aApAQCAtMjgsMTMgKzI4LDE1IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVk
ZSAiQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3NNZXNz
YWdlc1JlcGxpZXMuaCIKLSNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKyNp
bmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJN
ZXNzYWdlUmVjZWl2ZXJNYXAuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
PFdlYkNvcmUvUHJvY2Vzc0lkZW50aWZpZXIuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+
CiAjaW5jbHVkZSA8d3RmL0xvZ2dlci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0j
aW5jbHVkZSA8d3RmL1VuaXF1ZVJlZi5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCkBAIC00OSwxOCArNTEsMjAgQEAgY2xhc3MgVXNlck1lZGlhQ2Fw
dHVyZU1hbmFnZXJQcm94eTsKIAogY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcwogICAg
IDogcHVibGljIFJlZkNvdW50ZWQ8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4KKyAgICAsIHB1
YmxpYyBDYW5NYWtlV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPgogICAgICwgSVBD
OjpDb25uZWN0aW9uOjpDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8R1BVQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKEdQVVByb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRl
bnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBQQUw6OlNlc3Npb25JRCk7CiAg
ICAgdmlydHVhbCB+R1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcygpOwogCiAgICAgSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9jb25uZWN0aW9uLmdldCgpOyB9CisgICAg
SVBDOjpNZXNzYWdlUmVjZWl2ZXJNYXAmIG1lc3NhZ2VSZWNlaXZlck1hcCgpIHsgcmV0dXJuIG1f
bWVzc2FnZVJlY2VpdmVyTWFwOyB9CiAgICAgR1BVUHJvY2VzcyYgZ3B1UHJvY2VzcygpIHsgcmV0
dXJuIG1fZ3B1UHJvY2Vzcy5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVy
IHdlYlByb2Nlc3NJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV93ZWJQcm9jZXNzSWRlbnRp
ZmllcjsgfQogCiAgICAgdm9pZCBjbGVhbnVwRm9yU3VzcGVuc2lvbihGdW5jdGlvbjx2b2lkKCk+
JiYpOwogICAgIHZvaWQgZW5kU3VzcGVuc2lvbigpOwogCi0gICAgV2ViQ29yZTo6UHJvY2Vzc0lk
ZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3dlYlByb2Nl
c3NJZGVudGlmaWVyOyB9CiAgICAgUmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXImIHJlbW90ZU1l
ZGlhUmVzb3VyY2VNYW5hZ2VyKCk7CiAKICAgICBMb2dnZXImIGxvZ2dlcigpOwpAQCAtODUsMTcg
Kzg5LDIzIEBAIHByaXZhdGU6CiAgICAgUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFu
YWdlciYgc2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcigpOwogI2VuZGlmCiAjZW5kaWYK
LQorICAgIHZvaWQgY3JlYXRlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
Zmllcik7CisgICAgdm9pZCByZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcik7CisgICAgICAgIAogICAgIC8vIElQQzo6Q29ubmVjdGlvbjo6Q2xpZW50CiAg
ICAgdm9pZCBkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKSBmaW5hbDsKLSAgICB2b2lkIGRpZFJl
Y2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5j
ZSBtZXNzYWdlUmVjZWl2ZXJOYW1lLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlTmFtZSkg
ZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYp
IGZpbmFsOworICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5n
UmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKKworICAgIGJvb2wgZGlzcGF0Y2hNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOworICAgIGJvb2wgZGlzcGF0Y2hTeW5j
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8
SVBDOjpFbmNvZGVyPiYpOwogCiAgICAgUmVmUHRyPExvZ2dlcj4gbV9sb2dnZXI7CiAKICAgICBS
ZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CiAgICAgUmVmPEdQVVByb2Nlc3M+IG1f
Z3B1UHJvY2VzczsKKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCBtX21lc3NhZ2VSZWNlaXZl
ck1hcDsKICAgICBjb25zdCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciBtX3dlYlByb2Nlc3NJ
ZGVudGlmaWVyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdl
cj4gbV9yZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHk+IG1fcmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJv
eHk7CkBAIC0xMTEsNiArMTIxLDcgQEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShDT0NPQSkgJiYg
VVNFKExJQldFQlJUQykKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGliV2ViUlRDQ29kZWNzUHJveHk+
IG1fbGliV2ViUlRDQ29kZWNzUHJveHk7CiAjZW5kaWYKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgpp
bmRleCAzZDQwYTU3MTJlMDJkMTQ5ZDE0ZjkyZjU2ZTQ0NTM0NmMwMTIyMWQ4Li45MzJjMDEyMmRl
MDgxZWRlOWJiOWVmYjU2ZjliYzUyNTliYTRkNzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5tZXNzYWdl
cy5pbgpAQCAtMjIsNyArMjIsOSBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCi1tZXNz
YWdlcyAtPiBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsKK21lc3NhZ2VzIC0+IEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MgV2FudHNEaXNwYXRjaE1lc3NhZ2UgeworICAgIHZvaWQgQ3JlYXRl
UmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHZvaWQgUmVsZWFzZVJlbmRlcmluZ0JhY2tlbmQo
V2ViS2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1YWxJ
bWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFlYzM3
MGM2YzhkYmNiYjYxYjZhZjg1MTk1NmMyNTc3NDJlNjU0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVDb250ZXh0dWFs
SW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdl
QnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVD
b250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZXh0dWFsSW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7Cisg
ICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkNvbnRleHR1YWxJ
bWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJbWFnZUJ1
ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mm
IGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFn
ZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5
PihzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVt
b3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBl
PiYmIGJhY2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisg
ICAgICAgIDogQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKQorICAg
ICAgICAsIFJlbW90ZUltYWdlQnVmZmVyUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcywg
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmVtb3RlQ3JlYXRlQmFja2Vu
ZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2VuZC0+YmFja2VuZFNpemUoKSwgbV9i
YWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFj
a2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBsb2Nh
bEZsdXNoRHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBtX2JhY2tlbmQtPmZs
dXNoQ29udGV4dCgpOworICAgIH0KKworICAgIHZvaWQgbG9jYWxGbHVzaERyYXdpbmdDb250ZXh0
KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXll
ciByZXBsYXllcihCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3BsYXlM
aXN0KTsKKyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhNGI2NzliZmNhNjU0ODM1
YmE0OWZmMTdlZDM5MGEwNWExNTU0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmNwcApA
QCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1h
Z2VCdWZmZXJQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQor
ICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKQoreworICAgIC8vIFJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNl
aXZlciBpbiB0aGUgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy4KKyAgICBpZiAoYXV0byogZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQo
KSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFw
KCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCks
ICp0aGlzKTsKK30KKworUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6flJlbW90ZUltYWdlQnVmZmVy
UHJveHkoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZl
ci4KKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vz
cy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLnRvVUludDY0KCkpOworfQorCitJUEM6OkNvbm5lY3Rpb24qIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBp
ZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90
ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKwordm9p
ZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVCYWNrZW5kKGNvbnN0IEZsb2F0
U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSBoYW5kbGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNy
ZWF0ZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRsZSkpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9
CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KGNvbnN0IERpc3Bs
YXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBsb2NhbEZsdXNoQ29udGV4dChkaXNwbGF5TGlz
dCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNoSWRlbnRp
ZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK3Zv
aWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
ZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaERyYXdpbmdDb250ZXh0KGRp
c3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlcjo6U2V0Rmx1
c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NF
U1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGM4Zjhm
ZjIzNWViN2MxNTE3MGVmMTgwMTBjMWFmYmI2YTgzNGYzNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaApAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1ZGUg
IkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgor
I2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0
SXRlbXMuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzczsKKworY2xhc3MgUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eQorICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKKyAgICAsIHByaXZh
dGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgeworcHVibGljOgorICAgIFJlbW90ZUltYWdlQnVmZmVy
UHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIEltYWdlQnVmZmVySWRlbnRpZmllcik7
CisgICAgflJlbW90ZUltYWdlQnVmZmVyUHJveHkoKTsKKworcHJvdGVjdGVkOgorICAgIC8vIElQ
Qzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25u
ZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3Rp
bmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVy
CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29k
ZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCByZW1vdGVDcmVhdGVCYWNrZW5kKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgdm9pZCBmbHVzaENvbnRleHQo
Y29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlz
cGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNo
RHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jikg
PSAwOworCisgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3M7CisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZm
ZXJJZGVudGlmaWVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBF
TkFCTEUoR1BVX1BST0NFU1MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5Lm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxZGYzYzI2MDYxOTVkYTI2ZDM5YTY0MWVhMjE4
ZTZmNDgzZTIzNDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0w
LDAgKzEsMzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eSBOb3RSZWZDb3VudGVkIHsKKyAgICB2b2lkIEZsdXNoQ29udGV4dChXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorICAgIHZvaWQgRmx1c2hEcmF3aW5nQ29udGV4dChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktpdDo6SW1h
Z2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1h
Z2VCdWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmNGRlM2M2Y2JhZDcyOTljMDc5ODNlZTc2ZDZk
NmUwNzcwZjUxMmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUGxh
dGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVDb250
ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcg
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlQ29udGV4dHVhbEltYWdlQnVm
ZmVyUHJveHk8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5k
PjsKK3VzaW5nIFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5ID0gUmVt
b3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHk8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVm
ZmVyU2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZhNTBiN2MwOWRkNzYyOWVmNDYzZjBhMWVlNGNl
NTFiMTA2ZjQzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTAsMCAr
MSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisK
KyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlICJS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5PiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZShH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAg
ICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4obmV3
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHk6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyhtYWtlV2Vha1B0cihncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7
CisgICAgaWYgKGF1dG8qIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisgICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mt
Pm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFkZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Ojp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAo
YXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJl
Y2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAg
ICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLT5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0
KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1
ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmlu
Z01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChtX2lt
YWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRv
KiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
LmdldCgpOworICAgIGlmICghZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKwor
ICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVt
b3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1BY2Nl
bGVyYXRlZEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNj
YWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFJlbmRl
cmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUlt
YWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2ltYWdlQnVmZmVyTWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1v
dmUoaW1hZ2VCdWZmZXIpKTsKK30KKwordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVu
dGlmaWVyKQoreworICAgIC8vIENyZWF0ZUltYWdlQnVmZmVyIG1lc3NhZ2Ugc2hvdWxkIGhhdmUg
YmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBvbmUuCisgICAgaWYgKCFtX2ltYWdlQnVmZmVyTWFw
LmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9pbWFnZUJ1ZmZlck1hcC5y
ZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5NTI3Yjg3NWFhMTMyNTU2OWFjMjI2
MzAwZmE2YWQ1OThlOWFlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZm
ZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFn
ZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAg
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdmly
dHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KCk7CisKKyAgICBSZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJ
UEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZv
aWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6
ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3Jl
OjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUlt
YWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRpZmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZl
ck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
Q29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJbWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFw
OworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUy
NmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEsMzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4g
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3Jl
YXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpS
ZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29y
ZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0
OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmgK
aW5kZXggNjg1YTY2OTc4NzE3NmIxMzcxOWNiYjhmZTk5M2NkYzFiY2U3OWNlOC4uNmU2YTIxN2E1
YTIwNWVlMzcwOGYzNDBiYWQ3NDYzOTE2YzJkNmU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3Bs
YXlMYXllci5oCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgog
I2luY2x1ZGUgIlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcklkZW50aWZpZXIuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oPgorI2luY2x1ZGUgPHd0Zi9NZWRp
YVRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW1hZ2VUcmFuc2ZlclNlc3Np
b25WVDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3Rl
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuY3BwCmlu
ZGV4IDRiOWJlNDljYWM3MmY0NGU3MTc5NzdjNGE0NjZlMmUyNzlmMWIxNGUuLmZiMGQyNjUyZTdk
YzcxNWYzY2JlOTBiMDFhNzQxNzMxMjhjZGI1N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJl
bW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJN
YW5hZ2VyOjpSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKFJlZjxJUEM6OkNv
bm5lY3Rpb24+JiYgY29ubmVjdGlvbikKICAgICA6IG1fY29ubmVjdGlvbihXVEZNb3ZlKGNvbm5l
Y3Rpb24pKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1v
dGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuaAppbmRl
eCA5ZjliMzBjNzYxNjIzZGQ5NDhkMjliZTBmMzdmMGFkMGY0N2U1YTlhLi5lMzhjNWQ2YzA1ZDBk
ZmFmNDI2ODE5OTViOWUwNGY0ZTc2NDdmMGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllck1hbmFnZXIuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VS
ZWNlaXZlci5oIgogI2luY2x1ZGUgIlJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFn
ZXJNZXNzYWdlc1JlcGxpZXMuaCIKICNpbmNsdWRlICJTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJJ
ZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JbnRTaXplLmg+CiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIElQQyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weQppbmRleCA3YzVhYzBhY2Y3NDViN2E3MDNjYmVjMDZiZjdiMWFjNjJlYTg0
MmIwLi45OGZmZDFmMDBlMGI2NDhhMGYwOWIwOGNlYTk2MDMyMGNhNTRhYjZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTI3LDYgKzI3LDcgQEAgaW1wb3J0
IHN5cwogZnJvbSB3ZWJraXQgaW1wb3J0IHBhcnNlcgogCiBXQU5UU19DT05ORUNUSU9OX0FUVFJJ
QlVURSA9ICdXYW50c0Nvbm5lY3Rpb24nCitXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVU
RSA9ICdXYW50c0Rpc3BhdGNoTWVzc2FnZScKIExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUgPSAn
TGVnYWN5UmVjZWl2ZXInCiBOT1RfUkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUgPSAnTm90
UmVmQ291bnRlZCcKIFNZTkNIUk9OT1VTX0FUVFJJQlVURSA9ICdTeW5jaHJvbm91cycKQEAgLTIw
NCw2ICsyMDUsOCBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgp
OgogICAgIHJldHVybiBmcm96ZW5zZXQoWwogICAgICAgICAnTWFjaFNlbmRSaWdodCcsCiAgICAg
ICAgICdTdHJpbmcnLAorICAgICAgICAnV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbics
CisgICAgICAgICdXZWJDb3JlOjpDb2xvclNwYWNlJywKICAgICAgICAgJ1dlYkNvcmU6OkRvY3Vt
ZW50SWRlbnRpZmllcicsCiAgICAgICAgICdXZWJDb3JlOjpGZXRjaElkZW50aWZpZXInLAogICAg
ICAgICAnV2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyJywKQEAgLTIxMiw2ICsyMTUsNyBAQCBkZWYg
dHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29y
ZTo6UG9pbnRlcklEJywKICAgICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJywKICAg
ICAgICAgJ1dlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAg
J1dlYkNvcmU6OlJlbmRlcmluZ01vZGUnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtl
cklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZp
ZXInLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0y
MjEsMTIgKzIyNSwxNiBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJl
ZCgpOgogICAgICAgICAnV2ViS2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAogICAgICAgICAn
V2ViS2l0OjpBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlcklkZW50aWZpZXInLAogICAgICAg
ICAnV2ViS2l0OjpDb250ZW50V29ybGRJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1h
Z2VCdWZmZXJCYWNrZW5kSGFuZGxlJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXInLAog
ICAgICAgICAnV2ViS2l0OjpMYXllckhvc3RpbmdDb250ZXh0SUQnLAogICAgICAgICAnV2ViS2l0
OjpNZWRpYVBsYXllclByaXZhdGVSZW1vdGVJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6
TWVkaWFSZWNvcmRlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpSZW1vdGVNZWRpYVJl
c291cmNlSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJZGVudGlmaWVy
JywKICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50aWZpZXInLAorICAgICAgICAnV2Vi
S2l0OjpSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdl
QXJlYUlkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpTdG9yYWdlQXJlYUltcGxJZGVudGlm
aWVyJywKQEAgLTc2OSwxMyArNzc3LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIo
cmVjZWl2ZXIpOgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBw
ZW5kKG1lc3NhZ2UpCiAKLSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNz
YWdlcyBvciByZWNlaXZlci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRU
UklCVVRFKToKICAgICAgICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVz
c2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2Rlcilc
bicgJSAocmVjZWl2ZXIubmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmli
dXRlKExFR0FDWV9SRUNFSVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQu
YXBwZW5kKCd7XG4nKQogICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1Rf
UkVGQ09VTlRFRF9SRUNFSVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAg
ICByZXN1bHQgKz0gW2FzeW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBm
b3IgbWVzc2FnZSBpbiBhc3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0
dHJpYnV0ZShXQU5UU19ESVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVy
KSlcbicpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAg
ICAgICAgIGlmIChyZWNlaXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyAgICAlczo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUg
KHJlY2VpdmVyLnN1cGVyY2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzg0LDEzICs3OTUsMTYg
QEAgZGVmIGdlbmVyYXRlX21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCcgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1
bHQuYXBwZW5kKCd9XG4nKQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21l
c3NhZ2VzIG9yIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9B
VFRSSUJVVEUpOgogICAgICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5h
cHBlbmQoJ3ZvaWQgJXM6OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYg
Y29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpF
bmNvZGVyPiYgcmVwbHlFbmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1l
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxz
ZSAnJykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNl
aXZlci5oYXNfYXR0cmlidXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyk7XG4nKQogICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQo
cmVjZWl2ZXIsIG1lc3NhZ2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAg
IGlmIHJlY2VpdmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJV
VEUpOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCcgICAgVU5VU0VEX1BBUkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICAgIFVOVVNFRF9QQVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQo
JyAgICBVTlVTRURfUEFSQU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCmluZGV4IDdiZjcxYzE3YWJkZDNkOGIxMzE5MDIy
MDA1OGM5ZjljMjE5ZjYwYjMuLmQ5OTNjMjczYTMzZGZhYjk5ZjQ2NGEwYjI3YzJjY2ZlNTkwMjEw
YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVy
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBA
IC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJz
LmgiCisjaW5jbHVkZSA8V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9BdXRvcGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtMzYs
NiArMzcsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9Ob3RpZmljYXRpb25EaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1JlYWx0aW1lTWVkaWFTb3VyY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU2VydmljZVdvcmtlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yZWRD
cmVkZW50aWFsc1BvbGljeS5oPgpAQCAtODIzLDYgKzgyNSwxNCBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBu
YW1lc3BhY2UgV1RGIHsKIAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwK
KyAgICBXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4g
c3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVl
cyA9IEVudW1WYWx1ZXM8CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKQEAgLTgzMiw2ICs4NDIs
MTggQEAgdGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xvclNwYWNlPiB7
CiAgICAgPjsKIH07CiAKK3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVu
ZGVyaW5nTW9kZT4geworICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29y
ZTo6UmVuZGVyaW5nTW9kZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRl
ZCwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNv
cmU6OlJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6
UmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6
UmVtb3RlQWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisg
ICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXV0b3Bs
YXlFdmVudD4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgICAgIFdlYkNv
cmU6OkF1dG9wbGF5RXZlbnQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCA1MzEwOTIwM2NhMjJjYjVmNWRiOTM1
MWY5YzIzNmUwNTNhYjFlMDA5Li4yNGExNzJiYTYxMjJhNzJjMjQ5ZjI0NjY0NzU0MmQ0YzM3ZDEx
MGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9X
ZWJLaXQvU291cmNlcy50eHQKQEAgLTM3LDYgKzM3LDggQEAgR1BVUHJvY2Vzcy9tZWRpYS9SZW1v
dGVNZWRpYVJlc291cmNlLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNl
TG9hZGVyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlci5j
cHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVmlkZW9UcmFja1Byb3h5LmNwcAorR1BVUHJvY2Vz
cy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwCitHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAogCiBOZXR3
b3JrUHJvY2Vzcy9BZENsaWNrQXR0cmlidXRpb25NYW5hZ2VyLmNwcAogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0FjdGl2aXR5VHJhY2tlci5jcHAKQEAgLTUzNyw2ICs1MzksOSBAQCBXZWJQcm9jZXNz
L0dQVS9tZWRpYS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIuY3BwCiBXZWJQcm9jZXNzL0dQVS9t
ZWRpYS9SZW1vdGVNZWRpYVBsYXllck1JTUVUeXBlQ2FjaGUuY3BwIEBuby11bmlmeQogV2ViUHJv
Y2Vzcy9HUFUvbWVkaWEvUmVtb3RlTWVkaWFSZXNvdXJjZVByb3h5LmNwcAogV2ViUHJvY2Vzcy9H
UFUvbWVkaWEvVmlkZW9UcmFja1ByaXZhdGVSZW1vdGUuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKK1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCitXZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQ
cm9jZXNzL0dQVS93ZWJydGMvTGliV2ViUlRDQ29kZWNzLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2Vi
cnRjL01lZGlhUmVjb3JkZXJQcml2YXRlLmNwcAogV2ViUHJvY2Vzcy9HUFUvd2VicnRjL01lZGlh
UmVjb3JkZXJQcm92aWRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0Nv
Y29hLnR4dCBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dAppbmRleCBlYWEwZDg0ZmE1
Y2ZhNzQwZDI3Yjc4YjkwN2VjOTU2OTkzMWNiMGRjLi5lNGRlNmRiMDU2ZWMzY2YxMDhiMmY5MWIx
OGU1NWRhNTlkYzUwYzI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50
eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0CkBAIC01NTMsNiArNTUzLDgg
QEAgV2ViUHJvY2Vzcy9jb2NvYS9XZWJQcm9jZXNzQ29jb2EubW0KIAogV2ViUHJvY2Vzcy9FbnRy
eVBvaW50L0NvY29hL1hQQ1NlcnZpY2UvV2ViQ29udGVudFNlcnZpY2VFbnRyeVBvaW50Lm1tCiAK
K1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJ
T1N1cmZhY2VCYWNrZW5kLmNwcAorCiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZUJhbm5lci5jcHAKIAogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9t
YWMvV0tCdW5kbGVNYWMubW0KQEAgLTYzOCwxNCArNjQwLDE4IEBAIFdlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlU2Nyb2xsaW5nQ29vcmRpbmF0b3IubW0KIC8vIERlcml2
ZWQgU291cmNlcwogRWRpdGFibGVJbWFnZUNvbnRyb2xsZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAorR1BVUHJvY2Vzc0Nv
bm5lY3Rpb25NZXNzYWdlUmVjZWl2ZXIuY3BwCiBHUFVQcm9jZXNzUHJveHlNZXNzYWdlUmVjZWl2
ZXIuY3BwCiBHUFVQcm9jZXNzTWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiBMaWJXZWJSVENDb2RlY3NNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCiBSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1lc3NhZ2VSZWNlaXZl
ci5jcHAKK1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZVJlY2VpdmVyLmNwcAorUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVjb3JkZXJNZXNzYWdl
UmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlck1lc3NhZ2VSZWNlaXZlci5j
cHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90
ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1v
dGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBTYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiZTY0MjIwNDc3NWUyNTU1Y2NiYTVm
ZGU5ZjhlNGFlODM1NWVkZGQ1Li40ODhkZDhjM2ZhYWZjNjhmYjg5ODkwOTBjMzI1OTYwNWZhM2M0
NDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKQEAgLTQwMzgsOCArNDAzOCwzMiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUgLyog
V0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9zL1dL
VG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNv
Z25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tUb3Vj
aEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0
dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgxMEEy
MjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9s
aWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0ZWRN
b3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyNTA2RDM5MjNFOUY4OEIwMDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjUwNkQzQTIzRTlGODhDMDAxRTZFMEQgLyogUmVtb3RlSW1h
Z2VCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3Rl
SW1hZ2VCdWZmZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjUwNkQzQjIz
RTlGODhDMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDNDMjNFOUY4QjkwMDFFNkUwRCAvKiBSZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZEM0Qy
M0U5RjhCOTAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZEM0UyM0U5RjhCOTAwMUU2RTBEIC8q
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTcyNTA2RDQwMjNFQTIxMkUwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI1MDZENDEyM0VBMjEyRjAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI1MDZENDMyM0VBMjFBODAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzI1MDZENDQyM0VBMjFBOTAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MjUwNkQ0NTIzRUEyMUQyMDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjUwNkQ0ODIz
RUEyMkI3MDAxRTZFMEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJl
YWJsZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1OUUyM0U4
RkYwNzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjU2NDU5RjIzRThGRjA3MDBBMDYz
MkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjU2NDVBMDIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzI1NjQ1QTEyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NUEyMjNF
OEZGMTUwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1QTMyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NTY0NUE0MjNFOTA3RDEwMEEwNjMyRCAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJD
b2xvclBpY2tlck1hYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xv
clBpY2tlck1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUx
ODhDMDA4Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MTcyM0VBNDVEMjAwQjJCMUNFIC8qIFJlbW90ZUNvbnRleHR1
YWxJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVD
b250ZXh0dWFsSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5
QzQ1MTgyM0VBNDVEMzAwQjJCMUNFIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjlDNDUxOTIzRUE0NjExMDBCMkIxQ0Ug
LyogUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MUEyM0VBNDYxMTAwQjJCMUNFIC8qIFJlbW90
ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzI5QzQ1MUQyM0VBNEUwNDAwQjJCMUNFIC8qIEltYWdlQnVmZmVyRmx1c2hJ
ZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0
MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc1QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3Rv
cmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVE
YXRhU3RvcmUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFD
MDEwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjQ4Miw2ICs2NTA2LDcgQEAKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1l
ZGlhICovLAorCQkJCTcyNTY0NTlDMjNFOEZFNUMwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5k
ICovLAogCQkJCTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3
RTQzQzAyMzc1MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJ
CQkyRDdFNDNDMzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywK
QEAgLTY0OTgsNiArNjUyMyw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlv
cyAqLywKIAkJCQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1
QzE3MjM5OUEzREIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjU2NDU5RDIzRThGRTg3MDBB
MDYzMkQgLyogUmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2
ODYgLyogd2VicnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYg
LyogR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzg5OSw2ICs3OTI1LDUyIEBA
CiAJCQluYW1lID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzI1
MDZENDIyM0VBMjE2MDAwMUU2RTBEIC8qIGNnICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MjUwNkQ0NDIzRUEyMUE5MDAxRTZFMEQgLyogSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjUwNkQ0MzIzRUEyMUE4
MDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggKi8sCisJ
CQkpOworCQkJcGF0aCA9IGNnOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJ
NzI1NjQ1OUMyM0U4RkU1QzAwQTA2MzJEIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyNTA2RDQyMjNFQTIxNjAwMDFF
NkUwRCAvKiBjZyAqLywKKwkJCQk3MjUwNkQ0NTIzRUEyMUQyMDAxRTZFMEQgLyogSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlLmggKi8sCisJCQkJNzI5QzQ1MUQyM0VBNEUwNDAwQjJCMUNFIC8qIElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzI1NjQ1QTQyM0U5MDdEMTAwQTA2
MzJEIC8qIEltYWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyNTA2RDQwMjNFQTIxMkUw
MDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJ
CTcyNTA2RDQxMjNFQTIxMkYwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQuaCAqLywKKwkJCQk3MjUwNkQ0ODIzRUEyMkI3MDAxRTZFMEQgLyogUGxhdGZvcm1JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLywKKwkJCQk3MjlDNDUxNzIzRUE0NUQyMDBCMkIx
Q0UgLyogUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmggKi8sCisJCQkJNzI1MDZEM0EyM0U5
Rjg4QzAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyLmNwcCAqLywKKwkJCQk3MjUwNkQzOTIz
RTlGODhCMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjUwNkQzQjIz
RTlGODhDMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIubWVzc2FnZXMuaW4gKi8sCisJCQkJ
NzI5QzQ1MTgyM0VBNDVEMzAwQjJCMUNFIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAq
LywKKwkJCQk3MjU2NDVBMzIzRThGRjE1MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAgKi8sCisJCQkJNzI1NjQ1QTIyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuaCAqLywKKwkJCQk3MjU2NDVBMTIzRThGRjE1MDBBMDYzMkQgLyogUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gUmVuZGVyaW5nQmFja2Vu
ZDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTcyNTY0NTlEMjNFOEZFODcw
MEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQk3MjlDNDUxOTIzRUE0NjExMDBCMkIxQ0UgLyogUmVtb3RlQ29u
dGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjUwNkQzRTIzRTlGOEI5MDAxRTZF
MEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAgKi8sCisJCQkJNzI1MDZEM0MyM0U5RjhC
OTAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjUwNkQzRDIz
RTlGOEI5MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiAqLywK
KwkJCQk3MjlDNDUxQTIzRUE0NjExMDBCMkIxQ0UgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
clByb3h5LmggKi8sCisJCQkJNzI1NjQ1OUUyM0U4RkYwNzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCisJCQkJNzI1NjQ1OUYyM0U4RkYwNzAwQTA2MzJEIC8q
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovLAorCQkJCTcyNTY0NUEwMjNFOEZGMDcw
MEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gKi8sCisJ
CQkpOworCQkJcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOworCQl9OwogCQk3QTg0M0ExRDIxRTQxRkQ5MDBERUY2NjMgLyogQ2xhc3NpZmllciAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDhk
ZmY1MGYzMDg4ZWQ0NWM1OTBlYzgxZTJjMDlhMTM4YmE3YTUzNWYuLjBmOWM3YWNlZjRlMGVkODcz
YzRiZTA4OTYxOGE2ZGYwNDE3ODcwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MiwxMCArNjIsNiBAQCB2
b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewog
fQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJl
bmNlKQotewotfQotCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURFT19UUkFDSykg
JiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIFNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIm
IEdQVVByb2Nlc3NDb25uZWN0aW9uOjpzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkK
IHsKQEAgLTc1LDM0ICs3MSw0NCBAQCBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyJiBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTQogfQogI2VuZGlm
CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxl
bWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVQbGF5ZXJNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIu
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBjYXB0dXJlTWFu
YWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJM
RShWSURFT19UUkFDSykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoKS5kaWRSZWNlaXZl
TGF5ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkgJiYgRU5B
QkxFKFZJREVPX1RSQUNLKQogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaWYgVVNF
KExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5saWJXZWJSVENDb2Rl
Y3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVz
c2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwog
fQogCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdl
UmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJl
cGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UpCit7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggNDYwMGU1M2JiMjg0ZDc0OGNm
MzkxMWI5NGRiNTU5OWE5Y2I0NWYyNy4uN2I2Zjg4MjIyYzMzNzM2YjhjNDI3ZGI0Y2JkZTFjMDQ1
NDg4NmM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJN
YXAuaCIKICNpbmNsdWRlICJTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTQ3LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwog
ICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVj
dGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2
ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiAjaWYgSEFWRShBVURJ
VF9UT0tFTikKICAgICB2b2lkIHNldEF1ZGl0VG9rZW4oT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4g
YXVkaXRUb2tlbikgeyBtX2F1ZGl0VG9rZW4gPSBhdWRpdFRva2VuOyB9CkBAIC02MiwxMCArNjQs
MTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQg
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVy
cmlkZTsKKyAgICAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKIAog
ICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJv
Y2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAKICNpZiBIQVZFKEFVRElU
X1RPS0VOKQogICAgIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IG1fYXVkaXRUb2tlbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRj
ZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdl
cyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE1OTYzMDY5ZjY2MTgxODNkMDc4YTY0YzJkZWFjYzJkODNhNGNkZTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKyNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlID0gVmFyaWFudDwKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBNYWNoU2VuZFJp
Z2h0LAorI2VuZGlmCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUKKz47CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDJj
ZjI0NWUzNDVlMWRmZWM2MmRjMWQ3YTNlY2FlZmNkOWFiNWQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElk
ZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyID0g
T2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTFiYzlhZTg3
ZGM4ZDcyNDI4YTBiODA5Y2FkMGQ4MGE0Y2QxY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRp
Zmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUg
eyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFn
ZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwYzczOTJm
MTNiOGMyOTUwNGNiYWU4ZTg5Y2Y0OWE1NmExNzJkYWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VEYXRhLmg+CisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAg
SW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRp
b25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbjsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBjb25maWd1cmF0aW9uLmNvbG9yU3BhY2Ug
PSB7IGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSB9OworI2VuZGlmCisgICAgYXV0byBi
aXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNrZW5kU2l6ZSwgY29u
ZmlndXJhdGlvbik7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+KG5ldyBJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShiaXRtYXApLCBXVEZNb3ZlKGNvbnRleHQpKSk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
IGhhbmRsZSkKK3sKKyAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U2hhcmVhYmxlQml0
bWFwOjpIYW5kbGU+KGhhbmRsZSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShXVEY6OmdldDxTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZT4oaGFuZGxlKSkpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPihuZXcgSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGJpdG1hcCksIFdURk1vdmUoY29u
dGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBiaXRtYXAsIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IFBsYXRmb3JtSW1h
Z2VCdWZmZXJCYWNrZW5kKGxvZ2ljYWxTaXplLCBwaHlzaWNhbFNpemUsIHJlc29sdXRpb25TY2Fs
ZSwgY29sb3JTcGFjZSkKKyAgICAsIG1fYml0bWFwKFdURk1vdmUoYml0bWFwKSkKKyAgICAsIG1f
Y29udGV4dChXVEZNb3ZlKGNvbnRleHQpKQoreworfQorCitJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUgSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUoKSBjb25zdAoreworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRs
ZTsKKyAgICBtX2JpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisgICAgcmV0dXJuIEltYWdl
QnVmZmVyQmFja2VuZEhhbmRsZShXVEZNb3ZlKGhhbmRsZSkpOworfQorCitOYXRpdmVJbWFnZVB0
ciBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNvcHlOYXRpdmVJbWFnZShCYWNr
aW5nU3RvcmVDb3B5KSBjb25zdAoreworI2lmIFVTRShDRykKKyAgICByZXR1cm4gbV9iaXRtYXAt
Pm1ha2VDR0ltYWdlQ29weSgpOworI2VsaWYgVVNFKERJUkVDVDJEKQorICAgIHJldHVybiBudWxs
cHRyOworI2VsaWYgVVNFKENBSVJPKQorICAgIHJldHVybiBtX2JpdG1hcC0+Y3JlYXRlQ2Fpcm9T
dXJmYWNlKCk7CisjZW5kaWYKK30KKworUmVmUHRyPEltYWdlPiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQ6OmNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5LCBQcmVzZXJ2ZVJlc29s
dXRpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYml0bWFwLT5jcmVhdGVJbWFnZSgpOworfQor
CitWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjp0b0JH
UkFEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjp0b0JHUkFE
YXRhKG1fYml0bWFwLT5kYXRhKCkpOworfQorCitSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZl
clNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0
aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kOjpnZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNS
ZWN0LCBtX2JpdG1hcC0+ZGF0YSgpKTsKK30KKwordm9pZCBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OnB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9y
bWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnB1
dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQsIG1f
Yml0bWFwLT5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8v
IEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTEzNzM5ZjhjNTE5OWQ5
OGQzNTE2ZTViMjI2N2ExYzAxNDkwNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZC5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmg+CisjaW5jbHVkZSA8d3RmL0lzb01h
bGxvYy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgU2hhcmVhYmxlQml0bWFwOwor
CitjbGFzcyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQgOiBwdWJsaWMgV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0lTT19BTExPQ0FU
RUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOworcHVibGljOgorICAg
IHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
PiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxv
YXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpI
b3N0V2luZG93Kik7CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9n
aWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSgpIGNvbnN0OworCisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fY29udGV4dDsgfQorCisgICAgV2ViQ29y
ZTo6TmF0aXZlSW1hZ2VQdHIgY29weU5hdGl2ZUltYWdlKFdlYkNvcmU6OkJhY2tpbmdTdG9yZUNv
cHkgPSBXZWJDb3JlOjpDb3B5QmFja2luZ1N0b3JlKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQ
dHI8V2ViQ29yZTo6SW1hZ2U+IGNvcHlJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0g
V2ViQ29yZTo6Q29weUJhY2tpbmdTdG9yZSwgV2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uID0g
V2ViQ29yZTo6UHJlc2VydmVSZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBW
ZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91
dHB1dEZvcm1hdCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRG
b3JtYXQsIGNvbnN0IFdlYkNvcmU6OkltYWdlRGF0YSYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3Qm
IHNyY1JlY3QsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkZXN0UG9pbnQpIG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBw
aHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwg
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dD4mJik7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIENvbG9yRm9y
bWF0IGJhY2tlbmRDb2xvckZvcm1hdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENvbG9yRm9y
bWF0OjpCR1JBOyB9CisjZW5kaWYKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IG1fYml0
bWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ+IG1fY29u
dGV4dDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzIzYjBkMzdmYjBjYTdhN2E3NmZl
ZDRlOWNkZDkwMjYyZGYxZjY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIgorCisjaWYg
SEFWRShJT1NVUkZBQ0UpCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kLmgiCisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFBsYXRmb3Jt
VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCA9IEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZDsKKworI2lmIEhBVkUoSU9TVVJGQUNFKQordXNpbmcgUGxhdGZv
cm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZCA9IEltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZDsKKyNlbHNlCit1c2luZyBQbGF0Zm9ybUFjY2VsZXJhdGVk
SW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kID0gUGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXJTaGFyZWFibGVCYWNrZW5kOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1YWxJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlZTlhYmM4MzE3MzllMWYx
ZGQzZjFmYmZhNTAzODUyNzc5MGUyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVm
ZmVyLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKwor
I2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5
TGlzdEltYWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlciA6IHB1
YmxpYyBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUlt
YWdlQnVmZmVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciA9IERpc3Bs
YXlMaXN0SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlz
dEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJp
bmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcikKKyAgICB7CisgICAgICAgIGlmIChCYWNrZW5kVHlwZTo6Y2FsY3VsYXRlQmFja2Vu
ZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKS5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PihuZXcgUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBSZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKKyAgICAgICAgOiBCYXNlRGlzcGxh
eUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyKHNpemUs
IHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgY3JlYXRlQmFja2VuZChj
b25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBiYWNrZW5kU2l6ZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSBoYW5kbGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoIW1f
YmFja2VuZCk7CisgICAgICAgIG1fYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUobG9naWNh
bFNpemUsIGJhY2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUo
aGFuZGxlKSk7CisgICAgfQorCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5z
dXJlQmFja2VuZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2Vu
ZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyJj4o
KnRoaXMpLmVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgICAgIHJldHVybiBtX2JhY2tlbmQu
Z2V0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6
OmRpc3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENv
bnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0K
KworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvJiBkaXNwbGF5TGlzdCA9IERpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6ZGlzcGxh
eUxpc3QoKTsKKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoRHJhd2luZ0Nv
bnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOworICAgIH0K
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODAz
ZDRkZDNiYzYwZWVkYzg1YTUwNDY3NDFiOTdjZDdiYTNkYjkwMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFn
ZUJ1ZmZlci5jcHAKQEAgLTAsMCArMSwxMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90
ZUltYWdlQnVmZmVyLmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJH
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNz
Q29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyOjpSZW1vdGVJ
bWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIFJlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIDog
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcihyZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikK
K3sKKyAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBNZXNzYWdlUmVjZWl2ZXIgaW4gdGhlIEdQ
VVByb2Nlc3NDb25uZWN0aW9uLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdl
UmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29u
bmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VSZWNlaXZlck1hcC5h
ZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlUmVj
ZWl2ZXJOYW1lKCksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLnRvVUludDY0KCksICp0aGlzKTsK
KworICAgIC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1l
c3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OkNyZWF0ZUltYWdlQnVmZmVyKHNp
emUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9pbWFnZUJ1
ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKworUmVt
b3RlSW1hZ2VCdWZmZXI6On5SZW1vdGVJbWFnZUJ1ZmZlcigpCit7CisgICAgLy8gVW4tcmVnaXN0
ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVyLgorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVy
TWFwJiBtZXNzYWdlUmVjZWl2ZXJNYXAgPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVH
UFVQcm9jZXNzQ29ubmVjdGlvbigpLm1lc3NhZ2VSZWNlaXZlck1hcCgpOworICAgIG1lc3NhZ2VS
ZWNlaXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIoKnRoaXMpOworCisgICAgLy8gUmVsZWFz
ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRl
bnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworfQorCitJUEM6OkNvbm5l
Y3Rpb24qIFJlbW90ZUltYWdlQnVmZmVyOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0
Cit7CisgICAgcmV0dXJuICZXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNz
Q29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlSW1hZ2VCdWZm
ZXI6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1
ZmZlcjo6d2FpdENyZWF0ZUJhY2tlbmQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNv
bm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVj
dGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERp
c3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVCYWNr
ZW5kPihtX2ltYWdlQnVmZmVySWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246Oklu
dGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jvb2wgUmVtb3RlSW1h
Z2VCdWZmZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQoreworICAgIFJlZjxJUEM6OkNvbm5l
Y3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9j
ZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2Fp
dEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyOjpT
ZXRGbHVzaElkZW50aWZpZXI+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2Fp
dEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwor
dm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlVXBkYXRlZEJhY2tlbmQoKQoreworICAgIGNv
bnN0ZXhwciBjb25zdCB1bnNpZ25lZCBNYXhXYWl0c0NvdW50ID0gMzsKKyAgICBmb3IgKHVuc2ln
bmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyAhaXNCYWNrZW5kQ3JlYXRlZCgpICYmIHdh
aXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0Q3JlYXRlQmFja2VuZCgpOworCisgICAgZm9yICh1
bnNpZ25lZCB3YWl0c0NvdW50ID0gTWF4V2FpdHNDb3VudDsgaXNQZW5kaW5nRmx1c2goKSAmJiB3
YWl0c0NvdW50LS07ICkKKyAgICAgICAgd2FpdFNldEZsdXNoSWRlbnRpZmllcigpOworfQorCit2
b2lkIFJlbW90ZUltYWdlQnVmZmVyOjpzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50
aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnJl
bW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qm
IGRpc3BsYXlMaXN0KQoreworICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyOjpnZW5lcmF0ZSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUlt
YWdlQnVmZmVyUHJveHk6OkZsdXNoQ29udGV4dChkaXNwbGF5TGlzdCwgbV9zZW50Rmx1c2hJZGVu
dGlmaWVyKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIGVuc3VyZVVwZGF0ZWRCYWNr
ZW5kKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXI6OnJlbW90ZUZsdXNoRHJhd2luZ0Nv
bnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlz
dCkKK3sKKyAgICBtX3NlbnRGbHVzaElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
Zmllcjo6Z2VuZXJhdGUoKTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5OjpGbHVzaERyYXdpbmdDb250ZXh0KGRpc3BsYXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZp
ZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyNTIw
MDhjNmYxZDRmZjhkZmI3Y2U5ODUwNTk4ZjdlZmU4NTExZTgKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXIuaApAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIu
aCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVy
LmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0Rpc3BsYXlMaXN0SXRlbXMuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFJlbW90ZUltYWdlQnVmZmVyCisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAg
ICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgflJlbW90ZUlt
YWdlQnVmZmVyKCk7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBX
ZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1l
c3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVz
c2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6
TWVzc2FnZVJlY2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgLy8gQmxvY2tlcnMK
KyAgICBib29sIHdhaXRDcmVhdGVCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0U2V0Rmx1c2hJZGVu
dGlmaWVyKCk7CisKKyAgICB2b2lkIGVuc3VyZVVwZGF0ZWRCYWNrZW5kKCk7CisgICAgYm9vbCBp
c1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRpZmllciAhPSBt
X3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgY3JlYXRlQmFj
a2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6
Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7CisKKyAgICB2b2lkIHNldEZsdXNoSWRl
bnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisgICAgICAgIAorICAgIHZvaWQg
cmVtb3RlRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlz
dCYpOworICAgIHZvaWQgcmVtb3RlRmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlm
aWVyIG1fc2VudEZsdXNoSWRlbnRpZmllcjsKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ciBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBt
X2ltYWdlQnVmZmVySWRlbnRpZmllciB7IEltYWdlQnVmZmVySWRlbnRpZmllcjo6Z2VuZXJhdGUo
KSB9OworICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5t
ZXNzYWdlcy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MTBiZWRkNDkyNDQzODQ0NzE3YTEyNjA4Y2IxYWNiMzAy
MWI0YmRiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEs
MzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlSW1hZ2VCdWZmZXIgTm90UmVmQ291
bnRlZCB7CisgICAgdm9pZCBDcmVhdGVCYWNrZW5kKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dpY2Fs
U2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRGbHVzaElkZW50aWZpZXIoV2ViS2l0OjpJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3Jt
SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43OTUyNGJiYzBiNjIxNjdkOTQ4NzcyNGFiYmI0ZDkw
ZGQzZmNlZDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUGxhdGZv
cm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVDb250ZXh0
dWFsSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIgPSBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1V
bmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKK3VzaW5nIFJlbW90ZVBs
YXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjxQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kPjsKKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjRh
ZTVmZGQ3NjEyZGNkODQzZTg2ZWUwZjgxY2ZmZDM0YTJiZWY1YQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLmNwcApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKworI2lmIEVO
QUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIu
aCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6
Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ+KG5ldyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkpOworfQorCitSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCkKK3sKKyAgICAvLyBDcmVhdGUgdGhl
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzOjpDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFj
a2VuZElkZW50aWZpZXIpLCAwKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS4KKyAgICBzZW5kKE1lc3NhZ2VzOjpHUFVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
KSwgMCk7Cit9CisKK0lQQzo6Q29ubmVjdGlvbiogUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAoreworICAgIHJldHVybiAmV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cit9
CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5h
dGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci50b1VJbnQ2NCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChy
ZW5kZXJpbmdNb2RlKSB7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRl
ZDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9y
U3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBGQUxMVEhST1VH
SDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1
ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
cjo6Y3JlYXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworCisgICAg
ZGVmYXVsdDoKKyAgICAgICAgaW1hZ2VCdWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJ
bWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3Bh
Y2UsIGhvc3RXaW5kb3cpOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NmJl
OWRjYmQ2MGYzOTU4NzdmNDhlNTE3MTg1MDlkOWQxZjQ0YzA1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NF
U1MpCisKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2Vu
ZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIKKyNpbmNsdWRl
IDxXZWJDb3JlL1JlbmRlcmluZ0JhY2tlbmQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQKKyAgICA6IHB1YmxpYyBXZWJDb3JlOjpSZW5kZXJp
bmdCYWNrZW5kCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0
ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGUoKTsKKworICAgIH5SZW1vdGVSZW5kZXJpbmdC
YWNrZW5kKCk7CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBDOjpDb25uZWN0
aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOworICAgIHVpbnQ2
NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAv
LyBSZW5kZXJpbmdCYWNrZW5kCisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVm
ZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3Bh
Y2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5kb3cqKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKCk7CisgICAgUmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciB7IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyOjpnZW5lcmF0ZSgpIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDIzNTQ3MGNjZmU3Yjc5YmI5MjQ1NzhhZmI0
MTcwMzVjOTEzZGQwMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitlbnVtIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyVHlwZSB7IH07Cit1
c2luZyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciA9IE9iamVjdElkZW50aWZpZXI8UmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE1YmQ3MjhlYjM4ZGVkNWQ0OWNhN2UwNzJmYWUyNTI4ZjUzZjk1YjAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQv
Y2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMCwwICsxLDgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNT
KQorI2lmIEhBVkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMu
aD4KKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZCk7CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCit7CisgICAgSW50U2l6ZSBiYWNr
ZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSk7Cisg
ICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZShiYWNrZW5kU2l6ZSwgYmFja2Vu
ZFNpemUsIGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSk7CisgICAgaWYgKCFzdXJmYWNl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+
IGNnQ29udGV4dCA9IHN1cmZhY2UtPmVuc3VyZVBsYXRmb3JtQ29udGV4dChob3N0V2luZG93KTsK
KyAgICBpZiAoIWNnQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDR0Nv
bnRleHRDbGVhclJlY3QoY2dDb250ZXh0LmdldCgpLCBGbG9hdFJlY3QoRmxvYXRQb2ludDo6emVy
bygpLCBiYWNrZW5kU2l6ZSkpOworCisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlP
U3VyZmFjZUJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgV1RGTW92ZShzdXJmYWNlKSkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRT
aXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICBhdXRvIHN1cmZhY2UgPSBJT1N1cmZhY2U6OmNyZWF0ZUZyb21TZW5kUmlnaHQoV1RGTW92ZShX
VEY6OmdldDxNYWNoU2VuZFJpZ2h0PihoYW5kbGUpKSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9y
U3BhY2UpKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQ+KG5ldyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQobG9naWNhbFNp
emUsIGludGVybmFsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1
cmZhY2UpKSk7Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBJbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZShtX3N1cmZhY2UtPmNy
ZWF0ZVNlbmRSaWdodCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBIQVZFKElPU1VSRkFDRSkKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWUzNzExYTcxNzIzZTAxMDJiNzE5OTNlYTAwNjNhMDgw
MGNmMmVmOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorI2lmIEhB
VkUoSU9TVVJGQUNFKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCisj
aW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaD4KKyNpbmNsdWRl
IDx3dGYvSXNvTWFsbG9jLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWFi
bGVCaXRtYXA7CisKK2NsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCA6
IHB1YmxpYyBXZWJDb3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQgeworICAgIFdURl9N
QUtFX0lTT19BTExPQ0FURUQoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kKTsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQpOworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJT
aGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7CisKKyAgICBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4gY3JlYXRlKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNp
emUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNw
YWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlIGNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpIGNvbnN0OworCitwcml2YXRl
OgorICAgIHVzaW5nIFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBIQVZFKElPU1VSRkFDRSkKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9TYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS93ZWJydGMv
U2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcAppbmRleCBhZTAxNjFhYWQ5NDc0ZDZiMGYxZjkw
MGIwNTQ0ZjU5ODBkMzY5OGZmLi5iOWY0ZDJhN2UzMjdlYmUzMjBkNTdlNzU4YmFiMDNlNTdhNmFk
NjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9TYW1w
bGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvd2VicnRjL1NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllci5jcHAKQEAgLTI4LDEyICsyOCwxNSBA
QAogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShHUFVfUFJPQ0VTUykgJiYgRU5BQkxF
KFZJREVPX1RSQUNLKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCisjaW5jbHVkZSAiR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uaCIKICNpbmNsdWRlICJMYXllckhvc3RpbmdDb250ZXh0LmgiCiAjaW5j
bHVkZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3NhZ2VzUmVw
bGllcy5oIgogI2luY2x1ZGUgIlJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1lc3NhZ2Vz
LmgiCiAjaW5jbHVkZSAiU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlci5oIgogI2luY2x1
ZGUgIldlYkNvcmVBcmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL1JlbW90ZVZpZGVvU2FtcGxlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCmluZGV4IDhlNGM5Mzc1ZDdiOGNjMTBmZmEw
MDgwM2Q0ODIxNzNiZTVhMzU1OGEuLjdkN2I4ODZkNjg2NDM1ZDJiZDFhMTE0NGM2NTQ2MDZhNzQz
ODAzZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9XZWJDaHJvbWVDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCkBAIC05MCw2ICs5MCwxMCBAQAogI2luY2x1
ZGUgIlZpZGVvRnVsbHNjcmVlbk1hbmFnZXIuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaCIKKyNlbmRpZgorCiAj
aWYgRU5BQkxFKEFTWU5DX1NDUk9MTElORykKICNpbmNsdWRlICJSZW1vdGVTY3JvbGxpbmdDb29y
ZGluYXRvci5oIgogI2VuZGlmCkBAIC04OTEsNiArODk1LDE1IEBAIFJlZlB0cjxEaXNwbGF5UmVm
cmVzaE1vbml0b3I+IFdlYkNocm9tZUNsaWVudDo6Y3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9y
KFBsYXRmCiAKICNlbmRpZgogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gV2Vi
Q2hyb21lQ2xpZW50OjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkgY29uc3QKK3sKKyNpZiBFTkFC
TEUoR1BVX1BST0NFU1MpCisgICAgcmV0dXJuIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0
ZSgpOworI2Vsc2UKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlKCk7CisjZW5k
aWYKK30KKwogdm9pZCBXZWJDaHJvbWVDbGllbnQ6OmF0dGFjaFJvb3RHcmFwaGljc0xheWVyKEZy
YW1lJiwgR3JhcGhpY3NMYXllciogbGF5ZXIpCiB7CiAgICAgaWYgKGxheWVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNs
aWVudC5oCmluZGV4IGE4YTRjY2FjNTdkODA4YWFhNTVkOGQ3OTUxYmM1YzU0MWM2MGYyYWQuLjU2
Nzg3ZTAxNzAwZWJiZWU5ZGMzN2UzYWI4NDU4NjY0ODVmNmQ2ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmgKQEAgLTIzMyw2ICsyMzMsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpQ
bGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgZmluYWw7CiAjZW5kaWYKIAorICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpSZW5kZXJpbmdCYWNrZW5kPiBjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKCkg
Y29uc3QgZmluYWw7CisKICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9z
aXRpbmdUcmlnZ2VycygpIGNvbnN0IGZpbmFsCiAgICAgewogICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3M+KApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCmluZGV4IDlmYmIxZmRmMGQ4Mjc4ODQ2NjVjZWM3NzM3
YjMxMGI1MDMxZDQwYzUuLjBmODg0MjkwMGY4NTFhN2Q5MmY4ODZjYTY2ZjkxYTkxMGU5ZmVmYWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAKQEAg
LTg0MCw3ICs4NDAsNyBAQCBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRl
U2VsZWN0aW9uU25hcHNob3QoKSBjb25zdAogICAgIGlmICghc25hcHNob3QpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgYXV0byBzaGFyZWRTbmFwc2hvdCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlU2hhcmVhYmxlKHNuYXBzaG90LT5pbnRlcm5hbFNpemUoKSwgeyB9KTsKKyAgICBh
dXRvIHNoYXJlZFNuYXBzaG90ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoc25h
cHNob3QtPmJhY2tlbmRTaXplKCksIHsgfSk7CiAgICAgaWYgKCFzaGFyZWRTbmFwc2hvdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhZDEwNTk0ZGNkMGQ0OTRjZDE5ZjQ1MGEz
NjZjNzUyYmUyNTYzMmQ1Li40M2MyMzVkZWU5MDgxZmRmZDBiY2Y2ZjJmNGRmMzFjZGI4ZjEwYTdh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDItMDQgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBuZXcgSW1hZ2VCdWZm
ZXIgdHlwZSBmb3IgZHJhd2luZyBvbiBhIERpc3BsYXlMaXN0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcxMDkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgZXh0cmEgcmVjb3JkaW5nIGhhcHBlbnMg
YmVjYXVzZSBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcigpIHVzZWQgdG8KKyAgICAgICAgaXNz
dWUgaXRzIEdyYXBoaWNzQ29udGV4dCBjb21tYW5kcyBkaXJlY3RseSB0byB0aGUgYmFja2VuZC4g
V2l0aCB0aGlzIAorICAgICAgICBwYXRjaCwgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciBkb2VzIG5v
dCBhbGxvdyBhY2Nlc3MgdG8gdGhlIGJhY2tlbmQgY29udGV4dC4KKyAgICAgICAgU28gYWxsIHRo
ZSBHcmFwaGljc0NvbnRleHQgY29tbWFuZHMgaGFzIHRvIGJlIHJlY29yZGVkLgorCisgICAgICAg
ICogZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0OgorCiAyMDIw
LTAyLTA0ICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtd
IEdhcmRlbiBzb21lIHdwdCB0ZXN0cyBmYWlsaW5nIHdpdGggaGFybmVzcyB0aW1lb3V0CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9kaXNwbGF5bGlzdHMvY2FudmFzLWRpc3BsYXktbGlzdC1l
eHBlY3RlZC50eHQKaW5kZXggMWI1N2U3OTFiNzJhY2NhODc3NjE0NDc5YjRkYzdmZTVjOTU5NGQ3
Ny4uMzRjODdiOWIwNDI5NDU1YTliZjExNDFjNmJmYjM5NzFjNzUyMGI4ZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZGlzcGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVj
dGVkLnR4dApAQCAtMSw3ICsxLDExIEBACiAgCisoc2F2ZQorICAocmVzdG9yZS1pbmRleCAwKSkK
IChzZXQtc3RhdGUKLSAgKGNoYW5nZS1mbGFncyAyNTYpCi0gIChmaWxsLWNvbG9yICNDODAwMDAp
KQorICAoY2hhbmdlLWZsYWdzIDEwNTA5MTIpCisgIChzdHJva2UtdGhpY2tuZXNzIDEuMDApCisg
IChmaWxsLWNvbG9yICNDODAwMDApCisgIChzaGFkb3dzLWlnbm9yZS10cmFuc2Zvcm1zIDEpKQog
KGZpbGwtcmVjdAogICAoZXh0ZW50IGF0ICgxMCwxMCkgc2l6ZSA1NXg1MCkKICAgKHJlY3QgYXQg
KDEwLDEwKSBzaXplIDU1eDUwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389804</attachid>
            <date>2020-02-05 07:38:46 -0800</date>
            <delta_ts>2020-03-01 23:56:23 -0800</delta_ts>
            <desc>Patch  for review</desc>
            <filename>ImageBuffer-Pacthes-12.patch</filename>
            <type>text/plain</type>
            <size>51927</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5NzkwNmNhZWM3ZC4uMTU2MTcwYTY4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OSBAQAorMjAyMC0wMi0wNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVxdWVzdCB0
aGUgcmVtb3RlIGRyYXdpbmcgZm9yIHRoZSBIVE1MQ2FudmFzRWxlbWVudCB3aGVuIGl0IGlzIG5l
ZWRlZAorICAgICAgICBieSBzZXR0aW5nIHRoZSBzdWl0YWJsZSBSZW5kZXJpbmdNb2RlLgorCisg
ICAgICAgIFNpbmNlIHJlbW90ZSBkcmF3aW5nIGNyZWF0ZXMgb25lIEltYWdlQnVmZmVyQmFja2Vu
ZCBpbiB0aGUgR1BVUHJvY2VzcywgCisgICAgICAgIHRoZSBXZWJQcm9jZXNzIHJlbW90ZSBJbWFn
ZUJ1ZmZlciBoYXMgdG8gYmUgY3JlYXRlZCBpbml0aWFsbHkgd2l0aCBubworICAgICAgICBJbWFn
ZUJ1ZmZlckJhY2tlbmQgdGlsbC4gU28gQ29udGV4dHVhbEltYWdlQnVmZmVyIGhhcyB0byBlbnN1
cmUgdGhlCisgICAgICAgIGJhY2tlbmQgaXMgY3JlYXRlZCBiZWZvcmUgZG9pbmcgYW55IG9wZXJh
dGlvbi4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxDYW52YXNFbGVtZW50OjpjcmVhdGVJbWFnZUJ1ZmZlciBjb25zdCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvQ29udGV4dHVhbEltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmZsdXNoQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpsb2dpY2FsU2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmJhY2tlbmRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6cmVzb2x1dGlvblNjYWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6bWVtb3J5Q29zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmV4dGVybmFsTWVtb3J5Q29zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvcHlOYXRpdmVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6
Q29udGV4dHVhbEltYWdlQnVmZmVyOjpkcmF3UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0dWFsSW1hZ2VCdWZmZXI6OnNpbmtJbnRvTmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjpzaW5rSW50b0ltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6ZHJhd0NvbnN1bWluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmNvbnZlcnRUb0x1bWluYW5jZU1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6Q29udGV4dHVhbEltYWdlQnVmZmVyOjp0cmFuc2Zvcm1Db2xvclNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJM
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dG9EYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6dG9CR1JBRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgIHBsYXRmb3JtTGF5ZXIKKyAgICAgICAgY29weVRvUGxhdGZvcm1UZXh0dXJlCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OkRpc3BsYXlMaXN0SW1hZ2VC
dWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oOgorCiAyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IEltYWdlQnVmZmVyIHNoYXJlYWJsZSBiYWNr
ZW5kcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IGU3MWE5ZmNhY2ExLi44OWUzMzlmYzRlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE0OSw2ICsyMTQ5LDkg
QEAKIAkJNzI0RUU1NTExREM4MEQ4NDAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNl
cnZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI0
RUU1NEYxREM3RjI1QjAwQTkxRkZCIC8qIEFjdGl2aXR5U3RhdGVDaGFuZ2VPYnNlcnZlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY3
MjNENkE1MzIwMENDNjg4MyAvKiBBbHBoYVByZW11bHRpcGxpY2F0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4
ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5k
ZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3Mjk5QkM2NjIzRDY4NkM2MDBDQzY4ODMgLyogUmVuZGVyaW5nTW9kZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyOUM0NTFCMjNFQTRBMjkw
MEIyQjFDRSAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E3MjNFMTczMjgwMDhENzQxQyAvKiBDb250
ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3MjlDNDUxRTIzRUE1MjNEMDBCMkIxQ0UgLyogRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzIzOTQwNUUyM0U1RjUzRjAwRTNCNTQ1IC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MjlDNDUxRjIz
RUE1Mjg5MDBCMkIxQ0UgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzIzOTQwNjAyM0U1RjU2NzAwRTNC
NTQ1IC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjlERDQ0MjIzRUEyNkEwMDAwMjZCN0IgLyog
UGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyNTA2RDQ2MjNFQTIyMkIwMDFFNkUwRCAvKiBQbGF0Zm9ybUlt
YWdlQnVmZmVyQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyOURENDQ0MjNFQTI3MEEwMDAyNkI3QiAvKiBJbWFnZUJ1ZmZlckNHQmFj
a2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJC
QUMzQUQyM0UxRTU0NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzI5REQ0NDUyM0VBMjc5
QjAwMDI2QjdCIC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFD
IC8qIEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yOTM2OSw2ICsyOTM3Miw3IEBACiAJCQkJMDY1
QUQ0RjcwQjBDMkVEQTAwNUEyQjFEIC8qIENvbnRleHRNZW51Q29udHJvbGxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMDYwMjdDQUQwQjFDQkZDMDAwODg0QjJEIC8qIENvbnRleHRNZW51SXRlbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJN0FERTcyMjYxMENCQkI5QjAwNkIzQjNBIC8qIENvbnRleHRN
ZW51UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyOUM0NTFCMjNFQTRBMjkwMEIyQjFD
RSAvKiBDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1OUNCODM3
MTkyREE5MTkwMDEyQkM2NCAvKiBDb250cm9sU3RhdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RDMxNjAyOTEyQjAyNjc2MDBDMUEzNTkgLyogQ29udm9sdmVyTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRDhCNjE1MkYxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTY3NSw2ICsyOTY3OSw4IEBACiAJCQkJMTEyRkIzNTIyMzlDMjNDNDAwODcwNTRBIC8q
IERpc3BsYXlJbmxpbmVSZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2RkI0N0U2MzIyNzc0MjVB
MDBDN0JDQjAgLyogRGlzcGxheUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQz
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzI5
QzQ1MUYyM0VBNTI4OTAwQjJCMUNFIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTcyOUM0NTFFMjNFQTUyM0QwMEIyQjFDRSAvKiBEaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENTFDM0RENTFFMDAwN0EyQ0Eg
LyogRGlzcGxheUxpc3RJdGVtcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDcxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVjb3JkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RTVGQkQ5MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlcGxheWVyLmggaW4gSGVhZGVy
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKaW5kZXggNDJh
NjVkM2E5ZTcuLjFmYmMxYTFmODhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNF
bGVtZW50LmNwcApAQCAtODgwLDggKzg4MCwxMyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50Ojpj
cmVhdGVJbWFnZUJ1ZmZlcigpIGNvbnN0CiAgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5n
IGZvciBEaXNwbGF5TGlzdCBkcmF3aW5nIG9uIGNhbnZhcy4KICAgICBib29sIHVzZXNEaXNwbGF5
TGlzdERyYXdpbmcgPSBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmcudmFsdWVPcihkb2N1bWVudCgp
LnNldHRpbmdzKCkuZGlzcGxheUxpc3REcmF3aW5nRW5hYmxlZCgpKTsKIAorICAgIC8vIEZJWE1F
OiBBZGQgYSBuZXcgc2V0dGluZyBmb3IgcmVtb3RlIGRyYXdpbmcgb24gY2FudmFzLgorICAgIGJv
b2wgdXNlc1JlbW90ZURyYXdpbmcgPSBmYWxzZTsKKwogICAgIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZTsKLSAgICBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKKyAgICBpZiAodXNlc1Jl
bW90ZURyYXdpbmcpCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNp
emUoKSkgPyBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6
OlJlbW90ZTsKKyAgICBlbHNlIGlmICh1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogICAgICAgICBy
ZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXplKCkpID8gUmVuZGVyaW5nTW9kZTo6
RGlzcGxheUxpc3RBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0OwogICAg
IGVsc2UKICAgICAgICAgcmVuZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/
IFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRl
ZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHR1
YWxJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4
dHVhbEltYWdlQnVmZmVyLmgKaW5kZXggMjhmMzI3ODIxMDUuLjhjZWE0OGNiM2QyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1hZ2VCdWZm
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0dWFsSW1h
Z2VCdWZmZXIuaApAQCAtNjksMTEwICs2OSwxNTIgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBm
bHVzaENvbnRleHQoKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4
dCgpOwotICAgICAgICBtX2JhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgICAgICBpZiAoYXV0
byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAg
IH0KICAgICB9CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFzZVRyYW5zZm9ybSgpOyB9Ci0gICAgSW50U2l6
ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+bG9naWNh
bFNpemUoKTsgfQotICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7IH0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgp
OyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0o
KSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQoKSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9n
aWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPmJh
Y2tlbmRTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCkt
PnJlc29sdXRpb25TY2FsZSgpIDogMTsgfQogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPm1lbW9yeUNvc3QoKTsgfQotICAgIHNpemVf
dCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQt
PmV4dGVybmFsTWVtb3J5Q29zdCgpOyB9CisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPm1lbW9y
eUNvc3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJuYWxNZW1vcnlDb3N0KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8gZW5zdXJlQmFja2VuZCgpLT5leHRlcm5h
bE1lbW9yeUNvc3QoKSA6IDA7IH0KIAogICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFn
ZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0
IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiBtX2JhY2tl
bmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0
dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZT4g
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9y
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbnRl
eHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAg
IHJldHVybiBtX2JhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7Cisg
ICAgICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVz
aERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdl
KGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgbV9iYWNrZW5kLT5k
cmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5kcmF3KGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICB2b2lk
IGRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiBwYXR0ZXJuVHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgY29uc3QgRmxv
YXRTaXplJiBzcGFjaW5nLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgbV9i
YWNrZW5kLT5kcmF3UGF0dGVybihkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRl
cm5UcmFuc2Zvcm0sIHBoYXNlLCBzcGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRp
dmVJbWFnZSgpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7
Ci0gICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAg
ICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZs
dXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50
b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZlUmVzb2x1dGlvbiBw
cmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdD
b250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9JbWFnZShwcmVz
ZXJ2ZVJlc29sdXRpb24pOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAogICAgIHZvaWQgZHJhd0NvbnN1bWluZyhHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKLSAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1p
bmcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgaWYg
KGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENv
bnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+Y29udmVydFRvTHVt
aW5hbmNlTWFzaygpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFj
a2VuZC0+Y29udmVydFRvTHVtaW5hbmNlTWFzaygpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
dm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JT
cGFjZSBkZXN0Q29sb3JTcGFjZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKLSAgICAgICAgbV9iYWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0Nv
bG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIGJhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwgZGVz
dENvbG9yU3BhY2UpOworICAgICAgICB9CiAgICAgfQogCiAgICAgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHksIFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24pIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAg
ICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRl
eHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFs
aXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVu
c3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VC
dWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2Vu
ZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9CiAKICAgICBWZWN0b3I8dWlu
dDhfdD4gdG9EYXRhKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVh
bGl0eSA9IFdURjo6bnVsbG9wdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGNvbnN0
X2Nhc3Q8Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwotICAg
ICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkpOworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxDb250ZXh0dWFsSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZlY3Rvcjx1aW50OF90
PiB0b0JHUkFEYXRhKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8
Q29udGV4dHVhbEltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwotICAgICAgICBy
ZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJ
bWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBi
YWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICB9CiAKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBs
aWNhdGlvbiBvdXRwdXRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpIGNvbnN0IG92ZXJy
aWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFnZUJ1ZmZlciY+KCp0
aGlzKS5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Z2V0SW1hZ2VE
YXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbnRleHR1YWxJbWFn
ZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNr
ZW5kLT5nZXRJbWFnZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB2b2lkIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBjb25zdCBJbWFnZURhdGEmIGltYWdlRGF0
YSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCA9IHsg
fSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoQ29udGV4dCgpOwotICAgICAgICBtX2Jh
Y2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFn
ZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50KTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+cGxhdGZvcm1MYXllcigp
OworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBiYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KIAogICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3JtR0xPYmplY3Qg
ZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKGNvbnRleHQsIHRhcmdldCwgZGVz
dGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkp
OworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBiYWNrZW5kLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoY29udGV4dCwgdGFyZ2V0
LCBkZXN0aW5hdGlvblRleHR1cmUsIGludGVybmFsZm9ybWF0LCBwcmVtdWx0aXBseUFscGhhLCBm
bGlwWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8QmFja2VuZFR5cGU+IG1fYmFja2VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAppbmRleCA5ZGIwZjBk
ZmJjNC4uYzg5OWY4MjZlODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKQEAgLTUxLDYgKzUxLDExIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcihjb25z
dCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogRGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0
KHNpemUpCisgICAgeworICAgIH0KKwogICAgIH5EaXNwbGF5TGlzdEltYWdlQnVmZmVyKCkKICAg
ICB7CiAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZh
Y2VCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0lt
YWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAppbmRleCA1NWYyZGRlOThlYi4u
NDBiZjczNGMwYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm9JbWFnZVN1cmZhY2VCYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvSW1hZ2VT
dXJmYWNlQmFja2VuZC5jcHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBJbWFnZUJ1ZmZlckNhaXJv
SW1hZ2VTdXJmYWNlQmFja2VuZDo6cGxhdGZvcm1UcmFuc2Zvcm1Db2xvclNwYWNlKGNvbnN0IHN0
ZDoKICAgICAgICAgICAgIHVuc2lnbmVkKiBwaXhlbCA9IHJvdyArIHg7CiAgICAgICAgICAgICBD
b2xvciBwaXhlbENvbG9yID0gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKICAg
ICAgICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcihsb29rVXBUYWJsZVtwaXhlbENvbG9yLnJlZCgp
XSwgbG9va1VwVGFibGVbcGl4ZWxDb2xvci5ncmVlbigpXSwgbG9va1VwVGFibGVbcGl4ZWxDb2xv
ci5ibHVlKCldLCBwaXhlbENvbG9yLmFscGhhKCkpOwotICAgICAgICAgICAgKnBpeGVsID0gcHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3IocGl4ZWxDb2xvcik7CisgICAgICAgICAgICAqcGl4ZWwg
PSBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihwaXhlbENvbG9yKS52YWx1ZSgpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGNhaXJvX3N1cmZhY2VfbWFya19kaXJ0eV9yZWN0YW5nbGUobV9zdXJm
YWNlLmdldCgpLCAwLCAwLCBtX2xvZ2ljYWxTaXplLndpZHRoKCksIG1fbG9naWNhbFNpemUuaGVp
Z2h0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3QuaAppbmRleCAyOGUyNjQ0ZTI2ZS4uMmM2NzdmNmI3
MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNs
ZWFyKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3Zl
SXRlbXNGcm9tSW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7
IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlz
cGxheUxpc3Q+IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6
RGlzcGxheUxpc3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiZjE0MjhhYWQ0NS4uMTNkZjVmOWY4MDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAxIEBACisyMDIwLTAyLTA0ICBTYWlkIEFib3UtSGFsbGF3
YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyBy
ZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXaGVuIHJlbW90ZSByZW5kZXJpbmcgaXMgcmVxdWlyZWQsIHR3byBvYmplY3RzIHdp
bGwgYmUgY3JlYXRlZCB0byBzeW5jaHJvbml6ZQorICAgICAgICB0aGUgZHJhd2luZyBiZXR3ZWVu
IHRoZSBXZWJQb3JjZXNzIGFuZCB0aGUgR1BVUG9yY2VzcyBhbmQgdG8gc2hhcmUgdGhlCisgICAg
ICAgIGJhY2tlbmQ6CisKKyAgICAgICAgKDEpIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIgaXMg
Y3JlYXRlZCBpbiB0aGUgV2ViUHJvY2VzcyBhbmQgaXQgYXNrcworICAgICAgICAgICAgdGhlIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSB0aGUgc2Vjb25kIG9iamVjdC4KKyAgICAgICAgKDIp
IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSBpcyBjcmVhdGVkIHRoZSBHUFVQcm9jZXNz
IGFuZCBhc3NvY2lhdGVkCisgICAgICAgICAgICB3aXRoIHRoZSBmaXJzdCBvbmUgYnkgYW4gSW1h
Z2VCdWZmZXJJZGVudGlmaWVyLgorICAgICAgICAKKyAgICAgICAgLS0gV2hlbiBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkgaXMgY3JlYXRlZCwgaXQgc2VuZHMgYSBtZXNzYWdlIHRvCisg
ICAgICAgICAgIHNoYXJlIGl0cyBiYWNrZW5kIHdpdGggUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZl
ci4KKworICAgICAgICAtLSBUbyBzeW5jaHJvbml6ZSB0aGUgZHJhd2luZywgUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlciBzZW5kcyB0aGUgbWVzc2FnZQorICAgICAgICAgICAnRmx1c2hDb250ZXh0
JyBvciB0aGUgbWVzc2FnZSAnRmx1c2hEcmF3aW5nQ29udGV4dCcgdG8gCisgICAgICAgICAgIFJl
bW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS4gVG8gZXhjaGFuZ2UgdGhlIG1lc3NhZ2VzIGFz
eW5jaHJvbm91c2x5CisgICAgICAgICAgIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eSBz
ZW5kcyBiYWNrIHRoZSBtZXNzYWdlIFNldEZsdXNoSWRlbnRpZmllcgorICAgICAgICAgICB0byBS
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyIHdoZW4gdGhlIGZsdXNoaW5nIGlzIGRvbmUuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdl
QnVmZmVyUHJveHkuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUNvbnRleHR1YWxJ
bWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVDb250ZXh0
dWFsSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkpOgor
ICAgICAgICBUaGlzIGNsYXNzIGluaGVyaXRzIENvbnRleHR1YWxJbWFnZUJ1ZmZlciBhbmQgUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS4gV2hlbgorICAgICAgICBpdCBpcyBjcmVhdGVkLCBpdHMgc2hh
cmVzIGl0cyBiYWNrZW5kIHdpdGggUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyIGJ5IAorICAg
ICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIFJlbW90ZUltYWdlQnVmZmVyOjpDcmVhdGVCYWNrZW5k
LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojpy
ZW1vdGVDcmVhdGVCYWNrZW5kKToKKyAgICAgICAgU2VuZHMgdGhlIG1lc3NhZ2UgUmVtb3RlSW1h
Z2VCdWZmZXI6OkNyZWF0ZUJhY2tlbmQuCisKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VC
dWZmZXJQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4dCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaDoKKyAgICAgICAgSW1wbGVt
ZW50IG1lc3NhZ2UgaGFuZGxlcnMuIEFmdGVyIHRoZWlyIHdvcmsgaXMgZG9uZSB0aGV5IHNlbmQg
dGhlCisgICAgICAgIG1lc3NhZ2UgJ1NldEZsdXNoSWRlbnRpZmllcicgdG8gUmVtb3RlSW1hZ2VC
dWZmZXIuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIG1lc3NhZ2VzIGZvciBmbHVz
aGluZyB0aGUgY29udGV4dCBhbmQgdGhlIERyYXdpbmdDb250ZXh0LgorCisgICAgICAgICogR1BV
UHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5o
OiBBZGRlZC4KKyAgICAgICAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eSB0eXBlLgorCisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICBDcmVhdGUgdGhl
IHBsYXRmb3JtIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJGbHVzaElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgIFRoaXMgaXMgdXNlZCB0byBz
eW5jaHJvbml6ZSBmbHVzaGluZyB0aGUgY29udGV4dCBhbmQgdGhlIERyYXdpbmdDb250ZXh0IAor
ICAgICAgICBvZiB0aGUgSW1hZ2VCdWZmZXJCYWNrZW5kIGJldHdlZW4gdGhlIEdQVVByb2Nlc3Mg
YW5kIHRoZSBXZWJQcm9jZXNzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZSk6CisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1YWxJ
bWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVtb3RlQ29udGV4dHVhbElt
YWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVDb250ZXh0dWFsSW1h
Z2VCdWZmZXI6OlJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcik6CisgICAgICAgIFRoaXMgY2xh
c3MgaW5oZXJpdHMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlciBhbmQgUmVtb3RlSW1hZ2VCdWZmZXIu
IEl0IHJlcHJlc2VudHMKKyAgICAgICAgdGhlIFdlYlByb2NzcyBwYXJ0IG9mIHRoZSByZW1vdGUg
SW1hZ2VCdWZmZXIuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OndhaXRDcmVhdGVCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXI6OndhaXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICBCbG9ja2VycyB0aGF0IHdhaXQg
Zm9yIGNlcnRhaW4gbWVzc2FnZXMgdG8gYmUgcmVjZWl2ZWQuCisKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXI6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAgRW5zdXJl
cyB0aGUgYmFja2VuZCBpcyBjcmVhdGVkIGFuZCB0aGUgRHJhd2luZ0NvbnRleHQgaXMgZmx1c2hl
ZCB0byB0aGUKKyAgICAgICAgYmFja2VuZC4KKworICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFn
ZUJ1ZmZlcjo6c2V0Rmx1c2hJZGVudGlmaWVyKToKKyAgICAgICAgQSBtZXNzYWdlIGhhbmRsZXIg
dGhhdCBrZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSBEcmF3aW5nQ29udGV4dCBpcworICAgICAg
ICBjb21taXR0ZWQgdG8gdGhlIGJhY2tlbmQgb3Igbm90LgorCisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVzaENvbnRleHQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hEcmF3aW5nQ29udGV4dCk6CisgICAgICAgIEVu
c3VyZXMgYWxsIHRoZSByZWNlbnQgZHJhd2luZyBpcyBjb21taXR0ZWQgdG8gdGhlIGJhY2tlbmQu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6aXNQ
ZW5kaW5nRmx1c2ggY29uc3QpOgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbjoKKyAgICAgICAgQWRkIG1lc3Nh
Z2VzIGZvciBjcmVhdGluZyB0aGUgYmFja2VuZCBhbmQgZm9yIHNldHRpbmcgdGhlIEZsdXNoSWRl
bnRpZmllci4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lcyB0aGUgcGxh
dGZvcm0gUmVtb3RlSW1hZ2VCdWZmZXIgdHlwZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgQ3JlYXRlIHRoZSBwbGF0Zm9ybSBSZW1vdGVJbWFnZUJ1ZmZlci4KKwogMjAyMC0wMi0wNCAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgogCiAgICAgICAgIElt
cGxlbWVudCBJbWFnZUJ1ZmZlciBzaGFyZWFibGUgYmFja2VuZHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1YWxJbWFn
ZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IGU2OWRlMjliYjJkLi4x
ZWMzNzBjNmM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVDb250ZXh0dWFsSW1hZ2VC
dWZmZXJQcm94eS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVy
UHJveHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbnRleHR1YWxJbWFnZUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVDb250ZXh0
dWFsSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb250ZXh0dWFsSW1hZ2VCdWZm
ZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSB7CisgICAgdXNp
bmcgQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkNvbnRleHR1YWxJbWFnZUJ1
ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcjo6
bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpCisgICAgeworICAgICAgICByZXR1cm4gQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZl
cjo6dGVtcGxhdGUgY3JlYXRlPFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlclByb3h5PihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIG51bGxwdHIsIGdwdUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgfQorCisgICAgUmVtb3RlQ29u
dGV4dHVhbEltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJh
Y2tlbmQsIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nl
c3MsIEltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAg
IDogQmFzZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKQorICAgICAgICAs
IFJlbW90ZUltYWdlQnVmZmVyUHJveHkoZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcywgaW1hZ2VC
dWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmVtb3RlQ3JlYXRlQmFja2VuZChtX2Jh
Y2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2VuZC0+YmFja2VuZFNpemUoKSwgbV9iYWNrZW5k
LT5yZXNvbHV0aW9uU2NhbGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+
Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGxvY2FsRmx1c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBsb2NhbEZsdXNo
RHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICBtX2JhY2tlbmQtPmZsdXNoQ29u
dGV4dCgpOworICAgIH0KKworICAgIHZvaWQgbG9jYWxGbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoIWRpc3BsYXlMaXN0Lml0ZW1Db3VudCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllciByZXBs
YXllcihCYXNlQ29udGV4dHVhbEltYWdlQnVmZmVyOjpjb250ZXh0KCksIGRpc3BsYXlMaXN0KTsK
KyAgICAgICAgcmVwbGF5ZXIucmVwbGF5KCk7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyUHJveHkuY3BwCmluZGV4IGZiY2ZjNDVmNTViLi5mYTRiNjc5YmZjYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAKQEAgLTYyLDYgKzYyLDIzIEBA
IHVpbnQ2NF90IFJlbW90ZUltYWdlQnVmZmVyUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlv
bklEKCkgY29uc3QKICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQo
KTsKIH0KIAordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpyZW1vdGVDcmVhdGVCYWNrZW5k
KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGludGVybmFsU2l6
ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1h
Z2VCdWZmZXI6OkNyZWF0ZUJhY2tlbmQobG9naWNhbFNpemUsIGludGVybmFsU2l6ZSwgcmVzb2x1
dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRsZSkpLCBtX2ltYWdlQnVmZmVySWRl
bnRpZmllcik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hDb250ZXh0
KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAgICBsb2NhbEZsdXNoQ29udGV4
dChkaXNwbGF5TGlzdCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNl
dEZsdXNoSWRlbnRpZmllcihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmll
cik7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4
dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbG9jYWxGbHVzaERyYXdp
bmdDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1
ZmZlcjo6U2V0Rmx1c2hJZGVudGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXgg
OTgxMzA3NzdkNjguLjhjOGY4ZmYyMzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
QEAgLTUxLDYgKzUzLDE0IEBAIHByb3RlY3RlZDoKIAogICAgIC8vIElQQzo6TWVzc2FnZVJlY2Vp
dmVyCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKSBvdmVycmlkZTsKKyAgICAgICAgCisgICAgdm9pZCByZW1vdGVDcmVhdGVCYWNrZW5k
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6Oklu
dFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworCisgICAgdm9pZCBmbHVzaENvbnRl
eHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiwgSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBXZWJD
b3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
cik7CisKKyAgICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaENvbnRleHQoY29uc3QgV2ViQ29yZTo6
RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZs
dXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0
JikgPSAwOwogCiAgICAgV2Vha1B0cjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBtX2dwdUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VC
dWZmZXJJZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHkubWVzc2FnZXMuaW4KaW5kZXggZGVkMTg5YzI5YTUuLmMxZGYzYzI2MDYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTIzLDYg
KzIzLDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1lc3NhZ2VzIC0+IFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CisgICAgdm9pZCBGbHVzaENvbnRleHQoV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0LCBXZWJLaXQ6OkltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKKyAgICB2b2lkIEZsdXNoRHJh
d2luZ0NvbnRleHQoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0
LCBXZWJLaXQ6OkltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKIH0K
IAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQ
cm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggZTY5ZGUyOWJiMmQuLjVmNGRlM2M2Y2Jh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVk
ZSAiUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1v
dGVDb250ZXh0dWFsSW1hZ2VCdWZmZXJQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dXNpbmcgUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlQ29udGV4dHVhbElt
YWdlQnVmZmVyUHJveHk8UGxhdGZvcm1VbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJTaGFyZWFibGVC
YWNrZW5kPjsKK3VzaW5nIFJlbW90ZVBsYXRmb3JtQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5
ID0gUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHk8UGxhdGZvcm1BY2NlbGVyYXRlZElt
YWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNw
cCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmRQcm94eS5jcHAKaW5kZXggY2Q2MjUyNzlmY2QuLmE2YTUwYjdjMDlkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKIAorI2luY2x1ZGUgIlJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eU1lc3NhZ2VzLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewpAQCAtNzksOCArODAsMTMg
QEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdlQnVmZmVyKGNv
bnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUKIAogICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkg
ewogICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGlt
YWdlQnVmZmVyID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyUHJveHk6OmNy
ZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVj
dGlvblRvV2ViUHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKICAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKLSAgICAgICAg
Ly8gRklYTUU6IGNyZWF0ZSB0aGUgcmVtb3RlIEltYWdlQnVmZmVyIHByb3h5LgorICAgICAgICBp
bWFnZUJ1ZmZlciA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKGxvZ2lj
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICpncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgICAgICBicmVhazsKKwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDlhZDIwYzAwYTc4Li45OGZmZDFmMDBl
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQor
KysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CkBAIC0yMjYsNiAr
MjI2LDcgQEAgZGVmIHR5cGVzX3RoYXRfY2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAg
ICAgICAgJ1dlYktpdDo6QXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6Q29udGVudFdvcmxkSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJL
aXQ6OkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZScsCisgICAgICAgICdXZWJLaXQ6OkltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlm
aWVyJywKICAgICAgICAgJ1dlYktpdDo6TGF5ZXJIb3N0aW5nQ29udGV4dElEJywKICAgICAgICAg
J1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NWRiZDc0Mzk5
Zi4uNDg4ZGQ4YzNmYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtNDA1OSw2ICs0MDU5LDExIEBACiAJCTcyNTY0NUE0MjNFOTA3RDEw
MEEwNjMyRCAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyog
V2ViQ29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBh
dGggPSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI5QzQ1MTcyM0VBNDVEMjAwQjJCMUNFIC8qIFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVDb250ZXh0dWFsSW1hZ2VC
dWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1MTgyM0VBNDVEMzAw
QjJCMUNFIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjlDNDUxOTIzRUE0NjExMDBCMkIxQ0UgLyogUmVtb3RlQ29udGV4
dHVhbEltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNzI5QzQ1MUEyM0VBNDYxMTAwQjJCMUNFIC8qIFJlbW90ZVBsYXRmb3JtSW1hZ2VC
dWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5
QzQ1MUQyM0VBNEUwNDAwQjJCMUNFIC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5
RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV0tXZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1
QThEMkM1MTg3Q0NGOUYwMEMzOUM5RSAvKiBXS1dlYnNpdGVEYXRhU3RvcmUubW0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkQ0MTg3RDFDMDEwMEMzOUM5RSAvKiBX
S1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXS1dlYnNpdGVEYXRhU3RvcmVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNzkzNCwxMyArNzkzOSwxNiBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNzI1MDZE
NDIyM0VBMjE2MDAwMUU2RTBEIC8qIGNnICovLAogCQkJCTcyNTA2RDQ1MjNFQTIxRDIwMDFFNkUw
RCAvKiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUuaCAqLywKKwkJCQk3MjlDNDUxRDIzRUE0RTA0
MDBCMkIxQ0UgLyogSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCAqLywKIAkJCQk3MjU2NDVB
NDIzRTkwN0QxMDBBMDYzMkQgLyogSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmggKi8sCiAJCQkJNzI1
MDZENDAyM0VBMjEyRTAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2Vu
ZC5jcHAgKi8sCiAJCQkJNzI1MDZENDEyM0VBMjEyRjAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZC5oICovLAogCQkJCTcyNTA2RDQ4MjNFQTIyQjcwMDFFNkUwRCAv
KiBQbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oICovLAorCQkJCTcyOUM0NTE3
MjNFQTQ1RDIwMEIyQjFDRSAvKiBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXIuaCAqLywKIAkJ
CQk3MjUwNkQzQTIzRTlGODhDMDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXIuY3BwICovLAog
CQkJCTcyNTA2RDM5MjNFOUY4OEIwMDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovLAog
CQkJCTcyNTA2RDNCMjNFOUY4OEMwMDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdl
cy5pbiAqLywKKwkJCQk3MjlDNDUxODIzRUE0NUQzMDBCMkIxQ0UgLyogUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oICovLAogCQkJCTcyNTY0NUEzMjNFOEZGMTUwMEEwNjMyRCAvKiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKIAkJCQk3MjU2NDVBMjIzRThGRjE1MDBBMDYzMkQgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oICovLAogCQkJCTcyNTY0NUExMjNFOEZGMTUwMEEwNjMy
RCAvKiBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oICovLApAQCAtNzk1MSw5ICs3OTU5LDEx
IEBACiAJCTcyNTY0NTlEMjNFOEZFODcwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk3MjlDNDUxOTIzRUE0
NjExMDBCMkIxQ0UgLyogUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyUHJveHkuaCAqLywKIAkJ
CQk3MjUwNkQzRTIzRTlGOEI5MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5jcHAg
Ki8sCiAJCQkJNzI1MDZEM0MyM0U5RjhCOTAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaCAqLywKIAkJCQk3MjUwNkQzRDIzRTlGOEI5MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5tZXNzYWdlcy5pbiAqLywKKwkJCQk3MjlDNDUxQTIzRUE0NjExMDBCMkIxQ0UgLyog
UmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8sCiAJCQkJNzI1NjQ1OUUyM0U4RkYw
NzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8sCiAJCQkJNzI1
NjQ1OUYyM0U4RkYwNzAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICov
LAogCQkJCTcyNTY0NUEwMjNFOEZGMDcwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkubWVzc2FnZXMuaW4gKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCmluZGV4IDQ3YzZkZWY4NTk1Li5lMGM3
MzkyZjEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJp
bmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZC5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVC
aXRtYXBCYWMKIAogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFj
a2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxv
YXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUgaGFuZGxlKQogewotICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFNoYXJlYWJs
ZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKSB7CisgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlPihoYW5kbGUpKSB7CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlQ29u
dGV4dHVhbEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKaW5kZXggZTY5ZGUyOWJi
MmQuLjNlZTlhYmM4MzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUNvbnRleHR1
YWxJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVDb250ZXh0dWFsSW1hZ2VC
dWZmZXIgOiBwdWJsaWMgRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1Ymxp
YyBSZW1vdGVJbWFnZUJ1ZmZlciB7CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIgPSBEaXNwbGF5TGlzdEltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNl
RGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6
ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1
bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlcj4obmV3IFJlbW90ZUNvbnRleHR1YWxJbWFnZUJ1ZmZlcihzaXplLCByZXNvbHV0
aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJlbmRlcmluZ01vZGUsIHJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVtb3RlQ29udGV4dHVhbEltYWdl
QnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgUmVuZGVyaW5n
QmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgICAgIDog
QmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIoc2l6ZSkKKyAgICAgICAgLCBSZW1vdGVJbWFnZUJ1
ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHJl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNyZWF0
ZUJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFj
a2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3Jl
YXRlKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNl
LCBXVEZNb3ZlKGhhbmRsZSkpOworICAgIH0KKworICAgIGJvb2wgaXNCYWNrZW5kQ3JlYXRlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgQmFja2Vu
ZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2JhY2tlbmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUNvbnRleHR1YWxJbWFn
ZUJ1ZmZlciY+KCp0aGlzKS5lbnN1cmVVcGRhdGVkQmFja2VuZCgpOworICAgICAgICByZXR1cm4g
bV9iYWNrZW5kLmdldCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hDb250ZXh0KCkgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0gRGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0OjpkaXNwbGF5TGlzdCgpOworICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVt
b3RlRmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIo
KTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRl
eHQ6OmRpc3BsYXlMaXN0KCk7CisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyOjpyZW1vdGVGbHVz
aERyYXdpbmdDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIo
KTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJM
RShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
UmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuY3BwCmluZGV4
IDYxNGMyYTFjMmZmLi44MDNkNGRkM2JjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VC
dWZmZXIuY3BwCkBAIC02OSw2ICs2OSw0NyBAQCB1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlcjo6
bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAogICAgIHJldHVybiBtX2ltYWdlQnVm
ZmVySWRlbnRpZmllci50b1VJbnQ2NCgpOwogfQogCitib29sIFJlbW90ZUltYWdlQnVmZmVyOjp3
YWl0Q3JlYXRlQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlv
biA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCku
Y29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJ
bW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OkNyZWF0ZUJhY2tlbmQ+KG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0
V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZl
cjo6d2FpdFNldEZsdXNoSWRlbnRpZmllcigpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4g
Y29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25u
ZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5k
RGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXI6OlNldEZsdXNo
SWRlbnRpZmllcj4obV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0
aW9uOjpJbnRlcnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCit2b2lkIFJl
bW90ZUltYWdlQnVmZmVyOjplbnN1cmVVcGRhdGVkQmFja2VuZCgpCit7CisgICAgY29uc3RleHBy
IGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291bnQgPSAzOworICAgIGZvciAodW5zaWduZWQgd2Fp
dHNDb3VudCA9IE1heFdhaXRzQ291bnQ7ICFpc0JhY2tlbmRDcmVhdGVkKCkgJiYgd2FpdHNDb3Vu
dC0tOyApCisgICAgICAgIHdhaXRDcmVhdGVCYWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291
bnQtLTsgKQorICAgICAgICB3YWl0U2V0Rmx1c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVt
b3RlSW1hZ2VCdWZmZXI6OnNldEZsdXNoSWRlbnRpZmllcihJbWFnZUJ1ZmZlckZsdXNoSWRlbnRp
ZmllciBmbHVzaElkZW50aWZpZXIpCit7CisgICAgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllciA9
IGZsdXNoSWRlbnRpZmllcjsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1
c2hDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxh
eUxpc3QpCit7CisgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXI6OmdlbmVyYXRlKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eTo6Rmx1c2hDb250ZXh0KGRpc3BsYXlMaXN0LCBtX3NlbnRGbHVzaElkZW50aWZpZXIp
LCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsK
K30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlcjo6cmVtb3RlRmx1c2hEcmF3aW5nQ29udGV4dChj
b25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KQorewor
ICAgIG1fc2VudEZsdXNoSWRlbnRpZmllciA9IEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyOjpn
ZW5lcmF0ZSgpOworICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6OkZs
dXNoRHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QsIG1fc2VudEZsdXNoSWRlbnRpZmllciksIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICBlbnN1cmVVcGRhdGVkQmFja2VuZCgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyLmgKaW5kZXggOGY3YjAyNzNkM2MuLmUyNTIw
MDhjNmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMjcsNiArMjcs
OCBAQAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIK
ICNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKICNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCkBAIC01MCw3ICs1MiwyNCBAQCBw
cm90ZWN0ZWQ6CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Cisg
ICAgICAgIAorICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3YWl0Q3JlYXRlQmFja2VuZCgpOwor
ICAgIGJvb2wgd2FpdFNldEZsdXNoSWRlbnRpZmllcigpOwogCisgICAgdm9pZCBlbnN1cmVVcGRh
dGVkQmFja2VuZCgpOworICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBjb25zdCB7IHJldHVybiBt
X3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsgfQorCisg
ICAgdmlydHVhbCB2b2lkIGNyZWF0ZUJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBs
b2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhh
bmRsZSkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAw
OworCisgICAgdm9pZCBzZXRGbHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIpOworICAgICAgICAKKyAgICB2b2lkIHJlbW90ZUZsdXNoQ29udGV4dChjb25zdCBXZWJDb3Jl
OjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKKyAgICB2b2lkIHJlbW90ZUZsdXNoRHJhd2lu
Z0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CisKKyAg
ICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50aWZpZXI7CisgICAg
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRlbnRpZmllcjsKICAg
ICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIgeyBJbWFnZUJ1
ZmZlcklkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ci5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgppbmRleCAxMGE2MWZjNGQ0Yi4uODEw
YmVkZDQ5MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIubWVz
c2FnZXMuaW4KQEAgLTIzLDYgKzIzLDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKIG1l
c3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyIE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3Jl
YXRlQmFja2VuZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNpemUsIFdlYkNvcmU6OkludFNp
emUgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgV2ViS2l0OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQor
ICAgIHZvaWQgU2V0Rmx1c2hJZGVudGlmaWVyKFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50
aWZpZXIgZmx1c2hJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNT
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyLmgKaW5kZXgg
ZTY5ZGUyOWJiMmQuLjc5NTI0YmJjMGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQ
bGF0Zm9ybUltYWdlQnVmZmVyLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNr
ZW5kLmgiCisjaW5jbHVkZSAiUmVtb3RlQ29udGV4dHVhbEltYWdlQnVmZmVyLmgiCisKK25hbWVz
cGFjZSBXZWJLaXQgeworCit1c2luZyBSZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyID0gUmVtb3Rl
Q29udGV4dHVhbEltYWdlQnVmZmVyPFBsYXRmb3JtVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyU2hh
cmVhYmxlQmFja2VuZD47Cit1c2luZyBSZW1vdGVQbGF0Zm9ybUFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXIgPSBSZW1vdGVDb250ZXh0dWFsSW1hZ2VCdWZmZXI8UGxhdGZvcm1BY2NlbGVyYXRlZEltYWdl
QnVmZmVyU2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwCmluZGV4IDgwMzU3YjBhNGIxLi42NGFlNWZkZDc2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjgsNiArMjgsNyBA
QAogCiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjYsOCArNjcsMTMgQEAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG8KIAogICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewog
ICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUmVtb3RlUGxhdGZvcm1BY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6
ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBtX3JlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBSZW5k
ZXJpbmdNb2RlOjpSZW1vdGU6Ci0gICAgICAgIC8vIEZJWE1FOiBjcmVhdGUgdGhlIHJlbW90ZSBJ
bWFnZUJ1ZmZlci4KKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdl
QnVmZmVyID0gUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlbmRlcmlu
Z01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcik7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgaW1hZ2VC
dWZmZXIgPSBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJp
bmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391230</attachid>
            <date>2020-02-19 17:43:37 -0800</date>
            <delta_ts>2020-03-01 23:56:26 -0800</delta_ts>
            <desc>Complete Patch</desc>
            <filename>bug-204955-20200219174336.patch</filename>
            <type>text/plain</type>
            <size>188669</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU2OTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGM2OTE0OWIwYzQxZDFk
NjllMTU5MWNkNTdlNGJkNDU0NTBjMDY3Zi4uNWU4M2QzYTJkMzlmOWM1YjI3MTZiY2Y4ODExNzYz
OTFkZDgyYzU4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTAyLTE5ICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpjcmVhdGVDb250ZXh0
MmQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNEaXNwbGF5
TGlzdERyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVt
ZW50OjpkaXNwbGF5TGlzdEFzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2Fu
dmFzRWxlbWVudDo6cmVwbGF5RGlzcGxheUxpc3RBc1RleHQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OmNyZWF0ZUltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAgICogcGFnZS9DaHJvbWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21lOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kIGNvbnN0
KToKKyAgICAgICAgKiBwYWdlL0Nocm9tZS5oOgorICAgICAgICAqIHBhZ2UvQ2hyb21lQ2xpZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL0hvc3RXaW5kb3cuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb25jcmV0ZUltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjcmVh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6ZHJhd2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCdWZmZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlQnVmZmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
aW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9SZW5kZXJpbmdNb2RlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OkRyYXdpbmdDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6Y29udGV4dCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3Bs
YXlMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6
ZGlzcGxheUxpc3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0OjpyZXBsYXlEaXNwbGF5TGlzdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpE
aXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KToK
KyAgICAgICAgKFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEcmF3aW5nQ29udGV4dDo6cmVwbGF5RGlz
cGxheUxpc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdEltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxp
c3Q6OkltYWdlQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpEaXNwbGF5TGlz
dDo6SW1hZ2VCdWZmZXI6On5JbWFnZUJ1ZmZlcik6CisKIDIwMjAtMDItMTkgIFlvdWVubiBGYWJs
ZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBQbGF0Zm9ybU1lZGlhU2Vz
c2lvbjo6Y2hhcmFjdGVyaXN0aWNzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDMyNzk1NjcyN2Q2ZGVjOGZmOWM3
ZDg5NjhjZWViYTAxMDllZjNiMS4uMzQ4ZjRiYTkzMTI1YzA0MDk0MjQwNmM4ZjdkYTYxYWZjZWY3
ZDQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTQgQEAKKzIwMjAtMDItMTkgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgY2Fu
dmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdDoKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy1vdXRwdXQueGNmaWxlbGlzdDoKKyAgICAgICAgKiBEZXJpdmVkU291
cmNlcy5tYWtlOgorICAgICAgICAqIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vz
cy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmNyZWF0
ZVJlbmRlcmluZ0JhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6
OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UpOgorICAgICAg
ICAoV2ViS2l0OjpHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZlTWVzc2FnZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRp
ZFJlY2VpdmVTeW5jTWVzc2FnZSk6IERlbGV0ZWQuCisgICAgICAgICogR1BVUHJvY2Vzcy9HUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmg6CisgICAgICAgIChXZWJLaXQ6OkdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6Om1lc3NhZ2VSZWNlaXZlck1hcCk6CisgICAgICAgIChXZWJLaXQ6OkdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OndlYlByb2Nlc3NJZGVudGlmaWVyIGNvbnN0KToKKyAgICAg
ICAgKiBHUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW46Cisg
ICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyQ2hh
bm5lbFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
Q2hhbm5lbFByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eSk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJD
aGFubmVsUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQ
cm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQg
Y29uc3QpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eTo6
cmVtb3RlQ3JlYXRlQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVy
Q2hhbm5lbFByb3h5OjpmbHVzaERyYXdpbmdDb250ZXh0KToKKyAgICAgICAgKiBHUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkuaDogQWRkZWQu
CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVy
Q2hhbm5lbFByb3h5Lm1lc3NhZ2VzLmluOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisgICAg
ICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZm
ZXJQcm94eS5oOiBBZGRlZC4KKyAgICAgICAgKiBHUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkp
OgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6On5SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjptZXNzYWdlU2VuZGVyRGVzdGluYXRp
b25JRCBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcik6CisgICAgICAgICogR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbjogQWRkZWQuCisgICAg
ICAgICogR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlTWVkaWFSZWNvcmRlck1hbmFnZXIuY3BwOgor
ICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXll
ck1hbmFnZXIuY3BwOgorICAgICAgICAqIEdQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1
ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuaDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNz
YWdlcy5weToKKyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmg6CisgICAg
ICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAg
KiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJQcm9jZXNz
L0dQVS9HUFVQcm9jZXNzQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJLaXQ6OkdQVVByb2Nl
c3NDb25uZWN0aW9uOjpkaXNwYXRjaE1lc3NhZ2UpOgorICAgICAgICAoV2ViS2l0OjpHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hTeW5jTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OkdQ
VVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UpOgorICAgICAgICAo
V2ViS2l0OjpHUFVQcm9jZXNzQ29ubmVjdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOiBEZWxldGVk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAg
ICAgIChXZWJLaXQ6OkdQVVByb2Nlc3NDb25uZWN0aW9uOjptZXNzYWdlUmVjZWl2ZXJNYXApOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaDogQWRkZWQuCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaDog
QWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
S2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxl
Qml0bWFwQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGNvbnN0KToKKyAg
ICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpjb3B5TmF0
aXZlSW1hZ2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6dG9CR1JBRGF0YSBjb25zdCk6CisgICAgICAgIChX
ZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhIGNv
bnN0KToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5k
OjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tl
bmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJl
YWJsZUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlSW1hZ2VCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyOjpSZW1vdGVJbWFnZUJ1ZmZlcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsOjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5u
ZWwpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6On5SZW1vdGVJ
bWFnZUJ1ZmZlckNoYW5uZWwpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWw6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsOjptZXNzYWdlU2VuZGVyRGVzdGluYXRpb25JRCBjb25z
dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbDo6d2FpdENyZWF0
ZUJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6Ondh
aXRTZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
ckNoYW5uZWw6OmVuc3VyZVVwZGF0ZWRCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3Rl
SW1hZ2VCdWZmZXJDaGFubmVsOjpzZXRGbHVzaElkZW50aWZpZXIpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6OnJlbW90ZUZsdXNoRHJhd2luZ0NvbnRleHQpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJDaGFubmVsLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWw6OmlzUGVuZGluZ0ZsdXNoIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbC5tZXNzYWdlcy5pbjogQWRk
ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVQbGF0
Zm9ybUltYWdlQnVmZmVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6flJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjptZXNzYWdlU2Vu
ZGVyQ29ubmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEIGNvbnN0KToKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRl
cmluZ0JhY2tlbmRJZGVudGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5k
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6SW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgY29uc3Qp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvY2cvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL21lZGlhL1RleHRUcmFja1ByaXZhdGVSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkNocm9tZUNsaWVudDo6Y3JlYXRlUmVuZGVyaW5nQmFja2VuZCBjb25zdCk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaDoKKwog
MjAyMC0wMi0xOSAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbaU9TXSBmYXN0L2RvbS9mb2N1cy1zaGlmdC1jcmFzaC5odG1sIGFuZCBlZGl0aW5nL3Nl
bGVjdGlvbi9zZWxlY3Rpb24tY2hhbmdlLWluLWRpc2Nvbm5lY3RlZC1mcmFtZS1jcmFzaC5odG1s
IGNyYXNoIGFmdGVyIHIyNTY4NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggMjQ4MGYyYTNmMjJlZTBkMzc0
YWM5ODgwNjA2MjJmMWFkZjJlNzI1Yy4uYThhYmEzY2VjOTc3ZWQ1YjM2YTJkMWI5ZTQwMTQxZDM5
NTk3ZWVmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTE4ODksNiArMTg4OSw3IEBAIHBsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybVRpbWVSYW5nZXMu
Y3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9SZW1v
dGVWaWRlb1NhbXBsZS5jcHAKK3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuY3Bw
CiBwbGF0Zm9ybS9ncmFwaGljcy9Sb3VuZGVkUmVjdC5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCiBwbGF0Zm9ybS9ncmFwaGljcy9TdHJpbmdUcnVuY2F0b3IuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NzhjODM3YThjODQ5NWZkMTNiYzljNzFhZmVmZmZmMWNjZWU2NjBmMy4uZjRkNmI3MDJkOWIzYTg1
YzA1MWFkMzY1NWU1NDc5YTNiOWVhYzdhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjEzNSw2ICsyMTM1LDEzIEBACiAJCTcy
NEVFNTUxMURDODBEODQwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyNEVFNTRGMURD
N0YyNUIwMEE5MUZGQiAvKiBBY3Rpdml0eVN0YXRlQ2hhbmdlT2JzZXJ2ZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2NzIzRDZBNTMy
MDBDQzY4ODMgLyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJDNjQyM0Q2ODZBNjAwQ0M2ODgzIC8qIEFs
cGhhUHJlbXVsdGlwbGljYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk3Mjk5QkM2ODIzRDZBNTNFMDBDQzY4ODMgLyogUmVuZGVyaW5nTW9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzI5OUJD
NjYyM0Q2ODZDNjAwQ0M2ODgzIC8qIFJlbmRlcmluZ01vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFCOTNGMjIzRkRGNUE5MDA0MTUwOUMg
LyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJBQjkzRUMyM0ZERTVBNDAwNDE1MDlDIC8qIERpc3BsYXlM
aXN0RHJhd2luZ0NvbnRleHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk3MkFCOTNGMzIzRkRGNUIwMDA0MTUwOUMgLyogRGlzcGxheUxpc3RJbWFn
ZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NzJBQjkzRjEyM0ZERjQ5MzAwNDE1MDlDIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3MkFCOTNGNDIz
RkRGODU0MDA0MTUwOUMgLyogQ29uY3JldGVJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQTcyM0UxNzMyODAwOEQ3NDFDIC8q
IENvbmNyZXRlSW1hZ2VCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3MkFCOTNGNTIzRkRGQzlDMDA0MTUwOUMgLyogUGxhdGZvcm1JbWFn
ZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcyQUI5M0VFMjNGREVBREUwMDQxNTA5QyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcyQUI5M0Y2MjNGREZDRkYwMDQxNTA5QyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUQyM0UxRTU0
NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzJBQjkzRjcyM0ZERkQ1ODAwNDE1MDlDIC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTcyQUI5M0Y4MjNGRTAwQzkwMDQxNTA5QyAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFC
OTNFRjIzRkRFQURGMDA0MTUwOUMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyQkFDM0FFMjNFMUYwQjAwMDhE
NzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEw
OEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggKi87IH07CiAJCTc1Nzkz
RTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBN
ZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTMxODgsNyArMzE5NSw3IEBACiAJCUE3NUU4QjhEMEUx
REUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvbmVudFRyYW5zZmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNzVFOEI4NTBFMURFMkQ2MDA3RjI0ODEgLyog
RkVDb21wb25lbnRUcmFuc2Zlci5oICovOyB9OwogCQlBNzVFOEI4RjBFMURFMkQ2MDA3RjI0ODEg
LyogRkVDb21wb3NpdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE3NUU4Qjg3MEUxREUyRDYwMDdGMjQ4MSAvKiBGRUNvbXBvc2l0ZS5oICovOyB9Owog
CQlBNzZFNUY3RjEzNUUwRENGMDBBNjk4MzcgLyogUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc2RTVGN0UxMzVF
MERDRjAwQTY5ODM3IC8qIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlBNzc5NzkxQTBENkI5RDBDMDAzODUx
QjkgLyogSW1hZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBNzc5NzkxNDBENkI5RDBDMDAzODUxQjkgLyogSW1hZ2VEYXRhLmggKi87IH07CisJ
CUE3Nzk3OTFBMEQ2QjlEMEMwMDM4NTFCOSAvKiBJbWFnZURhdGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTE0MEQ2QjlEMEMwMDM4NTFCOSAv
KiBJbWFnZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQlBNzc5NzkyOTBENkI5RTY0MDAzODUxQjkgLyogSlNJbWFnZURhdGEuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3Nzk3OTI1MEQ2QjlFNjQw
MDM4NTFCOSAvKiBKU0ltYWdlRGF0YS5oICovOyB9OwogCQlBNzdCNDFBMDEyRTY3NUE5MDA1NDM0
M0QgLyogVGV4dEV2ZW50SW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBNzdCNDE5RjEyRTY3NUE5MDA1NDM0M0QgLyogVGV4dEV2ZW50SW5w
dXRUeXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQTc3RDAwMTIxMzNCMEFFQjAwRDY2NThDIC8qIFRleHRDaGVja2luZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTc3RDAwMTExMzNCMEFFQjAwRDY2
NThDIC8qIFRleHRDaGVja2luZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC05NTg2LDYgKzk1OTMsMTEgQEAKIAkJNzI3QUZFRDMxQTJFQTZBMDAw
MDQ0MkU4IC8qIEVYVHNSR0IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVHNSR0IuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3Mjk5QkM2NDIzRDY4NkE2MDBDQzY4ODMg
LyogQWxwaGFQcmVtdWx0aXBsaWNhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbHBoYVByZW11bHRp
cGxpY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyOTlCQzY2MjNENjg2
QzYwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ01v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQjkzRUMyM0ZERTVBNDAwNDE1
MDlDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk3MkFCOTNFRTIzRkRFQURFMDA0MTUwOUMgLyogUGxhdGZvcm1JbWFnZUJ1
ZmZlckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1J
bWFnZUJ1ZmZlckJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQjkz
RUYyM0ZERUFERjAwNDE1MDlDIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyaW5nQmFja2VuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MkFCOTNGMDIzRkRFQURGMDA0MTUwOUMgLyogUmVuZGVyaW5nQmFja2VuZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJpbmdCYWNrZW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzJBQjkzRjEyM0ZERjQ5MzAwNDE1
MDlDIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNDIz
RTE3MzI3MDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZl
ckJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJC
YWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E2MjNFMTczMjgw
MDhENzQxQyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2Njg2LDYgKzE2Njk4LDggQEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCTBGRTVGQkNB
MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdC5jcHAgKi8sCiAJCQkJMEZFNUZCQ0IxQzNE
RDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggKi8sCisJCQkJNzJBQjkzRUMyM0ZERTVBNDAw
NDE1MDlDIC8qIERpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCAqLywKKwkJCQk3MkFCOTNGMTIz
RkRGNDkzMDA0MTUwOUMgLyogRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTBGRTVG
QkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1
RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RJdGVtcy5oICovLAogCQkJCTBGRTVG
QkNFMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdFJlY29yZGVyLmNwcCAqLywKQEAgLTI1
MTExLDYgKzI1MTI1LDcgQEAKIAkJCQlBOEZBNkU1QzBFNENGREVEMDBENUNGNDkgLyogUGF0dGVy
bi5jcHAgKi8sCiAJCQkJQThGQTZFNUIwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uaCAqLywK
IAkJCQk3MkJBQzNBNjIzRTE3MzI4MDA4RDc0MUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlci5oICov
LAorCQkJCTcyQUI5M0VFMjNGREVBREUwMDQxNTA5QyAvKiBQbGF0Zm9ybUltYWdlQnVmZmVyQmFj
a2VuZC5oICovLAogCQkJCTA1NjJGOTYwMTU3M0Y4OEYwMDMxQ0ExNiAvKiBQbGF0Zm9ybUxheWVy
LmggKi8sCiAJCQkJQ0VFRkNEN0IxOURCMzNEQzAwMzg3NkQ3IC8qIFBsYXRmb3JtTWVkaWFSZXNv
dXJjZUxvYWRlci5oICovLAogCQkJCTA3Mjg0N0UyMTZFQkM1QjAwMDQzQ0ZBNCAvKiBQbGF0Zm9y
bVRleHRUcmFjay5oICovLApAQCAtMjUxMjAsNiArMjUxMzUsOCBAQAogCQkJCUJDQUI0MTgwMTNF
MzU2RTgwMEQ4QUFGMyAvKiBSZWdpb24uaCAqLywKIAkJCQkwNzNBMTU1MTIxNzdBMzk4MDBFQTA4
RjIgLyogUmVtb3RlVmlkZW9TYW1wbGUuY3BwICovLAogCQkJCTA3M0ExNTUzMjE3N0EzOUEwMEVB
MDhGMiAvKiBSZW1vdGVWaWRlb1NhbXBsZS5oICovLAorCQkJCTcyQUI5M0YwMjNGREVBREYwMDQx
NTA5QyAvKiBSZW5kZXJpbmdCYWNrZW5kLmNwcCAqLywKKwkJCQk3MkFCOTNFRjIzRkRFQURGMDA0
MTUwOUMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovLAogCQkJCTcyOTlCQzY2MjNENjg2QzYwMEND
Njg4MyAvKiBSZW5kZXJpbmdNb2RlLmggKi8sCiAJCQkJQTczRjk1RkMxMkM5N0JGRTAwMzFBQUY5
IC8qIFJvdW5kZWRSZWN0LmNwcCAqLywKIAkJCQlBNzNGOTVGRDEyQzk3QkZFMDAzMUFBRjkgLyog
Um91bmRlZFJlY3QuaCAqLywKQEAgLTI5MzE4LDYgKzI5MzM1LDcgQEAKIAkJCQlGNDQyQzM1OTIz
RTNBREQyMDA0OTk1ODIgLyogQ29tcG9zaXRpb25IaWdobGlnaHQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJERDVBNzI3MUVCRUU0N0QwMDlCQTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzExNkUyQ0MxRkVENzVEQzAwQzA2RkRFIC8qIENvbXB1dGVkRWZm
ZWN0VGltaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFCOTNGNDIzRkRGODU0MDA0MTUwOUMg
LyogQ29uY3JldGVJbWFnZUJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOEYxMkIw
MjZGNzAwQzFBMzU5IC8qIENvbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1Qzk3QUYzMDhFQTkw
ODgwMEFDRDI3MyAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCTJEQUYzNDNEMUVBN0Uw
RjEwMDM4MkNEMyAvKiBDb25zdGFudFByb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTI5
NjYzLDYgKzI5NjgxLDggQEAKIAkJCQkxMTJGQjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxh
eUlubGluZVJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNC
MCAvKiBEaXNwbGF5TGluZUJveC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUx
RTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0LmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFCOTNGMjIz
RkRGNUE5MDA0MTUwOUMgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNzJBQjkzRjMyM0ZERjVCMDAwNDE1MDlDIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0Ey
Q0EgLyogRGlzcGxheUxpc3RSZWNvcmRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkx
QzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMzAyNzcsNiArMzAyOTcsOCBAQAogCQkJCTMxOEVBRDREMUZBOTEzODAwMDhDRUY4NiAvKiBJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHRTZXR0aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJBMTBCOTIwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3MkJBQzNBRTIzRTFGMEIwMDA4RDc0MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmggaW4g
SGVhZGVycyAqLywKKwkJCQk3MkFCOTNGNjIzRkRGQ0ZGMDA0MTUwOUMgLyogSW1hZ2VCdWZmZXJD
R0JhY2tlbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTcyQUI5M0Y3MjNGREZENTgwMDQxNTA5QyAv
KiBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEM0Uy
MUREMjE4MzQ0NEEwMEU2NkY1NSAvKiBJbWFnZUJ1ZmZlclV0aWxpdGllc0NHLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyRDI1Mzk2MzE4Q0U3RjYyMDAyNzAyMjIgLyogSW1hZ2VDb250cm9sc0J1dHRv
bkVsZW1lbnRNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMDE5MkQ2MThCNkI5QjcwMDdGQzdB
MSAvKiBJbWFnZUNvbnRyb2xzUm9vdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3NjMs
NiArMzE3ODUsNyBAQAogCQkJCUJDQUE0ODcwMTRBMDUyNTMwMDg4RkFDNCAvKiBQbGF0Zm9ybUV2
ZW50RmFjdG9yeU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcyM0Y3N0IxNDg0Q0E0QzAwOEM2
REJFIC8qIFBsYXRmb3JtRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5
NTFENTRGNUZCMDBERDdDNjggLyogUGxhdGZvcm1HYW1lcGFkLmggaW4gSGVhZGVycyAqLywKKwkJ
CQk3MkFCOTNGNTIzRkRGQzlDMDA0MTUwOUMgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTkzNUM0NzY4MDlBQzRENDMwMEE2QUFCNCAvKiBQbGF0Zm9y
bUtleWJvYXJkRXZlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTA1NjJGOTYxMTU3M0Y4OEYwMDMx
Q0ExNiAvKiBQbGF0Zm9ybUxheWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTQ0Rjc4OTE1Q0ZC
MkE4MDBBRjMzQTggLyogUGxhdGZvcm1Mb2NhbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzE5NDEs
NiArMzE5NjQsNyBAQAogCQkJCUJDRUE0ODc2MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJJbWFn
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDhGMkYwMEExMjEzRTYxNzAwRENFQzQ4IC8qIFJlbmRl
ckltYWdlUmVzb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4NjQxRDQ4MTIxNDJGN0QwMDhE
RTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNzJBQjkzRjgyM0ZFMDBDOTAwNDE1MDlDIC8qIFJlbmRlcmluZ0JhY2tlbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcyOTlCQzY4MjNENkE1M0UwMENDNjg4MyAvKiBSZW5kZXJpbmdNb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1NTZDN0M0QjIyMTIzOTk3MDA5QjA2Q0EgLyogUmVuZGVyaW5n
VXBkYXRlU2NoZWR1bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDkxNkZGNzE5NURGNkEwMDA1
QUIzNDkgLyogUmVuZGVyaW5nVXBkYXRlVGhyb3R0bGVTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IGY1ZTc2NTAwNjlh
NmQ4NjkwZDk0M2RlZTI2YmIzNjFmOTE4OWNlMzEuLmJlMjk3N2ExYTk0YTNkNjY0YjY4MWQyZTdk
Yjk1Zjk5ZDIxMWE5NDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2FudmFzR3JhZGllbnQuaCIKICNpbmNs
dWRlICJDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVu
dC5oIgpAQCAtMzQ5LDkgKzM1MCw2IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogSFRNTENh
bnZhc0VsZW1lbnQ6OmNyZWF0ZUNvbnRleHQyZChjb25zdCBTdHJpbmcmIHR5cGUpCiAKICAgICBt
X2NvbnRleHQgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZSgqdGhpcywgZG9jdW1l
bnQoKS5pblF1aXJrc01vZGUoKSk7CiAKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxh
eUxpc3REcmF3aW5nKTsKLSAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KCpt
X2NvbnRleHQpLnNldFRyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KG1fdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXkpOwotCiAjaWYgVVNFKElPU1VSRkFDRV9DQU5WQVNfQkFDS0lOR19TVE9SRSkgfHwgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICAvLyBOZWVkIHRvIG1ha2Ugc3VyZSBhIFJl
bmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQgY3JlYXRlZCBmb3IgdGhlIENhbnZh
cy4KICAgICBpbnZhbGlkYXRlU3R5bGVBbmRMYXllckNvbXBvc2l0aW9uKCk7CkBAIC04MjIsMzkg
KzgyMCwyNyBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjpzaG91bGRBY2NlbGVyYXRlKGNvbnN0
IEludFNpemUmIHNpemUpIGNvbnN0CiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnNldFVzZXNE
aXNwbGF5TGlzdERyYXdpbmcoYm9vbCB1c2VzRGlzcGxheUxpc3REcmF3aW5nKQogewotICAgIGlm
ICh1c2VzRGlzcGxheUxpc3REcmF3aW5nID09IG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKLSAg
ICAgICAgcmV0dXJuOwotICAgIAogICAgIG1fdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IHVzZXNE
aXNwbGF5TGlzdERyYXdpbmc7Ci0KLSAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
PihtX2NvbnRleHQuZ2V0KCkpKQotICAgICAgICBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KCptX2NvbnRleHQpLnNldFVzZXNEaXNwbGF5TGlzdERyYXdpbmcobV91c2VzRGlzcGxh
eUxpc3REcmF3aW5nKTsKIH0KIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6c2V0VHJhY2tzRGlz
cGxheUxpc3RSZXBsYXkoYm9vbCB0cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKIHsKLSAgICBpZiAo
dHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgPT0gbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKLSAg
ICAgICAgcmV0dXJuOwotCiAgICAgbV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSA9IHRyYWNrc0Rp
c3BsYXlMaXN0UmVwbGF5OwotCi0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
bV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgZG93bmNhc3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPigqbV9jb250ZXh0KS5zZXRUcmFja3NEaXNwbGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KTsKKyAgICBpZiAoYnVmZmVyKCkgJiYgYnVmZmVyKCktPmRyYXdpbmdDb250
ZXh0KCkpCisgICAgICAgIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpLT5zZXRUcmFja3NEaXNw
bGF5TGlzdFJlcGxheShtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5KTsKIH0KIAogU3RyaW5nIEhU
TUxDYW52YXNFbGVtZW50OjpkaXNwbGF5TGlzdEFzVGV4dChEaXNwbGF5TGlzdDo6QXNUZXh0Rmxh
Z3MgZmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4o
bV9jb250ZXh0LmdldCgpKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oKm1fY29udGV4dCkuZGlzcGxheUxpc3RBc1RleHQoZmxhZ3MpOwotCisgICAg
aWYgKGJ1ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICByZXR1
cm4gYnVmZmVyKCktPmRyYXdpbmdDb250ZXh0KCktPmRpc3BsYXlMaXN0KCkuYXNUZXh0KGZsYWdz
KTsKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6
cmVwbGF5RGlzcGxheUxpc3RBc1RleHQoRGlzcGxheUxpc3Q6OkFzVGV4dEZsYWdzIGZsYWdzKSBj
b25zdAogewotICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KG1fY29udGV4dC5n
ZXQoKSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KCptX2NvbnRleHQpLnJlcGxheURpc3BsYXlMaXN0QXNUZXh0KGZsYWdzKTsKLQorICAgIGlmIChi
dWZmZXIoKSAmJiBidWZmZXIoKS0+ZHJhd2luZ0NvbnRleHQoKSAmJiBidWZmZXIoKS0+ZHJhd2lu
Z0NvbnRleHQoKS0+cmVwbGF5RGlzcGxheUxpc3QoKSkKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcigp
LT5kcmF3aW5nQ29udGV4dCgpLT5yZXBsYXlEaXNwbGF5TGlzdCgpLT5hc1RleHQoZmxhZ3MpOwog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtODg5LDExICs4NzUsMjcgQEAgdm9pZCBIVE1M
Q2FudmFzRWxlbWVudDo6Y3JlYXRlSW1hZ2VCdWZmZXIoKSBjb25zdAogICAgIGlmICghd2lkdGgo
KSB8fCAhaGVpZ2h0KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkFj
Y2VsZXJhdGVkIDogUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDsKLQogICAgIGF1dG8gaG9z
dFdpbmRvdyA9IChkb2N1bWVudCgpLnZpZXcoKSAmJiBkb2N1bWVudCgpLnZpZXcoKS0+cm9vdCgp
KSA/IGRvY3VtZW50KCkudmlldygpLT5yb290KCktPmhvc3RXaW5kb3coKSA6IG51bGxwdHI7CisK
KyAgICAvLyBGSVhNRTogQWRkIGEgbmV3IHNldHRpbmcgZm9yIERpc3BsYXlMaXN0IGRyYXdpbmcg
b24gY2FudmFzLgorICAgIGJvb2wgdXNlc0Rpc3BsYXlMaXN0RHJhd2luZyA9IG1fdXNlc0Rpc3Bs
YXlMaXN0RHJhd2luZy52YWx1ZU9yKGRvY3VtZW50KCkuc2V0dGluZ3MoKS5kaXNwbGF5TGlzdERy
YXdpbmdFbmFibGVkKCkpOworCisgICAgLy8gRklYTUU6IEFkZCBhIG5ldyBzZXR0aW5nIGZvciBy
ZW1vdGUgZHJhd2luZyBvbiBjYW52YXMuCisgICAgYm9vbCB1c2VzUmVtb3RlRHJhd2luZyA9IHRy
dWU7CisKKyAgICBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGU7CisgICAgaWYgKHVzZXNSZW1v
dGVEcmF3aW5nKQorICAgICAgICByZW5kZXJpbmdNb2RlID0gc2hvdWxkQWNjZWxlcmF0ZShzaXpl
KCkpID8gUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpS
ZW1vdGU7CisgICAgZWxzZSBpZiAodXNlc0Rpc3BsYXlMaXN0RHJhd2luZykKKyAgICAgICAgcmVu
ZGVyaW5nTW9kZSA9IHNob3VsZEFjY2VsZXJhdGUoc2l6ZSgpKSA/IFJlbmRlcmluZ01vZGU6OkRp
c3BsYXlMaXN0QWNjZWxlcmF0ZWQgOiBSZW5kZXJpbmdNb2RlOjpEaXNwbGF5TGlzdDsKKyAgICBl
bHNlCisgICAgICAgIHJlbmRlcmluZ01vZGUgPSBzaG91bGRBY2NlbGVyYXRlKHNpemUoKSkgPyBS
ZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCA6IFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ7
CisKICAgICBzZXRJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUoKSwgcmVuZGVy
aW5nTW9kZSwgMSwgQ29sb3JTcGFjZTo6U1JHQiwgaG9zdFdpbmRvdykpOwogCisgICAgaWYgKGJ1
ZmZlcigpICYmIGJ1ZmZlcigpLT5kcmF3aW5nQ29udGV4dCgpKQorICAgICAgICBidWZmZXIoKS0+
ZHJhd2luZ0NvbnRleHQoKS0+c2V0VHJhY2tzRGlzcGxheUxpc3RSZXBsYXkobV90cmFja3NEaXNw
bGF5TGlzdFJlcGxheSk7CisKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JF
KSB8fCBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChtX2NvbnRleHQgJiYg
bV9jb250ZXh0LT5pczJkKCkpIHsKICAgICAgICAgLy8gUmVjYWxjdWxhdGUgY29tcG9zaXRpbmcg
cmVxdWlyZW1lbnRzIGlmIGFjY2VsZXJhdGlvbiBzdGF0ZSBjaGFuZ2VkLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCmluZGV4IGI1Mjg2NDVjNjU4NzRjZDBjYTA5MzQ0NDYx
YjQ1NGQ1NjA1MDYzMjYuLjQyMTM0YTEyMjk0MTQ5NmJmMzFiY2RkNzljNmJjNWMzOTFhNzhhNDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKQEAgLTE2MSw3ICsxNjEs
NyBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBtX2lnbm9yZVJlc2V0IHsgZmFsc2UgfTsKIAotICAg
IGJvb2wgbV91c2VzRGlzcGxheUxpc3REcmF3aW5nIHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxi
b29sPiBtX3VzZXNEaXNwbGF5TGlzdERyYXdpbmc7CiAgICAgYm9vbCBtX3RyYWNrc0Rpc3BsYXlM
aXN0UmVwbGF5IHsgZmFsc2UgfTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYW52YXNSZW5kZXJp
bmdDb250ZXh0PiBtX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0No
cm9tZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5jcHAKaW5kZXggZjU4NmNjYjE3
OGM3NmU1NzhjMjEzMDg0NmExZmJmYTdlZmZkN2FmNS4uZmU3MTdiMWZmOTNlNGNiYmRhY2RlYjJl
YWRjMGE5ZmE1YmNiMWNkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmNwcApAQCAtNDMsNiArNDMsNyBA
QAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIK
ICNpbmNsdWRlICJQb3B1cE9wZW5pbmdPYnNlcnZlci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0Jh
Y2tlbmQuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhh
bmRsZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC00OTQsNiArNDk1LDEzIEBAIHZvaWQg
Q2hyb21lOjpzZXRDdXJzb3JIaWRkZW5VbnRpbE1vdXNlTW92ZXMoYm9vbCBoaWRkZW5VbnRpbE1v
dXNlTW92ZXMpCiAgICAgbV9jbGllbnQuc2V0Q3Vyc29ySGlkZGVuVW50aWxNb3VzZU1vdmVzKGhp
ZGRlblVudGlsTW91c2VNb3Zlcyk7CiB9CiAKK1JlbmRlcmluZ0JhY2tlbmQqIENocm9tZTo6c2hh
cmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3JlbmRlcmluZ0JhY2tl
bmQpCisgICAgICAgIG1fcmVuZGVyaW5nQmFja2VuZCA9IG1fY2xpZW50LmNyZWF0ZVJlbmRlcmlu
Z0JhY2tlbmQoKTsKKyAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kLmdldCgpOworfQorCiBQ
bGF0Zm9ybURpc3BsYXlJRCBDaHJvbWU6OmRpc3BsYXlJRCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fZGlzcGxheUlEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lLmgKaW5kZXggNjYyYmUwMGZhMGFiYWU4YjdiYTdk
NjY4ZDQ0NzBlYzUxMzYxYWY0OS4uNmNmY2FlY2EyODVjNGViYzVlMjI0NGU4ZWJkNjRiYWM5YTc2
MmUyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0Nocm9tZS5oCkBAIC04Myw2ICs4Myw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEN1cnNvcihjb25zdCBDdXJzb3ImKSBvdmVycmlkZTsKICAgICB2b2lkIHNldEN1cnNv
ckhpZGRlblVudGlsTW91c2VNb3Zlcyhib29sKSBvdmVycmlkZTsKIAorICAgIFJlbmRlcmluZ0Jh
Y2tlbmQqIHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdCBvdmVycmlkZTsKKwogICAgIHZv
aWQgc2NoZWR1bGVBbmltYXRpb24oKSBvdmVycmlkZSB7IH0KIAogICAgIFBsYXRmb3JtRGlzcGxh
eUlEIGRpc3BsYXlJRCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMTk1LDYgKzE5Nyw3IEBAIHByaXZh
dGU6CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBib29sIG1faXNEaXNwYXRjaFZpZXdw
b3J0RGF0YURpZENoYW5nZVN1cHByZXNzZWQgeyBmYWxzZSB9OwogI2VuZGlmCisgICAgbXV0YWJs
ZSBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2VuZD4gbV9yZW5kZXJpbmdCYWNrZW5kOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9DaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
aW5kZXggZDJmNDJhMTNiNmEzNDc5OTljN2Q2OTA0YjkwMDc2NzgxZTgxMmFlZi4uNWRjM2I2YmI4
NzNlZDRhNjRiNTMwMWY2MjQ3ZmU2MmUxYjg4NTE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9DaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oCkBAIC0zMDUsNiArMzA1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgUmVmUHRyPERp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3Jt
RGlzcGxheUlEKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAorICAgIHZpcnR1
YWwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tl
bmQoKSBjb25zdCB7IHJldHVybiBudWxscHRyOyB9CisKICAgICAvLyBQYXNzIG51bGxwdHIgYXMg
dGhlIEdyYXBoaWNzTGF5ZXIgdG8gZGV0YXRjaCB0aGUgcm9vdCBsYXllci4KICAgICB2aXJ0dWFs
IHZvaWQgYXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJhbWUmLCBHcmFwaGljc0xheWVyKikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhdHRhY2hWaWV3T3ZlcmxheUdyYXBoaWNzTGF5ZXIoR3JhcGhp
Y3NMYXllciopID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RX
aW5kb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0hvc3RXaW5kb3cuaAppbmRleCAyY2Zl
Y2FkYzI0ZDk4MmE4NjE2Mzc0Yjc2YTBlNGZiMGZmZjdhOWQ0Li44OTg2NTM0NmNmNDgwZjgwNmM1
YzBjZTkzNTIxZGU2OTIwODE4MDRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9Ib3N0V2luZG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vSG9zdFdpbmRvdy5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMjAgQXBwbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjMsMTQgKzIzLDE0IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIEhvc3RX
aW5kb3dfaAotI2RlZmluZSBIb3N0V2luZG93X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAi
V2lkZ2V0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ3Vyc29yOworY2xhc3Mg
UmVuZGVyaW5nQmFja2VuZDsKIAogY2xhc3MgSG9zdFdpbmRvdyB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSG9zdFdpbmRvdyk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjQsNiAr
NjQsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q3Vyc29ySGlkZGVuVW50aWxN
b3VzZU1vdmVzKGJvb2wpID0gMDsKIAorICAgIHZpcnR1YWwgUmVuZGVyaW5nQmFja2VuZCogc2hh
cmVkUmVuZGVyaW5nQmFja2VuZCgpIGNvbnN0ID0gMDsKKwogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUFuaW1hdGlvbigpID0gMDsKIAogICAgIHZpcnR1YWwgUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKCkgY29uc3QgPSAwOwpAQCAtNzUsNSArNzcsMyBAQCBwdWJsaWM6CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIb3N0V2luZG93X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaApp
bmRleCA2NTZiMzFhMWQ5Yzc3NzkxM2NhYTBkZjk3ZGYyODliMDQzOWFjMzc5Li5kM2U4YWIzZjI5
MTIxYTdmZWRhYTJhOTI1MmIxNTU2NDIyYmU1YWMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC0yNiwyNiAr
MjYsMjkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBCYWNrZW5kVHlwZT4KIGNsYXNzIENvbmNyZXRlSW1hZ2VCdWZmZXIgOiBwdWJsaWMgSW1h
Z2VCdWZmZXIgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93KQorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEltYWdlQnVmZmVyVHlwZSA9IENvbmNyZXRlSW1hZ2VCdWZmZXIs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdl
QnVmZmVyPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2Nh
bGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKICAgICAgICAgYXV0byBiYWNrZW5kID0g
QmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhv
c3RXaW5kb3cpOwogICAgICAgICBpZiAoIWJhY2tlbmQpCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxDb25jcmV0ZUltYWdlQnVmZmVy
PihuZXcgQ29uY3JldGVJbWFnZUJ1ZmZlcihXVEZNb3ZlKGJhY2tlbmQpKSk7CisgICAgICAgIHJl
dHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPihuZXcgSW1hZ2VCdWZmZXJUeXBl
KFdURk1vdmUoYmFja2VuZCksIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29uY3JldGVJbWFnZUJ1
ZmZlciwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
SW1hZ2VCdWZmZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQogICAgIHsKICAgICAg
ICAgYXV0byBiYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShzaXplLCBjb250ZXh0KTsKICAg
ICAgICAgaWYgKCFiYWNrZW5kKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8Q29uY3JldGVJbWFnZUJ1ZmZlcj4obmV3IENvbmNyZXRl
SW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkpOworICAgICAgICByZXR1cm4gc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyVHlwZT4obmV3IEltYWdlQnVmZmVyVHlwZShXVEZNb3ZlKGJhY2tl
bmQpLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CiAgICAgfQogCiBw
cm90ZWN0ZWQ6CkBAIC02NiwxMDAgKzY5LDE1MiBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2b2lkIGZs
dXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2JhY2tlbmQtPmZsdXNoQ29u
dGV4dCgpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkgewor
ICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+
Zmx1c2hDb250ZXh0KCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0g
YmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFzZVRy
YW5zZm9ybSgpOyB9Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fYmFja2VuZC0+bG9naWNhbFNpemUoKTsgfQotICAgIEludFNpemUgYmFja2VuZFNp
emUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7IH0K
LSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2Jh
Y2tlbmQtPnJlc29sdXRpb25TY2FsZSgpOyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFu
c2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkgPyBlbnN1cmVC
YWNrZW5kKCktPmJhc2VUcmFuc2Zvcm0oKSA6IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50
U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmQo
KSA/IGVuc3VyZUJhY2tlbmQoKS0+bG9naWNhbFNpemUoKSA6IEludFNpemUoKTsgfQorICAgIElu
dFNpemUgYmFja2VuZFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5k
KCkgPyBlbnN1cmVCYWNrZW5kKCktPmJhY2tlbmRTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBm
bG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNr
ZW5kKCkgPyBlbnN1cmVCYWNrZW5kKCktPnJlc29sdXRpb25TY2FsZSgpIDogMTsgfQogCi0gICAg
c2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPm1l
bW9yeUNvc3QoKTsgfQotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4dGVybmFsTWVtb3J5Q29zdCgpOyB9CisgICAgc2l6
ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kKCkg
PyBlbnN1cmVCYWNrZW5kKCktPm1lbW9yeUNvc3QoKSA6IDA7IH0KKyAgICBzaXplX3QgZXh0ZXJu
YWxNZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZCgpID8g
ZW5zdXJlQmFja2VuZCgpLT5leHRlcm5hbE1lbW9yeUNvc3QoKSA6IDA7IH0KIAogICAgIE5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9
IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4g
bV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgaWYgKGF1
dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAg
ICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgUmVmUHRyPElt
YWdlPiBjb3B5SW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2lu
Z1N0b3JlLCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVS
ZXNvbHV0aW9uOjpObykgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBj
b25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4
dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3Is
IHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCiAgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
SW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBt
X2JhY2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsK
KyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAg
ICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXcoZGVz
dENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQogICAgIH0K
IAogICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29u
c3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNl
LCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBv
cHRpb25zKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9iYWNrZW5kLT5kcmF3UGF0dGVybihk
ZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBz
cGFjaW5nLCBvcHRpb25zKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAg
IGJhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0
dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CiAgICAg
fQogCiAgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCiAg
ICAgewotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7Cisg
ICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lu
a0ludG9OYXRpdmVJbWFnZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRp
b24gcHJlc2VydmVSZXNvbHV0aW9uID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2JhY2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVS
ZXNvbHV0aW9uKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVy
biBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdm9pZCBkcmF3Q29uc3VtaW5n
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2JhY2tlbmQtPmRyYXdDb25zdW1pbmco
ZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgaWYgKGF1
dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBt
X2JhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCiAgICAg
ewotICAgICAgICBtX2JhY2tlbmQtPnRyYW5zZm9ybUNvbG9yU3BhY2Uoc3JjQ29sb3JTcGFjZSwg
ZGVzdENvbG9yU3BhY2UpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAg
YmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFj
ZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwgUHJlc2VydmVSZXNvbHV0aW9u
IHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGNvbnN0
X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKLSAgICAg
ICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBwcmVzZXJ2
ZVJlc29sdXRpb24pOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQo
KSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMp
LmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTCht
aW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRl
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRl
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4g
YmFja2VuZC0+dG9EYXRhKG1pbWVUeXBlLCBxdWFsaXR5KTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIFZlY3Rvcjx1aW50OF90PiB0b0JHUkFEYXRhKCkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZl
ciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9C
R1JBRGF0YSgpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmQoKSkg
eworICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZs
dXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFn
ZURhdGE+IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwg
Y29uc3QgSW50UmVjdCYgc3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGNv
bnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKLSAg
ICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVj
dCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZCgpKSB7CisgICAg
ICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250
ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZv
cm1hdCwgc3JjUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQogCiAgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZv
cm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBmbHVzaENvbnRleHQoKTsKLSAgICAgICAgbV9iYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRG
b3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50KTsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kKCkpIHsKKyAgICAgICAgICAgIGZsdXNoQ29udGV4dCgp
OworICAgICAgICAgICAgYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURh
dGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBQbGF0Zm9y
bUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2JhY2tlbmQtPnBsYXRmb3JtTGF5ZXIoKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tl
bmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxhdGZv
cm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBib29sIGNv
cHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwgR0NH
TGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlUb1BsYXRm
b3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJuYWxm
b3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tl
bmQgPSBlbnN1cmVCYWNrZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRv
UGxhdGZvcm1UZXh0dXJlKGNvbnRleHQsIHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRl
cm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5jcHAK
aW5kZXggNGEzZmJlYWU5ZTdjYTZmZTE5OTgyZGQ0ZWM5M2Q3YmQ0ZTg5OWEyMy4uYmNlYjBjMDRh
NGJhOGVkNjBkNzEyOWNhYjM3YTE5M2Q1MzM3ZWI5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZUJ1ZmZl
ci5oIgorI2luY2x1ZGUgIlJlbmRlcmluZ0JhY2tlbmQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zOCwzNiArMzksMTIgQEAgc3RhdGljIGNvbnN0IGZsb2F0IE1heENsYW1wZWRBcmVh
ID0gTWF4Q2xhbXBlZExlbmd0aCAqIE1heENsYW1wZWRMZW5ndGg7CiAKIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUs
IFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKLSAgICAKLSAgICBzd2l0
Y2ggKHJlbmRlcmluZ01vZGUpIHsKLSAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVk
OgotICAgICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShz
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwotICAgICAgICBG
QUxMVEhST1VHSDsKLSAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQ6Ci0gICAg
ICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgICAgICBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxl
cmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgaG9zdFdpbmRvdyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiBpbWFn
ZUJ1ZmZlcjsKKyAgICByZXR1cm4gUmVuZGVyaW5nQmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFj
a2VuZChob3N0V2luZG93KS5jcmVhdGVJbWFnZUJ1ZmZlcihzaXplLCByZW5kZXJpbmdNb2RlLCBy
ZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOwogfQogCiBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXI+IEltYWdlQnVmZmVyOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBz
aXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKLQotICAgIHN3aXRjaCAoY29udGV4dC5yZW5k
ZXJpbmdNb2RlKCkpIHsKLSAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkFjY2VsZXJhdGVkOgotICAg
ICAgICBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBj
b250ZXh0KTsKLSAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpV
bmFjY2VsZXJhdGVkOgotICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQotICAgICAgICAgICAgaW1h
Z2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBjb250ZXh0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlQnVmZmVyOworICAg
IHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpzaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkuY3JlYXRl
SW1hZ2VCdWZmZXIoc2l6ZSwgY29udGV4dCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlcj4gSW1hZ2VCdWZmZXI6OmNyZWF0ZUNvbXBhdGlibGVCdWZmZXIoY29uc3QgRmxvYXRTaXpl
JiBzaXplLCBjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCBhMGIwNGFmZTI3ZDM4NTgw
ODc2NmFjNmMyYjE3Mzc1M2Q0MDU4MmI0Li5hYmZiYTNlNzEwODA2MWI1NzVmNTZlYjc5MTNjNWI4
MGNjZDNlNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QnVmZmVyLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorbmFt
ZXNwYWNlIERpc3BsYXlMaXN0IHsKK2NsYXNzIERyYXdpbmdDb250ZXh0OworfQorCiBjbGFzcyBJ
bWFnZUJ1ZmZlciB7CiBwdWJsaWM6CiAgICAgLy8gV2lsbCByZXR1cm4gYSBudWxsIHBvaW50ZXIg
b24gYWxsb2NhdGlvbiBmYWlsdXJlLgpAQCAtNTcsNiArNjEsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIGZsdXNoQ29udGV4dCgpID0gMDsKIAorICAgIHZpcnR1YWwgRGlzcGxheUxpc3Q6OkRyYXdp
bmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dCgpIHsgfQorCiAgICAgdmlydHVhbCBBZmZpbmVU
cmFuc2Zvcm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEludFNpemUg
bG9naWNhbFNpemUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBJbnRTaXplIGJhY2tlbmRTaXpl
KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGxhdGZvcm1JbWFnZUJ1ZmZlci5oCmluZGV4IDhmNDY5MDExN2IzNWU5OTFjMmEwMmVjN2Uw
YzdlNGQxMzI1YjE1OTIuLjhiNmFhMzVmYWQyYzRhMWQ4NzI5ZjE3ZjJiYzAxODQ1MmU2ZmFjYmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1h
Z2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUltYWdlQnVmZmVyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQ29uY3JldGVJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIkRpc3BsYXlMaXN0SW1hZ2VCdWZm
ZXIuaCIKIAogI2lmIFVTRShDRykKICNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQml0bWFwQmFja2Vu
ZC5oIgpAQCAtNDQsMjIgKzQ1LDI0IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0Uo
Q0cpCi11c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJD
R0JpdG1hcEJhY2tlbmQ7Cit1c2luZyBJbWFnZUJ1ZmZlclVuYWNjZWxlcmF0ZWRCYWNrZW5kID0g
SW1hZ2VCdWZmZXJDR0JpdG1hcEJhY2tlbmQ7CiAjZWxpZiBVU0UoRElSRUNUMkQpCi11c2luZyBV
bmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tl
bmQ7Cit1c2luZyBJbWFnZUJ1ZmZlclVuYWNjZWxlcmF0ZWRCYWNrZW5kID0gSW1hZ2VCdWZmZXJE
aXJlY3QyREJhY2tlbmQ7CiAjZWxpZiBVU0UoQ0FJUk8pCi11c2luZyBVbmFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0ltYWdlU3VyZmFjZUJhY2tlbmQ7Cit1
c2luZyBJbWFnZUJ1ZmZlclVuYWNjZWxlcmF0ZWRCYWNrZW5kID0gSW1hZ2VCdWZmZXJDYWlyb0lt
YWdlU3VyZmFjZUJhY2tlbmQ7CiAjZW5kaWYKIAogI2lmIEhBVkUoSU9TVVJGQUNFKQotdXNpbmcg
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQgPSBJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tl
bmQ7Cit1c2luZyBJbWFnZUJ1ZmZlckFjY2VsZXJhdGVkQmFja2VuZCA9IEltYWdlQnVmZmVySU9T
dXJmYWNlQmFja2VuZDsKICNlbGlmIFVTRShDQUlSTykgJiYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLXVzaW5nIEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gSW1hZ2VCdWZm
ZXJDYWlyb0dMU3VyZmFjZUJhY2tlbmQ7Cit1c2luZyBJbWFnZUJ1ZmZlckFjY2VsZXJhdGVkQmFj
a2VuZCA9IEltYWdlQnVmZmVyQ2Fpcm9HTFN1cmZhY2VCYWNrZW5kOwogI2Vsc2UKLXVzaW5nIEFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFj
a2VuZDsKK3VzaW5nIEltYWdlQnVmZmVyQWNjZWxlcmF0ZWRCYWNrZW5kID0gSW1hZ2VCdWZmZXJV
bmFjY2VsZXJhdGVkQmFja2VuZDsKICNlbmRpZgogCi11c2luZyBVbmFjY2VsZXJhdGVkSW1hZ2VC
dWZmZXIgPSBDb25jcmV0ZUltYWdlQnVmZmVyPFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tl
bmQ+OwotdXNpbmcgQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IENvbmNyZXRlSW1hZ2VCdWZmZXI8
QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlckJhY2tlbmQ+OwordXNpbmcgVW5hY2NlbGVyYXRlZEltYWdl
QnVmZmVyID0gQ29uY3JldGVJbWFnZUJ1ZmZlcjxJbWFnZUJ1ZmZlclVuYWNjZWxlcmF0ZWRCYWNr
ZW5kPjsKK3VzaW5nIEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUltYWdlQnVmZmVy
PEltYWdlQnVmZmVyQWNjZWxlcmF0ZWRCYWNrZW5kPjsKK3VzaW5nIERpc3BsYXlMaXN0VW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyID0gRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEltYWdlQnVmZmVy
VW5hY2NlbGVyYXRlZEJhY2tlbmQ+OwordXNpbmcgRGlzcGxheUxpc3RBY2NlbGVyYXRlZEltYWdl
QnVmZmVyID0gRGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEltYWdlQnVmZmVyQWNjZWxlcmF0ZWRC
YWNrZW5kPjsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2VCdWZmZXJCYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uOTkzOWE4ZjkwYzk5MGI1NDU1ZThjNDRhNjdkNWMwYWM3ZTU2YTMzMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShD
RykKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIgorI2VsaWYgVVNFKERJUkVDVDJE
KQorI2luY2x1ZGUgIkltYWdlQnVmZmVyRGlyZWN0MkRCYWNrZW5kLmgiCisjZWxpZiBVU0UoQ0FJ
Uk8pCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJDYWlyb0JhY2tlbmQuaCIKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyNpZiBVU0UoQ0cpCit1c2luZyBJbWFnZUJ1ZmZlckJhc2VCYWNr
ZW5kID0gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ7CisjZWxpZiBVU0UoRElSRUNUMkQpCit1c2luZyBJ
bWFnZUJ1ZmZlckJhc2VCYWNrZW5kID0gSW1hZ2VCdWZmZXJEaXJlY3QyREJhY2tlbmQ7CisjZWxp
ZiBVU0UoQ0FJUk8pCit1c2luZyBJbWFnZUJ1ZmZlckJhc2VCYWNrZW5kID0gSW1hZ2VCdWZmZXJD
YWlyb0JhY2tlbmQ7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43YjA4MTYzNjgwMjA2NmM1YzRhYWM2NGU5YzYyYTU4Nzk3ZTliYjI1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5n
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlbmRl
cmluZ0JhY2tlbmQuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIkNocm9tZUNs
aWVudC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RkOjp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IFJlbmRlcmluZ0JhY2tlbmQ6OmNy
ZWF0ZSgpCit7CisgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPihu
ZXcgUmVuZGVyaW5nQmFja2VuZCgpKTsKK30KKworUmVuZGVyaW5nQmFja2VuZCYgUmVuZGVyaW5n
QmFja2VuZDo6c2hhcmVkUmVuZGVyaW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiBob3N0V2lu
ZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
aW5nQmFja2VuZD4+IHNoYXJlZFJlbmRlcmluZ0JhY2tlbmQgeyBSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGUoKSB9OworICAgIHJldHVybiBob3N0V2luZG93ICYmIGhvc3RXaW5kb3ctPnNoYXJlZFJl
bmRlcmluZ0JhY2tlbmQoKSA/ICpob3N0V2luZG93LT5zaGFyZWRSZW5kZXJpbmdCYWNrZW5kKCkg
OiAqc2hhcmVkUmVuZGVyaW5nQmFja2VuZC5nZXQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3cpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKwor
ICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNj
ZWxlcmF0ZWQ6CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKKyAgICAgICAgRkFMTFRI
Uk9VR0g7CisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkOgorICAgIGNhc2Ug
UmVuZGVyaW5nTW9kZTo6UmVtb3RlOgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAgICAgICBicmVh
azsKKworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6RGlzcGxheUxpc3RBY2NlbGVyYXRlZDoKKyAg
ICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIGhvc3RXaW5kb3cpOworICAg
ICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0Ogor
ICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBEaXNw
bGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIHJlc29sdXRpb25T
Y2FsZSwgY29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKK30KKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNp
emUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCdWZmZXI+IGltYWdlQnVmZmVyOworCisgICAgc3dpdGNoIChjb250ZXh0LnJlbmRl
cmluZ01vZGUoKSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6QWNjZWxlcmF0ZWQ6CisgICAg
Y2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZDoKKyAgICAgICAgaW1hZ2VCdWZm
ZXIgPSBBY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAg
ICAgIEZBTExUSFJPVUdIOworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZDoK
KyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFnZUJ1ZmZl
cikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyOjpj
cmVhdGUoc2l6ZSwgY29udGV4dCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBSZW5kZXJp
bmdNb2RlOjpEaXNwbGF5TGlzdEFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IERp
c3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQpOwor
ICAgICAgICBGQUxMVEhST1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OkRpc3BsYXlMaXN0
OgorICAgICAgICBpZiAoIWltYWdlQnVmZmVyKQorICAgICAgICAgICAgaW1hZ2VCdWZmZXIgPSBE
aXNwbGF5TGlzdFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHNpemUsIGNvbnRleHQp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VCdWZmZXI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmFjNzMwNjg1NzVk
MjAxZTFjMDFmN2MwMGEzODBjZjYxYWU1MjgzOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1JlbmRlcmluZ0JhY2tlbmQuaApAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiRmxvYXRTaXplLmgi
CisjaW5jbHVkZSAiUmVuZGVyaW5nTW9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEhvc3RXaW5kb3c7CitjbGFzcyBJbWFnZUJ1ZmZl
cjsKK2NsYXNzIEludFNpemU7CisKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFJlbmRlcmluZ0JhY2tl
bmQgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyaW5nQmFja2Vu
ZD4gY3JlYXRlKCk7CisKKyAgICBzdGF0aWMgUmVuZGVyaW5nQmFja2VuZCYgc2hhcmVkUmVuZGVy
aW5nQmFja2VuZChjb25zdCBIb3N0V2luZG93KiA9IG51bGxwdHIpOworCisgICAgdmlydHVhbCB+
UmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRTaXplJiwgUmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlLCBjb25zdCBIb3N0V2lu
ZG93Kik7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGNyZWF0ZUlt
YWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYpOworCitw
cm90ZWN0ZWQ6CisgICAgUmVuZGVyaW5nQmFja2VuZCgpID0gZGVmYXVsdDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1JlbmRlcmluZ01vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1JlbmRlcmluZ01vZGUuaAppbmRleCA2OWQ4YWU4MWM4NDhiMTBlNmYyZDA3YTc4OWIxNmMzMzNk
YzIzY2I0Li5hYTQ4MzVkYmZhYWFhOTc0MmYzNGFjYzM4ZjhhMWUwZTI3MGMyNGUwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9SZW5kZXJpbmdNb2RlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUmVuZGVyaW5nTW9kZS5oCkBAIC0z
MCw2ICszMCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBlbnVtIGNsYXNzIFJlbmRlcmluZ01v
ZGUgOiB1aW50OF90IHsKICAgICBBY2NlbGVyYXRlZCwKICAgICBVbmFjY2VsZXJhdGVkLAorICAg
IERpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgRGlzcGxheUxpc3QsCisgICAgUmVtb3RlQWNj
ZWxlcmF0ZWQsCisgICAgUmVtb3RlCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDllM2Yy
YWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5
TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0
cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9tSW5k
ZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+IERp
c3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3Qm
KTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlz
cGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTI5MmIxY2U0OGZjNDRjMTgxNWNlNzc0Y2UxYjk1YzczNjU1MmViZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmgKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKKyNp
bmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBs
YXllci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CituYW1lc3BhY2UgRGlzcGxheUxpc3QgeworCitjbGFzcyBEcmF3aW5nQ29udGV4dCB7Citw
dWJsaWM6CisgICAgRHJhd2luZ0NvbnRleHQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkK
KyAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdyYXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250
ZXh0KSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxp
c3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBHcmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJl
Y3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmluZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgfSkKKyAg
ICB7CisgICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gY29uc3RfY2FzdDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7ICB9CisgICAg
RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0KCkgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQorICAg
IGNvbnN0IERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxh
eUxpc3Q7IH0KKyAgICBjb25zdCBEaXNwbGF5TGlzdCogcmVwbGF5RGlzcGxheUxpc3QoKSBjb25z
dCB7IHJldHVybiBtX3JlcGxheURpc3BsYXlMaXN0LmdldCgpOyB9CisKKyAgICB2b2lkIHNldFRy
YWNrc0Rpc3BsYXlMaXN0UmVwbGF5KGJvb2wgdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkpCisgICAg
eworICAgICAgICBtX3RyYWNrc0Rpc3BsYXlMaXN0UmVwbGF5ID0gdHJhY2tzRGlzcGxheUxpc3RS
ZXBsYXk7CisgICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QucmVzZXQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQpCisg
ICAgeworICAgICAgICBpZiAoIW1fZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgUmVwbGF5ZXIgcmVwbGF5ZXIoZGVzdENvbnRleHQsIG1fZGlz
cGxheUxpc3QpOworICAgICAgICBpZiAobV90cmFja3NEaXNwbGF5TGlzdFJlcGxheSkKKyAgICAg
ICAgICAgIG1fcmVwbGF5RGlzcGxheUxpc3QgPSByZXBsYXllci5yZXBsYXkoeyB9LCBtX3RyYWNr
c0Rpc3BsYXlMaXN0UmVwbGF5KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwbGF5ZXIu
cmVwbGF5KCk7CisgICAgICAgIG1fZGlzcGxheUxpc3QuY2xlYXIoKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgR3JhcGhpY3NDb250ZXh0IG1fY29udGV4dDsKKyAgICBEaXNwbGF5TGlzdCBtX2Rp
c3BsYXlMaXN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxEaXNwbGF5TGlzdD4gbV9yZXBsYXlEaXNw
bGF5TGlzdDsKKyAgICBib29sIG1fdHJhY2tzRGlzcGxheUxpc3RSZXBsYXkgeyBmYWxzZSB9Owor
fTsKKworfSAvLyBEaXNwbGF5TGlzdAorfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDY5ODk0ZDgyYWEwNTQxM2UzNDJh
Y2E0NTc1ODVkNjAzZmY2NThkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaApAQCAt
MCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29uY3JldGVJbWFnZUJ1ZmZlci5oIgorI2lu
Y2x1ZGUgIkRpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworbmFtZXNwYWNlIERpc3BsYXlMaXN0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5
cGU+CitjbGFzcyBJbWFnZUJ1ZmZlciA6IHB1YmxpYyBDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tl
bmRUeXBlPiAsIHB1YmxpYyBEcmF3aW5nQ29udGV4dCB7CisgICAgdXNpbmcgQmFzZUNvbmNyZXRl
SW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKworcHVibGlj
OgorICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBo
b3N0V2luZG93KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
Ojp0ZW1wbGF0ZSBjcmVhdGU8SW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29s
b3JTcGFjZSwgaG9zdFdpbmRvdywgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIGF1dG8gY3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjp0ZW1wbGF0
ZSBjcmVhdGU8SW1hZ2VCdWZmZXI+KHNpemUsIGNvbnRleHQsIHNpemUpOworICAgIH0KKworICAg
IEltYWdlQnVmZmVyKHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4mJiBkYXRhQmFja2VuZCwg
Y29uc3QgRmxvYXRTaXplJiBzaXplKQorICAgICAgICA6IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
KFdURk1vdmUoZGF0YUJhY2tlbmQpKQorICAgICAgICAsIERyYXdpbmdDb250ZXh0KHNpemUpCisg
ICAgeworICAgIH0KKworICAgIEltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAg
ICAgICAgOiBEcmF3aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKKyAgICB+SW1hZ2VC
dWZmZXIoKQorICAgIHsKKyAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgIH0KKwor
ICAgIERyYXdpbmdDb250ZXh0KiBkcmF3aW5nQ29udGV4dCgpIG92ZXJyaWRlIHsgcmV0dXJuIHRo
aXM7IH0KKworICAgIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICByZXR1cm4gRHJhd2luZ0NvbnRleHQ6OmNvbnRleHQoKTsKKyAgICB9CisK
KyAgICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
RHJhd2luZ0NvbnRleHQ6OnJlcGxheURpc3BsYXlMaXN0KEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
Ojpjb250ZXh0KCkpOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIERpc3BsYXlMaXN0Cit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdCBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMt
aW5wdXQueGNmaWxlbGlzdAppbmRleCBlNjg2YzYzYzE4ZjM1ODZmZmNhNzRlMTczMWMwZmYyNzc0
MWIwZDNiLi43NzlkN2I3ZmE4ZmY0OTdkYmQzZDc2NzYzNmNjN2Q0YmVmMmVjNDIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIv
U291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0CkBAIC0xNSw2ICsx
NSw5IEBAICQoSkFWQVNDUklQVENPUkVfUFJJVkFURV9IRUFERVJTX0RJUikvbW9kZWxzLnB5CiAk
KEpBVkFTQ1JJUFRDT1JFX1BSSVZBVEVfSEVBREVSU19ESVIpL3h4ZC5wbAogJChQUk9KRUNUX0RJ
UikvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCiAkKFBS
T0pFQ1RfRElSKS9HUFVQcm9jZXNzL0dQVVByb2Nlc3MubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9E
SVIpL0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQ
cm94eS5tZXNzYWdlcy5pbgorJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KKyQoUFJPSkVDVF9ESVIpL0dQ
VVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVz
c2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL0dQVVByb2Nlc3MvbWFjL2NvbS5hcHBsZS5XZWJLaXQu
R1BVUHJvY2Vzcy5zYi5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVN
ZWRpYVBsYXllck1hbmFnZXJQcm94eS5tZXNzYWdlcy5pbgogJChQUk9KRUNUX0RJUikvR1BVUHJv
Y2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVBsYXllclByb3h5Lm1lc3NhZ2VzLmluCkBAIC0xMDcsNiAr
MTEwLDggQEAgJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9DYWNoZS9XZWJDYWNoZVN0b3JhZ2VD
b25uZWN0aW9uLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0RhdGFiYXNl
cy9JbmRleGVkREIvV2ViSURCQ29ubmVjdGlvblRvU2VydmVyLm1lc3NhZ2VzLmluCiAkKFBST0pF
Q1RfRElSKS9XZWJQcm9jZXNzL0Z1bGxTY3JlZW4vV2ViRnVsbFNjcmVlbk1hbmFnZXIubWVzc2Fn
ZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9u
Lm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL1JlbW90ZUltYWdlQnVmZmVyLm1lc3NhZ2VzLmluCiskKFBST0pFQ1RfRElSKS9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbC5tZXNzYWdl
cy5pbgogJChQUk9KRUNUX0RJUikvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvTWVkaWFQbGF5ZXJQcml2
YXRlUmVtb3RlLm1lc3NhZ2VzLmluCiAkKFBST0pFQ1RfRElSKS9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9SZW1vdGVNZWRpYVBsYXllck1hbmFnZXIubWVzc2FnZXMuaW4KICQoUFJPSkVDVF9ESVIpL1dl
YlByb2Nlc3MvR1BVL21lZGlhL1RleHRUcmFja1ByaXZhdGVSZW1vdGUubWVzc2FnZXMuaW4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3Qg
Yi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLW91dHB1dC54Y2ZpbGVsaXN0CmluZGV4IDFm
Y2Y3ZTQxMTA3ZmIzZjdiZTJiYzY5OTkzNjZhMDVmOGU2NTA4MjguLmZiZjllNDExMDk5MDg1MThj
MTM0YmJmMTQ1ZWVlYzk3OTMyODA4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvRGVyaXZl
ZFNvdXJjZXMtb3V0cHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYktpdC9EZXJpdmVkU291
cmNlcy1vdXRwdXQueGNmaWxlbGlzdApAQCAtMTI5LDYgKzEyOSwxOCBAQCAkKEJVSUxUX1BST0RV
Q1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlcgogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIv
UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVBdWRpb01l
ZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9E
ZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVy
TWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbE1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJ
TFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVy
Q2hhbm5lbE1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9X
ZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbE1lc3NhZ2VzUmVwbGllcy5oCiskKEJVSUxU
X1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWxQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5TWVzc2FnZXMu
aAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1h
Z2VCdWZmZXJDaGFubmVsUHJveHlNZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19E
SVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1v
dGVJbWFnZUJ1ZmZlck1lc3NhZ2VzLmgKKyQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291
cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZXNSZXBsaWVzLmgKKyQoQlVJTFRf
UFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUltYWdlQnVmZmVyUHJv
eHlNZXNzYWdlUmVjZWl2ZXIuY3BwCiskKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJj
ZXMvV2ViS2l0Mi9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9E
VUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eU1l
c3NhZ2VzUmVwbGllcy5oCiAkKEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2Vi
S2l0Mi9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAog
JChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eU1lc3NhZ2VzLmgKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHlNZXNzYWdl
c1JlcGxpZXMuaApAQCAtMTU0LDYgKzE2Niw5IEBAICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJp
dmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyTWVzc2FnZXNSCiAk
KEJVSUxUX1BST0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVPYmplY3RS
ZWdpc3RyeU1lc3NhZ2VSZWNlaXZlci5jcHAKICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVk
U291cmNlcy9XZWJLaXQyL1JlbW90ZU9iamVjdFJlZ2lzdHJ5TWVzc2FnZXMuaAogJChCVUlMVF9Q
Uk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlT2JqZWN0UmVnaXN0cnlN
ZXNzYWdlc1JlcGxpZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dl
YktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZVJlY2VpdmVyLmNwcAorJChC
VUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3VyY2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5TWVzc2FnZXMuaAorJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRTb3Vy
Y2VzL1dlYktpdDIvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXNSZXBsaWVzLmgK
ICQoQlVJTFRfUFJPRFVDVFNfRElSKS9EZXJpdmVkU291cmNlcy9XZWJLaXQyL1JlbW90ZVNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiAkKEJVSUxUX1BS
T0RVQ1RTX0RJUikvRGVyaXZlZFNvdXJjZXMvV2ViS2l0Mi9SZW1vdGVTYW1wbGVCdWZmZXJEaXNw
bGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXMuaAogJChCVUlMVF9QUk9EVUNUU19ESVIpL0Rlcml2ZWRT
b3VyY2VzL1dlYktpdDIvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlck1lc3Nh
Z2VzUmVwbGllcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvV2ViS2l0L0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggMTBkMTcyNTU4NzVh
MTZlYzZkM2U2YWZkMjUwNmI1MTU1NzYzNTQwNC4uOGMyNjg0YzUwNTFiOTM2MzQ1NGNkZjFlMjY5
NGNlYzE1NzU0NTNkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9EZXJpdmVkU291cmNlcy5t
YWtlCisrKyBiL1NvdXJjZS9XZWJLaXQvRGVyaXZlZFNvdXJjZXMubWFrZQpAQCAtMjUsNiArMjUs
NyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYktpdDIpL0dQVVByb2Nlc3MgXAogICAgICQoV2ViS2l0
MikvR1BVUHJvY2Vzcy9tYWMgXAogICAgICQoV2ViS2l0MikvR1BVUHJvY2Vzcy9tZWRpYSBcCisg
ICAgJChXZWJLaXQyKS9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQgXAogICAgICQoV2ViS2l0
MikvR1BVUHJvY2Vzcy93ZWJydGMgXAogICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MgXAog
ICAgICQoV2ViS2l0MikvTmV0d29ya1Byb2Nlc3MvQ29va2llcyBcCkBAIC01Miw2ICs1Myw3IEBA
IFZQQVRIID0gXAogICAgICQoV2ViS2l0MikvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbiBcCiAgICAg
JChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQ
VS9tZWRpYSBcCisgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
IFwKICAgICAkKFdlYktpdDIpL1dlYlByb2Nlc3MvR1BVL3dlYnJ0YyBcCiAgICAgJChXZWJLaXQy
KS9XZWJQcm9jZXNzL0ljb25EYXRhYmFzZSBcCiAgICAgJChXZWJLaXQyKS9XZWJQcm9jZXNzL0lu
c3BlY3RvciBcCkBAIC0xNDUsNiArMTQ3LDggQEAgTUVTU0FHRV9SRUNFSVZFUlMgPSBcCiAgICAg
UGx1Z2luUHJveHkgXAogICAgIFJlbW90ZUF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVyTWFu
YWdlciBcCiAgICAgUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXIgXAorCVJlbW90
ZUltYWdlQnVmZmVyQ2hhbm5lbCBcCisJUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkgXAog
ICAgIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkgXAogICAgIFJlbW90ZU1lZGlhUGxh
eWVyTWFuYWdlciBcCiAgICAgUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkgXApAQCAtMTUz
LDYgKzE1Nyw3IEBAIE1FU1NBR0VfUkVDRUlWRVJTID0gXAogICAgIFJlbW90ZU1lZGlhUmVjb3Jk
ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlciBcCiAgICAgUmVtb3Rl
T2JqZWN0UmVnaXN0cnkgXAorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSBcCiAgICAg
UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyIFwKICAgICBSZW1vdGVTYW1wbGVCdWZmZXJE
aXNwbGF5TGF5ZXJNYW5hZ2VyIFwKICAgICBSZW1vdGVTY3JvbGxpbmdDb29yZGluYXRvciBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKaW5kZXggYTZjZWU1NGM5N2M5MjE1YTY4NzNmNGRjYjEyYmRlNDdjMWRjNDBlYy4u
YTZhNTRmZTExOGQwN2Q4ZDQ0OTJmMWQ2YzkzZWNlYWVkMDM3MWQ3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApA
QCAtMTg2LDc5ICsxODYsOTIgQEAgTGliV2ViUlRDQ29kZWNzUHJveHkmIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6OmxpYldlYlJUQ0NvZGVjc1Byb3h5KCkKIH0KICNlbmRpZgogCi12b2lkIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQordm9pZCBHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpjcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVu
dGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVCghbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkpOworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFBy
b3h5ID0gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGUoKnRoaXMsIHJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyKTsKK30KKwordm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpyZWxlYXNlUmVuZGVyaW5nQmFja2VuZChSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlQobV9yZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHkpOworICAgIEFTU0VSVChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS0+
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSA9PSByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cik7CisgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgPSBudWxscHRyOworfQorCiti
b29sIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKIHsKICAgICBpZiAoZGVj
b2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZU1lZGlhUGxheWVy
TWFuYWdlclByb3h5OjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgcmVtb3RlTWVk
aWFQbGF5ZXJNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlTWVzc2FnZUZyb21XZWJQcm9jZXNzKGNv
bm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2Fn
ZXM6OlJlbW90ZU1lZGlhUGxheWVyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAg
ICAgICByZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eSgpLmRpZFJlY2VpdmVQbGF5ZXJNZXNz
YWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0gZWxzZSBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyOjptZXNzYWdlUmVjZWl2ZXJOYW1l
KCkpIHsKICAgICAgICAgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKS5kaWRSZWNlaXZlTWVz
c2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKICAgICBpZiAoZGVjb2Rl
ci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlVzZXJNZWRpYUNhcHR1cmVNYW5h
Z2VyUHJveHk6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICB1c2VyTWVkaWFDYXB0
dXJlTWFuYWdlclByb3h5KCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0
aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpS
ZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAg
ICAgIG1lZGlhUmVjb3JkZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vz
cyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1l
c3NhZ2VzOjpSZW1vdGVNZWRpYVJlY29yZGVyOjptZXNzYWdlUmVjZWl2ZXJOYW1lKCkpIHsKICAg
ICAgICAgbWVkaWFSZWNvcmRlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVtb3RlTWVkaWFSZWNvcmRl
ck1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBFTkFCTEUoVklERU9f
VFJBQ0spCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2Vz
OjpSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJhY2tSZW5kZXJlck1hbmFnZXI6Om1lc3NhZ2VSZWNl
aXZlck5hbWUoKSkgewogICAgICAgICBhdWRpb1RyYWNrUmVuZGVyZXJNYW5hZ2VyKCkuZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVz
c2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVBdWRpb01lZGlhU3RyZWFtVHJh
Y2tSZW5kZXJlcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGF1ZGlvVHJhY2tS
ZW5kZXJlck1hbmFnZXIoKS5kaWRSZWNlaXZlUmVuZGVyZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0gTWVzc2FnZXM6OlJlbW90ZVNh
bXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXI6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewog
ICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkuZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJlY2Vp
dmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI6Om1l
c3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJN
YW5hZ2VyKCkuZGlkUmVjZWl2ZUxheWVyTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChkZWNvZGVy
Lm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TGliV2ViUlRDQ29kZWNzUHJveHk6
Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSkgewogICAgICAgICBsaWJXZWJSVENDb2RlY3NQcm94eSgp
LmRpZFJlY2VpdmVNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlvbiwgZGVjb2Rlcik7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2VuZGlmCisgICAg
cmV0dXJuIG1lc3NhZ2VSZWNlaXZlck1hcCgpLmRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyKTsKIH0KIAotdm9pZCBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpkaWRSZWNlaXZl
U3luY01lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRl
Y29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCitib29s
IEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OmRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0
cjxJUEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCiB7CiAgICAgaWYgKGRlY29kZXIubWVzc2Fn
ZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHJlbW90ZU1lZGlhUGxheWVyTWFu
YWdlclByb3h5KCkuZGlkUmVjZWl2ZVN5bmNNZXNzYWdlRnJvbVdlYlByb2Nlc3MoY29ubmVjdGlv
biwgZGVjb2RlciwgcmVwbHlFbmNvZGVyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIGlmIChkZWNv
ZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNzYWdlczo6VXNlck1lZGlhQ2FwdHVyZU1h
bmFnZXJQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIHVzZXJNZWRpYUNh
cHR1cmVNYW5hZ2VyUHJveHkoKS5kaWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tR1BVUHJvY2Vzcyhj
b25uZWN0aW9uLCBkZWNvZGVyLCByZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKFZJ
REVPX1RSQUNLKQogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNlaXZlck5hbWUoKSA9PSBNZXNz
YWdlczo6UmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcjo6bWVzc2FnZVJlY2Vp
dmVyTmFtZSgpKSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoKS5k
aWRSZWNlaXZlU3luY01lc3NhZ2VGcm9tV2ViUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyLCBy
ZXBseUVuY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICNlbmRpZgogI2VuZGlmCi0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbWVzc2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hTeW5jTWVzc2FnZShjb25uZWN0aW9uLCBk
ZWNvZGVyLCByZXBseUVuY29kZXIpOwogfQogCiBjb25zdCBTdHJpbmcmIEdQVUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3M6Om1lZGlhQ2FjaGVEaXJlY3RvcnkoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaCBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggMmI5
YmQxZjg4N2JhZGFmYTRlYTVjNGJhMzQxNjlkOGI5NzhmZDYyZC4uNDBmYWViZGY4ZTEyOTYxMmVi
NzNjZjU4YmFkNDdjYjJlOTMyZDg0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL0dQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oCkBAIC0yOCwxMyArMjgsMTUgQEAKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCi0jaW5jbHVk
ZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VzUmVwbGllcy5oIgotI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorI2luY2x1ZGUgIkdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlck1hcC5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIlJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmll
ci5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvTG9nZ2VyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVW5pcXVlUmVmLmg+
CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKQEAgLTQ5
LDE4ICs1MSwyMCBAQCBjbGFzcyBVc2VyTWVkaWFDYXB0dXJlTWFuYWdlclByb3h5OwogCiBjbGFz
cyBHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzCiAgICAgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzPgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdQVUNv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M+CiAgICAgLCBJUEM6OkNvbm5lY3Rpb246OkNsaWVudCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIFJlZjxHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzPiBjcmVhdGUo
R1BVUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6OkNvbm5lY3Rpb246
OklkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEKTsKICAgICB2aXJ0dWFsIH5HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCk7CiAKICAgICBJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24oKSB7IHJl
dHVybiBtX2Nvbm5lY3Rpb24uZ2V0KCk7IH0KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYg
bWVzc2FnZVJlY2VpdmVyTWFwKCkgeyByZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXA7IH0KICAg
ICBHUFVQcm9jZXNzJiBncHVQcm9jZXNzKCkgeyByZXR1cm4gbV9ncHVQcm9jZXNzLmdldCgpOyB9
CisgICAgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZpZXIoKSBj
b25zdCB7IHJldHVybiBtX3dlYlByb2Nlc3NJZGVudGlmaWVyOyB9CiAKICAgICB2b2lkIGNsZWFu
dXBGb3JTdXNwZW5zaW9uKEZ1bmN0aW9uPHZvaWQoKT4mJik7CiAgICAgdm9pZCBlbmRTdXNwZW5z
aW9uKCk7CiAKLSAgICBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQcm9jZXNzSWRlbnRp
ZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7IH0KICAgICBSZW1v
dGVNZWRpYVJlc291cmNlTWFuYWdlciYgcmVtb3RlTWVkaWFSZXNvdXJjZU1hbmFnZXIoKTsKIAog
ICAgIExvZ2dlciYgbG9nZ2VyKCk7CkBAIC04NSwxNyArODksMjMgQEAgcHJpdmF0ZToKICAgICBS
ZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyJiBzYW1wbGVCdWZmZXJEaXNwbGF5
TGF5ZXJNYW5hZ2VyKCk7CiAjZW5kaWYKICNlbmRpZgotCisgICAgdm9pZCBjcmVhdGVSZW5kZXJp
bmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICB2b2lkIHJlbGVhc2VS
ZW5kZXJpbmdCYWNrZW5kKFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgCiAg
ICAgLy8gSVBDOjpDb25uZWN0aW9uOjpDbGllbnQKICAgICB2b2lkIGRpZENsb3NlKElQQzo6Q29u
bmVjdGlvbiYpIGZpbmFsOwotICAgIHZvaWQgZGlkUmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VSZWNlaXZlck5hbWUsIElQ
Qzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBmaW5hbDsKICAgICB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpIGZpbmFsOwogICAgIHZv
aWQgZGlkUmVjZWl2ZVN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYs
IHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+JikgZmluYWw7CisgICAgdm9pZCBkaWRSZWNl
aXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2Ug
bWVzc2FnZVJlY2VpdmVyTmFtZSwgSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZU5hbWUpIGZp
bmFsOworCisgICAgYm9vbCBkaXNwYXRjaE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJik7CisgICAgYm9vbCBkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVuY29kZXI+Jik7CiAKICAgICBS
ZWZQdHI8TG9nZ2VyPiBtX2xvZ2dlcjsKIAogICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IG1fY29u
bmVjdGlvbjsKICAgICBSZWY8R1BVUHJvY2Vzcz4gbV9ncHVQcm9jZXNzOworICAgIElQQzo6TWVz
c2FnZVJlY2VpdmVyTWFwIG1fbWVzc2FnZVJlY2VpdmVyTWFwOwogICAgIGNvbnN0IFdlYkNvcmU6
OlByb2Nlc3NJZGVudGlmaWVyIG1fd2ViUHJvY2Vzc0lkZW50aWZpZXI7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFJlbW90ZU1lZGlhUmVzb3VyY2VNYW5hZ2VyPiBtX3JlbW90ZU1lZGlhUmVzb3VyY2VN
YW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94
eT4gbV9yZW1vdGVNZWRpYVBsYXllck1hbmFnZXJQcm94eTsKQEAgLTExMSw2ICsxMjEsNyBAQCBw
cml2YXRlOgogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIHN0ZDo6
dW5pcXVlX3B0cjxMaWJXZWJSVENDb2RlY3NQcm94eT4gbV9saWJXZWJSVENDb2RlY3NQcm94eTsK
ICNlbmRpZgorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk+
IG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRv
V2ViUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDNkNDBhNTcxMmUwMmQxNDlkMTRm
OTJmNTZlNDQ1MzQ2YzAxMjIxZDguLjkzMmMwMTIyZGUwODFlZGU5YmI5ZWZiNTZmOWJjNTI1OWJh
NGQ3MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9HUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9H
UFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yMiw3ICsyMiw5IEBACiAK
ICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKLW1lc3NhZ2VzIC0+IEdQVUNvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MgeworbWVzc2FnZXMgLT4gR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyBXYW50c0Rp
c3BhdGNoTWVzc2FnZSB7CisgICAgdm9pZCBDcmVhdGVSZW5kZXJpbmdCYWNrZW5kKFdlYktpdDo6
UmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisg
ICAgdm9pZCBSZWxlYXNlUmVuZGVyaW5nQmFja2VuZChXZWJLaXQ6OlJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQogfQogCiAjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFu
bmVsUHJveHkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhZWY3NDEyMTUxNzc0MDRjNDVhNWY1OWZhMTk3NTYy
MWUxZjg1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5jcHAKQEAgLTAsMCAr
MSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5oIgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1JlbW90ZUltYWdlQnVmZmVyQ2hh
bm5lbFByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eShHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZp
ZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIDogbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzKG1ha2VXZWFrUHRyKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpKQorICAgICwgbV9pbWFn
ZUJ1ZmZlcklkZW50aWZpZXIoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIFJlZ2lz
dGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlciBpbiB0aGUgR1BVQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy4KKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBt
X2ltYWdlQnVmZmVySWRlbnRpZmllci50b1VJbnQ2NCgpLCAqdGhpcyk7Cit9CisKK1JlbW90ZUlt
YWdlQnVmZmVyQ2hhbm5lbFByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkoKQor
eworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNlaXZlci4KKyAgICBp
ZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2Fn
ZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFn
ZUJ1ZmZlckNoYW5uZWxQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2ltYWdlQnVmZmVy
SWRlbnRpZmllci50b1VJbnQ2NCgpKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFn
ZUJ1ZmZlckNoYW5uZWxQcm94eTo6bWVzc2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdAorewor
ICAgIGlmIChhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzID0gbV9ncHVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmdldCgpKQorICAgICAgICByZXR1cm4gJmdwdUNvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MtPmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordWludDY0X3Qg
UmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHk6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklE
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9VSW50NjQo
KTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eTo6cmVtb3RlQ3JlYXRl
QmFja2VuZChjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBJbnRTaXplJiBpbnRl
cm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJ
bWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIHNlbmQoTWVzc2FnZXM6OlJl
bW90ZUltYWdlQnVmZmVyQ2hhbm5lbDo6Q3JlYXRlQmFja2VuZChsb2dpY2FsU2l6ZSwgaW50ZXJu
YWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxlKSksIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKK30KKwordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5u
ZWxQcm94eTo6Zmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZp
ZXIpCit7CisgICAgbG9jYWxGbHVzaERyYXdpbmdDb250ZXh0KGRpc3BsYXlMaXN0KTsKKyAgICBz
ZW5kKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6OlNldEZsdXNoSWRlbnRpZmll
cihmbHVzaElkZW50aWZpZXIpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllcik7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1h
Z2VCdWZmZXJDaGFubmVsUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJp
bmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWUx
M2YyYTQxZDBhNTQyODQyOTBhOGJmNTY3MzI2ODZhNDBhZmM5ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVm
ZmVyQ2hhbm5lbFByb3h5LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJC
YWNrZW5kSGFuZGxlLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIK
KyNpbmNsdWRlICJJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVj
ZWl2ZXIuaCIKKyNpbmNsdWRlICJNZXNzYWdlU2VuZGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9E
aXNwbGF5TGlzdEl0ZW1zLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CisKK2NsYXNzIFJl
bW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5CisgICAgOiBwcml2YXRlIElQQzo6TWVzc2FnZVNl
bmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VSZWNlaXZlciB7CitwdWJsaWM6CisgICAg
UmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkoR1BVQ29ubmVjdGlvblRvV2ViUHJvY2VzcyYs
IEltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgflJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFBy
b3h5KCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJUEM6Ok1lc3NhZ2VTZW5kZXIuCisgICAgSVBD
OjpDb25uZWN0aW9uKiBtZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHVpbnQ2NF90IG1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlcgorICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3Nh
Z2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgICAgIAor
ICAgIHZvaWQgcmVtb3RlQ3JlYXRlQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlKTsKKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QmLCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcik7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9jYWxGbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpID0gMDsKKworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIEltYWdlQnVm
ZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ckNoYW5uZWxQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5k
ZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5Lm1lc3NhZ2VzLmluCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmIwN2U5NGQ1YmU1ZTgzZDA3NzRhOGU2YTJjYzIyNzFiZjdmMDNiMWIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5tZXNzYWdlcy5pbgpAQCAtMCwwICsxLDMwIEBA
CisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
CisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisKK21lc3NhZ2VzIC0+IFJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5IE5v
dFJlZkNvdW50ZWQgeworICAgIHZvaWQgRmx1c2hEcmF3aW5nQ29udGV4dChXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6RGlzcGxheUxpc3QgZGlzcGxheUxpc3QsIFdlYktpdDo6SW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9Q
Uk9DRVNTKQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nl
c3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTE4NmVjOWFmYmU3OWJhMzE0YzI1NTZhZWYzNjkxM2EwZDU3MDk1MAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyUHJveHkuaApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZl
ckNoYW5uZWxQcm94eS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29uY3JldGVJbWFnZUJ1ZmZlci5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RSZXBsYXllci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CitjbGFzcyBSZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFj
a2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkgeworICAgIHVz
aW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZl
cjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFj
a2VuZDsKKworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1h
Z2VCdWZmZXI+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIg
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0
ZUltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8UmVtb3RlSW1hZ2VCdWZmZXJQcm94eT4oc2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBudWxscHRyLCBncHVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQsIEdQ
VUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MsIEltYWdl
QnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAgICAgIDogQmFzZUNv
bmNyZXRlSW1hZ2VCdWZmZXIoV1RGTW92ZShiYWNrZW5kKSkKKyAgICAgICAgLCBSZW1vdGVJbWFn
ZUJ1ZmZlckNoYW5uZWxQcm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBpbWFnZUJ1ZmZl
cklkZW50aWZpZXIpCisgICAgeworICAgICAgICByZW1vdGVDcmVhdGVCYWNrZW5kKG1fYmFja2Vu
ZC0+bG9naWNhbFNpemUoKSwgbV9iYWNrZW5kLT5iYWNrZW5kU2l6ZSgpLCBtX2JhY2tlbmQtPnJl
c29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2UoKSwgbV9iYWNrZW5kLT5jcmVh
dGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgbG9jYWxGbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpE
aXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoZGlz
cGxheUxpc3QuaXRlbUNvdW50KCkpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0
OjpSZXBsYXllciByZXBsYXllcihCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpLCBk
aXNwbGF5TGlzdCk7CisgICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgfQor
ICAgICAgICBtX2JhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgIH0KK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZv
cm1JbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVQbGF0Zm9ybUltYWdlQnVmZmVyUHJveHkuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MTdj
YmJmNGM0NTljN2M1NzcwNDliNDgwYmFiYTgwOTkzZjBiMzlhCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5k
LmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKKwordXNpbmcgUmVtb3RlVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyUHJveHkgPSBSZW1v
dGVJbWFnZUJ1ZmZlclByb3h5PEltYWdlQnVmZmVyU2hhcmVhYmxlVW5hY2NlbGVyYXRlZEJhY2tl
bmQ+OwordXNpbmcgUmVtb3RlQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5ID0gUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eTxJbWFnZUJ1ZmZlclNoYXJlYWJsZUFjY2VsZXJhdGVkQmFja2VuZD47CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9S
ZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjI0Y2U4MGI1MTBhZjVkZjZmZDJmZjUyMDhiMWY2YWRlODdkNGFmMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eS5jcHAKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LmgiCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyUHJveHkuaCIKKyNpbmNsdWRlICJSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHlNZXNzYWdlcy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNz
JiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBy
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcikKK3sKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eT4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eShncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLCByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikpOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRp
ZmllcikKKyAgICA6IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzcyhtYWtlV2Vha1B0cihncHVD
b25uZWN0aW9uVG9XZWJQcm9jZXNzKSkKKyAgICAsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIocmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCit7CisgICAgaWYgKGF1dG8qIGdwdUNvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MgPSBtX2dwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuZ2V0KCkpCisg
ICAgICAgIGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MtPm1lc3NhZ2VSZWNlaXZlck1hcCgpLmFk
ZE1lc3NhZ2VSZWNlaXZlcihNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0
KCksICp0aGlzKTsKK30KKworUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojp+UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5KCkKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAgICAgZ3B1
Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+bWVzc2FnZVJlY2VpdmVyTWFwKCkucmVtb3ZlTWVzc2Fn
ZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3NhZ2VS
ZWNlaXZlck5hbWUoKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpKTsK
K30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6Om1lc3Nh
Z2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICBpZiAoYXV0byogZ3B1Q29ubmVjdGlv
blRvV2ViUHJvY2VzcyA9IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2Vzcy5nZXQoKSkKKyAgICAg
ICAgcmV0dXJuICZncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCk7CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK3VpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eTo6bWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jl
bmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxv
Z2ljYWxTaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VC
dWZmZXJJZGVudGlmaWVyKQoreworICAgIGlmIChtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGlt
YWdlQnVmZmVySWRlbnRpZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvKiBncHVDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzID0gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmdldCgpOworICAgIGlmICghZ3B1Q29u
bmVjdGlvblRvV2ViUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiBpbWFnZUJ1ZmZlcjsKKworICAgIHN3aXRjaCAocmVuZGVyaW5nTW9k
ZSkgeworICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6CisgICAgICAg
IGltYWdlQnVmZmVyID0gUmVtb3RlQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUo
bG9naWNhbFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKmdwdUNvbm5lY3Rpb25U
b1dlYlByb2Nlc3MsIGltYWdlQnVmZmVySWRlbnRpZmllcik7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGU6CisgICAgICAgIGltYWdl
QnVmZmVyID0gUmVtb3RlVW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dp
Y2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCAqZ3B1Q29ubmVjdGlvblRvV2Vi
UHJvY2VzcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBpZiAo
IWltYWdlQnVmZmVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2ltYWdlQnVmZmVyTWFwLmFk
ZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIsIFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKK30KKwordm9p
ZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAgIC8vIENyZWF0ZUlt
YWdlQnVmZmVyIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhpcyBv
bmUuCisgICAgaWYgKCFtX2ltYWdlQnVmZmVyTWFwLmNvbnRhaW5zKGltYWdlQnVmZmVySWRlbnRp
ZmllcikpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9pbWFnZUJ1ZmZlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVy
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BS
T0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmY5NTI3Yjg3NWFhMTMyNTU2OWFjMjI2MzAwZmE2YWQ1OThlOWFlMGUKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAi
TWVzc2FnZVJlY2VpdmVyLmgiCisjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgorI2luY2x1ZGUg
IlJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNw
YWNlLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9X
ZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkKKyAgICA6IHBy
aXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2Vp
dmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eT4gY3JlYXRlKEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MmLCBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllcik7CisgICAgdmlydHVhbCB+UmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5KCk7CisKKyAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXI7IH0KKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkoR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKworICAg
IC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5k
ZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdWludDY0X3QgbWVzc2FnZVNlbmRl
ckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIElQQzo6TWVzc2FnZVJl
Y2VpdmVyCisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImKSBvdmVycmlkZTsKKworICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
V2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlcklk
ZW50aWZpZXIpOworICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVySWRlbnRp
Zmllcik7CisKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+PjsKKyAgICBJ
bWFnZUJ1ZmZlck1hcCBtX2ltYWdlQnVmZmVyTWFwOworICAgIFdlYWtQdHI8R1BVQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcz4gbV9ncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzOworICAgIFJlbmRlcmlu
Z0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJv
Y2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdl
cy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lNGRjZjdmMzJiNDUyNmRkZmJlYmI3ODdmODAyYzM2ZmQ5NTdiYzQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluCkBAIC0wLDAgKzEs
MzAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKworbWVzc2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
IE5vdFJlZkNvdW50ZWQgeworICAgIHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6Rmxv
YXRTaXplIGxvZ2ljYWxTaXplLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBX
ZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCisgICAg
dm9pZCBSZWxlYXNlSW1hZ2VCdWZmZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKQorfQorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVNZWRpYVJl
Y29yZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90
ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyLmNwcAppbmRleCAzNzBjZDliMzg3NTY5YTk4ZTg0ZTE3ODA5
ZjA4NWQ2MmIzYjZlOWQ2Li4xMWYwYWI4MWEzYmIxYTU2NzIwZTFkNWNhMjY3OGJjNDUxZTY3NzVm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZU1lZGlh
UmVjb3JkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRj
L1JlbW90ZU1lZGlhUmVjb3JkZXJNYW5hZ2VyLmNwcApAQCAtMzUsNiArMzUsOCBAQAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKIFJlbW90ZU1lZGlh
UmVjb3JkZXJNYW5hZ2VyOjpSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlcihHUFVDb25uZWN0aW9u
VG9XZWJQcm9jZXNzJiBncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQogICAgIDogbV9ncHVDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKGdwdUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3MpCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2VicnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRp
c3BsYXlMYXllck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9S
ZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmNwcAppbmRleCAxYjcxYjBjMDRl
NThhZDIwZDgyYTI5ZWQzNzg0MmY4YjY1MzEyMmFlLi4zZmY3NTI3YzdiMDRmZTgyNGJjNjdlOTdj
MDBiNWJhNzI3MTdkZWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mvd2Vi
cnRjL1JlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVy
TWFuYWdlci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUu
aD4KIAogbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogUmVt
b3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFuYWdlcjo6UmVtb3RlU2FtcGxlQnVmZmVyRGlz
cGxheUxheWVyTWFuYWdlcihSZWY8SVBDOjpDb25uZWN0aW9uPiYmIGNvbm5lY3Rpb24pCiAgICAg
OiBtX2Nvbm5lY3Rpb24oV1RGTW92ZShjb25uZWN0aW9uKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy93ZWJydGMvUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWFu
YWdlci5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZm
ZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgKaW5kZXggOGUwNzMwYTVmNzVhMTdmMTc5NjllZmM0Zjc0
OGM3ZmY2N2VhYTI1Yi4uOTQwZjc0M2U0MTVmMTdiODJiZWY5NzgzNTA5NTQ5ZGE5YzBjNGIzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL3dlYnJ0Yy9SZW1vdGVTYW1wbGVC
dWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L3dlYnJ0Yy9SZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRlICJSZW1vdGVT
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBsaWVzLmgiCiAjaW5jbHVk
ZSAiU2FtcGxlQnVmZmVyRGlzcGxheUxheWVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBJUEMg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weSBi
L1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKaW5kZXggMjYwNDkwZmI3
YjU2YTg4Y2ZmMGQ5Yjg5YzFhNzE2OGFlZDBkMTg1Yy4uZDUwNTdmYzM1MTZhNjhmNTNjZTQyMzM1
MGFiMTQ1ZjhhZWY4ZDc4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weQorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2Vz
LnB5CkBAIC0yNyw2ICsyNyw3IEBAIGltcG9ydCBzeXMKIGZyb20gd2Via2l0IGltcG9ydCBwYXJz
ZXIKIAogV0FOVFNfQ09OTkVDVElPTl9BVFRSSUJVVEUgPSAnV2FudHNDb25uZWN0aW9uJworV0FO
VFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUgPSAnV2FudHNEaXNwYXRjaE1lc3NhZ2UnCiBM
RUdBQ1lfUkVDRUlWRVJfQVRUUklCVVRFID0gJ0xlZ2FjeVJlY2VpdmVyJwogTk9UX1JFRkNPVU5U
RURfUkVDRUlWRVJfQVRUUklCVVRFID0gJ05vdFJlZkNvdW50ZWQnCiBTWU5DSFJPTk9VU19BVFRS
SUJVVEUgPSAnU3luY2hyb25vdXMnCkBAIC0yMDQsNiArMjA1LDggQEAgZGVmIHR5cGVzX3RoYXRf
Y2Fubm90X2JlX2ZvcndhcmRfZGVjbGFyZWQoKToKICAgICByZXR1cm4gZnJvemVuc2V0KFsKICAg
ICAgICAgJ01hY2hTZW5kUmlnaHQnLAogICAgICAgICAnU3RyaW5nJywKKyAgICAgICAgJ1dlYkNv
cmU6OkFscGhhUHJlbXVsdGlwbGljYXRpb24nLAorICAgICAgICAnV2ViQ29yZTo6Q29sb3JTcGFj
ZScsCiAgICAgICAgICdXZWJDb3JlOjpEb2N1bWVudElkZW50aWZpZXInLAogICAgICAgICAnV2Vi
Q29yZTo6RG9jdW1lbnRPcldvcmtlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViQ29yZTo6RmV0
Y2hJZGVudGlmaWVyJywKQEAgLTIxMyw2ICsyMTYsNyBAQCBkZWYgdHlwZXNfdGhhdF9jYW5ub3Rf
YmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2ViQ29yZTo6UG9pbnRlcklEJywKICAg
ICAgICAgJ1dlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYkNvcmU6OlJl
YWx0aW1lTWVkaWFTb3VyY2VJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYkNvcmU6OlJlbmRlcmlu
Z01vZGUnLAogICAgICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlcklkZW50aWZpZXInLAogICAg
ICAgICAnV2ViQ29yZTo6U2VydmljZVdvcmtlckpvYklkZW50aWZpZXInLAogICAgICAgICAnV2Vi
Q29yZTo6U2VydmljZVdvcmtlck9yQ2xpZW50RGF0YScsCkBAIC0yMjIsMTIgKzIyNiwxNiBAQCBk
ZWYgdHlwZXNfdGhhdF9jYW5ub3RfYmVfZm9yd2FyZF9kZWNsYXJlZCgpOgogICAgICAgICAnV2Vi
S2l0OjpBY3Rpdml0eVN0YXRlQ2hhbmdlSUQnLAogICAgICAgICAnV2ViS2l0OjpBdWRpb01lZGlh
U3RyZWFtVHJhY2tSZW5kZXJlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpDb250ZW50
V29ybGRJZGVudGlmaWVyJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlJywKKyAgICAgICAgJ1dlYktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXInLAorICAg
ICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpM
YXllckhvc3RpbmdDb250ZXh0SUQnLAogICAgICAgICAnV2ViS2l0OjpMaWJXZWJSVENSZXNvbHZl
cklkZW50aWZpZXInLAogICAgICAgICAnV2ViS2l0OjpNRE5TUmVnaXN0ZXJJZGVudGlmaWVyJywK
ICAgICAgICAgJ1dlYktpdDo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlSWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6Ok1lZGlhUmVjb3JkZXJJZGVudGlmaWVyJywKICAgICAgICAgJ1dlYktp
dDo6UmVtb3RlTWVkaWFSZXNvdXJjZUlkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0OjpSZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OlJUQ0RlY29kZXJJZGVu
dGlmaWVyJywKICAgICAgICAgJ1dlYktpdDo6UlRDRW5jb2RlcklkZW50aWZpZXInLAogICAgICAg
ICAnV2ViS2l0OjpTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJJZGVudGlmaWVyJywKQEAgLTc3OSwx
MyArNzg3LDE2IEBAIGRlZiBnZW5lcmF0ZV9tZXNzYWdlX2hhbmRsZXIocmVjZWl2ZXIpOgogICAg
ICAgICBlbHNlOgogICAgICAgICAgICAgYXN5bmNfbWVzc2FnZXMuYXBwZW5kKG1lc3NhZ2UpCiAK
LSAgICBpZiBhc3luY19tZXNzYWdlczoKKyAgICBpZiBhc3luY19tZXNzYWdlcyBvciByZWNlaXZl
ci5oYXNfYXR0cmlidXRlKFdBTlRTX0RJU1BBVENIX01FU1NBR0VfQVRUUklCVVRFKToKICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgndm9pZCAlczo6ZGlkUmVjZWl2ZSVzTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcilcbicgJSAocmVjZWl2ZXIu
bmFtZSwgcmVjZWl2ZXIubmFtZSBpZiByZWNlaXZlci5oYXNfYXR0cmlidXRlKExFR0FDWV9SRUNF
SVZFUl9BVFRSSUJVVEUpIGVsc2UgJycpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd7XG4nKQog
ICAgICAgICBpZiBub3QgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShOT1RfUkVGQ09VTlRFRF9SRUNF
SVZFUl9BVFRSSUJVVEUpOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIGF1dG8gcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpO1xuJykKIAogICAgICAgICByZXN1bHQgKz0gW2Fz
eW5jX21lc3NhZ2Vfc3RhdGVtZW50KHJlY2VpdmVyLCBtZXNzYWdlKSBmb3IgbWVzc2FnZSBpbiBh
c3luY19tZXNzYWdlc10KKyAgICAgICAgaWYgcmVjZWl2ZXIuaGFzX2F0dHJpYnV0ZShXQU5UU19E
SVNQQVRDSF9NRVNTQUdFX0FUVFJJQlVURSk6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgaWYgKGRpc3BhdGNoTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKSlcbicpCisgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgICAgICAgIHJldHVybjtcbicpCiAgICAgICAgIGlmIChyZWNl
aXZlci5zdXBlcmNsYXNzKToKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICAlczo6ZGlk
UmVjZWl2ZU1lc3NhZ2UoY29ubmVjdGlvbiwgZGVjb2Rlcik7XG4nICUgKHJlY2VpdmVyLnN1cGVy
Y2xhc3MpKQogICAgICAgICBlbHNlOgpAQCAtNzk0LDEzICs4MDUsMTYgQEAgZGVmIGdlbmVyYXRl
X21lc3NhZ2VfaGFuZGxlcihyZWNlaXZlcik6CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCd9XG4n
KQogCi0gICAgaWYgc3luY19tZXNzYWdlczoKKyAgICBpZiBzeW5jX21lc3NhZ2VzIG9yIHJlY2Vp
dmVyLmhhc19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgogICAg
ICAgICByZXN1bHQuYXBwZW5kKCdcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJ3ZvaWQgJXM6
OmRpZFJlY2VpdmVTeW5jJXNNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBD
OjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlF
bmNvZGVyKVxuJyAlIChyZWNlaXZlci5uYW1lLCByZWNlaXZlci5uYW1lIGlmIHJlY2VpdmVyLmhh
c19hdHRyaWJ1dGUoTEVHQUNZX1JFQ0VJVkVSX0FUVFJJQlVURSkgZWxzZSAnJykpCiAgICAgICAg
IHJlc3VsdC5hcHBlbmQoJ3tcbicpCiAgICAgICAgIGlmIG5vdCByZWNlaXZlci5oYXNfYXR0cmli
dXRlKE5PVF9SRUZDT1VOVEVEX1JFQ0VJVkVSX0FUVFJJQlVURSk6CiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKCcgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyk7XG4nKQog
ICAgICAgICByZXN1bHQgKz0gW3N5bmNfbWVzc2FnZV9zdGF0ZW1lbnQocmVjZWl2ZXIsIG1lc3Nh
Z2UpIGZvciBtZXNzYWdlIGluIHN5bmNfbWVzc2FnZXNdCisgICAgICAgIGlmIHJlY2VpdmVyLmhh
c19hdHRyaWJ1dGUoV0FOVFNfRElTUEFUQ0hfTUVTU0FHRV9BVFRSSUJVVEUpOgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICAgIGlmIChkaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24s
IGRlY29kZXIsIHJlcGx5RW5jb2RlcikpXG4nKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICAgICAgICByZXR1cm47XG4nKQogICAgICAgICByZXN1bHQuYXBwZW5kKCcgICAgVU5VU0VEX1BB
UkFNKGNvbm5lY3Rpb24pO1xuJykKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTShkZWNvZGVyKTtcbicpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAgICBVTlVTRURfUEFS
QU0ocmVwbHlFbmNvZGVyKTtcbicpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJDb3JlQXJndW1lbnRDb2RlcnMuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1
bWVudENvZGVycy5oCmluZGV4IDdiZjcxYzE3YWJkZDNkOGIxMzE5MDIyMDA1OGM5ZjljMjE5ZjYw
YjMuLmQ5OTNjMjczYTMzZGZhYjk5ZjQ2NGEwYjI3YzJjY2ZlNTkwMjEwYTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCkBAIC0yNiw2ICsyNiw3IEBA
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8
V2ViQ29yZS9BbHBoYVByZW11bHRpcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9BdXRv
cGxheUV2ZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9EaWFnbm9zdGljTG9nZ2luZ0NsaWVudC5oPgpAQCAtMzYsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgPFdlYkNvcmUvTmV0d29ya0xvYWRNZXRyaWNzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9O
b3RpZmljYXRpb25EaXJlY3Rpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlYWx0aW1lTWVkaWFT
b3VyY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KICNpbmNsdWRlIDxX
ZWJDb3JlL1Njcm9sbFNuYXBPZmZzZXRzSW5mby5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vydmlj
ZVdvcmtlclR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TdG9yZWRDcmVkZW50aWFsc1BvbGlj
eS5oPgpAQCAtODIzLDYgKzgyNSwxNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFdlYkNvcmU6OlNlcmlhbGl6ZWRBdHRhY2htZW50RGF0YT4gewogCiBuYW1lc3BhY2UgV1RGIHsK
IAordGVtcGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxp
Y2F0aW9uPiB7CisgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKKyAgICBXZWJDb3JlOjpB
bHBoYVByZW11bHRpcGxpY2F0aW9uLAorICAgIFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b246OlByZW11bHRpcGxpZWQsCisgICAgV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6
VW5wcmVtdWx0aXBsaWVkCisgICAgPjsKK307CisKIHRlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFp
dHM8V2ViQ29yZTo6Q29sb3JTcGFjZT4gewogICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8
CiAgICAgV2ViQ29yZTo6Q29sb3JTcGFjZSwKQEAgLTgzMiw2ICs4NDIsMTggQEAgdGVtcGxhdGU8
PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpDb2xvclNwYWNlPiB7CiAgICAgPjsKIH07CiAK
K3RlbXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6UmVuZGVyaW5nTW9kZT4gewor
ICAgIHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9k
ZSwKKyAgICBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlOjpBY2NlbGVyYXRlZCwKKyAgICBXZWJDb3Jl
OjpSZW5kZXJpbmdNb2RlOjpVbmFjY2VsZXJhdGVkLAorICAgIFdlYkNvcmU6OlJlbmRlcmluZ01v
ZGU6OkRpc3BsYXlMaXN0QWNjZWxlcmF0ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6
RGlzcGxheUxpc3QsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0
ZWQsCisgICAgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZTo6UmVtb3RlCisgICAgPjsKK307CisKIHRl
bXBsYXRlPD4gc3RydWN0IEVudW1UcmFpdHM8V2ViQ29yZTo6QXV0b3BsYXlFdmVudD4gewogICAg
IHVzaW5nIHZhbHVlcyA9IEVudW1WYWx1ZXM8CiAgICAgICAgIFdlYkNvcmU6OkF1dG9wbGF5RXZl
bnQsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzLnR4dAppbmRleCBhNWQwYmUxNDI3MWY2MzA2ZjgzNmI4ZmRiZDdkNDIwZjI5NTI0
NmVhLi4xN2EwOTc3ZTY4OWU0MmU2M2U2OTQ1NmZmOThiMDY1NWRhMjc2MmIwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50
eHQKQEAgLTM4LDYgKzM4LDggQEAgR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNl
TG9hZGVyLmNwcAogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlTWFuYWdlci5j
cHAKIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlVGV4dFRyYWNrUHJveHkuY3BwCiBHUFVQcm9jZXNz
L21lZGlhL1JlbW90ZVZpZGVvVHJhY2tQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5jcHAKK0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiAKIE5ldHdvcmtQcm9j
ZXNzL0FkQ2xpY2tBdHRyaWJ1dGlvbk1hbmFnZXIuY3BwCiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
QWN0aXZpdHlUcmFja2VyLmNwcApAQCAtNTM5LDYgKzU0MSw5IEBAIFdlYlByb2Nlc3MvR1BVL21l
ZGlhL1JlbW90ZU1lZGlhUGxheWVyTUlNRVR5cGVDYWNoZS5jcHAgQG5vLXVuaWZ5CiBXZWJQcm9j
ZXNzL0dQVS9tZWRpYS9SZW1vdGVNZWRpYVJlc291cmNlUHJveHkuY3BwCiBXZWJQcm9jZXNzL0dQ
VS9tZWRpYS9UZXh0VHJhY2tQcml2YXRlUmVtb3RlLmNwcAogV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
VmlkZW9UcmFja1ByaXZhdGVSZW1vdGUuY3BwCitXZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNr
ZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKK1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmNwcAorV2ViUHJvY2Vz
cy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAogV2ViUHJv
Y2Vzcy9HUFUvd2VicnRjL0xpYldlYlJUQ0NvZGVjcy5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0
Yy9NZWRpYVJlY29yZGVyUHJpdmF0ZS5jcHAKIFdlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9NZWRpYVJl
Y29yZGVyUHJvdmlkZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2Nv
YS50eHQgYi9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNDb2NvYS50eHQKaW5kZXggZDI0YTgwNDhlMzQ1
MDQ2MzQyN2M5MzA0MzJlZjkwMDM5NzUxMWMwYy4uMTExNjk5M2M5ZGJlMGQyMDViYTJmYTE2ZTg1
NWI5Zjc3YWNlMmM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9Tb3VyY2VzQ29jb2EudHh0
CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlc0NvY29hLnR4dApAQCAtNTU0LDYgKzU1NCw4IEBA
IFdlYlByb2Nlc3MvY29jb2EvV2ViUHJvY2Vzc0NvY29hLm1tCiAKIFdlYlByb2Nlc3MvRW50cnlQ
b2ludC9Db2NvYS9YUENTZXJ2aWNlL1dlYkNvbnRlbnRTZXJ2aWNlRW50cnlQb2ludC5tbQogCitX
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZC5jcHAKKwogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1
bmRsZVBhZ2VCYW5uZXIuY3BwCiAKIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvbWFj
L1dLQnVuZGxlTWFjLm1tCkBAIC02NDAsMTQgKzY0MiwxOCBAQCBXZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZVNjcm9sbGluZ0Nvb3JkaW5hdG9yLm1tCiAvLyBEZXJpdmVk
IFNvdXJjZXMKIEVkaXRhYmxlSW1hZ2VDb250cm9sbGVyTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BV
Q29ubmVjdGlvblRvV2ViUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKK0dQVVByb2Nlc3NDb25u
ZWN0aW9uTWVzc2FnZVJlY2VpdmVyLmNwcAogR1BVUHJvY2Vzc1Byb3h5TWVzc2FnZVJlY2VpdmVy
LmNwcAogR1BVUHJvY2Vzc01lc3NhZ2VSZWNlaXZlci5jcHAKIExpYldlYlJUQ0NvZGVjc1Byb3h5
TWVzc2FnZVJlY2VpdmVyLmNwcAogTGliV2ViUlRDQ29kZWNzTWVzc2FnZVJlY2VpdmVyLmNwcAog
UmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNYW5hZ2VyTWVzc2FnZVJlY2VpdmVy
LmNwcAogUmVtb3RlQXVkaW9NZWRpYVN0cmVhbVRyYWNrUmVuZGVyZXJNZXNzYWdlUmVjZWl2ZXIu
Y3BwCitSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxNZXNzYWdlUmVjZWl2ZXIuY3BwCitSZW1vdGVJ
bWFnZUJ1ZmZlckNoYW5uZWxQcm94eU1lc3NhZ2VSZWNlaXZlci5jcHAKIFJlbW90ZU1lZGlhUmVj
b3JkZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCiBSZW1vdGVNZWRpYVJlY29yZGVyTWFuYWdlck1lc3Nh
Z2VSZWNlaXZlci5jcHAKK1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VSZWNlaXZl
ci5jcHAKIFJlbW90ZVNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXJNZXNzYWdlUmVjZWl2
ZXIuY3BwCiBSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVjZWl2ZXIuY3Bw
CiBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNZXNzYWdlUmVjZWl2ZXIuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkYWM4ODQ4ODZl
MjI2MjFkZjM1NGVkZTE4MzFiNGMwNTcyMDYyMjJiLi4zNDkxYWVmYzExNjc0ZWMwYzJhMWQ5ZDIz
Zjc0OGNhMjZiODBhYWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKQEAgLTQwNTYsOCArNDA1NiwzMiBAQAogCQk3MUE2NzZBNDIyQzYyMzE4
MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBw
YXRoID0gaW9zL1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlv
bkdlc3R1cmVSZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBu
YW1lID0gV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91
Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzFGQjgxMEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50
c0Rpc3BhdGNoUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNp
dGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcyNTA2RDM5MjNFOUY4OEIwMDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZl
ckNoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VC
dWZmZXJDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDNBMjNF
OUY4OEMwMDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZEM0IyM0U5Rjg4QzAwMUU2RTBEIC8q
IFJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbC5tZXNzYWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyNTA2RDNDMjNFOUY4QjkwMDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1
ZmZlckNoYW5uZWxQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1v
dGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3MjUwNkQzRDIzRTlGOEI5MDAxRTZFMEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJv
eHkubWVzc2FnZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJD
aGFubmVsUHJveHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcy
NTA2RDNFMjNFOUY4QjkwMDFFNkUwRCAvKiBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW1vdGVJbWFnZUJ1ZmZl
ckNoYW5uZWxQcm94eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTA2RDQw
MjNFQTIxMkUwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VCdWZmZXJTaGFyZWFi
bGVCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZE
NDEyM0VBMjEyRjAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZENDMyM0VB
MjFBODAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3Vy
ZmFjZUJhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1MDZENDQyM0VB
MjFBOTAwMUU2RTBEIC8qIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjUw
NkQ0NTIzRUEyMUQyMDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MjUwNkQ0ODIzRUEyMkI3MDAxRTZFMEQgLyog
UGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1OUUyM0U4RkYwNzAwQTA2MzJEIC8qIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3MjU2NDU5RjIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3
MjU2NDVBMDIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1l
c3NhZ2VzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eS5tZXNzYWdlcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI1NjQ1QTEy
M0U4RkYxNTAwQTA2MzJEIC8qIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NUEyMjNFOEZGMTUwMEEwNjMyRCAvKiBS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NzI1NjQ1QTMyM0U4RkYxNTAwQTA2MzJEIC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyNTY0NUE0MjNFOTA3RDEwMEEw
NjMyRCAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyOEU4NkVGMTc5NTE4OEMwMDg3ODc5RSAvKiBXZWJDb2xvclBpY2tlck1hYy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJDb2xvclBpY2tlck1hYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZGMDE3OTUxODhDMDA4Nzg3OUUgLyogV2Vi
Q29sb3JQaWNrZXJNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBXZWJDb2xvclBpY2tlck1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5
QzQ1MTcyM0VBNDVEMjAwQjJCMUNFIC8qIFJlbW90ZUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcyOUM0NTE4MjNFQTQ1RDMwMEIyQjFDRSAvKiBSZW1vdGVQbGF0Zm9y
bUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZVBs
YXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzI5QzQ1
MTkyM0VBNDYxMTAwQjJCMUNFIC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MjlDNDUxQTIzRUE0NjExMDBCMkIxQ0UgLyogUmVtb3Rl
UGxhdGZvcm1JbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk3MjlDNDUxRDIzRUE0RTA0MDBCMkIxQ0UgLyogSW1hZ2VCdWZmZXJGbHVzaElk
ZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJG
bHVzaElkZW50aWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyQzQx
ODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXS1dlYnNpdGVEYXRhU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzVBOEQyQzUxODdDQ0Y5RjAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9y
ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2Vic2l0ZURh
dGFTdG9yZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzVBOEQyRDQxODdEMUMw
MTAwQzM5QzlFIC8qIFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdLV2Vic2l0ZURhdGFTdG9yZUludGVybmFsLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01NzM4LDYgKzU3NjIsNyBAQAogCQkJCTdBRkJEMzZEMjFF
NTQ2RTMwMDVEQkFDQiAvKiBQZXJzaXN0ZW5jeVV0aWxzLmggKi8sCiAJCQkJQkNDNDNBQjgxMjdC
OTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5jcHAgKi8sCiAJCQkJQkNDNDNB
QjkxMjdCOTVEQzAwMzE3RjE2IC8qIFBsYXRmb3JtUG9wdXBNZW51RGF0YS5oICovLAorCQkJCTQ5
RUNBNDFCMjNGQ0E0ODYwMDIzMzU4RCAvKiBQb2xpY3lEZWNpc2lvbi5oICovLAogCQkJCUUxOEM5
MkYzMTJEQjlFNzEwMENGMkFFQiAvKiBQcmludEluZm8uY3BwICovLAogCQkJCUUxQ0MxQjhFMTJE
N0VBREYwMDYyNTgzOCAvKiBQcmludEluZm8uaCAqLywKIAkJCQk0NjNGRDQ4MTFFQjk0RUFEMDBB
Mjk4MkMgLyogUHJvY2Vzc1Rlcm1pbmF0aW9uUmVhc29uLmggKi8sCkBAIC01ODYyLDcgKzU4ODcs
NiBAQAogCQkJCTdDMDY1RjJBMUM4Q0Q5NUYwMEMyRDk1MCAvKiBXZWJVc2VyQ29udGVudENvbnRy
b2xsZXJEYXRhVHlwZXMuaCAqLywKIAkJCQk0OTYwQTNCQzIzQzUyODY0MDA5NjE4NDIgLyogV2Vi
Vmlld0NhdGVnb3J5LmggKi8sCiAJCQkJQzAzMzdERDAxMjdBMjk4MDAwOEZGNEY0IC8qIFdlYldo
ZWVsRXZlbnQuY3BwICovLAotCQkJCTQ5RUNBNDFCMjNGQ0E0ODYwMDIzMzU4RCAvKiBQb2xpY3lE
ZWNpc2lvbi5oICovLAogCQkJKTsKIAkJCXBhdGggPSBTaGFyZWQ7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtNjUxNSw2ICs2NTM5LDcgQEAKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJMDc5MjMxMkYyMzlCM0IwQzAwOTU5OEUyIC8qIG1lZGlhICovLAor
CQkJCTcyNTY0NTlDMjNFOEZFNUMwMEEwNjMyRCAvKiBSZW5kZXJpbmdCYWNrZW5kICovLAogCQkJ
CTQxNzIxOTg4MjNCNjEyNjEwMEFFNTY4NiAvKiB3ZWJydGMgKi8sCiAJCQkJMkQ3RTQzQzAyMzc1
MkNEOTAwRUE1Q0EwIC8qIEdQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCAqLywKIAkJCQkyRDdFNDND
MzIzNzUyQ0Q5MDBFQTVDQTAgLyogR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uaCAqLywKQEAgLTY1MzEs
NiArNjU1Niw3IEBACiAJCQkJMkQ5RkIyMDQyMzc1MjA5RDAwNDlGOTM2IC8qIGlvcyAqLywKIAkJ
CQkyRDlGQjIwNjIzNzUyMDlEMDA0OUY5MzYgLyogbWFjICovLAogCQkJCTA3Qzc1QzE3MjM5OUEz
REIwMDg4RTY1QiAvKiBtZWRpYSAqLywKKwkJCQk3MjU2NDU5RDIzRThGRTg3MDBBMDYzMkQgLyog
UmVuZGVyaW5nQmFja2VuZCAqLywKIAkJCQk0MTcyMTk4RTIzQjYzM0NBMDBBRTU2ODYgLyogd2Vi
cnRjICovLAogCQkJCTJEOUZCMjBDMjM3NTIwOUQwMDQ5RjkzNiAvKiBHUFVDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzLmNwcCAqLywKIAkJCQkyRDlGQjIwMDIzNzUyMDlEMDA0OUY5MzYgLyogR1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oICovLApAQCAtNzkzNyw2ICs3OTYzLDUyIEBACiAJCQluYW1l
ID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJNzI1MDZENDIyM0VB
MjE2MDAwMUU2RTBEIC8qIGNnICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQk3MjUwNkQ0NDIzRUEyMUE5MDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJTaGFyZWFi
bGVJT1N1cmZhY2VCYWNrZW5kLmNwcCAqLywKKwkJCQk3MjUwNkQ0MzIzRUEyMUE4MDAxRTZFMEQg
LyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmggKi8sCisJCQkpOworCQkJ
cGF0aCA9IGNnOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzI1NjQ1OUMy
M0U4RkU1QzAwQTA2MzJEIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTcyNTA2RDQyMjNFQTIxNjAwMDFFNkUwRCAvKiBj
ZyAqLywKKwkJCQk3MjUwNkQ0NTIzRUEyMUQyMDAxRTZFMEQgLyogSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlLmggKi8sCisJCQkJNzI5QzQ1MUQyM0VBNEUwNDAwQjJCMUNFIC8qIEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmggKi8sCisJCQkJNzI1NjQ1QTQyM0U5MDdEMTAwQTA2MzJEIC8qIElt
YWdlQnVmZmVySWRlbnRpZmllci5oICovLAorCQkJCTcyNTA2RDQwMjNFQTIxMkUwMDFFNkUwRCAv
KiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwICovLAorCQkJCTcyNTA2RDQx
MjNFQTIxMkYwMDFFNkUwRCAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCAq
LywKKwkJCQk3MjUwNkQ0ODIzRUEyMkI3MDAxRTZFMEQgLyogUGxhdGZvcm1JbWFnZUJ1ZmZlclNo
YXJlYWJsZUJhY2tlbmQuaCAqLywKKwkJCQk3MjlDNDUxNzIzRUE0NUQyMDBCMkIxQ0UgLyogUmVt
b3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjUwNkQzQTIzRTlGODhDMDAxRTZFMEQgLyogUmVt
b3RlSW1hZ2VCdWZmZXJDaGFubmVsLmNwcCAqLywKKwkJCQk3MjUwNkQzOTIzRTlGODhCMDAxRTZF
MEQgLyogUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmggKi8sCisJCQkJNzI1MDZEM0IyM0U5Rjg4
QzAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbC5tZXNzYWdlcy5pbiAqLywKKwkJ
CQk3MjlDNDUxODIzRUE0NUQzMDBCMkIxQ0UgLyogUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5o
ICovLAorCQkJCTcyNTY0NUEzMjNFOEZGMTUwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcCAqLywKKwkJCQk3MjU2NDVBMjIzRThGRjE1MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oICovLAorCQkJCTcyNTY0NUExMjNFOEZGMTUwMEEwNjMyRCAvKiBSZW5kZXJp
bmdCYWNrZW5kSWRlbnRpZmllci5oICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNr
ZW5kOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJNzI1NjQ1OUQyM0U4RkU4
NzAwQTA2MzJEIC8qIFJlbmRlcmluZ0JhY2tlbmQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTcyNTA2RDNFMjNFOUY4QjkwMDFFNkUwRCAvKiBSZW1vdGVJ
bWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5jcHAgKi8sCisJCQkJNzI1MDZEM0MyM0U5RjhCOTAwMUU2
RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5LmggKi8sCisJCQkJNzI1MDZEM0Qy
M0U5RjhCOTAwMUU2RTBEIC8qIFJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5Lm1lc3NhZ2Vz
LmluICovLAorCQkJCTcyOUM0NTE5MjNFQTQ2MTEwMEIyQjFDRSAvKiBSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5LmggKi8sCisJCQkJNzI5QzQ1MUEyM0VBNDYxMTAwQjJCMUNFIC8qIFJlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXJQcm94eS5oICovLAorCQkJCTcyNTY0NTlFMjNFOEZGMDcwMEEwNjMyRCAv
KiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwICovLAorCQkJCTcyNTY0NTlGMjNFOEZG
MDcwMEEwNjMyRCAvKiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaCAqLywKKwkJCQk3MjU2
NDVBMDIzRThGRjA3MDBBMDYzMkQgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluICovLAorCQkJKTsKKwkJCXBhdGggPSBSZW5kZXJpbmdCYWNrZW5kOworCQkJc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJN0E4NDNBMUQyMUU0MUZEOTAwREVGNjYzIC8qIENs
YXNzaWZpZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAt
MTA0ODgsNiArMTA1NjAsNyBAQAogCQkJCTFBNEE5RjMzMTJCODQ0RTIwMDhGRTk4NCAvKiBQbHVn
aW5RdWlya3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDRDYyMjc4MTczOUQ4NjMwMDVCRDdGRiAv
KiBQbHVnaW5TYW5kYm94UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE2RkI3QUYxMUU2
NEI2ODAwREIxMzcxIC8qIFBsdWdpblZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5RUNBNDFD
MjNGQ0E1RDgwMDIzMzU4RCAvKiBQb2xpY3lEZWNpc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NTdGRDMxODEyMkIzNTE1QjAwOEQwRThCIC8qIFBvcFVwU09BdXRob3JpemF0aW9uU2Vzc2lvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODNBMEVEMzUxRjc0N0NDRjAwMzI5OUVCIC8qIFByZWNvbm5l
Y3RUYXNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMTVDQkIzNjIzRjM3NzcxMDAzMDBDQzcgLyog
UHJlZmVyZW5jZU9ic2VydmVyLmggaW4gSGVhZGVycyAqLywKQEAgLTEwNzgxLDcgKzEwODU0LDYg
QEAKIAkJCQkyRDVDOUQwNjE5QzgxRDhGMDBCM0M1QzEgLyogV2ViUGFnZU92ZXJsYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQ2QzM5MjI5MjMxNkVDNEQwMDhFRUQ5QiAvKiBXZWJQYWdlUHJveHlJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JEMzkxNTEyNUJCMUE4MDBEMkMyOUYg
LyogV2ViUGFnZVByb3h5TWVzc2FnZXMuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5RUNBNDFDMjNG
Q0E1RDgwMDIzMzU4RCAvKiBQb2xpY3lEZWNpc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEy
MTI3QzQxOTA4MjM5QTAwREFGMzVDIC8qIFdlYlBhc3RlYm9hcmRPdmVycmlkZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTdDNDY5NEQxMUE1MUUzNjgwMEFENTg0NSAvKiBXZWJQYXN0ZWJvYXJkUHJv
eHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDNDY5NENBMUE0QjRFQTEwMEFENTg0NSAvKiBXZWJQ
YXN0ZWJvYXJkUHJveHlNZXNzYWdlcy5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCmluZGV4IDhk
ZmY1MGYzMDg4ZWQ0NWM1OTBlYzgxZTJjMDlhMTM4YmE3YTUzNWYuLjBmOWM3YWNlZjRlMGVkODcz
YzRiZTA4OTYxOGE2ZGYwNDE3ODcwZjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCkBAIC02MiwxMCArNjIsNiBAQCB2
b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6OkNvbm5lY3Rpb24mKQogewog
fQogCi12b2lkIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2Uo
SVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlcmVuY2UsIElQQzo6U3RyaW5nUmVmZXJl
bmNlKQotewotfQotCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJMRShWSURFT19UUkFDSykg
JiYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIFNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIm
IEdQVVByb2Nlc3NDb25uZWN0aW9uOjpzYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyKCkK
IHsKQEAgLTc1LDM0ICs3MSw0NCBAQCBTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyJiBH
UFVQcm9jZXNzQ29ubmVjdGlvbjo6c2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTQogfQogI2VuZGlm
CiAKLXZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29u
bmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQorYm9vbCBHUFVQcm9j
ZXNzQ29ubmVjdGlvbjo6ZGlzcGF0Y2hNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQogewogICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VSZWNl
aXZlck5hbWUoKSA9PSBNZXNzYWdlczo6TWVkaWFQbGF5ZXJQcml2YXRlUmVtb3RlOjptZXNzYWdl
UmVjZWl2ZXJOYW1lKCkpIHsKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuc3VwcGxl
bWVudDxSZW1vdGVNZWRpYVBsYXllck1hbmFnZXI+KCktPmRpZFJlY2VpdmVQbGF5ZXJNZXNzYWdl
KGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KLQogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgaWYgKGRlY29kZXIu
bWVzc2FnZVJlY2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpVc2VyTWVkaWFDYXB0dXJlTWFuYWdl
cjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBjYXB0dXJlTWFu
YWdlciA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLnN1cHBsZW1lbnQ8VXNlck1lZGlhQ2FwdHVy
ZU1hbmFnZXI+KCkpCiAgICAgICAgICAgICBjYXB0dXJlTWFuYWdlci0+ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tR1BVUHJvY2Vzcyhjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIEVOQUJM
RShWSURFT19UUkFDSykKICAgICBpZiAoZGVjb2Rlci5tZXNzYWdlUmVjZWl2ZXJOYW1lKCkgPT0g
TWVzc2FnZXM6OlNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjo6bWVzc2FnZVJlY2VpdmVyTmFtZSgp
KSB7CiAgICAgICAgIHNhbXBsZUJ1ZmZlckRpc3BsYXlMYXllck1hbmFnZXIoKS5kaWRSZWNlaXZl
TGF5ZXJNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZiAvLyBQTEFURk9STShDT0NPQSkgJiYgRU5B
QkxFKFZJREVPX1RSQUNLKQogI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCiAjaWYgVVNF
KExJQldFQlJUQykgJiYgUExBVEZPUk0oQ09DT0EpCiAgICAgaWYgKGRlY29kZXIubWVzc2FnZVJl
Y2VpdmVyTmFtZSgpID09IE1lc3NhZ2VzOjpMaWJXZWJSVENDb2RlY3M6Om1lc3NhZ2VSZWNlaXZl
ck5hbWUoKSkgewogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5saWJXZWJSVENDb2Rl
Y3MoKS5kaWRSZWNlaXZlTWVzc2FnZShjb25uZWN0aW9uLCBkZWNvZGVyKTsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAjZW5kaWYKKyAgICByZXR1cm4gbWVz
c2FnZVJlY2VpdmVyTWFwKCkuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIpOwog
fQogCitib29sIEdQVVByb2Nlc3NDb25uZWN0aW9uOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQQzo6
Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVuaXF1
ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVybiBtZXNzYWdl
UmVjZWl2ZXJNYXAoKS5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIsIHJl
cGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgR1BVUHJvY2Vzc0Nvbm5lY3Rpb246OmRpZFJlY2VpdmVJ
bnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmVyZW5jZSwgSVBD
OjpTdHJpbmdSZWZlcmVuY2UpCit7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmgKaW5kZXggNDYwMGU1M2JiMjg0ZDc0OGNm
MzkxMWI5NGRiNTU5OWE5Y2I0NWYyNy4uN2I2Zjg4MjIyYzMzNzM2YjhjNDI3ZGI0Y2JkZTFjMDQ1
NDg4NmM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9j
ZXNzQ29ubmVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJv
Y2Vzc0Nvbm5lY3Rpb24uaApAQCAtMjgsNiArMjgsNyBAQAogI2lmIEVOQUJMRShHUFVfUFJPQ0VT
UykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXJN
YXAuaCIKICNpbmNsdWRlICJTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgiCiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTQ3LDYgKzQ4LDcgQEAgcHVibGljOgogICAgIH5HUFVQcm9jZXNzQ29ubmVjdGlvbigpOwog
ICAgIAogICAgIElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fY29ubmVj
dGlvbi5nZXQoKTsgfQorICAgIElQQzo6TWVzc2FnZVJlY2VpdmVyTWFwJiBtZXNzYWdlUmVjZWl2
ZXJNYXAoKSB7IHJldHVybiBtX21lc3NhZ2VSZWNlaXZlck1hcDsgfQogCiAjaWYgSEFWRShBVURJ
VF9UT0tFTikKICAgICB2b2lkIHNldEF1ZGl0VG9rZW4oT3B0aW9uYWw8YXVkaXRfdG9rZW5fdD4g
YXVkaXRUb2tlbikgeyBtX2F1ZGl0VG9rZW4gPSBhdWRpdFRva2VuOyB9CkBAIC02MiwxMCArNjQs
MTUgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6OkNvbm5lY3Rpb246OkNsaWVudAogICAgIHZvaWQg
ZGlkQ2xvc2UoSVBDOjpDb25uZWN0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBmaW5hbDsKKyAgICB2b2lk
IGRpZFJlY2VpdmVTeW5jTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImLCBz
dGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2
ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUsIElQQzo6U3RyaW5nUmVmZXJlbmNlIG1lc3NhZ2VOYW1lKSBvdmVy
cmlkZTsKKyAgICAKKyAgICBib29sIGRpc3BhdGNoTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJ
UEM6OkRlY29kZXImKTsKKyAgICBib29sIGRpc3BhdGNoU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsKIAog
ICAgIC8vIFRoZSBjb25uZWN0aW9uIGZyb20gdGhlIHdlYiBwcm9jZXNzIHRvIHRoZSBHUFUgcHJv
Y2Vzcy4KICAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBtX2Nvbm5lY3Rpb247CisgICAgSVBDOjpN
ZXNzYWdlUmVjZWl2ZXJNYXAgbV9tZXNzYWdlUmVjZWl2ZXJNYXA7CiAKICNpZiBIQVZFKEFVRElU
X1RPS0VOKQogICAgIE9wdGlvbmFsPGF1ZGl0X3Rva2VuX3Q+IG1fYXVkaXRUb2tlbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25u
ZWN0aW9uLm1lc3NhZ2VzLmluCmluZGV4IGQzNmY4YTA5NWY2YTc3YmJiNmNhYzg4M2E2NTFlODRj
ZTlkNjRiMzAuLjU3ZmVjZGU5ZGYyN2M3MzlhNmNiZjAyNjk4MDY1OTJiNWUyMTc5YTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvR1BVUHJvY2Vzc0Nvbm5lY3Rpb24u
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9HUFVQcm9jZXNz
Q29ubmVjdGlvbi5tZXNzYWdlcy5pbgpAQCAtMjIsNyArMjIsNyBAQAogCiAjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQogCi1tZXNzYWdlcyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiB7CittZXNzYWdl
cyAtPiBHUFVQcm9jZXNzQ29ubmVjdGlvbiBXYW50c0Rpc3BhdGNoTWVzc2FnZSB7CiAKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmE1OTYzMDY5ZjY2MTgxODNkMDc4YTY0YzJkZWFjYzJkODNhNGNkZTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VC
dWZmZXJCYWNrZW5kSGFuZGxlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiU2hhcmVhYmxl
Qml0bWFwLmgiCisjaW5jbHVkZSA8d3RmL01hY2hTZW5kUmlnaHQuaD4KKyNpbmNsdWRlIDx3dGYv
VmFyaWFudC5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgSW1hZ2VCdWZmZXJCYWNr
ZW5kSGFuZGxlID0gVmFyaWFudDwKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBNYWNoU2VuZFJp
Z2h0LAorI2VuZGlmCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUKKz47CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRl
cmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDJj
ZjI0NWUzNDVlMWRmZWM2MmRjMWQ3YTNlY2FlZmNkOWFiNWQwCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElk
ZW50aWZpZXIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gSW1hZ2VCdWZmZXJGbHVz
aElkZW50aWZpZXJUeXBlIHsgfTsKK3VzaW5nIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyID0g
T2JqZWN0SWRlbnRpZmllcjxJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllclR5cGU+OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9JbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVy
aW5nQmFja2VuZC9JbWFnZUJ1ZmZlcklkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YTFiYzlhZTg3
ZGM4ZDcyNDI4YTBiODA5Y2FkMGQ4MGE0Y2QxY2I5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVySWRlbnRp
Zmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9PYmplY3RJZGVudGlmaWVyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVySWRlbnRpZmllclR5cGUg
eyB9OwordXNpbmcgSW1hZ2VCdWZmZXJJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmllcjxJbWFn
ZUJ1ZmZlcklkZW50aWZpZXJUeXBlPjsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9J
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkyMjE4MDRk
M2JkOWNmNjJjOTdmYzJiYzY0YmZhYjE0YTc3NzAzZjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCaXRtYXBCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJh
Y2tlbmQuaCIKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlNoYXJlYWJs
ZUJpdG1hcC5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VEYXRhLmg+CisjaW5jbHVkZSA8d3Rm
L0lzb01hbGxvY0lubGluZXMuaD4KKworI2lmIFBMQVRGT1JNKENPQ09BKQorI2luY2x1ZGUgPFdl
YkNvcmUvR3JhcGhpY3NDb250ZXh0Q0cuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kOjpjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9u
U2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyopCit7CisgICAg
SW50U2l6ZSBiYWNrZW5kU2l6ZSA9IGNhbGN1bGF0ZUJhY2tlbmRTaXplKHNpemUsIHJlc29sdXRp
b25TY2FsZSk7CisgICAgaWYgKGJhY2tlbmRTaXplLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBTaGFyZWFibGVCaXRtYXA6OkNvbmZpZ3VyYXRpb24gY29uZmlndXJh
dGlvbjsKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBjb25maWd1cmF0aW9uLmNvbG9yU3BhY2Ug
PSB7IGNhY2hlZENHQ29sb3JTcGFjZShjb2xvclNwYWNlKSB9OworI2VuZGlmCisgICAgYXV0byBi
aXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShiYWNrZW5kU2l6ZSwgY29u
ZmlndXJhdGlvbik7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBjb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIHN0
ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+KG5ldyBJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoc2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRp
b25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShiaXRtYXApLCBXVEZNb3ZlKGNvbnRleHQpKSk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+
IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgbG9naWNhbFNpemUsIGNvbnN0IEludFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxl
IGhhbmRsZSkKK3sKKyAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U2hhcmVhYmxlQml0
bWFwOjpIYW5kbGU+KGhhbmRsZSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGF1dG8gYml0bWFwID0gU2hhcmVh
YmxlQml0bWFwOjpjcmVhdGUoV1RGTW92ZShXVEY6OmdldDxTaGFyZWFibGVCaXRtYXA6OkhhbmRs
ZT4oaGFuZGxlKSkpOworICAgIGlmICghYml0bWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGF1dG8gY29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7Cisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPihuZXcgSW1h
Z2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6ZSwg
cmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGJpdG1hcCksIFdURk1vdmUoY29u
dGV4dCkpKTsKK30KKworSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kOjpJbWFnZUJ1
ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwg
Y29uc3QgSW50U2l6ZSYgcGh5c2ljYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4mJiBiaXRtYXAsIHN0ZDo6
dW5pcXVlX3B0cjxHcmFwaGljc0NvbnRleHQ+JiYgY29udGV4dCkKKyAgICA6IEltYWdlQnVmZmVy
QmFzZUJhY2tlbmQobG9naWNhbFNpemUsIHBoeXNpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlKQorICAgICwgbV9iaXRtYXAoV1RGTW92ZShiaXRtYXApKQorICAgICwgbV9jb250
ZXh0KFdURk1vdmUoY29udGV4dCkpCit7Cit9CisKK0ltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyQmFja2Vu
ZEhhbmRsZSgpIGNvbnN0Cit7CisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOwor
ICAgIG1fYml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gSW1hZ2VCdWZm
ZXJCYWNrZW5kSGFuZGxlKFdURk1vdmUoaGFuZGxlKSk7Cit9CisKK05hdGl2ZUltYWdlUHRyIElt
YWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y29weU5hdGl2ZUltYWdlKEJhY2tpbmdT
dG9yZUNvcHkpIGNvbnN0Cit7CisjaWYgVVNFKENHKQorICAgIHJldHVybiBtX2JpdG1hcC0+bWFr
ZUNHSW1hZ2VDb3B5KCk7CisjZWxpZiBVU0UoRElSRUNUMkQpCisgICAgcmV0dXJuIG51bGxwdHI7
CisjZWxpZiBVU0UoQ0FJUk8pCisgICAgcmV0dXJuIG1fYml0bWFwLT5jcmVhdGVDYWlyb1N1cmZh
Y2UoKTsKKyNlbmRpZgorfQorCitSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0
bWFwQmFja2VuZDo6Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHksIFByZXNlcnZlUmVzb2x1dGlv
bikgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cit9CisKK1Zl
Y3Rvcjx1aW50OF90PiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OnRvQkdSQURh
dGEoKSBjb25zdAoreworICAgIHJldHVybiBJbWFnZUJ1ZmZlckJhY2tlbmQ6OnRvQkdSQURhdGEo
bV9iaXRtYXAtPmRhdGEoKSk7Cit9CisKK1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZDo6Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdAoreworICAgIHJldHVy
biBJbWFnZUJ1ZmZlckJhY2tlbmQ6OmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1JlY3Qs
IG1fYml0bWFwLT5kYXRhKCkpOworfQorCit2b2lkIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFw
QmFja2VuZDo6cHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQs
IGNvbnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEltYWdlQnVmZmVyQmFja2VuZDo6cHV0SW1h
Z2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCwgbV9iaXRt
YXAtPmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5B
QkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL0ltYWdlQnVmZmVy
U2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhOTRmY2E5ZDAzYTc5MWNjYjEw
Y2NkODFmOTBmYjBjOTU0OTgxNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykK
KworI2luY2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1JbWFnZUJ1ZmZlckJhY2tlbmQuaD4KKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBTaGFyZWFibGVCaXRtYXA7CisKK2Ns
YXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCA6IHB1YmxpYyBXZWJDb3JlOjpJ
bWFnZUJ1ZmZlckJhc2VCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKEltYWdl
QnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kKTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZD4gY3JlYXRl
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRv
dyopOworCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJp
dG1hcEJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXpl
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKKwor
ICAgIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBjcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUoKSBjb25zdDsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2NvbnRleHQ7IH0KKworICAgIFdlYkNvcmU6Ok5hdGl2
ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShXZWJDb3JlOjpCYWNraW5nU3RvcmVDb3B5ID0gV2Vi
Q29yZTo6Q29weUJhY2tpbmdTdG9yZSkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkltYWdlPiBjb3B5SW1hZ2UoV2ViQ29yZTo6QmFja2luZ1N0b3JlQ29weSA9IFdlYkNvcmU6
OkNvcHlCYWNraW5nU3RvcmUsIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiA9IFdlYkNvcmU6
OlByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlOworCisgICAgVmVjdG9yPHVp
bnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3Jt
YXQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1
dEltYWdlRGF0YShXZWJDb3JlOjpBbHBoYVByZW11bHRpcGxpY2F0aW9uIGlucHV0Rm9ybWF0LCBj
b25zdCBXZWJDb3JlOjpJbWFnZURhdGEmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBzcmNSZWN0
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZGVzdFBvaW50KSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGh5c2ljYWxT
aXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UsIFJlZlB0cjxT
aGFyZWFibGVCaXRtYXA+JiYsIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ+JiYpOworCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBDb2xvckZvcm1hdCBiYWNr
ZW5kQ29sb3JGb3JtYXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBDb2xvckZvcm1hdDo6QkdS
QTsgfQorI2VuZGlmCisKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBtX2JpdG1hcDsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0PiBtX2NvbnRleHQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VT
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1BsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDhjYTQ4NWIxMTY4OWJiOGY5YmY3NTIzMGRjMTA3
ZDIyYTI5NmUyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9QbGF0Zm9ybUltYWdlQnVmZmVyU2hhcmVhYmxlQmFja2VuZC5o
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNs
dWRlICJJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCIKKworI2lmIEhBVkUoSU9T
VVJGQUNFKQorI2luY2x1ZGUgIkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5o
IgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1c2luZyBJbWFnZUJ1ZmZlclNoYXJl
YWJsZVVuYWNjZWxlcmF0ZWRCYWNrZW5kID0gSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNr
ZW5kOworCisjaWYgSEFWRShJT1NVUkZBQ0UpCit1c2luZyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUFj
Y2VsZXJhdGVkQmFja2VuZCA9IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDsK
KyNlbHNlCit1c2luZyBJbWFnZUJ1ZmZlclNoYXJlYWJsZUFjY2VsZXJhdGVkQmFja2VuZCA9IElt
YWdlQnVmZmVyU2hhcmVhYmxlVW5hY2NlbGVyYXRlZEJhY2tlbmQ7CisjZW5kaWYKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiYjQ2NjgyZTNmOGUzMTgxN2I2
YjZmOWIwYjliODJiMTBiMmIwZGYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVt
b3RlSW1hZ2VCdWZmZXJDaGFubmVsLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdElt
YWdlQnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGljIFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1
ZmZlckNoYW5uZWwgeworICAgIHVzaW5nIEJhc2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyID0gV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBC
YXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9iYWNrZW5kOworCitwdWJsaWM6CisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYgc2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdN
b2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIp
CisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUJhY2tlbmRTaXplKHNp
emUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZl
cj4obmV3IFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgcmVuZGVyaW5nTW9kZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xv
clNwYWNlLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIFJlbmRlcmluZ0Jh
Y2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKQorICAgICAgICA6IEJh
c2VEaXNwbGF5TGlzdEltYWdlQnVmZmVyKHNpemUpCisgICAgICAgICwgUmVtb3RlSW1hZ2VCdWZm
ZXJDaGFubmVsKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFj
ZSwgcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
Y3JlYXRlQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25z
dCBXZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBo
YW5kbGUpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoIW1fYmFja2VuZCk7CisgICAg
ICAgIG1fYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUobG9naWNhbFNpemUsIGJhY2tlbmRT
aXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxlKSk7CisgICAg
fQorCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2VuZCgpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAgICAgICAgICAg
IGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXImPigqdGhpcykuZW5zdXJlVXBkYXRlZEJhY2tl
bmQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lk
IGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CisgICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgfQorCisgICAg
dm9pZCBmbHVzaERyYXdpbmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8m
IGRpc3BsYXlMaXN0ID0gV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRyYXdpbmdDb250ZXh0OjpkaXNw
bGF5TGlzdCgpOworICAgICAgICBpZiAoZGlzcGxheUxpc3QuaXRlbUNvdW50KCkpIHsKKyAgICAg
ICAgICAgIFJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbDo6cmVtb3RlRmx1c2hEcmF3aW5nQ29udGV4
dChkaXNwbGF5TGlzdCk7CisgICAgICAgICAgICBkaXNwbGF5TGlzdC5jbGVhcigpOworICAgICAg
ICB9CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFC
TEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiMWVjM2UzMzU5NGM0MWZlODE5ODg1OWIxYjkwOWJkOGRk
YmQ1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1Jl
bmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmNwcApAQCAtMCwwICsxLDEw
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmgiCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJHUFVQcm9jZXNzQ29ubmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbE1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiUmVt
b3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlJlbW90ZVJl
bmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsOjpSZW1v
dGVJbWFnZUJ1ZmZlckNoYW5uZWwoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2Rl
IHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlLCBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciByZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
cikKKyAgICA6IG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIocmVuZGVyaW5nQmFja2VuZElk
ZW50aWZpZXIpCit7CisgICAgLy8gUmVnaXN0ZXIgaXRzZWxmIGFzIGEgTWVzc2FnZVJlY2VpdmVy
IGluIHRoZSBHUFVQcm9jZXNzQ29ubmVjdGlvbi4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1h
cCYgbWVzc2FnZVJlY2VpdmVyTWFwID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNzYWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVj
ZWl2ZXJNYXAuYWRkTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWw6Om1lc3NhZ2VSZWNlaXZlck5hbWUoKSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIudG9V
SW50NjQoKSwgKnRoaXMpOworCisgICAgLy8gQ3JlYXRlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclBy
b3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Q3Jl
YXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xv
clNwYWNlLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOworfQorCitSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6On5SZW1vdGVJbWFnZUJ1ZmZl
ckNoYW5uZWwoKQoreworICAgIC8vIFVuLXJlZ2lzdGVyIGl0c2VsZiBhcyBhIE1lc3NhZ2VSZWNl
aXZlci4KKyAgICBJUEM6Ok1lc3NhZ2VSZWNlaXZlck1hcCYgbWVzc2FnZVJlY2VpdmVyTWFwID0g
V2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5tZXNz
YWdlUmVjZWl2ZXJNYXAoKTsKKyAgICBtZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVzc2FnZVJl
Y2VpdmVyKCp0aGlzKTsKKworICAgIC8vIFJlbGVhc2UgdGhlIFJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuCisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpSZWxl
YXNlSW1hZ2VCdWZmZXIobV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWw6Om1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gJldl
YlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVj
dGlvbigpOworfQorCit1aW50NjRfdCBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6Om1lc3NhZ2VT
ZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlcklk
ZW50aWZpZXIudG9VSW50NjQoKTsKK30KKworYm9vbCBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6
OndhaXRDcmVhdGVCYWNrZW5kKCkKK3sKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0
aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24o
KS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRj
aEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWw6OkNyZWF0ZUJh
Y2tlbmQ+KG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyLCAxX3MsIElQQzo6V2FpdEZvck9wdGlvbjo6
SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKworYm9vbCBSZW1vdGVJ
bWFnZUJ1ZmZlckNoYW5uZWw6OndhaXRTZXRGbHVzaElkZW50aWZpZXIoKQoreworICAgIFJlZjxJ
UEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1
cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVj
dGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZUltYWdl
QnVmZmVyQ2hhbm5lbDo6U2V0Rmx1c2hJZGVudGlmaWVyPihtX2ltYWdlQnVmZmVySWRlbnRpZmll
ciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdl
QXJyaXZlcyk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsOjplbnN1cmVVcGRh
dGVkQmFja2VuZCgpCit7CisgICAgY29uc3RleHByIGNvbnN0IHVuc2lnbmVkIE1heFdhaXRzQ291
bnQgPSAzOworICAgIGZvciAodW5zaWduZWQgd2FpdHNDb3VudCA9IE1heFdhaXRzQ291bnQ7ICFp
c0JhY2tlbmRDcmVhdGVkKCkgJiYgd2FpdHNDb3VudC0tOyApCisgICAgICAgIHdhaXRDcmVhdGVC
YWNrZW5kKCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHdhaXRzQ291bnQgPSBNYXhXYWl0c0NvdW50
OyBpc1BlbmRpbmdGbHVzaCgpICYmIHdhaXRzQ291bnQtLTsgKQorICAgICAgICB3YWl0U2V0Rmx1
c2hJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsOjpzZXRG
bHVzaElkZW50aWZpZXIoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVy
KQoreworICAgIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9
CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsOjpyZW1vdGVGbHVzaERyYXdpbmdDb250
ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3Qp
Cit7CisgICAgbV9zZW50Rmx1c2hJZGVudGlmaWVyID0gSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXI6OmdlbmVyYXRlKCk7CisgICAgc2VuZChNZXNzYWdlczo6UmVtb3RlSW1hZ2VCdWZmZXJDaGFu
bmVsUHJveHk6OkZsdXNoRHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QsIG1fc2VudEZsdXNoSWRl
bnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKyAgICBlbnN1cmVVcGRhdGVkQmFj
a2VuZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShH
UFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVu
ZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi40MzdmNWUwNmVhMmUzMDQ4NzMwMzJkMzE3NWQ0NWI4ZWZlOGIwY2IzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdC
YWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRI
YW5kbGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5o
IgorI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgorCitu
YW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsCisgICAg
OiBwcml2YXRlIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VS
ZWNlaXZlciB7CitwdWJsaWM6CisgICAgflJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbCgpOworCitw
cm90ZWN0ZWQ6CisgICAgUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsKGNvbnN0IFdlYkNvcmU6OkZs
b2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwg
V2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworCisgICAg
Ly8gSVBDOjpNZXNzYWdlU2VuZGVyLgorICAgIElQQzo6Q29ubmVjdGlvbiogbWVzc2FnZVNlbmRl
ckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKKyAgICB1aW50NjRfdCBtZXNzYWdlU2VuZGVy
RGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gSVBDOjpNZXNzYWdlUmVj
ZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIG92ZXJyaWRlOworICAgICAgICAKKyAgICAvLyBCbG9ja2VycworICAgIGJvb2wg
d2FpdENyZWF0ZUJhY2tlbmQoKTsKKyAgICBib29sIHdhaXRTZXRGbHVzaElkZW50aWZpZXIoKTsK
KworICAgIHZvaWQgZW5zdXJlVXBkYXRlZEJhY2tlbmQoKTsKKyAgICBib29sIGlzUGVuZGluZ0Zs
dXNoKCkgY29uc3QgeyByZXR1cm4gbV9zZW50Rmx1c2hJZGVudGlmaWVyICE9IG1fcmVjZWl2ZWRG
bHVzaElkZW50aWZpZXI7IH0KKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVCYWNrZW5kKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IHBoeXNpY2FsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNl
LCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNCYWNr
ZW5kQ3JlYXRlZCgpIGNvbnN0ID0gMDsKKworICAgIHZvaWQgc2V0Rmx1c2hJZGVudGlmaWVyKElt
YWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsKKyAgICAgICAgCisgICAgdm9pZCByZW1vdGVGbHVz
aERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYp
OworCisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVy
OworICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIG1fcmVjZWl2ZWRGbHVzaElkZW50aWZp
ZXI7CisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVyIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyIHsg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0ZSgpIH07CisgICAgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIgbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUlt
YWdlQnVmZmVyQ2hhbm5lbC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwubWVzc2FnZXMuaW4K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWIwZGE0OGY3ZTY4NmY3MjQ1YjEwMWRmNWM1YjJlNmJmOTQzYzE1NgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwubWVzc2FnZXMuaW4KQEAgLTAsMCArMSwzMCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjaWYgRU5BQkxFKEdQ
VV9QUk9DRVNTKQorCittZXNzYWdlcyAtPiBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwgTm90UmVm
Q291bnRlZCB7CisgICAgdm9pZCBDcmVhdGVCYWNrZW5kKFdlYkNvcmU6OkZsb2F0U2l6ZSBsb2dp
Y2FsU2l6ZSwgV2ViQ29yZTo6SW50U2l6ZSBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVy
QmFja2VuZEhhbmRsZSBoYW5kbGUpCisgICAgdm9pZCBTZXRGbHVzaElkZW50aWZpZXIoV2ViS2l0
OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50aWZpZXIpCit9CisKKyNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUGxhdGZvcm1JbWFnZUJ1ZmZlci5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRm
b3JtSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTIzMjE2ODYwNWI5Nzk3MzQwYzMzOWQ4ZjQ2
ZWEyZjUwNjQwNDA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZVBsYXRmb3JtSW1hZ2VCdWZmZXIuaApAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUGxh
dGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgUmVtb3RlVW5hY2NlbGVy
YXRlZEltYWdlQnVmZmVyID0gUmVtb3RlSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJTaGFyZWFibGVV
bmFjY2VsZXJhdGVkQmFja2VuZD47Cit1c2luZyBSZW1vdGVBY2NlbGVyYXRlZEltYWdlQnVmZmVy
ID0gUmVtb3RlSW1hZ2VCdWZmZXI8SW1hZ2VCdWZmZXJTaGFyZWFibGVBY2NlbGVyYXRlZEJhY2tl
bmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hYTg3NTgzZmQ3Y2ZmZjZhNjQyZDE5ZmQ2MGNmMTY4MTU4MmUxZDdjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5o
IgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBSZW1vdGVSZW5kZXJp
bmdCYWNrZW5kOjpjcmVhdGUoKQoreworICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZD4obmV3IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKSk7Cit9CisKK1Jl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKQoreworICAgIC8v
IENyZWF0ZSB0aGUgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2Fn
ZXM6OkdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OkNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQobV9y
ZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciksIDApOworfQorCitSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjp+UmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LgorICAgIHNlbmQoTWVzc2FnZXM6OkdQVUNvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6OlJlbGVhc2VSZW5kZXJpbmdCYWNrZW5kKG1fcmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXIpLCAwKTsKK30KKworSVBDOjpDb25uZWN0aW9uKiBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjptZXNzYWdlU2VuZGVyQ29ubmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuICZX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKTsKK30KKwordWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNl
bmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyLnRvVUludDY0KCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRT
aXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KiBob3N0V2luZG93
KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2VCdWZmZXI7CisKKyAg
ICBzd2l0Y2ggKHJlbmRlcmluZ01vZGUpIHsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90
ZUFjY2VsZXJhdGVkOgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbW90ZUFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXI6OmNyZWF0ZShzaXplLCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNv
bG9yU3BhY2UsIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIpOworICAgICAgICBGQUxMVEhS
T1VHSDsKKyAgICBjYXNlIFJlbmRlcmluZ01vZGU6OlJlbW90ZToKKyAgICAgICAgaWYgKCFpbWFn
ZUJ1ZmZlcikKKyAgICAgICAgICAgIGltYWdlQnVmZmVyID0gUmVtb3RlVW5hY2NlbGVyYXRlZElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKKyAgICAgICAgYnJlYWs7
CisKKyAgICBkZWZhdWx0OgorICAgICAgICBpbWFnZUJ1ZmZlciA9IFJlbmRlcmluZ0JhY2tlbmQ6
OmNyZWF0ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgaG9zdFdpbmRvdyk7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlQnVmZmVy
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjg2YmU5ZGNiZDYwZjM5NTg3N2Y0OGU1MTcxODUwOWQ5ZDFmNDRjMDUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShH
UFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgIk1l
c3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgor
I2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nQmFja2VuZC5oPgorCituYW1lc3BhY2UgV2ViS2l0
IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAorICAgIDogcHVibGljIFdlYkNvcmU6
OlJlbmRlcmluZ0JhY2tlbmQKKyAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlU2VuZGVyCisgICAg
LCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOworCisgICAgflJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQoKTsKKworICAgIC8vIElQQzo6TWVzc2FnZVNlbmRlci4KKyAgICBJUEM6
OkNvbm5lY3Rpb24qIG1lc3NhZ2VTZW5kZXJDb25uZWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdWludDY0X3QgbWVzc2FnZVNlbmRlckRlc3RpbmF0aW9uSUQoKSBjb25zdCBvdmVycmlkZTsK
KworICAgIC8vIFJlbmRlcmluZ0JhY2tlbmQKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6
SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYs
IFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6
Q29sb3JTcGFjZSwgY29uc3QgV2ViQ29yZTo6SG9zdFdpbmRvdyopIG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQoKTsKKyAgICBSZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHsgUmVuZGVyaW5nQmFja2Vu
ZElkZW50aWZpZXI6OmdlbmVyYXRlKCkgfTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlm
aWVyLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVu
ZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjM1NDcwY2NmZTdiNzliYjky
NDU3OGFmYjQxNzAzNWM5MTNkZDAyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSA8d3RmL09iamVjdElkZW50aWZpZXIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2VudW0gUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXJUeXBl
IHsgfTsKK3VzaW5nIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyID0gT2JqZWN0SWRlbnRpZmll
cjxSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllclR5cGU+OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9S
ZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYTViZDcyOGViMzhkZWQ1ZDQ5Y2E3ZTA3MmZhZTI1MjhmNTNmOTViMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5n
QmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoR1BV
X1BST0NFU1MpCisjaWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
SW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1
cmZhY2VCYWNrZW5kKTsKKworc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZD4gSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kOjpjcmVh
dGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3Bh
Y2UgY29sb3JTcGFjZSwgY29uc3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdykKK3sKKyAgICBJbnRT
aXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNj
YWxlKTsKKyAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlKGJhY2tlbmRTaXpl
LCBiYWNrZW5kU2l6ZSwgY2FjaGVkQ0dDb2xvclNwYWNlKGNvbG9yU3BhY2UpKTsKKyAgICBpZiAo
IXN1cmZhY2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmV0YWluUHRyPENHQ29u
dGV4dFJlZj4gY2dDb250ZXh0ID0gc3VyZmFjZS0+ZW5zdXJlUGxhdGZvcm1Db250ZXh0KGhvc3RX
aW5kb3cpOworICAgIGlmICghY2dDb250ZXh0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIENHQ29udGV4dENsZWFyUmVjdChjZ0NvbnRleHQuZ2V0KCksIEZsb2F0UmVjdChGbG9hdFBv
aW50Ojp6ZXJvKCksIGJhY2tlbmRTaXplKSk7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRy
PEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hh
cmVhYmxlSU9TdXJmYWNlQmFja2VuZChzaXplLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxl
LCBjb2xvclNwYWNlLCBXVEZNb3ZlKHN1cmZhY2UpKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxl
SU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNv
bnN0IEludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSBoYW5kbGUpCit7CisgICAg
aWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGF1dG8gc3VyZmFjZSA9IElPU3VyZmFjZTo6Y3JlYXRlRnJvbVNlbmRSaWdodChX
VEZNb3ZlKFdURjo6Z2V0PE1hY2hTZW5kUmlnaHQ+KGhhbmRsZSkpLCBjYWNoZWRDR0NvbG9yU3Bh
Y2UoY29sb3JTcGFjZSkpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZD4obmV3IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZChs
b2dpY2FsU2l6ZSwgaW50ZXJuYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdU
Rk1vdmUoc3VyZmFjZSkpKTsKK30KKworSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIEltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKG1fc3Vy
ZmFjZS0+Y3JlYXRlU2VuZFJpZ2h0KCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEhBVkUoSU9TVVJGQUNFKQorI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9jZy9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTM3MTFhNzE3MjNlMDEwMmI3MTk5M2Vh
MDA2M2EwODAwY2YyZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL2NnL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNl
QmFja2VuZC5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1Mp
CisjaWYgSEFWRShJT1NVUkZBQ0UpCisKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oPgor
I2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNz
IFNoYXJlYWJsZUJpdG1hcDsKKworY2xhc3MgSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VC
YWNrZW5kIDogcHVibGljIFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZCB7Cisg
ICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQpOworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9T
dXJmYWNlQmFja2VuZCk7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpG
bG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkNvbG9yU3BhY2UsIGNvbnN0IFdlYkNvcmU6Okhvc3RXaW5kb3cqKTsKKworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBj
cmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgaW50ZXJuYWxTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6
OkNvbG9yU3BhY2UsIEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSk7CisKKyAgICBJbWFnZUJ1ZmZl
ckJhY2tlbmRIYW5kbGUgY3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgdXNpbmcgV2ViQ29yZTo6SW1hZ2VCdWZmZXJJT1N1cmZhY2VCYWNrZW5k
OjpJbWFnZUJ1ZmZlcklPU3VyZmFjZUJhY2tlbmQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIEhBVkUoSU9TVVJGQUNFKQorI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvVGV4
dFRyYWNrUHJpdmF0ZVJlbW90ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9UZXh0VHJhY2tQcml2YXRlUmVtb3RlLmgKaW5kZXggNmFjOWM2OWQwMTkyMGQ5Yzk0MTMyYjg4
M2U1NmY2NWJkOGVjM2NjYy4uMTY0MGQ5MmU2NDBjNGU1MTU0YzRhMmZlMDVhNjU1YTMzOWVmNWMz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9UZXh0VHJh
Y2tQcml2YXRlUmVtb3RlLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRp
YS9UZXh0VHJhY2tQcml2YXRlUmVtb3RlLmgKQEAgLTQ3LDE4ICs0NywxOCBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBhZGREYXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGlt
ZSYgZW5kLCBjb25zdCB2b2lkKiwgdW5zaWduZWQpOwogCiAjaWYgRU5BQkxFKERBVEFDVUVfVkFM
VUUpCi0gICAgdm9pZCBhZGREYXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1l
ZGlhVGltZSYgZW5kLCBSZWY8U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZT4mJiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgdm9pZCB1cGRhdGVEYXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNv
bnN0IE1lZGlhVGltZSYgZW5kLCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJik7Ci0gICAgdm9p
ZCByZW1vdmVEYXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kLCBTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJik7CisgICAgdm9pZCBhZGREYXRhQ3VlKGNv
bnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBSZWY8V2ViQ29yZTo6
U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZT4mJiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCB1
cGRhdGVEYXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5k
LCBXZWJDb3JlOjpTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJik7CisgICAgdm9pZCByZW1vdmVE
YXRhQ3VlKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBXZWJD
b3JlOjpTZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3VlJik7CiAjZW5kaWYKIAotICAgIHZvaWQgYWRk
R2VuZXJpY0N1ZShHZW5lcmljQ3VlRGF0YSYpOwotICAgIHZvaWQgdXBkYXRlR2VuZXJpY0N1ZShH
ZW5lcmljQ3VlRGF0YSYpOwotICAgIHZvaWQgcmVtb3ZlR2VuZXJpY0N1ZShHZW5lcmljQ3VlRGF0
YSYpOworICAgIHZvaWQgYWRkR2VuZXJpY0N1ZShXZWJDb3JlOjpHZW5lcmljQ3VlRGF0YSYpOwor
ICAgIHZvaWQgdXBkYXRlR2VuZXJpY0N1ZShXZWJDb3JlOjpHZW5lcmljQ3VlRGF0YSYpOworICAg
IHZvaWQgcmVtb3ZlR2VuZXJpY0N1ZShXZWJDb3JlOjpHZW5lcmljQ3VlRGF0YSYpOwogCiAgICAg
dm9pZCBwYXJzZVdlYlZUVEZpbGVIZWFkZXIoU3RyaW5nJiYpOwogICAgIHZvaWQgcGFyc2VXZWJW
VFRDdWVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYpOwotICAgIHZvaWQgcGFyc2VXZWJW
VFRDdWVEYXRhU3RydWN0KElTT1dlYlZUVEN1ZSYmKTsKKyAgICB2b2lkIHBhcnNlV2ViVlRUQ3Vl
RGF0YVN0cnVjdChXZWJDb3JlOjpJU09XZWJWVFRDdWUmJik7CiAKICAgICB2b2lkIHVwZGF0ZUNv
bmZpZ3VyYXRpb24oVGV4dFRyYWNrUHJpdmF0ZVJlbW90ZUNvbmZpZ3VyYXRpb24mJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBsZUJ1ZmZl
ckRpc3BsYXlMYXllci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL3dlYnJ0Yy9T
YW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXIuY3BwCmluZGV4IGFlMDE2MWFhZDk0NzRkNmIwZjFmOTAw
YjA1NDRmNTk4MGQzNjk4ZmYuLmI5ZjRkMmE3ZTMyN2ViZTMyMGQ1N2U3NThiYWIwM2U1N2E2YWQ2
NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvd2VicnRjL1NhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS93ZWJydGMvU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyLmNwcApAQCAtMjgsMTIgKzI4LDE1IEBA
CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUo
VklERU9fVFJBQ0spICYmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAKKyNpbmNsdWRlICJHUFVQcm9j
ZXNzQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkxheWVySG9zdGluZ0NvbnRleHQuaCIKICNpbmNs
dWRlICJSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJSZW1vdGVTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyTWVzc2FnZXNSZXBs
aWVzLmgiCiAjaW5jbHVkZSAiUmVtb3RlU2FtcGxlQnVmZmVyRGlzcGxheUxheWVyTWVzc2FnZXMu
aCIKICNpbmNsdWRlICJTYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXJNYW5hZ2VyLmgiCiAjaW5jbHVk
ZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVtb3RlVmlkZW9TYW1wbGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKaW5kZXggOGY1MTA2N2EzOTk4Y2ZiM2FhNWZl
NzAxNGYzNmI5YWQ2NzU2YjM0NC4uMTcyZmEwNTM3YjhjYTczZDdjZTMzMDc0NjUwOTU1OTQyZTgy
Y2I3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1dlYkNocm9tZUNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAKQEAgLTkwLDYgKzkwLDEwIEBACiAjaW5jbHVk
ZSAiVmlkZW9GdWxsc2NyZWVuTWFuYWdlci5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoR1BVX1BS
T0NFU1MpCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIgorI2VuZGlmCisKICNp
ZiBFTkFCTEUoQVNZTkNfU0NST0xMSU5HKQogI2luY2x1ZGUgIlJlbW90ZVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCiAjZW5kaWYKQEAgLTg5MSw2ICs4OTUsMTUgQEAgUmVmUHRyPERpc3BsYXlSZWZy
ZXNoTW9uaXRvcj4gV2ViQ2hyb21lQ2xpZW50OjpjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
UGxhdGYKIAogI2VuZGlmCiAKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJpbmdCYWNrZW5kPiBXZWJD
aHJvbWVDbGllbnQ6OmNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBjb25zdAoreworI2lmIEVOQUJM
RShHUFVfUFJPQ0VTUykKKyAgICByZXR1cm4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
KCk7CisjZWxzZQorICAgIHJldHVybiBSZW5kZXJpbmdCYWNrZW5kOjpjcmVhdGUoKTsKKyNlbmRp
ZgorfQorCiB2b2lkIFdlYkNocm9tZUNsaWVudDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIoRnJh
bWUmLCBHcmFwaGljc0xheWVyKiBsYXllcikKIHsKICAgICBpZiAobGF5ZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xp
ZW50LmgKaW5kZXggN2MxYzdlMDhjZjRkOTQ5ZTQwZTIxMDMyZTI0NGJhMjEyMTI1ZDgxMS4uYTE5
OGM5NzdkYjdmZmZkMjM5MmNiNGVmNWRhZGYxMTk2NTg2ZjAwOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aApAQCAtMjMzLDYgKzIzMyw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFdlYkNvcmU6OkRpc3Bs
YXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBs
YXRmb3JtRGlzcGxheUlEKSBjb25zdCBmaW5hbDsKICNlbmRpZgogCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OlJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZVJlbmRlcmluZ0JhY2tlbmQoKSBj
b25zdCBmaW5hbDsKKwogICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3Np
dGluZ1RyaWdnZXJzKCkgY29uc3QgZmluYWwKICAgICB7CiAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxDb21wb3NpdGluZ1RyaWdnZXJGbGFncz4oCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNWIzMmU5ZDMwOTk0NmM1ZWJi
NTliYzI4YzIzNTU2OGI0MmQxMjYxNS4uODdhNTM0ZTE4NTk4ODNkZTg5ZWM5ODAzNmQyNzRlNzky
N2RjOTZiNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRl
c3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDIwLTAyLTE5ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZh
cyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIGRpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4
dDoKKwogMjAyMC0wMi0xOSAgSmFzb24gTGF3cmVuY2UgIDxsYXdyZW5jZS5qQGFwcGxlLmNvbT4K
IAogICAgICAgICBbIE1hYyB3azIgXSBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2hhci9o
YXItcGFnZS5odG1sIGlzIGZsYWt5IGZhaWxpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Rp
c3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Rpc3BsYXlsaXN0cy9jYW52YXMtZGlzcGxheS1saXN0LWV4cGVjdGVkLnR4dAppbmRleCAxYjU3
ZTc5MWI3MmFjY2E4Nzc2MTQ0NzliNGRjN2ZlNWM5NTk0ZDc3Li4zNGM4N2I5YjA0Mjk0NTVhOWJm
MTE0MWM2YmZiMzk3MWM3NTIwYjhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9kaXNwbGF5bGlz
dHMvY2FudmFzLWRpc3BsYXktbGlzdC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZGlz
cGxheWxpc3RzL2NhbnZhcy1kaXNwbGF5LWxpc3QtZXhwZWN0ZWQudHh0CkBAIC0xLDcgKzEsMTEg
QEAKICAKKyhzYXZlCisgIChyZXN0b3JlLWluZGV4IDApKQogKHNldC1zdGF0ZQotICAoY2hhbmdl
LWZsYWdzIDI1NikKLSAgKGZpbGwtY29sb3IgI0M4MDAwMCkpCisgIChjaGFuZ2UtZmxhZ3MgMTA1
MDkxMikKKyAgKHN0cm9rZS10aGlja25lc3MgMS4wMCkKKyAgKGZpbGwtY29sb3IgI0M4MDAwMCkK
KyAgKHNoYWRvd3MtaWdub3JlLXRyYW5zZm9ybXMgMSkpCiAoZmlsbC1yZWN0CiAgIChleHRlbnQg
YXQgKDEwLDEwKSBzaXplIDU1eDUwKQogICAocmVjdCBhdCAoMTAsMTApIHNpemUgNTV4NTApKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>391238</attachid>
            <date>2020-02-19 18:39:00 -0800</date>
            <delta_ts>2020-03-01 23:56:28 -0800</delta_ts>
            <desc>perf patch</desc>
            <filename>ImageBuffer-perf.patch</filename>
            <type>text/plain</type>
            <size>15475</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBmNGQ2YjcwMmQ5Yi4uNGEzZGY5MjE1MzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTIxNDIsNiArMjE0Miw3IEBACiAJ
CTcyQUI5M0Y2MjNGREZDRkYwMDQxNTA5QyAvKiBJbWFnZUJ1ZmZlckNHQmFja2VuZC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUQyM0UxRTU0
NTAwOEQ3NDFDIC8qIEltYWdlQnVmZmVyQ0dCYWNrZW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzJBQjkzRjcyM0ZERkQ1ODAwNDE1MDlDIC8q
IEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzJCQUMzQUIyM0UxRTU0NDAwOEQ3NDFDIC8qIEltYWdlQnVm
ZmVySU9TdXJmYWNlQmFja2VuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTcyQUI5M0Y4MjNGRTAwQzkwMDQxNTA5QyAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFC
OTNFRjIzRkRFQURGMDA0MTUwOUMgLyogUmVuZGVyaW5nQmFja2VuZC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcyQUI5M0ZDMjNGRTIyNEQwMDQx
NTA5QyAvKiBEaXNwbGF5TGlzdE9ic2VydmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkFCOTNGQTIzRkUyMERCMDA0MTUwOUMgLyogRGlzcGxheUxp
c3RPYnNlcnZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyQkFDM0FFMjNFMUYwQjAwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQkFDM0E1MjNF
MTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3NTUzQ0ZFODEwOEY0NzNGMDBFQTI4MUUg
LyogVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3NTUzQ0ZFNjEwOEY0NzNGMDBFQTI4MUUgLyogVGltZWxpbmVSZWNv
cmRGYWN0b3J5LmggKi87IH07CiAJCTc1NzkzRTg0MEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdl
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc1
NzkzRTgxMEQwQ0UwQjMwMDdGQzBBQyAvKiBNZXNzYWdlRXZlbnQuaCAqLzsgfTsKQEAgLTk1OTgs
NiArOTU5OSw3IEBACiAJCTcyQUI5M0VGMjNGREVBREYwMDQxNTA5QyAvKiBSZW5kZXJpbmdCYWNr
ZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlcmluZ0JhY2tlbmQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzJBQjkzRjAyM0ZERUFERjAwNDE1MDlD
IC8qIFJlbmRlcmluZ0JhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUmVuZGVyaW5nQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyQUI5M0YxMjNGREY0OTMwMDQxNTA5QyAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzJBQjkzRkEyM0ZFMjBEQjAwNDE1MDlDIC8qIERpc3BsYXlMaXN0T2JzZXJ2
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheUxpc3RPYnNlcnZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkJBQzNBNDIzRTE3MzI3MDA4RDc0
MUMgLyogSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlQnVmZmVyQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcyQkFDM0E1MjNFMTczMjgwMDhENzQxQyAvKiBJbWFnZUJ1ZmZlckJhY2tlbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQkFDM0E2MjNFMTczMjgwMDhENzQxQyAvKiBQ
bGF0Zm9ybUltYWdlQnVmZmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBs
YXRmb3JtSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzAy
LDYgKzE2NzA0LDcgQEAKIAkJCQk3MkFCOTNGMTIzRkRGNDkzMDA0MTUwOUMgLyogRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oICovLAogCQkJCTBGRTVGQkNDMUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNw
bGF5TGlzdEl0ZW1zLmNwcCAqLywKIAkJCQkwRkU1RkJDRDFDM0RENTFFMDAwN0EyQ0EgLyogRGlz
cGxheUxpc3RJdGVtcy5oICovLAorCQkJCTcyQUI5M0ZBMjNGRTIwREIwMDQxNTA5QyAvKiBEaXNw
bGF5TGlzdE9ic2VydmVyLmggKi8sCiAJCQkJMEZFNUZCQ0UxQzNERDUxRTAwMDdBMkNBIC8qIERp
c3BsYXlMaXN0UmVjb3JkZXIuY3BwICovLAogCQkJCTBGRTVGQkNGMUMzREQ1MUUwMDA3QTJDQSAv
KiBEaXNwbGF5TGlzdFJlY29yZGVyLmggKi8sCiAJCQkJMEZFNUZCRDAxQzNERDUxRTAwMDdBMkNB
IC8qIERpc3BsYXlMaXN0UmVwbGF5ZXIuY3BwICovLApAQCAtMzIwMzUsNiArMzIwMzgsNyBAQAog
CQkJCTQzNjcwOENEMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0YxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291
cmNlQ2xpcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4RDExMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MkFC
OTNGQzIzRkUyMjREMDA0MTUwOUMgLyogRGlzcGxheUxpc3RPYnNlcnZlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDM2NzA4RDMxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNWR1Jlc291cmNlRmls
dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhENTEyRDlDQTRCMDAwNDQyMzQgLyogUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTQzNjcw
OEQ3MTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmggaW4gSGVh
ZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5o
CmluZGV4IDEyOTJiMWNlNDhmLi44NzM5ZGRhOGIwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdC5oIgorI2luY2x1ZGUg
IkRpc3BsYXlMaXN0T2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJEaXNwbGF5TGlzdFJlY29yZGVyLmgi
CiAjaW5jbHVkZSAiRGlzcGxheUxpc3RSZXBsYXllci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgpAQCAtMzQsMTEgKzM1LDExIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgRGlzcGxheUxpc3QgewogCi1jbGFzcyBEcmF3aW5nQ29udGV4dCB7CitjbGFzcyBEcmF3aW5n
Q29udGV4dCA6IHB1YmxpYyBPYnNlcnZlciB7CiBwdWJsaWM6CiAgICAgRHJhd2luZ0NvbnRleHQo
Y29uc3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSkKICAgICAgICAgOiBtX2NvbnRleHQoWyZdKEdy
YXBoaWNzQ29udGV4dCYgZGlzcGxheUxpc3RDb250ZXh0KSB7Ci0gICAgICAgICAgICByZXR1cm4g
bWFrZVVuaXF1ZTxSZWNvcmRlcj4oZGlzcGxheUxpc3RDb250ZXh0LCBtX2Rpc3BsYXlMaXN0LCBH
cmFwaGljc0NvbnRleHRTdGF0ZSgpLCBGbG9hdFJlY3QoeyB9LCBsb2dpY2FsU2l6ZSksIEFmZmlu
ZVRyYW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFJlY29yZGVyPihk
aXNwbGF5TGlzdENvbnRleHQsIG1fZGlzcGxheUxpc3QsIEdyYXBoaWNzQ29udGV4dFN0YXRlKCks
IEZsb2F0UmVjdCh7IH0sIGxvZ2ljYWxTaXplKSwgQWZmaW5lVHJhbnNmb3JtKCksIHRoaXMpOwog
ICAgICAgICB9KQogICAgIHsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RPYnNlcnZlci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0T2JzZXJ2
ZXIuaAppbmRleCBlNjlkZTI5YmIyZC4uZWZjMmIzZWI1MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdE9ic2VydmVy
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0T2JzZXJ2ZXIuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK25hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CisKK2NsYXNzIE9ic2VydmVyIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5PYnNlcnZlcigpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIHZvaWQg
d2lsbEFwcGVuZEl0ZW0oY29uc3QgSXRlbSYpIHsgfTsKKyAgICAKK3Byb3RlY3RlZDoKKyAgICBP
YnNlcnZlcigpID0gZGVmYXVsdDsKK307CisKK30gLy8gRGlzcGxheUxpc3QKK30gLy8gV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCmluZGV4IDNjYWQxODg2
MTBmLi5jNzM3MzI3NjZlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVy
LmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiRGlzcGxheUxpc3QuaCIKICNpbmNs
dWRlICJEaXNwbGF5TGlzdEl0ZW1zLmgiCisjaW5jbHVkZSAiRGlzcGxheUxpc3RPYnNlcnZlci5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtMzYsOSArMzcsMTAgQEAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKLVJlY29yZGVyOjpSZWNvcmRlcihH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIERpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlLCBjb25zdCBGbG9hdFJlY3QmIGluaXRpYWxDbGlw
LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGJhc2VDVE0pCitSZWNvcmRlcjo6UmVjb3JkZXIoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSwgY29uc3QgRmxvYXRSZWN0JiBpbml0aWFsQ2xpcCwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiBiYXNlQ1RNLCBPYnNlcnZlciogb2JzZXJ2ZXIpCiAgICAg
OiBHcmFwaGljc0NvbnRleHRJbXBsKGNvbnRleHQsIGluaXRpYWxDbGlwLCBiYXNlQ1RNKQogICAg
ICwgbV9kaXNwbGF5TGlzdChkaXNwbGF5TGlzdCkKKyAgICAsIG1fb2JzZXJ2ZXIob2JzZXJ2ZXIp
CiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKERpc3BsYXlMaXN0cywgc3RyZWFtIDw8ICJcblJlY29y
ZGluZyB3aXRoIGNsaXAgIiA8PCBpbml0aWFsQ2xpcCk7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChDb250ZXh0U3RhdGUoc3RhdGUsIGJhc2VDVE0sIGluaXRpYWxDbGlwKSk7CkBAIC01Miw2ICs1
NCw5IEBAIFJlY29yZGVyOjp+UmVjb3JkZXIoKQogCiB2b2lkIFJlY29yZGVyOjp3aWxsQXBwZW5k
SXRlbShjb25zdCBJdGVtJiBpdGVtKQogeworICAgIGlmIChtX29ic2VydmVyKQorICAgICAgICBt
X29ic2VydmVyLT53aWxsQXBwZW5kSXRlbShpdGVtKTsKKwogICAgIGlmIChpdGVtLmlzRHJhd2lu
Z0l0ZW0oKQogI2lmIFVTRShDRykKICAgICAgICAgfHwgaXRlbS50eXBlKCkgPT0gSXRlbVR5cGU6
OkFwcGx5U3Ryb2tlUGF0dGVybiB8fCBpdGVtLnR5cGUoKSA9PSBJdGVtVHlwZTo6QXBwbHlTdHJv
a2VQYXR0ZXJuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9k
aXNwbGF5bGlzdHMvRGlzcGxheUxpc3RSZWNvcmRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3JkZXIuaAppbmRleCBiZjZj
YTU1YTljYS4uMzUxY2EzNGJlNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdFJlY29yZGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0UmVjb3Jk
ZXIuaApAQCAtNDYsMTIgKzQ2LDEzIEBAIHN0cnVjdCBJbWFnZVBhaW50aW5nT3B0aW9uczsKIG5h
bWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKIGNsYXNzIERyYXdpbmdJdGVtOworY2xhc3MgT2JzZXJ2
ZXI7CiAKIGNsYXNzIFJlY29yZGVyIDogcHVibGljIEdyYXBoaWNzQ29udGV4dEltcGwgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlY29y
ZGVyKTsKIHB1YmxpYzoKLSAgICBXRUJDT1JFX0VYUE9SVCBSZWNvcmRlcihHcmFwaGljc0NvbnRl
eHQmLCBEaXNwbGF5TGlzdCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgY29uc3QgRmxv
YXRSZWN0JiBpbml0aWFsQ2xpcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgV0VCQ09S
RV9FWFBPUlQgUmVjb3JkZXIoR3JhcGhpY3NDb250ZXh0JiwgRGlzcGxheUxpc3QmLCBjb25zdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSYsIGNvbnN0IEZsb2F0UmVjdCYgaW5pdGlhbENsaXAsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIE9ic2VydmVyKiA9IG51bGxwdHIpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgflJlY29yZGVyKCk7CiAKICAgICBzaXplX3QgaXRlbUNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNwbGF5TGlzdC5pdGVtQ291bnQoKTsgfQpAQCAtMTczLDYgKzE3NCw3IEBA
IHByaXZhdGU6CiAgICAgQ29udGV4dFN0YXRlJiBjdXJyZW50U3RhdGUoKTsKIAogICAgIERpc3Bs
YXlMaXN0JiBtX2Rpc3BsYXlMaXN0OworICAgIE9ic2VydmVyKiBtX29ic2VydmVyOwogCiAgICAg
VmVjdG9yPENvbnRleHRTdGF0ZSwgMzI+IG1fc3RhdGVTdGFjazsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZl
ckNoYW5uZWxQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFj
a2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5jcHAKaW5kZXggZmFlZjc0MTIxNTEu
LmFiODkwYzAzYWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVy
aW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFu
bmVsUHJveHkuY3BwCkBAIC03Myw2ICs3MywxMSBAQCB2b2lkIFJlbW90ZUltYWdlQnVmZmVyQ2hh
bm5lbFByb3h5OjpmbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbAog
ICAgIHNlbmQoTWVzc2FnZXM6OlJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbDo6U2V0Rmx1c2hJZGVu
dGlmaWVyKGZsdXNoSWRlbnRpZmllciksIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKIH0KIAor
dm9pZCBSZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eTo6YmF0Y2hGbHVzaERyYXdpbmdDb250
ZXh0KGNvbnN0IERpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAg
bG9jYWxCYXRjaEZsdXNoRHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdl
QnVmZmVyQ2hhbm5lbFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5n
QmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5oCmluZGV4IDFlMTNmMmE0MWQw
Li5hOWNlZWY5ODM1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRl
cmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5u
ZWxQcm94eS5oCkBAIC01Nyw4ICs1NywxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCByZW1vdGVD
cmVhdGVCYWNrZW5kKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0
IFdlYkNvcmU6OkludFNpemUmIGludGVybmFsU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBX
ZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOwogCiAgICAgdm9p
ZCBmbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsKKyAgICB2b2lkIGJhdGNoRmx1c2hE
cmF3aW5nQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsK
IAogICAgIHZpcnR1YWwgdm9pZCBsb2NhbEZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2Nh
bEJhdGNoRmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlz
cGxheUxpc3QmKSA9IDA7CiAKICAgICBXZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJvY2VzczsKICAgICBJbWFnZUJ1ZmZlcklkZW50aWZpZXIg
bV9pbWFnZUJ1ZmZlcklkZW50aWZpZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWxQcm94eS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90
ZUltYWdlQnVmZmVyQ2hhbm5lbFByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGIwN2U5NGQ1YmU1Li5j
MjQzMTcwY2Y0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkubWVzc2FnZXMuaW4KKysrIGIv
U291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZm
ZXJDaGFubmVsUHJveHkubWVzc2FnZXMuaW4KQEAgLTI0LDYgKzI0LDcgQEAKIAogbWVzc2FnZXMg
LT4gUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAgdm9p
ZCBGbHVzaERyYXdpbmdDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCBk
aXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBmbHVzaElkZW50
aWZpZXIpCisgICAgdm9pZCBCYXRjaEZsdXNoRHJhd2luZ0NvbnRleHQoV2ViQ29yZTo6RGlzcGxh
eUxpc3Q6OkRpc3BsYXlMaXN0IGRpc3BsYXlMaXN0KQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEdQ
VV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9j
ZXNzL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDExODZl
YzlhZmJlLi42NzQwZmYwMjUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9SZW5kZXJpbmdCYWNrZW5kL1JlbW90ZUltYWdlQnVmZmVyUHJveHku
aApAQCAtNjAsNiArNjAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICBtX2JhY2tl
bmQtPmZsdXNoQ29udGV4dCgpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2FsQmF0Y2hGbHVz
aERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QpIG92ZXJyaWRlCisgICAgeworICAgICAgICBBU1NFUlQoZGlzcGxheUxpc3Qu
aXRlbUNvdW50KCkpOworICAgICAgICBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6UmVwbGF5ZXIgcmVw
bGF5ZXIoQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmNvbnRleHQoKSwgZGlzcGxheUxpc3QpOwor
ICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgbV9iYWNrZW5kLT5mbHVzaENvbnRl
eHQoKTsKKyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1
ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5kL1Jl
bW90ZUltYWdlQnVmZmVyLmgKaW5kZXggY2JiNDY2ODJlM2YuLmEyYWY4MTA0YmEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3Rl
SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmlu
Z0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtODIsNiArODIsMTUgQEAgcHJvdGVjdGVk
OgogICAgICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KKyAg
ICAKKyAgICB2b2lkIHdpbGxBcHBlbmRJdGVtKGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJ
dGVtJiBpdGVtKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgYXV0byYgZGlzcGxheUxpc3QgPSBX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6RHJhd2luZ0NvbnRleHQ6OmRpc3BsYXlMaXN0KCk7CisgICAg
ICAgIGlmIChkaXNwbGF5TGlzdC5pdGVtQ291bnQoKSA+PSA1MTIpIHsKKyAgICAgICAgICAgIFJl
bW90ZUltYWdlQnVmZmVyQ2hhbm5lbDo6cmVtb3RlQmF0Y2hGbHVzaERyYXdpbmdDb250ZXh0KGRp
c3BsYXlMaXN0KTsKKyAgICAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgIH0K
KyAgICB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWwuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9SZW5kZXJpbmdCYWNrZW5k
L1JlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbC5jcHAKaW5kZXggOGIxZWMzZTMzNTkuLjU1ODcwMjFh
MjliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL1JlbmRlcmluZ0Jh
Y2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmNw
cApAQCAtMTAzLDYgKzEwMywxMSBAQCB2b2lkIFJlbW90ZUltYWdlQnVmZmVyQ2hhbm5lbDo6cmVt
b3RlRmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5TAogICAgIGVuc3Vy
ZVVwZGF0ZWRCYWNrZW5kKCk7CiB9CiAKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsOjpy
ZW1vdGVCYXRjaEZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6
OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKK3sKKyAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVJ
bWFnZUJ1ZmZlckNoYW5uZWxQcm94eTo6QmF0Y2hGbHVzaERyYXdpbmdDb250ZXh0KGRpc3BsYXlM
aXN0KSwgbV9pbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9SZW1vdGVJbWFnZUJ1ZmZlckNo
YW5uZWwuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2VuZC9S
ZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwuaAppbmRleCA0MzdmNWUwNmVhMi4uNGFmYTU1MmUzYTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvUmVuZGVyaW5nQmFja2Vu
ZC9SZW1vdGVJbWFnZUJ1ZmZlckNoYW5uZWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL1JlbmRlcmluZ0JhY2tlbmQvUmVtb3RlSW1hZ2VCdWZmZXJDaGFubmVsLmgKQEAgLTY2
LDYgKzY2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0Rmx1c2hJZGVudGlmaWVyKEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyKTsKICAgICAgICAgCiAgICAgdm9pZCByZW1vdGVGbHVzaERy
YXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwor
ICAgIHZvaWQgcmVtb3RlQmF0Y2hGbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRp
c3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYpOwogCiAgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZp
ZXIgbV9zZW50Rmx1c2hJZGVudGlmaWVyOwogICAgIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVy
IG1fcmVjZWl2ZWRGbHVzaElkZW50aWZpZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392118</attachid>
            <date>2020-03-01 23:56:32 -0800</date>
            <delta_ts>2020-03-02 14:37:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200301235631.patch</filename>
            <type>text/plain</type>
            <size>80963</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NjgxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWFjMmVjMzFjOGE5NDFm
NzY1ZjMzY2I2MjU4MmQ5YjNkN2M5NzI0Zi4uNjg4OGRlMDczYmE2ZWIzZjY5MzFhODRkMTljNWVh
OWY0MGNmNzIzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIwLTAzLTAxICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVt
ZW50IGNhbnZhcyByZW1vdGUgcmVuZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBQcmVwYXJlIENvbmNyZXRlSW1hZ2VCdWZmZXIgdG8gYmUgY3Jl
YXRlZCB3aXRob3V0IGltbWVkaWF0ZSBiYWNrZW5kLgorICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZl
ciwgd2hpY2ggaXMgYSBzdXBlcmNsYXNzIG9mIENvbmNyZXRlSW1hZ2VCdWZmZXIsIHdpbGwgYmUK
KyAgICAgICAgY3JlYXRlZCBpbml0aWFsbHkgd2l0aG91dCBhIGJhY2tlbmQuIEl0IHdpbGwgYmUg
Y3JlYXRlZCB3aGVuIGl0cyB0d2luCisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgaW4g
dGhlIEdQVVByb2Nlc3Mgc2hhcmUgaXRzIGJhY2tlbmQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb25jcmV0
ZUltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kQ3JlYXRlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjplbnN1cmVCYWNrZW5kIGNvbnN0KTogRGVsZXRlZC4K
KworMjAyMC0wMi0yOSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29t
PgorCisgICAgICAgIEltcGxlbWVudCB0aGUgcmVtb3RlIEltYWdlQnVmZmVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDcyMjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUlt
YWdlQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpDb25jcmV0ZUltYWdlQnVmZmVyOjpjcmVh
dGUpOgorICAgICAgICBDb25jcmV0ZUltYWdlQnVmZmVyOjpjcmVhdGUgcmV0dXJucyB0aGUgZGVy
aXZlZCBjbGFzcyB3aGljaCBpdCBjcmVhdGVzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0Lmg6CisgICAgICAgIFRoaXMgdXNpbmcgc3RhdGVt
ZW50IGdpdmVzIGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gcmVmZXJlbmNpbmcgRGlzcGxheUxpc3QK
KyAgICAgICAgZnJvbSBXZWJLaXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oOgorICAgICAgICBSZW1vdGVJbWFn
ZUJ1ZmZlciBpbmhlcml0cyBEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXIgc28gdGhlc2UgbWV0aG9k
cyAKKyAgICAgICAgbmVlZCB0byBiZSBleHBvcnRlZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAgICAgICAg
TWFrZSBpdCBwb3NzaWJsZSBmb3IgUmVtb3RlSW1hZ2VCdWZmZXIgdG8gYmUgY3JlYXRlZCB3aXRo
IG5vIGJhY2tlbmQuIEl0CisgICAgICAgIHdpbGwgYmUgY3JlYXRlZCBsYXRlciB3aGVuIFJlbW90
ZUltYWdlQnVmZmVyUHJveHkgc2hhcmVzIGl0cyBiYWNrZW5kIHdpdGgKKyAgICAgICAgUmVtb3Rl
SW1hZ2VCdWZmZXIuCisKIDIwMjAtMDItMjggIFBlbmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNv
bT4KIAogICAgICAgICBbTWVkaWEgaW4gR1BVIHByb2Nlc3NdIEltcGxlbWVudCB0aGUgdmlkZW8g
ZnVsbHNjcmVlbiBhbmQgUGljdHVyZS1pbi1QaWN0dXJlIHN1cHBvcnQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMzc0
YzRjMjc3YTZiOTQ4OGUyYTUwNGU2MzYzMTM2YmI1MzkxNjUxNy4uNjQ3MmE0NmU4ZWFkYjY4MjYx
YjA5NjBhODNhYTkwMDA3MThjNzE5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMTUgQEAKKzIwMjAt
MDMtMDEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAg
ICAgICBJbXBsZW1lbnQgY2FudmFzIHJlbW90ZSByZW5kZXJpbmcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNDk1NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXI6
OmVuc3VyZUJhY2tlbmRDcmVhdGVkKToKKyAgICAgICAgQmxvY2tzIGV4ZWN1dGlvbiB0aWxsIHRo
ZSAgYmFja2VuZCBpcyByZWNlaXZlZCBmcm9tIHRoZSBHUFVQcm9jZXNzLgorCisgICAgICAgICog
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OmVu
c3VyZUJhY2tlbmRDcmVhdGVkKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJN
ZXNzYWdlSGFuZGxlcjo6ZW5zdXJlQmFja2VuZFVwZGF0ZWQpOgorICAgICAgICAqIFdlYlByb2Nl
c3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuaDoKKyAgICAg
ICAgU3luY2hyb25pemUgdGhlIGJhY2tlbmQgYmV0d2VlbiB0aGUgV2ViUHJvY2VzcyBhbmQgdGhl
IEdQVVByb2Nlc3Mgc3VjaAorICAgICAgICB0aGF0IHRoZSBwaXhlbHMgYXJlIHZhbGlkIG9ubHkg
d2hlbiB0aGV5IGFyZSBuZWVkZWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6d2FpdENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChX
ZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OndhaXRDb21taXRJbWFnZUJ1ZmZlckZsdXNo
Q29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oOgorICAgICAgICBCbG9ja2VycyAoZm9ybSBzb21lIHRpbWUpIHRpbGwgY2Vy
dGFpbiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgbWVzc2FnZXMKKyAgICAgICAgYXJlIHJl
Y2VpdmVkLgorCisyMDIwLTAyLTI5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBh
cHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNzIyMQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW90ZUltYWdl
QnVmZmVyIGFuZCBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHJlcHJlc2VudCBhIHNpbmdsZSByZW1v
dGUKKyAgICAgICAgSW1hZ2VCdWZmZXIuIFRoZSBiYWNrIGVuZCBzaG91bGQgYmUgY3JlYXRlZCBi
eSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IGluCisgICAgICAgIEdQVVByb2Nlc3MgYW5kIHNoYXJl
ZCB3aXRoIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlciBpbiB0aGUgV2ViUHJvY2Vzcy4KKyAgICAgICAg
Rmx1c2hpbmcgdGhlIERyYXdpbmdDb250ZXh0IHdpbGwgYmUgZG9uZSBpbiBHUFVQcm9jZXNzLiBC
dXQgY3JlYXRpbmcgdGhlCisgICAgICAgIG5hdGl2ZSBpbWFnZSBvdXQgb2YgdGhlIGJhY2sgZW5k
IHdpbGwgYmUgaW4gR1BVUHJvY2Vzcy4KKworICAgICAgICBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
IGFuZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkgYXJlIGNlbnRyYWwgcG9pbnRzCisgICAg
ICAgIGZvciByZWNlaXZpbmcgYW5kIHNlbmRpbmcgYWxsIHRoZSBtZXNzYWdlcyBvZiB0aGUgUmVt
b3RlSW1hZ2VCdWZmZXIgYW5kCisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuCisKKyAg
ICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1BsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oOiBBZGRlZC4KKyAgICAgICAgRGVmaW5lcyB0aGUgcGxhdGZvcm0gdHlwZXMgb2YgUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eTo6UmVtb3RlSW1hZ2VCdWZm
ZXJNZXNzYWdlSGFuZGxlclByb3h5KToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZm
ZXJNZXNzYWdlSGFuZGxlclByb3h5OjpjcmVhdGVCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5Ojpjb21taXRGbHVzaENvbnRleHQp
OgorICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdl
SGFuZGxlclByb3h5Lmg6IEFkZGVkLgorICAgICAgICBNYW5hZ2VzIHNlbmRpbmcgYW5kIHJlY2Vp
dmluZyB0aGUgbWVzc2FnZXMgb2YgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eQorCisgICAgICAgICog
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5Lmg6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KToK
KyAgICAgICAgSXQgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGEgc2hhcmVkIGJhY2sgZW5k
IGFuZCByZXBsYXlpbmcgYmFjayBkcmF3aW5nCisgICAgICAgIGNvbW1hbmRzLgorCisgICAgICAg
ICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZUltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Ojpy
ZWxlYXNlSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kUHJveHk6OmZsdXNoSW1hZ2VCdWZmZXJEcmF3aW5nQ29udGV4dCk6CisgICAgICAgICogR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuaDoKKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpyZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciBjb25zdCk6CisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgIEhhbmRsZSBvciBkaXNwYXRj
aCBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQuCisKKyAgICAg
ICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oOiBBZGRl
ZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVh
YmxlQml0bWFwQmFja2VuZDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaDoKKyAgICAgICAgQWx0aG91
Z2ggaG9zdFdpbmRvdyBpc24ndCB1c2VkLCB0aGlzIGlzIHdoYXQgQ29uY3JldGVJbWFnZUJ1ZmZl
cjo6Y3JlYXRlCisgICAgICAgIGV4cGVjdHMgZnJvbSB0aGUgY3JlYXRvciBvZiB0aGUgYmFja2Vu
ZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1BsYXRmb3JtUmVtb3RlSW1h
Z2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIERlZmluZXMgdGhlIHBsYXRmb3JtIHR5cGVzIG9m
IFJlbW90ZUltYWdlQnVmZmVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdl
QnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6UmVt
b3RlSW1hZ2VCdWZmZXIpOgorICAgICAgICBJdCBpcyByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcg
UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSBhbmQgcGVyZm9ybWluZyB0aGUKKyAgICAgICAgZHJhd2lu
ZyBjb21tYW5kcyBpbiB0aGUgR1BVUHJvY2Vzcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6UmVtb3RlSW1h
Z2VCdWZmZXJNZXNzYWdlSGFuZGxlcik6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZUhhbmRsZXI6On5SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyKToKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6Zmx1c2hEcmF3
aW5nQ29udGV4dCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhh
bmRsZXI6OmNvbW1pdEZsdXNoQ29udGV4dCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6aW1hZ2VCdWZmZXJJZGVu
dGlmaWVyIGNvbnN0KToKKyAgICAgICAgTWFuYWdlcyBzZW5kaW5nIGFuZCByZWNlaXZpbmcgdGhl
IG1lc3NhZ2VzIG9mIFJlbW90ZUltYWdlQnVmZmVyLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6cmVsZWFzZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXJCYWNr
ZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y29tbWl0SW1h
Z2VCdWZmZXJGbHVzaENvbnRleHQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlUmVuZGVy
aW5nQmFja2VuZDo6cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIgY29uc3QpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQubWVzc2FnZXMu
aW46CisgICAgICAgIEhhbmRsZSBvciBkaXNwYXRjaCBtZXNzYWdlcyByZWNlaXZlZCBmcm9tIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OkltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZl
clNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuaDoKKyAgICAgICAgQWx0aG91Z2ggaG9zdFdpbmRv
dyBpc24ndCB1c2VkLCB0aGlzIGlzIHdoYXQgQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y3JlYXRlCisg
ICAgICAgIGV4cGVjdHMgZnJvbSB0aGUgY3JlYXRvciBvZiB0aGUgYmFja2VuZC4KKwogMjAyMC0w
Mi0yOCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIFtNZWRpYSBp
biBHUFUgcHJvY2Vzc10gSW1wbGVtZW50IHRoZSB2aWRlbyBmdWxsc2NyZWVuIGFuZCBQaWN0dXJl
LWluLVBpY3R1cmUgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY0YWUxNTVmZDk5YTRmYTE0ZmM5ZmVhZWNmZjBlYzY2
MTY4NzZlNDQuLjBjNzFkYjczZTFkY2FiYWM3NGRlMDc1MDNiZjI5YmYyMmE3NzI1MTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE3NDcsNiArMTc0Nyw5IEBACiAJCTU1NkM3QzRCMjIxMjM5OTcwMDlCMDZDQSAvKiBSZW5kZXJp
bmdVcGRhdGVTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1NkM3QzQ3MjIxMjM5NDIwMDlCMDZDQSAvKiBSZW5kZXJpbmdVcGRhdGVTY2hl
ZHVsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk1NTc2QTU2NTFEODhBNzA4MDBDQ0MwNEMgLyogSW1hZ2VGcmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NkE1NjMxRDg4QTcwODAwQ0NDMDRD
IC8qIEltYWdlRnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY4
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1QUQwOTNFMjQwODk2MzUwMERFNEQy
RiAvKiBEaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MkVBMDlGNzIzRkNDQjNEMDA4NTA0QTUgLyogRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTU1QUQwOTQwMjQwODk2NDAwMERFNEQyRiAvKiBEaXNwbGF5TGlzdERyYXdpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
MkVBMDlGOTIzRkNDQzZBMDA4NTA0QTUgLyogRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTU1QUQwOTQx
MjQwODk2NEEwMERFNEQyRiAvKiBDb25jcmV0ZUltYWdlQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkJBQzNBNzIzRTE3MzI4MDA4RDc0MUMg
LyogQ29uY3JldGVJbWFnZUJ1ZmZlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTU1QUYxNEU2MUVBQUM1OUIwMDI2RUVBQSAvKiBVVElSZWdpc3Ry
eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBRjE0
RTQxRUFBQzU5QjAwMjZFRUFBIC8qIFVUSVJlZ2lzdHJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1MjgyMjQwN0IyMDAwQzI2RTMyIC8q
IFNWR1ByaW1pdGl2ZUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RENDNTI1MjI0MDc0OUUwMEMyNkUzMiAvKiBTVkdQcmltaXRpdmVMaXN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTVEQ0M1
MjkyMjQwN0IyQTAwQzI2RTMyIC8qIFNWR0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RENDNTIzMjI0MDczRkUwMEMyNkUzMiAvKiBTVkdMaXN0
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTI5
Mzc0LDYgKzI5Mzc3LDcgQEAKIAkJCQlGNDQyQzM1OTIzRTNBREQyMDA0OTk1ODIgLyogQ29tcG9z
aXRpb25IaWdobGlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERDVBNzI3MUVCRUU0N0QwMDlC
QTU5NyAvKiBDb21wb3NpdGlvblVuZGVybGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzExNkUy
Q0MxRkVENzVEQzAwQzA2RkRFIC8qIENvbXB1dGVkRWZmZWN0VGltaW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NUFEMDk0MTI0MDg5NjRBMDBERTREMkYgLyogQ29uY3JldGVJbWFnZUJ1ZmZlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwOEYxMkIwMjZGNzAwQzFBMzU5IC8qIENvbmUuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1Qzk3QUYzMDhFQTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCBp
biBIZWFkZXJzICovLAogCQkJCTJEQUYzNDNEMUVBN0UwRjEwMDM4MkNEMyAvKiBDb25zdGFudFBy
b3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTI5NzE5LDYgKzI5NzIzLDggQEAKIAkJCQkx
MTJGQjM1MjIzOUMyM0M0MDA4NzA1NEEgLyogRGlzcGxheUlubGluZVJlY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTZGQjQ3RTYzMjI3NzQyNUEwMEM3QkNCMCAvKiBEaXNwbGF5TGluZUJveC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDMxQzNERDUxRTAwMDdBMkNBIC8qIERpc3BsYXlMaXN0
LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NUFEMDk0MDI0MDg5NjQwMDBERTREMkYgLyogRGlzcGxh
eUxpc3REcmF3aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTVBRDA5M0UyNDA4OTYz
NTAwREU0RDJGIC8qIERpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRTVGQkQ1MUMzREQ1MUUwMDA3QTJDQSAvKiBEaXNwbGF5TGlzdEl0ZW1zLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU1RkJENzFDM0RENTFFMDAwN0EyQ0EgLyogRGlzcGxheUxpc3RSZWNvcmRl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNUZCRDkxQzNERDUxRTAwMDdBMkNBIC8qIERpc3Bs
YXlMaXN0UmVwbGF5ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCmluZGV4IDUwOWRkYzcx
YWMxNGRkMmY0MDg0NGU5ZTk1YzE3MTI1YzE0NmJjOGIuLjA0ZDJiNDBjYzVlNmU4YTQyOGJjNzZi
Yjg3OTJmYmY0N2EyNTI3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKQEAgLTM0LDcgKzM0LDcgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CiBjbGFzcyBDb25jcmV0ZUltYWdlQnVmZmVyIDogcHVi
bGljIEltYWdlQnVmZmVyIHsKIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbWFnZUJ1
ZmZlclR5cGUgPSBDb25jcmV0ZUltYWdlQnVmZmVyLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0g
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gY3JlYXRlKGNvbnN0IEZsb2F0
U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Us
IGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyVHlwZT4gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKICAgICB7CiAgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUo
c2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBob3N0V2luZG93KTsKICAgICAgICAg
aWYgKCFiYWNrZW5kKQpAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW1hZ2VCdWZmZXJUeXBlID0gQ29uY3JldGVJbWFnZUJ1ZmZlciwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXI+IGNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJUeXBlPiBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBjb25z
dCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKICAg
ICB7CiAgICAgICAgIGF1dG8gYmFja2VuZCA9IEJhY2tlbmRUeXBlOjpjcmVhdGUoc2l6ZSwgY29u
dGV4dCk7CiAgICAgICAgIGlmICghYmFja2VuZCkKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVk
OgogCiAgICAgQ29uY3JldGVJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwg
QmFja2VuZFR5cGUqIGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0
KCk7IH0KKyAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0KCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CkBAIC02OSwxMTAgKzY5LDE1MiBAQCBwcm90
ZWN0ZWQ6CiAKICAgICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgewotICAgICAg
ICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0
KCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkg
eworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2Vu
ZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gYmFzZVRyYW5zZm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFz
ZVRyYW5zZm9ybSgpOyB9Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fYmFja2VuZC0+bG9naWNhbFNpemUoKTsgfQotICAgIEludFNpemUgYmFja2Vu
ZFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7
IH0KLSAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpOyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VU
cmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgp
ID8gZW5zdXJlQmFja2VuZENyZWF0ZWQoKS0+YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNm
b3JtKCk7IH0KKyAgICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSA/IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCktPmxvZ2lj
YWxTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSA/IGVuc3VyZUJhY2tlbmRD
cmVhdGVkKCktPmJhY2tlbmRTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0
aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgp
ID8gZW5zdXJlQmFja2VuZENyZWF0ZWQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CiAKLSAg
ICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+
bWVtb3J5Q29zdCgpOyB9Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7IH0KKyAgICBz
aXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmRD
cmVhdGVkKCkgPyBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpLT5tZW1vcnlDb3N0KCkgOiAwOyB9Cisg
ICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVu
c3VyZUJhY2tlbmRDcmVhdGVkKCkgPyBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpLT5leHRlcm5hbE1l
bW9yeUNvc3QoKSA6IDA7IH0KIAogICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShC
YWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92
ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigq
dGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5j
b3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNy
ZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAg
ICAgcmV0dXJuIGJhY2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZT4g
Y29weUltYWdlKEJhY2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9y
ZSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1
dGlvbjo6Tm8pIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbmNy
ZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICBy
ZXR1cm4gbV9iYWNrZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRp
b24pOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5m
bHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUlt
YWdlKGNvcHlCZWhhdmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0
JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgbV9iYWNrZW5k
LT5kcmF3KGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0
Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgdm9pZCBkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IGNvbnN0IEZsb2F0U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0g
ICAgICAgIG1fYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNS
ZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRl
cm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFz
ZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBOYXRpdmVJbWFn
ZVB0ciBzaW5rSW50b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9OYXRp
dmVJbWFnZSgpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVh
dGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAg
IHJldHVybiBiYWNrZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0lt
YWdlKFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29s
dXRpb246Ok5vKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgp
OwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQo
KSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0
dXJuIGJhY2tlbmQtPnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB2b2lkIGRyYXdDb25zdW1p
bmcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYg
b3B0aW9ucykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
LSAgICAgICAgbV9iYWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwg
c3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAg
ICAgICAgICAgYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9M
dW1pbmFuY2VNYXNrKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKLSAgICAgICAgbV9iYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAg
ICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29udmVy
dFRvTHVtaW5hbmNlTWFzaygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCB0cmFuc2Zv
cm1Db2xvclNwYWNlKENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29s
b3JTcGFjZSkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
LSAgICAgICAgbV9iYWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRl
c3RDb2xvclNwYWNlKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
Q3JlYXRlZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAg
ICAgICBiYWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xv
clNwYWNlKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29s
dXRpb24gcHJlc2VydmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
Y29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwot
ICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHBy
ZXNlcnZlUmVzb2x1dGlvbik7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVm
ZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQt
PnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCiAgICAgVmVjdG9yPHVpbnQ4
X3Q+IHRvRGF0YShjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxp
dHkgPSBXVEY6Om51bGxvcHQpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9j
YXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Ci0gICAgICAg
IHJldHVybiBtX2JhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAg
Y29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBWZWN0b3I8dWludDhf
dD4gdG9CR1JBRGF0YSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0
PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgIHJl
dHVybiBtX2JhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNy
ZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1
cm4gYmFja2VuZC0+dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVs
dGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4o
KnRoaXMpLmZsdXNoQ29udGV4dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5nZXRJbWFn
ZURhdGEob3V0cHV0Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQg
PSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNy
ZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1
cm4gYmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdm9pZCBwdXRJbWFnZURh
dGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBp
bWFnZURhdGEsIGNvbnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9p
bnQgPSB7IH0pIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICAg
ICAgbV9iYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVj
dCwgZGVzdFBvaW50KTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5k
Q3JlYXRlZCgpKSB7CisgICAgICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIGJh
Y2tlbmQtPnB1dEltYWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0
UG9pbnQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllcigpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5w
bGF0Zm9ybUxheWVyKCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7
CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGJvb2wgY29weVRvUGxhdGZv
cm1UZXh0dXJlKEdyYXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHQ0dMZW51bSB0YXJn
ZXQsIFBsYXRmb3JtR0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5h
bGZvcm1hdCwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlk
ZQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJl
KGNvbnRleHQsIHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJl
bXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmRDcmVhdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxh
dGZvcm1UZXh0dXJlKGNvbnRleHQsIHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5h
bGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMv
RGlzcGxheUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCmluZGV4IDI4ZTI2NDRlMjZlZGI1MGQwMjVkZWFlNTQzYTExNDll
M2YyYWU0OTIuLjJjNjc3ZjZiNzM2ZTc1MmU0MWY4YjNmMjQzNDc2ZDQ1MDg0MjQzNzEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNw
bGF5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXls
aXN0cy9EaXNwbGF5TGlzdC5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gbV9saXN0W2luZGV4XS5nZXQoKTsKICAgICB9CiAKLSAgICB2b2lkIGNsZWFyKCk7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgcmVtb3ZlSXRlbXNGcm9t
SW5kZXgoc2l6ZV90KTsKIAogICAgIHNpemVfdCBpdGVtQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X2xpc3Quc2l6ZSgpOyB9CkBAIC0yNTEsNiArMjUxLDMgQEAgT3B0aW9uYWw8RGlzcGxheUxpc3Q+
IERpc3BsYXlMaXN0OjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlcikKIFdURjo6VGV4dFN0cmVhbSYg
b3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBEaXNwbGF5TGlzdDo6RGlzcGxheUxp
c3QmKTsKIAogfSAvLyBXZWJDb3JlCi0KLXVzaW5nIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNw
bGF5TGlzdDsKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdERyYXdpbmdDb250ZXh0
LmgKaW5kZXggODZlYmJjNjMxNDFiYzhhYzE0ZTI3ODQwM2ZiMWQ2Y2JjZDIzODBlYy4uNWQzODVh
YWJkMDRhOTRlY2Y4MTAxNTE2OTI0MDU3YzY5MzM3MzM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0RHJhd2luZ0Nv
bnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3REcmF3aW5nQ29udGV4dC5oCkBAIC0zMywxNSArMzMsMTUgQEAgbmFtZXNw
YWNlIERpc3BsYXlMaXN0IHsKIAogY2xhc3MgRHJhd2luZ0NvbnRleHQgewogcHVibGljOgotICAg
IERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpOworICAgIFdFQkNP
UkVfRVhQT1JUIERyYXdpbmdDb250ZXh0KGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUpOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxEcmF3aW5nQ29udGV4dCY+KCp0aGlzKS5tX2NvbnRleHQ7IH0KICAgICBEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QoKSB7IHJldHVybiBtX2Rpc3BsYXlMaXN0OyB9CiAgICAgY29uc3QgRGlzcGxh
eUxpc3QmIGRpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5TGlzdDsgfQogICAg
IGNvbnN0IERpc3BsYXlMaXN0KiByZXBsYXllZERpc3BsYXlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV9yZXBsYXllZERpc3BsYXlMaXN0LmdldCgpOyB9CiAKLSAgICB2b2lkIHNldFRyYWNrc0Rpc3Bs
YXlMaXN0UmVwbGF5KGJvb2wpOwotICAgIHZvaWQgcmVwbGF5RGlzcGxheUxpc3QoR3JhcGhpY3ND
b250ZXh0Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUcmFja3NEaXNwbGF5TGlzdFJl
cGxheShib29sKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxheURpc3BsYXlMaXN0KEdy
YXBoaWNzQ29udGV4dCYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NDb250ZXh0IG1fY29u
dGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJbWFnZUJ1ZmZlci5oCmluZGV4IDcx
N2IyYjgwYWVhMmYxMjVjZDc1MmUwNGE4YTg3OGJlOWY1NzlmNTIuLmEwMjg3Zjg1ZGRiNjBkN2Jk
YzAwMWZiYmFlNDc2NGFhYWUzZDRmMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0
SW1hZ2VCdWZmZXIuaApAQCAtNTIsNiArNTIsMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
KyAgICBJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAgIDogbV9kcmF3
aW5nQ29udGV4dChzaXplKQorICAgIHsKKyAgICB9CisKICAgICB+SW1hZ2VCdWZmZXIoKQogICAg
IHsKICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1BsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5o
IGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1BsYXRmb3JtUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhZmYwODhlMzdjYTc2YTdmODY0YWU3ZTQyYmJiNzAw
NGYxZjE1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUGxhdGZvcm1SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2VC
dWZmZXJTaGFyZWFibGVCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJQcm94
eS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgVW5hY2NlbGVyYXRlZFJlbW90ZUlt
YWdlQnVmZmVyUHJveHkgPSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5PFVuYWNjZWxlcmF0ZWRJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQ+OwordXNpbmcgQWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1
ZmZlclByb3h5ID0gUmVtb3RlSW1hZ2VCdWZmZXJQcm94eTxBY2NlbGVyYXRlZEltYWdlQnVmZmVy
U2hhcmVhYmxlQmFja2VuZD47CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8g
RU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFu
ZGxlclByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZTI0N2E3YWQ0Y2QyOTUzOGU0ZWFmNDBiZDgwMzY5
Njg2MDA4Yjg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eS5jcHAKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW1v
dGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHkuaCIKKworI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKKworI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgorI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oIgorCituYW1lc3BhY2UgV2ViS2l0
IHsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VI
YW5kbGVyUHJveHk6OlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eShSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSwgSW1hZ2VC
dWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICA6IG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5KHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkKKyAgICAsIG1f
aW1hZ2VCdWZmZXJJZGVudGlmaWVyKGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKK30KKwordm9p
ZCBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHk6OmNyZWF0ZUJhY2tlbmQoY29u
c3QgRmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgSW50U2l6ZSYgYmFja2VuZFNpemUsIGZs
b2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJh
Y2tlbmRIYW5kbGUgaGFuZGxlKQoreworICAgIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LnNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVmZmVy
QmFja2VuZChsb2dpY2FsU2l6ZSwgYmFja2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JT
cGFjZSwgV1RGTW92ZShoYW5kbGUpLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZFByb3h5LnJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkpOworfQor
Cit2b2lkIFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eTo6Y29tbWl0Rmx1c2hD
b250ZXh0KEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllcikKK3sKKyAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kOjpDb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dChmbHVzaElkZW50aWZp
ZXIsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkucmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRs
ZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdl
QnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNlYjFmYmM2MjEzMmVlNWY2
ZjUzYmY0MTc4NTc5ZDNhNTE1YzUzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5
LmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyQmFja2VuZEhhbmRsZS5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVy
SWRlbnRpZmllci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRGlzcGxheUxpc3QuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Zsb2F0U2l6ZS5oPgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OworCitjbGFzcyBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHkgeworcHVibGlj
OgorICAgIHZpcnR1YWwgflJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eSgpID0g
ZGVmYXVsdDsKKworICAgIC8vIE1lc3NhZ2VzIHJlY2VpdmVkLiBTZWUgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluLgorICAgIHZpcnR1YWwgdm9pZCBmbHVzaERyYXdpbmdD
b250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYsIEltYWdlQnVm
ZmVyRmx1c2hJZGVudGlmaWVyKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBSZW1vdGVJbWFnZUJ1
ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHkoUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5JiwgSW1h
Z2VCdWZmZXJJZGVudGlmaWVyKTsKKworICAgIC8vIE1lc3NhZ2VzIHNlbnQuIFNlZSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluLgorICAgIHZvaWQgY3JlYXRlQmFja2VuZChjb25z
dCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXpl
JiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNl
LCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUpOworICAgIHZvaWQgY29tbWl0Rmx1c2hDb250ZXh0
KEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyKTsKKworcHJpdmF0ZToKKyAgICBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kUHJveHkmIG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OworICAgIElt
YWdlQnVmZmVySWRlbnRpZmllciBtX2ltYWdlQnVmZmVySWRlbnRpZmllcjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1
ZmZlclByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA2MWQ3N2U5Y2Y0NGNhYmQ0MmM5M2E5NDk2ZjRiYTdk
NWE4OGExOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAi
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5LmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9Db25jcmV0ZUltYWdlQnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdFJl
cGxheWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYWNr
ZW5kVHlwZT4KK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2ViQ29yZTo6
Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBSZW1vdGVJbWFnZUJ1ZmZl
ck1lc3NhZ2VIYW5kbGVyUHJveHkgeworICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVy
ID0gV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcg
QmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsKKworcHVibGljOgorICAgIHN0YXRp
YyBhdXRvIGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkmIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVy
IGltYWdlQnVmZmVySWRlbnRpZmllcikKKyAgICB7CisgICAgICAgIHJldHVybiBCYXNlQ29uY3Jl
dGVJbWFnZUJ1ZmZlcjo6dGVtcGxhdGUgY3JlYXRlPFJlbW90ZUltYWdlQnVmZmVyUHJveHk+KHNp
emUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgbnVsbHB0ciwgcmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5LCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIH0KKworICAgIFJlbW90
ZUltYWdlQnVmZmVyUHJveHkoc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQs
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSYgcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
LCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgICAgICA6
IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyKFdURk1vdmUoYmFja2VuZCkpCisgICAgICAgICwgUmVt
b3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5KHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQ
cm94eSwgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQorICAgIHsKKyAgICAgICAgY3JlYXRlQmFja2Vu
ZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1fYmFja2VuZC0+YmFja2VuZFNpemUoKSwgbV9i
YWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKSwgbV9iYWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFj
a2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKCkpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3aW5nQ29udGV4
dDsKKworICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dChjb25zdCBXZWJDb3JlOjpEaXNwbGF5
TGlzdDo6RGlzcGxheUxpc3QmIGRpc3BsYXlMaXN0LCBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ciBmbHVzaElkZW50aWZpZXIpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoZGlzcGxheUxp
c3QuaXRlbUNvdW50KCkpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBs
YXllciByZXBsYXllcihCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Y29udGV4dCgpLCBkaXNwbGF5
TGlzdCk7CisgICAgICAgICAgICByZXBsYXllci5yZXBsYXkoKTsKKyAgICAgICAgfQorICAgICAg
ICBtX2JhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgICAgICBjb21taXRGbHVzaENvbnRleHQo
Zmx1c2hJZGVudGlmaWVyKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAKaW5kZXggNWEyOWVlZmI3MmU4Yjg4OWRhNzgxNTllOTkxOTJkY2Y1YmYwMmY0Ni4uZTQz
MTcwNmIwZThmZjA5MmZmODZmMjYzZWRlNTYzZTJkYjE0NmEyMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eS5jcHAKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShHUFVfUFJP
Q0VTUykKIAorI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oIgogI2lu
Y2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewpAQCAtNzAsMzQgKzcxLDQxIEBAIHZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZFByb3h5OjpjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIGxvZ2ljYWxTaXplCiAg
ICAgaWYgKCFncHVDb25uZWN0aW9uVG9XZWJQcm9jZXNzKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9pbWFnZUJ1ZmZlck1hcC5jb250YWlucyhpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7
CisgICAgaWYgKG1faW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlck1hcC5jb250YWlucyhpbWFnZUJ1
ZmZlcklkZW50aWZpZXIpKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBpbWFn
ZUJ1ZmZlcjsKLQotICAgIHN3aXRjaCAocmVuZGVyaW5nTW9kZSkgewotICAgIGNhc2UgUmVuZGVy
aW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0ZWQ6Ci0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1v
dGVVbmFjY2VsZXJhdGVkOgotICAgICAgICAvLyBGSVhNRTogY3JlYXRlIHRoZSByZW1vdGUgSW1h
Z2VCdWZmZXIgcHJveHkuCi0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxl
cmF0ZWQpIHsKKyAgICAgICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBBY2NlbGVyYXRlZFJlbW90
ZUltYWdlQnVmZmVyUHJveHk6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCAqdGhpcywgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKSkgeworICAgICAgICAgICAg
bV9pbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyTWFwLmFkZChpbWFnZUJ1ZmZlcklkZW50aWZpZXIs
IFdURk1vdmUoaW1hZ2VCdWZmZXIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmICghaW1hZ2VCdWZmZXIpCi0gICAgICAgIHJldHVybjsKKyAgICBpZiAo
cmVuZGVyaW5nTW9kZSA9PSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCB8fCByZW5k
ZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlJlbW90ZVVuYWNjZWxlcmF0ZWQpIHsKKyAgICAg
ICAgaWYgKGF1dG8gaW1hZ2VCdWZmZXIgPSBVbmFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICp0
aGlzLCBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKSB7CisgICAgICAgICAgICBtX2ltYWdlQnVmZmVy
TWVzc2FnZUhhbmRsZXJNYXAuYWRkKGltYWdlQnVmZmVySWRlbnRpZmllciwgV1RGTW92ZShpbWFn
ZUJ1ZmZlcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQogCi0gICAg
bV9pbWFnZUJ1ZmZlck1hcC5hZGQoaW1hZ2VCdWZmZXJJZGVudGlmaWVyLCBXVEZNb3ZlKGltYWdl
QnVmZmVyKSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHZvaWQgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5OjpyZWxlYXNlSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXJJZGVudGlm
aWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKIHsKICAgICAvLyBDcmVhdGVJbWFnZUJ1ZmZlciBt
ZXNzYWdlIHNob3VsZCBoYXZlIGJlZW4gcmVjZWl2ZWQgYmVmb3JlIHRoaXMgb25lLgotICAgIGJv
b2wgZm91bmQgPSBtX2ltYWdlQnVmZmVyTWFwLnJlbW92ZShpbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OworICAgIGJvb2wgZm91bmQgPSBtX2ltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJNYXAucmVtb3Zl
KGltYWdlQnVmZmVySWRlbnRpZmllcik7CiAgICAgQVNTRVJUX1VOVVNFRChmb3VuZCwgZm91bmQp
OwogfQogCit2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6Zmx1c2hJbWFnZUJ1ZmZl
ckRyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYg
ZGlzcGxheUxpc3QsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyIGZsdXNoSWRlbnRpZmllciwg
SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAo
YXV0byBpbWFnZUJ1ZmZlciA9IG1faW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlck1hcC5nZXQoaW1h
Z2VCdWZmZXJJZGVudGlmaWVyKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPmZsdXNoRHJhd2luZ0Nv
bnRleHQoZGlzcGxheUxpc3QsIGZsdXNoSWRlbnRpZmllcik7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmRQcm94eS5oCmluZGV4IDhmY2U1NzZmZDI5OWUyN2FlODU2NWM2ZGZlMzAwMDY5ZmQ3NGNh
N2IuLmUzZDM1NjNlZGIzNWM4NzBiNThhMTY1YzUwZjA2ZjU5MjBkMTQxY2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5k
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZFByb3h5LmgKQEAgLTI4LDEzICsyOCwxNSBAQAogI2lmIEVOQUJMRShHUFVf
UFJPQ0VTUykKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVySWRlbnRpZmllci5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIK
KyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHkuaCIKICNpbmNs
dWRlICJSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3JTcGFjZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRGlzcGxheUxpc3RJdGVtcy5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvRmxvYXRTaXplLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvUmVuZGVyaW5nTW9kZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KQEAgLTQ0LDEyICs0NiwxNCBAQCBuYW1l
c3BhY2UgV2ViS2l0IHsKIGNsYXNzIEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M7CiAKIGNsYXNz
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eQotICAgIDogcHJpdmF0ZSBJUEM6Ok1lc3NhZ2VT
ZW5kZXIKKyAgICA6IHB1YmxpYyBJUEM6Ok1lc3NhZ2VTZW5kZXIKICAgICAsIHByaXZhdGUgSVBD
OjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5PiBjcmVhdGUoR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2VzcyYsIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIH5SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkoKTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
IHJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdC
YWNrZW5kSWRlbnRpZmllcjsgfQorCiBwcml2YXRlOgogICAgIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eShHUFVDb25uZWN0aW9uVG9XZWJQcm9jZXNzJiwgUmVuZGVyaW5nQmFja2VuZElkZW50
aWZpZXIpOwogCkBAIC02MCwxMSArNjQsMTMgQEAgcHJpdmF0ZToKICAgICAvLyBJUEM6Ok1lc3Nh
Z2VSZWNlaXZlcgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKKyAgICAvLyBSZWNlaXZlZCBtZXNzYWdlcy4KICAg
ICB2b2lkIGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNh
bFNpemUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKICAgICB2b2lkIHJlbGVh
c2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOworICAgIHZvaWQgZmx1c2hJbWFn
ZUJ1ZmZlckRyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5
TGlzdCYsIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIp
OwogCi0gICAgdXNpbmcgSW1hZ2VCdWZmZXJNYXAgPSBIYXNoTWFwPEltYWdlQnVmZmVySWRlbnRp
Zmllciwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkltYWdlQnVmZmVyPj47Ci0gICAgSW1hZ2VC
dWZmZXJNYXAgbV9pbWFnZUJ1ZmZlck1hcDsKKyAgICB1c2luZyBJbWFnZUJ1ZmZlck1lc3NhZ2VI
YW5kbGVyTWFwID0gSGFzaE1hcDxJbWFnZUJ1ZmZlcklkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0
cjxSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHk+PjsKKyAgICBJbWFnZUJ1ZmZl
ck1lc3NhZ2VIYW5kbGVyTWFwIG1faW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlck1hcDsKICAgICBX
ZWFrUHRyPEdQVUNvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+IG1fZ3B1Q29ubmVjdGlvblRvV2ViUHJv
Y2VzczsKICAgICBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciBtX3JlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5Lm1lc3Nh
Z2VzLmluCmluZGV4IGU0ZGNmN2YzMmI0NTI2ZGRmYmViYjc4N2Y4MDJjMzZmZDk1N2JjNDkuLjY1
YThkOTBhNjZmODVlOGY4ODNjMTVlNGIwZTNiZjgwYzY5NGNjMTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHku
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjUsNiArMjUsNyBAQAogbWVz
c2FnZXMgLT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5IE5vdFJlZkNvdW50ZWQgewogICAg
IHZvaWQgQ3JlYXRlSW1hZ2VCdWZmZXIoV2ViQ29yZTo6RmxvYXRTaXplIGxvZ2ljYWxTaXplLCBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVySWRl
bnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCiAgICAgdm9pZCBSZWxlYXNlSW1hZ2VCdWZm
ZXIoV2ViS2l0OjpJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQor
ICAgIHZvaWQgRmx1c2hJbWFnZUJ1ZmZlckRyYXdpbmdDb250ZXh0KFdlYkNvcmU6OkRpc3BsYXlM
aXN0OjpEaXNwbGF5TGlzdCBkaXNwbGF5TGlzdCwgV2ViS2l0OjpJbWFnZUJ1ZmZlckZsdXNoSWRl
bnRpZmllciBmbHVzaElkZW50aWZpZXIsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGlt
YWdlQnVmZmVySWRlbnRpZmllcikKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkgYi9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5CmluZGV4IDQ3YjU4NzgyN2Yz
MTg4MWU2MzA0ZTk0ZmQ3OWFlOTYzNzAxMjUwZjAuLjBlNzc0N2MyMmU4ZjU5ODkyNTRjOTRmZWIx
ODdiOTBiM2IzNGNjYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQv
bWVzc2FnZXMucHkKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5w
eQpAQCAtMjI1LDYgKzIyNSw4IEBAIGRlZiB0eXBlc190aGF0X2Nhbm5vdF9iZV9mb3J3YXJkX2Rl
Y2xhcmVkKCk6CiAgICAgICAgICdXZWJLaXQ6OkFjdGl2aXR5U3RhdGVDaGFuZ2VJRCcsCiAgICAg
ICAgICdXZWJLaXQ6OkF1ZGlvTWVkaWFTdHJlYW1UcmFja1JlbmRlcmVySWRlbnRpZmllcicsCiAg
ICAgICAgICdXZWJLaXQ6OkNvbnRlbnRXb3JsZElkZW50aWZpZXInLAorICAgICAgICAnV2ViS2l0
OjpJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUnLAorICAgICAgICAnV2ViS2l0OjpJbWFnZUJ1ZmZl
ckZsdXNoSWRlbnRpZmllcicsCiAgICAgICAgICdXZWJLaXQ6OkltYWdlQnVmZmVySWRlbnRpZmll
cicsCiAgICAgICAgICdXZWJLaXQ6OkxheWVySG9zdGluZ0NvbnRleHRJRCcsCiAgICAgICAgICdX
ZWJLaXQ6OkxpYldlYlJUQ1Jlc29sdmVySWRlbnRpZmllcicsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYktpdC9Tb3VyY2VzLnR4dAppbmRleCAzMGQ1
NWI0NWQ4MzNkZWMyM2Y3YTYwMGYyODNmYzkzNTk4YWQ5YjA3Li5lZWRiN2U2ZGQ5YTllOWZhMjA3
Y2U4YThkM2I2MjJjZDJmMGM5M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvU291cmNlcy50eHQKQEAgLTI0LDYgKzI0LDcgQEAKIEdQ
VVByb2Nlc3MvR1BVUHJvY2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKIEdQVVByb2Nlc3MvR1BVUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5jcHAKK0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5LmNw
cAogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCiBH
UFVQcm9jZXNzL21lZGlhL1JlbW90ZUF1ZGlvVHJhY2tQcm94eS5jcHAKIEdQVVByb2Nlc3MvbWVk
aWEvUmVtb3RlTWVkaWFQbGF5ZXJNYW5hZ2VyUHJveHkuY3BwCkBAIC01MzUsNiArNTM2LDcgQEAg
V2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXIu
Y3BwCiAKIFdlYlByb2Nlc3MvR1BVL0dQVVByb2Nlc3NDb25uZWN0aW9uLmNwcAogV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcAorV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5jcHAK
IFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCiBXZWJQ
cm9jZXNzL0dQVS9tZWRpYS9BdWRpb1RyYWNrUHJpdmF0ZVJlbW90ZS5jcHAKIFdlYlByb2Nlc3Mv
R1BVL21lZGlhL01lZGlhUGxheWVyUHJpdmF0ZVJlbW90ZS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViS2l0
L1dlYktpdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGE1YjYyNGI2YTNkZTgzNWY5
MzcyNDdjNjY2ZjI1ZTM4ODBjMjcyYzYuLjE1YzUyNGYzNjIxNzdkZGM3MTI3Mjc2MjU1Nzg4NzA0
Y2ViMzlkYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYktpdC9XZWJLaXQueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtMzgxOCw2ICszODE4LDkgQEAKIAkJNTUwNjQwQTMyNDA3MUE2MTAwQUFFMDQ1
IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUw
NjQwQTQyNDA3MUMyMTAwQUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNz
YWdlcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHkubWVzc2FnZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MDY0MEE1MjQw
NzFDQzAwMEFBRTA0NSAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW1hZ2VCdWZmZXJJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
QUQwOTQyMjQwOEEwMkUwMERFNEQyRiAvKiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTVBRDA5NDMyNDA4QTBFNjAwREU0RDJGIC8qIFBsYXRmb3JtUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJv
eHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVBRDA5NDQyNDA4QUJCMzAwREU0
RDJGIC8qIEltYWdlQnVmZmVyRmx1c2hJZGVudGlmaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdl
QnVmZmVyRmx1c2hJZGVudGlmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
MEFCOEYyMjBBRTNCRDcwMEI4QkU4NyAvKiBTZWNLZXlQcm94eVN0b3JlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNlY0tleVByb3h5U3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcw
QUI5MDAyMEIyNTE3NDAwQjhCRTg3IC8qIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlDb2Nv
YS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHlD
b2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwQUI5MDMyMEIyNTQxQzAw
QjhCRTg3IC8qIFNlY0tleVByb3h5U3RvcmUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5v
YmpjcHA7IHBhdGggPSBTZWNLZXlQcm94eVN0b3JlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtNDA4MSwxMiArNDA4NCwxOCBAQAogCQk3MUE2NzZBNDIyQzYyMzE4MDA3RDYyOTUg
LyogV0tUb3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFdLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBwYXRoID0gaW9z
L1dLVG91Y2hBY3Rpb25HZXN0dXJlUmVjb2duaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3MUE2NzZBNTIyQzYyMzE4MDA3RDYyOTUgLyogV0tUb3VjaEFjdGlvbkdlc3R1cmVS
ZWNvZ25pemVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV0tU
b3VjaEFjdGlvbkdlc3R1cmVSZWNvZ25pemVyLm1tOyBwYXRoID0gaW9zL1dLVG91Y2hBY3Rpb25H
ZXN0dXJlUmVjb2duaXplci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGQjgx
MEEyMjYwNjI3QTAwMzIzNjc3IC8qIFdlYnNpdGVTaW11bGF0ZWRNb3VzZUV2ZW50c0Rpc3BhdGNo
UG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYnNpdGVTaW11bGF0
ZWRNb3VzZUV2ZW50c0Rpc3BhdGNoUG9saWN5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTcyMjc4MDBCMjQwOEJEN0QwMDdEMzc2QiAvKiBQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIyNzgwMEMyNDA5N0EwMjAwN0QzNzZCIC8qIFJlbW90ZUlt
YWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVtb3RlSW1h
Z2VCdWZmZXJNZXNzYWdlSGFuZGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTcyMjc4MDBEMjQwOTdBMDIwMDdEMzc2QiAvKiBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5k
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzIyNzgwMTEyNDA5OTA2RTAwN0QzNzZCIC8q
IFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHkuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3MjI3ODAxMjI0MDk5MDZFMDA3RDM3NkIgLyogUmVtb3RlSW1h
Z2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbW90ZUltYWdl
QnVmZmVyTWVzc2FnZUhhbmRsZXJQcm94eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3MjdBN0YzNDI0MDc4NTdEMDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZh
Y2VCYWNrZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
QnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyN0E3RjM1MjQwNzg1N0YwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUlPU3VyZmFjZUJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTcyN0E3RjM2MjQwNzg4RjAwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0E3RjM3MjQwNzg4RjAwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1h
cEJhY2tlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VC
dWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzI3QTdGMzgyNDA3ODhGMDAwNEQyOTMxIC8qIFBsYXRmb3JtSW1hZ2VCdWZmZXJTaGFy
ZWFibGVCYWNrZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3Jt
SW1hZ2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTcyN0E3RjM5MjQwNzg4RjEwMDREMjkzMSAvKiBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCdWZmZXJCYWNrZW5kSGFu
ZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcyN0E3RjQ5MjQwOEFFRTYwMDRE
MjkzMSAvKiBSZW1vdGVJbWFnZUJ1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW1vdGVJbWFnZUJ1
ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjhFODZFRjE3OTUxODhDMDA4
Nzg3OUUgLyogV2ViQ29sb3JQaWNrZXJNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV2ViQ29sb3JQaWNrZXJNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NzI4RTg2RjAxNzk1MTg4QzAwODc4NzlFIC8qIFdlYkNvbG9yUGlja2VyTWFjLm1tICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29sb3JQaWNrZXJNYWMubW07IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc1QThEMkM0MTg3Q0NGOUYwMEMzOUM5RSAvKiBX
S1dlYnNpdGVEYXRhU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0tX
ZWJzaXRlRGF0YVN0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NzQ1LDEw
ICs3NzU0LDE1IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQk3MjdBN0YzMzI0MDc4NTI3MDA0RDI5
MzEgLyogY29jb2EgKi8sCiAJCQkJNzI3QTdGMzkyNDA3ODhGMTAwNEQyOTMxIC8qIEltYWdlQnVm
ZmVyQmFja2VuZEhhbmRsZS5oICovLAorCQkJCTU1QUQwOTQ0MjQwOEFCQjMwMERFNEQyRiAvKiBJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oICovLAogCQkJCTU1MDY0MEE1MjQwNzFDQzAwMEFB
RTA0NSAvKiBJbWFnZUJ1ZmZlcklkZW50aWZpZXIuaCAqLywKIAkJCQk3MjdBN0YzNzI0MDc4OEYw
MDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcCAqLywKIAkJ
CQk3MjdBN0YzNjI0MDc4OEYwMDA0RDI5MzEgLyogSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBC
YWNrZW5kLmggKi8sCiAJCQkJNzI3QTdGMzgyNDA3ODhGMDAwNEQyOTMxIC8qIFBsYXRmb3JtSW1h
Z2VCdWZmZXJTaGFyZWFibGVCYWNrZW5kLmggKi8sCisJCQkJNzIyNzgwMEIyNDA4QkQ3RDAwN0Qz
NzZCIC8qIFBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjdBN0Y0OTI0MDhB
RUU2MDA0RDI5MzEgLyogUmVtb3RlSW1hZ2VCdWZmZXIuaCAqLywKKwkJCQk3MjI3ODAwQzI0MDk3
QTAyMDA3RDM3NkIgLyogUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5jcHAgKi8sCisJ
CQkJNzIyNzgwMEQyNDA5N0EwMjAwN0QzNzZCIC8qIFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhh
bmRsZXIuaCAqLywKIAkJCQk1NTA2NDA5RDI0MDcxNjA5MDBBQUUwNDUgLyogUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAgKi8sCiAJCQkJNTUwNjQwOUUyNDA3MTYwOTAwQUFFMDQ1IC8qIFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaCAqLywKIAkJCQk1NTA2NDBBMDI0MDcxOUUxMDBBQUUwNDUgLyog
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiAqLywKQEAgLTc3NjAsNiArNzc3NCwx
MCBAQAogCQk1NTA2NDBBMTI0MDcxQTI5MDBBQUUwNDUgLyogZ3JhcGhpY3MgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTU1QUQwOTQzMjQwOEEwRTYwMERF
NEQyRiAvKiBQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKKwkJCQk3MjI3ODAx
MTI0MDk5MDZFMDA3RDM3NkIgLyogUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlclByb3h5
LmNwcCAqLywKKwkJCQk3MjI3ODAxMjI0MDk5MDZFMDA3RDM3NkIgLyogUmVtb3RlSW1hZ2VCdWZm
ZXJNZXNzYWdlSGFuZGxlclByb3h5LmggKi8sCisJCQkJNTVBRDA5NDIyNDA4QTAyRTAwREU0RDJG
IC8qIFJlbW90ZUltYWdlQnVmZmVyUHJveHkuaCAqLywKIAkJCQk1NTA2NDBBMjI0MDcxQTYxMDBB
QUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCAqLywKIAkJCQk1NTA2NDBB
MzI0MDcxQTYxMDBBQUUwNDUgLyogUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmggKi8sCiAJ
CQkJNTUwNjQwQTQyNDA3MUMyMTAwQUFFMDQ1IC8qIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5tZXNzYWdlcy5pbiAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNDJjZjI0NWUzNDVlMWRmZWM2MmRjMWQ3YTNlY2FlZmNkOWFiNWQwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckZsdXNoSWRlbnRpZmllci5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShHUFVfUFJPQ0VTUykKKworI2luY2x1ZGUgPHd0Zi9PYmpl
Y3RJZGVudGlmaWVyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIEltYWdlQnVmZmVy
Rmx1c2hJZGVudGlmaWVyVHlwZSB7IH07Cit1c2luZyBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmll
ciA9IE9iamVjdElkZW50aWZpZXI8SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXJUeXBlPjsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL2dyYXBoaWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5jcHAKaW5kZXgg
OTUyMmMxZDA3MWVhNmY2MjcwYjE2NjQ0MTlkYWRhYjc5M2M3OTQ4My4uZGUyOGUyN2YxMzJlNWVi
OGU2ZjBkZmM1OGUxZmE1MTVhOWUzMTA1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJT
aGFyZWFibGVCaXRtYXBCYWNrZW5kLmNwcApAQCAtNDIsNyArNDIsNyBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVmZmVyU2hh
cmVhYmxlQml0bWFwQmFja2VuZCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJl
YWJsZUJpdG1hcEJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZDo6Y3Jl
YXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ6OmNyZWF0ZShjb25z
dCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKIHsKICAgICBJbnRTaXplIGJhY2tlbmRTaXplID0g
Y2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlvblNjYWxlKTsKICAgICBpZiAoYmFj
a2VuZFNpemUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvSW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRt
YXBCYWNrZW5kLmgKaW5kZXggNzQzNDZjMjQyN2ExOWE0MmQ4MjcyN2U3NGMwYmRkNTgyNjAyMWYz
Ny4uMDVjNzM3ZmNmYjhiZThhNzBmYWE2MGY1NDZiYWY5YTk1ZDVlMWRiYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9JbWFnZUJ1ZmZlclNoYXJlYWJs
ZUJpdG1hcEJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL0ltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZC5oCkBAIC0zOSw3ICszOSw3IEBA
IGNsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCA6IHB1YmxpYyBXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlQnVmZmVyQmFjCiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQpOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEltYWdlQnVmZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZCk7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+IGNyZWF0
ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVCaXRtYXBCYWNrZW5kPiBjcmVhdGUoY29uc3QgV2Vi
Q29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2luZG93Kik7CiAgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUJpdG1hcEJhY2tlbmQ+
IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2ViQ29y
ZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsKIAogICAgIEltYWdlQnVm
ZmVyU2hhcmVhYmxlQml0bWFwQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2lj
YWxTaXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwaHlzaWNhbFNpemUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4m
Jiwgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dD4mJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1BsYXRmb3JtUmVtb3Rl
SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUGxh
dGZvcm1SZW1vdGVJbWFnZUJ1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhMjcyOGZlNzE0MWVkMzNmMjFh
MGM0ZWM0Y2U0NDQ2NDNkNWFiYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1BsYXRmb3JtUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUGxh
dGZvcm1JbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFn
ZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordXNpbmcgVW5hY2NlbGVyYXRlZFJl
bW90ZUltYWdlQnVmZmVyID0gUmVtb3RlSW1hZ2VCdWZmZXI8VW5hY2NlbGVyYXRlZEltYWdlQnVm
ZmVyU2hhcmVhYmxlQmFja2VuZD47Cit1c2luZyBBY2NlbGVyYXRlZFJlbW90ZUltYWdlQnVmZmVy
ID0gUmVtb3RlSW1hZ2VCdWZmZXI8QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlclNoYXJlYWJsZUJhY2tl
bmQ+OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJP
Q0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDRlNTc5OGJmY2VlMmZkMGU5OWI0
Zjg3NTI5OTc5YmRlNDk2NGNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCkBAIC0wLDAgKzEsOTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCisKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1
ZmZlck1lc3NhZ2VIYW5kbGVyLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEltYWdl
QnVmZmVyLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EaXNwbGF5TGlzdEl0ZW1zLmg+CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitjbGFzcyBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KK2NsYXNzIFJlbW90ZUltYWdlQnVmZmVyIDogcHVibGlj
IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1YmxpYyBS
ZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyIHsKKyAgICB1c2luZyBCYXNlRGlzcGxheUxp
c3RJbWFnZUJ1ZmZlciA9IFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxCYWNrZW5k
VHlwZT47CisgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6Om1fYmFja2VuZDsK
KyAgICB1c2luZyBCYXNlRGlzcGxheUxpc3RJbWFnZUJ1ZmZlcjo6bV9kcmF3aW5nQ29udGV4dDsK
KworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlSW1hZ2VCdWZmZXI+
IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNpemUsIFdlYkNvcmU6OlJlbmRlcmlu
Z01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xv
clNwYWNlIGNvbG9yU3BhY2UsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmIHJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQpCisgICAgeworICAgICAgICBpZiAoQmFja2VuZFR5cGU6OmNhbGN1bGF0ZUJhY2tl
bmRTaXplKHNpemUsIHJlc29sdXRpb25TY2FsZSkuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVJbWFn
ZUJ1ZmZlcj4obmV3IFJlbW90ZUltYWdlQnVmZmVyKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29s
dXRpb25TY2FsZSwgY29sb3JTcGFjZSwgcmVtb3RlUmVuZGVyaW5nQmFja2VuZCkpOworICAgIH0K
KworcHJvdGVjdGVkOgorICAgIFJlbW90ZUltYWdlQnVmZmVyKGNvbnN0IFdlYkNvcmU6OkZsb2F0
U2l6ZSYgc2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCBy
ZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZCYgcmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKKyAgICAgICAgOiBCYXNlRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlcihzaXplKQorICAgICAgICAsIFJlbW90ZUltYWdlQnVmZmVyTWVz
c2FnZUhhbmRsZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNw
YWNlLCByZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGNy
ZWF0ZUJhY2tlbmQoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgV2Vi
Q29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUgaGFu
ZGxlKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2JhY2tlbmQpOworICAgICAg
ICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXplLCBiYWNrZW5kU2l6
ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRsZSkpOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1fYmFja2VuZCkKKyAg
ICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXImPigqdGhpcykuUmVtb3RlSW1h
Z2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6ZW5zdXJlQmFja2VuZENyZWF0ZWQoKTsKKyAgICAgICAg
cmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29udGV4dCgp
IG92ZXJyaWRlCisgICAgeworICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAg
IG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgfQorCisgICAgdm9pZCBmbHVzaERyYXdp
bmdDb250ZXh0KCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8mIGRpc3BsYXlMaXN0ID0g
bV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpOworICAgICAgICBpZiAoZGlzcGxheUxpc3Qu
aXRlbUNvdW50KCkpIHsKKyAgICAgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRs
ZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQoZGlzcGxheUxpc3QpOworICAgICAgICAgICAgUmVtb3Rl
SW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6ZW5zdXJlQmFja2VuZFVwZGF0ZWQoKTsKKyAgICAg
ICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShHUFVfUFJPQ0VTUykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJNZXNzYWdlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY1
NDZkOTEzZTI0Y2Q0NjcwOGFkMjFhZTIyNTRkYTM4YzNlMDA0MmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
TWVzc2FnZUhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5o
IgorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQorCisjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5n
QmFja2VuZC5oIgorI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2Vz
LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgewordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK1Jl
bW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhh
bmRsZXIoY29uc3QgRmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUs
IGZsb2F0IHJlc29sdXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kJiByZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQorICAgIDogbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKG1ha2VXZWFrUHRyKHJlbW90ZVJlbmRlcmluZ0JhY2tlbmQpKQoreworICAg
IC8vIENyZWF0ZSB0aGUgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS4KKyAgICBtX3JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6
Q3JlYXRlSW1hZ2VCdWZmZXIoc2l6ZSwgcmVuZGVyaW5nTW9kZSwgcmVzb2x1dGlvblNjYWxlLCBj
b2xvclNwYWNlLCBtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVtb3RlUmVuZGVyaW5nQmFj
a2VuZC0+cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSk7Cit9CisKK1JlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZUhhbmRsZXI6On5SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyKCkKK3sK
KyAgICAvLyBSZWxlYXNlIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5LgorICAgIGlmICghbV9y
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kKQorICAgICAgICByZXR1cm47CisgICAgbV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6
OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC0+cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSk7Cit9CisKK3ZvaWQg
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6ZW5zdXJlQmFja2VuZENyZWF0ZWQoKQor
eworICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQgJiYgIWlzQmFja2VuZENyZWF0ZWQo
KSkKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLT53YWl0Q3JlYXRlSW1hZ2VCdWZm
ZXJCYWNrZW5kKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6
ZW5zdXJlQmFja2VuZFVwZGF0ZWQoKQoreworICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQgJiYgaXNQZW5kaW5nRmx1c2goKSkKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5k
LT53YWl0Q29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQoKTsKK30KKwordm9pZCBSZW1vdGVJ
bWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyOjpmbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCit7CisgICAgaWYgKCFt
X3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQpCisgICAgICAgIHJldHVybjsKKyAgICBtX3NlbnRGbHVz
aElkZW50aWZpZXIgPSBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllcjo6Z2VuZXJhdGUoKTsKKyAg
ICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQtPnNlbmQoTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmRQcm94eTo6Rmx1c2hJbWFnZUJ1ZmZlckRyYXdpbmdDb250ZXh0KGRpc3BsYXlMaXN0
LCBtX3NlbnRGbHVzaElkZW50aWZpZXIsIG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyKSwgbV9yZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLT5yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcigpKTsKK30KKwor
dm9pZCBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyOjpjb21taXRGbHVzaENvbnRleHQo
SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyKQoreworICAgIG1fcmVj
ZWl2ZWRGbHVzaElkZW50aWZpZXIgPSBmbHVzaElkZW50aWZpZXI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEdQVV9QUk9DRVNTKQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVy
TWVzc2FnZUhhbmRsZXIuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY3MmZiYmEwMjhi
OGYwMzE2ODFhZDgxNzkyMzg0MDgxNTg4NzNmOWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhh
bmRsZXIuaApAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQor
CisjaW5jbHVkZSAiSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNp
bmNsdWRlIDxXZWJDb3JlL0Rpc3BsYXlMaXN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNp
emUuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlcmluZ01vZGUuaD4KKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CisKK2NsYXNzIFJlbW90ZUlt
YWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgflJlbW90ZUlt
YWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIoKTsKKworICAgIEltYWdlQnVmZmVySWRlbnRpZmllciBp
bWFnZUJ1ZmZlcklkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlQnVmZmVySWRlbnRp
ZmllcjsgfQorCisgICAgLy8gTWVzc2FnZXMgcmVjZWl2ZWQuIFNlZSBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kLm1lc3NhZ2VzLmluLgorICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVCYWNrZW5kKGNvbnN0
IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUm
IGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2Us
IEltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSkgPSAwOworCisgICAgdm9pZCBjb21taXRGbHVzaENv
bnRleHQoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIpOworCitwcm90ZWN0ZWQ6CisgICAgUmVt
b3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmLCBX
ZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNv
bG9yU3BhY2UsIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQmKTsKKworICAgIHZpcnR1YWwgYm9vbCBp
c0JhY2tlbmRDcmVhdGVkKCkgY29uc3QgPSAwOworICAgIGJvb2wgaXNQZW5kaW5nRmx1c2goKSBj
b25zdCB7IHJldHVybiBtX3NlbnRGbHVzaElkZW50aWZpZXIgIT0gbV9yZWNlaXZlZEZsdXNoSWRl
bnRpZmllcjsgfQorCisgICAgLy8gQmxvY2tlcnMKKyAgICB2b2lkIGVuc3VyZUJhY2tlbmRDcmVh
dGVkKCk7CisgICAgdm9pZCBlbnN1cmVCYWNrZW5kVXBkYXRlZCgpOworCisgICAgLy8gTWVzc2Fn
ZXMgc2VudC4gU2VlIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbi4KKyAg
ICB2b2lkIGZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRp
c3BsYXlMaXN0Jik7CisKK3ByaXZhdGU6CisgICAgV2Vha1B0cjxSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kPiBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQ7CisgICAgSW1hZ2VCdWZmZXJJZGVudGlmaWVy
IG1faW1hZ2VCdWZmZXJJZGVudGlmaWVyIHsgSW1hZ2VCdWZmZXJJZGVudGlmaWVyOjpnZW5lcmF0
ZSgpIH07CisKKyAgICBJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciBtX3NlbnRGbHVzaElkZW50
aWZpZXI7CisgICAgSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgbV9yZWNlaXZlZEZsdXNoSWRl
bnRpZmllcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxF
KEdQVV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggMjI3NTcy
YzM3NWVkYmJhMmEwZWU2OTQzNmMzOGY4NGI5MjBkMDkwYy4uYWQxY2FmZTM1N2MxYjY0ZTZhNjVl
NzhiNDdjMTMzYmM0YWNhYjE4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCkBA
IC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEdQVV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiR1BV
UHJvY2Vzc0Nvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVJlbW90ZUltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZE1lc3NhZ2VzLmgiCiAjaW5jbHVk
ZSAiUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5TWVzc2FnZXMuaCIKIApAQCAtNzEsMTYgKzcy
LDMyIEBAIHVpbnQ2NF90IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0
aW5hdGlvbklEKCkgY29uc3QKICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmll
ci50b1VJbnQ2NCgpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZsb2F0U2l6ZSYsIFJlbmRl
cmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQsIENvbG9yU3BhY2UpCitib29sIFJlbW90ZVJl
bmRlcmluZ0JhY2tlbmQ6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKQogewotICAgIHN3
aXRjaCAocmVuZGVyaW5nTW9kZSkgewotICAgIGNhc2UgUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNj
ZWxlcmF0ZWQ6Ci0gICAgY2FzZSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVVbmFjY2VsZXJhdGVkOgot
ICAgICAgICAvLyBGSVhNRTogQ3JlYXRlIHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6
c2luZ2xldG9uKCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7Cisg
ICAgcmV0dXJuIGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3Nh
Z2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQ+KG1f
cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRl
cnJ1cHRXYWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitib29sIFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ6OndhaXRDb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dCgpCit7CisgICAg
UmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBj
b25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3Rl
UmVuZGVyaW5nQmFja2VuZDo6Q29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQ+KG1fcmVuZGVy
aW5nQmFja2VuZElkZW50aWZpZXIsIDFfcywgSVBDOjpXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRX
YWl0aW5nSWZTeW5jTWVzc2FnZUFycml2ZXMpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgUmVuZGVyaW5nTW9kZSByZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBpZiAocmVuZGVyaW5nTW9k
ZSA9PSBSZW5kZXJpbmdNb2RlOjpSZW1vdGVBY2NlbGVyYXRlZCkgeworICAgICAgICBpZiAoYXV0
byBpbWFnZUJ1ZmZlciA9IEFjY2VsZXJhdGVkUmVtb3RlSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXpl
LCByZW5kZXJpbmdNb2RlLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsICp0aGlzKSkgewor
ICAgICAgICAgICAgbV9pbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyTWFwLmFkZChpbWFnZUJ1ZmZl
ci0+aW1hZ2VCdWZmZXJJZGVudGlmaWVyKCksIGltYWdlQnVmZmVyLmdldCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiBpbWFnZUJ1ZmZlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChyZW5k
ZXJpbmdNb2RlID09IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkIHx8IHJlbmRlcmlu
Z01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6UmVtb3RlVW5hY2NlbGVyYXRlZCkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZUJ1ZmZlciA9IFVuYWNjZWxlcmF0ZWRSZW1vdGVJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIHJlbmRlcmluZ01vZGUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgKnRo
aXMpKSB7CisgICAgICAgICAgICBtX2ltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJNYXAuYWRkKGlt
YWdlQnVmZmVyLT5pbWFnZUJ1ZmZlcklkZW50aWZpZXIoKSwgaW1hZ2VCdWZmZXIuZ2V0KCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGltYWdlQnVmZmVyOworICAgICAgICB9CiAgICAgfQogCiAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC04OSwxMCArMTA2LDIwIEBAIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvCiB2b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OnJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQogewogICAgIC8vIENyZWF0
ZUltYWdlQnVmZmVyIG1lc3NhZ2Ugc2hvdWxkIGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhp
cyBvbmUuCi0gICAgYm9vbCBmb3VuZCA9IG1faW1hZ2VCdWZmZXJNYXAucmVtb3ZlKGltYWdlQnVm
ZmVySWRlbnRpZmllcik7CisgICAgYm9vbCBmb3VuZCA9IG1faW1hZ2VCdWZmZXJNZXNzYWdlSGFu
ZGxlck1hcC5yZW1vdmUoaW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKICAgICBBU1NFUlRfVU5VU0VE
KGZvdW5kLCBmb3VuZCk7Cit9CisKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kKGNvbnN0IEZsb2F0U2l6ZSYgbG9naWNhbFNpemUsIGNvbnN0IElu
dFNpemUmIGJhY2tlbmRTaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlIGhhbmRsZSwgSW1hZ2VCdWZmZXJJZGVu
dGlmaWVyIGltYWdlQnVmZmVySWRlbnRpZmllcikKK3sKKyAgICBpZiAoYXV0byBpbWFnZUJ1ZmZl
ciA9IG1faW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlck1hcC5nZXQoaW1hZ2VCdWZmZXJJZGVudGlm
aWVyKSkKKyAgICAgICAgaW1hZ2VCdWZmZXItPmNyZWF0ZUJhY2tlbmQobG9naWNhbFNpemUsIGJh
Y2tlbmRTaXplLCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIFdURk1vdmUoaGFuZGxlKSk7
Cit9CiAKLSAgICBzZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OlJl
bGVhc2VJbWFnZUJ1ZmZlcihpbWFnZUJ1ZmZlcklkZW50aWZpZXIpLCBtX3JlbmRlcmluZ0JhY2tl
bmRJZGVudGlmaWVyKTsKK3ZvaWQgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y29tbWl0SW1hZ2VC
dWZmZXJGbHVzaENvbnRleHQoSW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlm
aWVyLCBJbWFnZUJ1ZmZlcklkZW50aWZpZXIgaW1hZ2VCdWZmZXJJZGVudGlmaWVyKQoreworICAg
IGlmIChhdXRvIGltYWdlQnVmZmVyID0gbV9pbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyTWFwLmdl
dChpbWFnZUJ1ZmZlcklkZW50aWZpZXIpKQorICAgICAgICBpbWFnZUJ1ZmZlci0+Y29tbWl0Rmx1
c2hDb250ZXh0KGZsdXNoSWRlbnRpZmllcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNz
L1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaAppbmRleCBhOGQyOWU4MjZkNWFmZGYyNWVhZjYyODVh
NWE1N2EzNjUyNzllYWQ2Li4yMGNmOTk0M2YyZDE0YzQxYTVkYWVhMjVjYzRjZjY5ZjI4ZmMwYjg0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90
ZVJlbmRlcmluZ0JhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMjcsMzggKzI3LDU2IEBACiAKICNp
ZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckJhY2tlbmRIYW5k
bGUuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVySWRlbnRpZmllci5oIgogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VTZW5kZXIuaCIKKyNpbmNsdWRlICJSZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VIYW5kbGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIuaCIK
ICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yU3BhY2UuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Rpc3Bs
YXlMaXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFNpemUuaD4KLSNpbmNsdWRlIDxXZWJD
b3JlL0ltYWdlQnVmZmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZW5kZXJpbmdNb2RlLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgUmVtb3RlUmVuZGVyaW5nQmFja2VuZAotICAgIDogcHJp
dmF0ZSBJUEM6Ok1lc3NhZ2VTZW5kZXIKLSAgICAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2
ZXIgeworICAgIDogcHVibGljIElQQzo6TWVzc2FnZVNlbmRlcgorICAgICwgcHJpdmF0ZSBJUEM6
Ok1lc3NhZ2VSZWNlaXZlcgorICAgICwgcHVibGljIENhbk1ha2VXZWFrUHRyPFJlbW90ZVJlbmRl
cmluZ0JhY2tlbmQ+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFJlbW90
ZVJlbmRlcmluZ0JhY2tlbmQ+IGNyZWF0ZSgpOwogCiAgICAgflJlbW90ZVJlbmRlcmluZ0JhY2tl
bmQoKTsKIAorICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIHJlbmRlcmluZ0JhY2tlbmRJ
ZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjsg
fQorCiAgICAgLy8gSVBDOjpNZXNzYWdlU2VuZGVyLgogICAgIElQQzo6Q29ubmVjdGlvbiogbWVz
c2FnZVNlbmRlckNvbm5lY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB1aW50NjRfdCBtZXNz
YWdlU2VuZGVyRGVzdGluYXRpb25JRCgpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgLy8gSVBDOjpN
ZXNzYWdlUmVjZWl2ZXIKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlv
biYsIElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OkltYWdlQnVmZmVyPiBjcmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBXZWJDb3JlOjpGbG9hdFNp
emUmLCBXZWJDb3JlOjpSZW5kZXJpbmdNb2RlLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNv
cmU6OkNvbG9yU3BhY2UpOwogICAgIHZvaWQgcmVsZWFzZUltYWdlQnVmZmVyKEltYWdlQnVmZmVy
SWRlbnRpZmllcik7CiAKKyAgICAvLyBCbG9ja2VycworICAgIGJvb2wgd2FpdENyZWF0ZUltYWdl
QnVmZmVyQmFja2VuZCgpOworICAgIGJvb2wgd2FpdENvbW1pdEltYWdlQnVmZmVyRmx1c2hDb250
ZXh0KCk7CisKIHByaXZhdGU6CiAgICAgUmVtb3RlUmVuZGVyaW5nQmFja2VuZCgpOwotICAgICAg
ICAKLSAgICB1c2luZyBJbWFnZUJ1ZmZlck1hcCA9IEhhc2hNYXA8SW1hZ2VCdWZmZXJJZGVudGlm
aWVyLCBXZWJDb3JlOjpJbWFnZUJ1ZmZlcio+OwotICAgIEltYWdlQnVmZmVyTWFwIG1faW1hZ2VC
dWZmZXJNYXA7CisKKyAgICAvLyBSZWNlaXZlZCBtZXNzYWdlcy4KKyAgICB2b2lkIGNyZWF0ZUlt
YWdlQnVmZmVyQmFja2VuZChjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBiYWNrZW5kU2l6ZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxl
LCBXZWJDb3JlOjpDb2xvclNwYWNlLCBJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUsIEltYWdlQnVm
ZmVySWRlbnRpZmllcik7CisgICAgdm9pZCBjb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dChJ
bWFnZUJ1ZmZlckZsdXNoSWRlbnRpZmllciwgSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKKworICAg
IHVzaW5nIEltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXJNYXAgPSBIYXNoTWFwPEltYWdlQnVmZmVy
SWRlbnRpZmllciwgUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcio+OworICAgIEltYWdl
QnVmZmVyTWVzc2FnZUhhbmRsZXJNYXAgbV9pbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyTWFwOwog
ICAgIFJlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyIG1fcmVuZGVyaW5nQmFja2VuZElkZW50aWZp
ZXIgeyBSZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllcjo6Z2VuZXJhdGUoKSB9OwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IDUyNmUxZjlj
OWRjZjAyZjc3Y2NjMjgxYjM1NWExNWI3NDI3ODI4YTAuLjEyYTdiZjhkYTRjODI1NzBiY2EzNmEx
MzVmZDcxYWYyNTg4YjY0ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbgorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQu
bWVzc2FnZXMuaW4KQEAgLTIzLDcgKzIzLDggQEAKICNpZiBFTkFCTEUoR1BVX1BST0NFU1MpCiAK
IG1lc3NhZ2VzIC0+IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQgTm90UmVmQ291bnRlZCB7Ci0KKyAg
ICB2b2lkIENyZWF0ZUltYWdlQnVmZmVyQmFja2VuZChXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNh
bFNpemUsIFdlYkNvcmU6OkludFNpemUgYmFja2VuZFNpemUsIGZsb2F0IHJlc29sdXRpb25TY2Fs
ZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSBjb2xvclNwYWNlLCBXZWJLaXQ6OkltYWdlQnVmZmVyQmFj
a2VuZEhhbmRsZSBoYW5kbGUsIFdlYktpdDo6SW1hZ2VCdWZmZXJJZGVudGlmaWVyIGltYWdlQnVm
ZmVySWRlbnRpZmllcikKKyAgICB2b2lkIENvbW1pdEltYWdlQnVmZmVyRmx1c2hDb250ZXh0KFdl
YktpdDo6SW1hZ2VCdWZmZXJGbHVzaElkZW50aWZpZXIgZmx1c2hJZGVudGlmaWVyLCBXZWJLaXQ6
OkltYWdlQnVmZmVySWRlbnRpZmllciBpbWFnZUJ1ZmZlcklkZW50aWZpZXIpCiB9CiAKICNlbmRp
ZiAvLyBFTkFCTEUoR1BVX1BST0NFU1MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29hL0lt
YWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5jcHAKaW5kZXggNTc1YjRiYzQ5ZjJj
ODUyODA2NzBhNWRkNDE5NWY0NDRjZTBkMTE5Ny4uZjYzZDU3MzNlMzAxZTU5NDA0NzkyYzA0YjI0
YjYwNmQzNzdmMjVmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvY29jb2EvSW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmNwcApAQCAtMzcsNyArMzcsNyBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKEltYWdlQnVm
ZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CiAKLXN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1
ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQ+IEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJm
YWNlQmFja2VuZDo6Y3JlYXRlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCitzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZm
ZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFj
ZUJhY2tlbmQ6OmNyZWF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IHJlc29sdXRpb25T
Y2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBjb25zdCBIb3N0V2luZG93KikKIHsKICAgICBJ
bnRTaXplIGJhY2tlbmRTaXplID0gY2FsY3VsYXRlQmFja2VuZFNpemUoc2l6ZSwgcmVzb2x1dGlv
blNjYWxlKTsKICAgICBpZiAoYmFja2VuZFNpemUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJl
YWJsZUlPU3VyZmFjZUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3Jh
cGhpY3MvY29jb2EvSW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kLmgKaW5kZXgg
MTA4MWU5ODViNmMwNjAxMWIzMmQxNzhhM2E3YzBiNjkyZjQ3MmVmNi4uY2YyODk3OWM2ZjE0ZDc2
MmU2OTYwNTZhMDc1YTliZTIyODVhNDhmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9jb2NvYS9JbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJh
Y2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL2NvY29h
L0ltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZC5oCkBAIC00MCw3ICs0MCw3IEBA
IGNsYXNzIEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCA6IHB1YmxpYyBXZWJD
b3JlOjpJbWFnZUJ1ZmZlcklPU3VyZmFjCiAgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChJbWFn
ZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tlbmQpOwogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEltYWdlQnVmZmVyU2hhcmVhYmxlSU9TdXJmYWNlQmFja2VuZCk7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlPU3VyZmFjZUJhY2tl
bmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxTaXplLCBjb25zdCBm
bG9hdCByZXNvbHV0aW9uU2NhbGUsIFdlYkNvcmU6OkNvbG9yU3BhY2UpOworICAgIHN0YXRpYyBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXJTaGFyZWFibGVJT1N1cmZhY2VCYWNrZW5kPiBjcmVh
dGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBsb2dpY2FsU2l6ZSwgY29uc3QgZmxvYXQgcmVz
b2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlLCBjb25zdCBXZWJDb3JlOjpIb3N0V2lu
ZG93Kik7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlclNoYXJlYWJsZUlP
U3VyZmFjZUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIGxvZ2ljYWxT
aXplLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBpbnRlcm5hbFNpemUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlKTsK
IAogICAgIHVzaW5nIFdlYkNvcmU6OkltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZDo6SW1hZ2VC
dWZmZXJJT1N1cmZhY2VCYWNrZW5kOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392140</attachid>
            <date>2020-03-02 07:27:30 -0800</date>
            <delta_ts>2020-03-02 14:37:37 -0800</delta_ts>
            <desc>Patch  for review</desc>
            <filename>ImageBuffer-Last.patch</filename>
            <type>text/plain</type>
            <size>17166</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YzJkN2ZkNWYzMC4uMmRkZDFkNDY3OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOSBAQAorMjAyMC0wMy0wMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgorCisgICAgICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUHJlcGFyZSBD
b25jcmV0ZUltYWdlQnVmZmVyIHRvIGJlIGNyZWF0ZWQgd2l0aG91dCBpbW1lZGlhdGUgYmFja2Vu
ZC4KKyAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXIsIHdoaWNoIGlzIGEgc3VwZXJjbGFzcyBvZiBD
b25jcmV0ZUltYWdlQnVmZmVyLCB3aWxsIGJlCisgICAgICAgIGNyZWF0ZWQgaW5pdGlhbGx5IHdp
dGhvdXQgYSBiYWNrZW5kLiBJdCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBpdHMgdHdpbgorICAgICAg
ICBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IGluIHRoZSBHUFVQcm9jZXNzIHNoYXJlcyBpdHMgYmFj
a2VuZC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI6OmVuc3VyZUJhY2tlbmRD
cmVhdGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI6OmVu
c3VyZUJhY2tlbmQgY29uc3QpOiBEZWxldGVkLgorCiAyMDIwLTAyLTI5ICBTYWlkIEFib3UtSGFs
bGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IHRoZSBy
ZW1vdGUgSW1hZ2VCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRleCBiYjcxZGMyNTY3NS4uMDRkMmI0MGNj
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRl
SW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25j
cmV0ZUltYWdlQnVmZmVyLmgKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgQ29u
Y3JldGVJbWFnZUJ1ZmZlcigpID0gZGVmYXVsdDsKIAotICAgIHZpcnR1YWwgQmFja2VuZFR5cGUq
IGVuc3VyZUJhY2tlbmQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICB2
aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fYmFja2VuZC5nZXQoKTsgfQogCiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7CkBAIC02OSwxMTAgKzY5LDE1MiBAQCBwcm90ZWN0ZWQ6CiAKICAg
ICB2b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdp
bmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+Zmx1c2hDb250ZXh0KCk7CisgICAgICAg
IGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAg
ICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Zmx1c2hDb250
ZXh0KCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBBZmZpbmVUcmFuc2Zvcm0gYmFzZVRyYW5z
Zm9ybSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+YmFzZVRyYW5zZm9ybSgp
OyB9Ci0gICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
YmFja2VuZC0+bG9naWNhbFNpemUoKTsgfQotICAgIEludFNpemUgYmFja2VuZFNpemUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmJhY2tlbmRTaXplKCk7IH0KLSAgICBmbG9h
dCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPnJl
c29sdXRpb25TY2FsZSgpOyB9CisgICAgQWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpID8gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKS0+YmFzZVRyYW5zZm9ybSgpIDogQWZmaW5lVHJhbnNmb3JtKCk7IH0KKyAg
ICBJbnRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSA/IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCktPmxvZ2ljYWxTaXplKCkgOiBJ
bnRTaXplKCk7IH0KKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSA/IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCktPmJh
Y2tlbmRTaXplKCkgOiBJbnRTaXplKCk7IH0KKyAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpID8gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKS0+cmVzb2x1dGlvblNjYWxlKCkgOiAxOyB9CiAKLSAgICBzaXplX3QgbWVt
b3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2VuZC0+bWVtb3J5Q29zdCgp
OyB9Ci0gICAgc2l6ZV90IGV4dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fYmFja2VuZC0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCk7IH0KKyAgICBzaXplX3QgbWVtb3J5
Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkgPyBl
bnN1cmVCYWNrZW5kQ3JlYXRlZCgpLT5tZW1vcnlDb3N0KCkgOiAwOyB9CisgICAgc2l6ZV90IGV4
dGVybmFsTWVtb3J5Q29zdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmRD
cmVhdGVkKCkgPyBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpLT5leHRlcm5hbE1lbW9yeUNvc3QoKSA6
IDA7IH0KIAogICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlOYXRpdmVJbWFnZShCYWNraW5nU3RvcmVD
b3B5IGNvcHlCZWhhdmlvciA9IENvcHlCYWNraW5nU3RvcmUpIGNvbnN0IG92ZXJyaWRlCiAgICAg
ewotICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hE
cmF3aW5nQ29udGV4dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5jb3B5TmF0aXZlSW1h
Z2UoY29weUJlaGF2aW9yKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPmNvcHlOYXRpdmVJbWFnZShjb3B5QmVoYXZpb3IpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZT4gY29weUltYWdlKEJh
Y2tpbmdTdG9yZUNvcHkgY29weUJlaGF2aW9yID0gQ29weUJhY2tpbmdTdG9yZSwgUHJlc2VydmVS
ZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiA9IFByZXNlcnZlUmVzb2x1dGlvbjo6Tm8pIGNv
bnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNr
ZW5kLT5jb3B5SW1hZ2UoY29weUJlaGF2aW9yLCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAg
ICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKKyAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaERyYXdpbmdD
b250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weUltYWdlKGNvcHlCZWhh
dmlvciwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CiAKICAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3ZlcnJpZGUKICAgICB7Ci0gICAg
ICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgbV9iYWNrZW5kLT5kcmF3KGRlc3RD
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0aW9ucyk7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVz
dFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIGNvbnN0IEZsb2F0
U2l6ZSYgc3BhY2luZywgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJy
aWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFj
a2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJu
VHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywgb3B0aW9ucyk7CisgICAgICAgIGlmIChhdXRvKiBi
YWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+ZHJhd1BhdHRlcm4oZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCBwaGFzZSwgc3BhY2luZywg
b3B0aW9ucyk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBOYXRpdmVJbWFnZVB0ciBzaW5rSW50
b05hdGl2ZUltYWdlKCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwor
ICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKKyAg
ICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNr
ZW5kLT5zaW5rSW50b05hdGl2ZUltYWdlKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCiAgICAgUmVmUHRyPEltYWdlPiBzaW5rSW50b0ltYWdlKFByZXNlcnZl
UmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICBy
ZXR1cm4gbV9iYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAg
ICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAg
ICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQt
PnNpbmtJbnRvSW1hZ2UocHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICB2b2lkIGRyYXdDb25zdW1pbmcoR3JhcGhpY3ND
b250ZXh0JiBkZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgbV9i
YWNrZW5kLT5kcmF3Q29uc3VtaW5nKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgb3B0
aW9ucyk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQo
KSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFj
a2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0VG9MdW1pbmFuY2VNYXNr
KCkgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAg
ICAgbV9iYWNrZW5kLT5jb252ZXJ0VG9MdW1pbmFuY2VNYXNrKCk7CisgICAgICAgIGlmIChhdXRv
KiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hE
cmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNl
KENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkZXN0Q29sb3JTcGFjZSkgb3Zl
cnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgbV9i
YWNrZW5kLT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNl
KTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7
CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7CisgICAgICAgICAgICBiYWNrZW5k
LT50cmFuc2Zvcm1Db2xvclNwYWNlKHNyY0NvbG9yU3BhY2UsIGRlc3RDb2xvclNwYWNlKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2Vy
dmVSZXNvbHV0aW9uKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgY29uc3RfY2FzdDxD
b25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwotICAgICAgICByZXR1
cm4gbV9iYWNrZW5kLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQo
KSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMp
LmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvRGF0YVVSTCht
aW1lVHlwZSwgcXVhbGl0eSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQogCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRvRGF0YShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3VibGU+IHF1YWxpdHkgPSBXVEY6Om51
bGxvcHQpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRl
SW1hZ2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiBtX2Jh
Y2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIGlmIChhdXRvKiBiYWNr
ZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgY29uc3RfY2FzdDxD
b25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAgICAgICAgICAg
cmV0dXJuIGJhY2tlbmQtPnRvRGF0YShtaW1lVHlwZSwgcXVhbGl0eSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBWZWN0b3I8dWludDhfdD4gdG9CR1JBRGF0
YSgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewotICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1h
Z2VCdWZmZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiBtX2JhY2tl
bmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
dG9CR1JBRGF0YSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAg
ICAgUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
b3V0cHV0Rm9ybWF0LCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0KSBjb25zdCBvdmVycmlkZQogICAg
IHsKLSAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNo
Q29udGV4dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5nZXRJbWFnZURhdGEob3V0cHV0
Rm9ybWF0LCBzcmNSZWN0KTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hDb250ZXh0KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdm9pZCBwdXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBpbnB1dEZvcm1hdCwgY29uc3QgSW1hZ2VEYXRhJiBpbWFnZURhdGEsIGNv
bnN0IEludFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQgPSB7IH0pIG92
ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaENvbnRleHQoKTsKLSAgICAgICAgbV9iYWNrZW5k
LT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwgc3JjUmVjdCwgZGVzdFBvaW50
KTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7
CisgICAgICAgICAgICBmbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPnB1dElt
YWdlRGF0YShpbnB1dEZvcm1hdCwgaW1hZ2VEYXRhLCBzcmNSZWN0LCBkZXN0UG9pbnQpOworICAg
ICAgICB9CiAgICAgfQogCiAgICAgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0
IG92ZXJyaWRlCiAgICAgewotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT5wbGF0Zm9ybUxheWVy
KCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAogICAgIGJvb2wgY29weVRvUGxhdGZvcm1UZXh0dXJlKEdy
YXBoaWNzQ29udGV4dEdMT3BlbkdMJiBjb250ZXh0LCBHQ0dMZW51bSB0YXJnZXQsIFBsYXRmb3Jt
R0xPYmplY3QgZGVzdGluYXRpb25UZXh0dXJlLCBHQ0dMZW51bSBpbnRlcm5hbGZvcm1hdCwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBib29sIGZsaXBZKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKGNvbnRleHQsIHRh
cmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJlbXVsdGlwbHlBbHBo
YSwgZmxpcFkpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVh
dGVkKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+Y29weVRvUGxhdGZvcm1UZXh0dXJl
KGNvbnRleHQsIHRhcmdldCwgZGVzdGluYXRpb25UZXh0dXJlLCBpbnRlcm5hbGZvcm1hdCwgcHJl
bXVsdGlwbHlBbHBoYSwgZmxpcFkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEJhY2tlbmRUeXBlPiBtX2JhY2tlbmQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDRh
NzkwZGNlYmFhLi5lZmI0OWFiNjBkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAyMC0w
My0wMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAg
ICAgIEltcGxlbWVudCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlcjo6
ZW5zdXJlQmFja2VuZENyZWF0ZWQpOgorICAgICAgICBCbG9ja3MgZXhlY3V0aW9uIHRpbGwgdGhl
ICBiYWNrZW5kIGlzIHJlY2VpdmVkIGZyb20gdGhlIEdQVVByb2Nlc3MuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6ZW5z
dXJlQmFja2VuZENyZWF0ZWQpOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VIYW5kbGVyOjplbnN1cmVCYWNrZW5kVXBkYXRlZCk6CisgICAgICAgICogV2ViUHJvY2Vz
cy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5oOgorICAgICAg
ICBTeW5jaHJvbml6ZSB0aGUgYmFja2VuZCBzdWNoIHRoYXQgdGhlIGNvbnRleHQgYW5kIHRoZSBE
cmF3aW5nQ29udGV4dCBhcmUKKyAgICAgICAgZmx1c2hlZCB0byB0aGUgYmFja2VuZCBpbiB0aGUg
R1BVUHJvY2VzcyBvbmx5IHdoZW4gaXRzIHBpeGVscyBhcmUgbmVlZGVkCisgICAgICAgIGJ5IHRo
ZSBXZWJQcm9jZXNzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQ6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQpOgorICAgICAgICAoV2ViS2l0OjpS
ZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWl0Q29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQp
OgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaDoKKyAgICAgICAgQmxvY2tlcnMgdGlsbCBjZXJ0YWluIFJlbW90ZVJlbmRlcmluZ0JhY2tl
bmRQcm94eSBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQuCisKIDIwMjAtMDItMjkgIFNhaWQgQWJvdS1I
YWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnQgdGhl
IHJlbW90ZSBJbWFnZUJ1ZmZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4IGUwMTI0YzQ4OThmLi41
ZDRlNTc5OGJmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaApAQCAtNjMsNiArNjMsMTUgQEAgcHJvdGVj
dGVkOgogICAgICAgICBtX2JhY2tlbmQgPSBCYWNrZW5kVHlwZTo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBXVEZNb3ZlKGhhbmRs
ZSkpOwogICAgIH0KICAgICAKKyAgICBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKworICAgIEJhY2tlbmRUeXBlKiBlbnN1
cmVCYWNrZW5kQ3JlYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoIW1f
YmFja2VuZCkKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVtb3RlSW1hZ2VCdWZmZXImPigqdGhp
cykuUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6ZW5zdXJlQmFja2VuZENyZWF0ZWQo
KTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKICAgICB2b2lkIGZs
dXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0
KCk7CkBAIC03NCw2ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYXV0byYgZGlzcGxheUxp
c3QgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7CiAgICAgICAgIGlmIChkaXNwbGF5
TGlzdC5pdGVtQ291bnQoKSkgewogICAgICAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdl
SGFuZGxlcjo6Zmx1c2hEcmF3aW5nQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgICAgICBS
ZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyOjplbnN1cmVCYWNrZW5kVXBkYXRlZCgpOwog
ICAgICAgICAgICAgZGlzcGxheUxpc3QuY2xlYXIoKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJNZXNzYWdlSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuY3BwCmluZGV4IDU2ZTI4NDUy
ZDJmLi5mNTQ2ZDkxM2UyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2Fn
ZUhhbmRsZXIuY3BwCkBAIC00OSw2ICs0OSwxOCBAQCBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VI
YW5kbGVyOjp+UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcigpCiAgICAgbV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLT5zZW5kKE1lc3NhZ2VzOjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJv
eHk6OlJlbGVhc2VJbWFnZUJ1ZmZlcihtX2ltYWdlQnVmZmVySWRlbnRpZmllciksIG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC0+cmVuZGVyaW5nQmFja2VuZElkZW50aWZpZXIoKSk7CiB9CiAKK3Zv
aWQgUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6ZW5zdXJlQmFja2VuZENyZWF0ZWQo
KQoreworICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQgJiYgIWlzQmFja2VuZENyZWF0
ZWQoKSkKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLT53YWl0Q3JlYXRlSW1hZ2VC
dWZmZXJCYWNrZW5kKCk7Cit9CisKK3ZvaWQgUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxl
cjo6ZW5zdXJlQmFja2VuZFVwZGF0ZWQoKQoreworICAgIGlmIChtX3JlbW90ZVJlbmRlcmluZ0Jh
Y2tlbmQgJiYgaXNQZW5kaW5nRmx1c2goKSkKKyAgICAgICAgbV9yZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLT53YWl0Q29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQoKTsKK30KKwogdm9pZCBSZW1v
dGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyOjpmbHVzaERyYXdpbmdDb250ZXh0KGNvbnN0IFdl
YkNvcmU6OkRpc3BsYXlMaXN0OjpEaXNwbGF5TGlzdCYgZGlzcGxheUxpc3QpCiB7CiAgICAgaWYg
KCFtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuaCBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJN
ZXNzYWdlSGFuZGxlci5oCmluZGV4IDdhNWY3ZGU3ODlmLi42NzJmYmJhMDI4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
ck1lc3NhZ2VIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmgKQEAgLTUyLDYgKzUyLDEzIEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVy
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCYpOwogCisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7
CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRl
bnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICAvLyBCbG9ja2Vy
cworICAgIHZvaWQgZW5zdXJlQmFja2VuZENyZWF0ZWQoKTsKKyAgICB2b2lkIGVuc3VyZUJhY2tl
bmRVcGRhdGVkKCk7CisKICAgICAvLyBNZXNzYWdlcyBzZW50LiBTZWUgUmVtb3RlUmVuZGVyaW5n
QmFja2VuZFByb3h5Lm1lc3NhZ2VzLmluLgogICAgIHZvaWQgZmx1c2hEcmF3aW5nQ29udGV4dChj
b25zdCBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6RGlzcGxheUxpc3QmKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggMWEzN2VmOGJkMDguLmFkMWNhZmUzNTdjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKQEAgLTcyLDYgKzcyLDE4IEBAIHVpbnQ2NF90IFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmQ6Om1lc3NhZ2VTZW5kZXJEZXN0aW5hdGlvbklEKCkgY29uc3QK
ICAgICByZXR1cm4gbV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllci50b1VJbnQ2NCgpOwogfQog
Citib29sIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OndhaXRDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBXZWJQcm9jZXNz
OjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5lY3Rpb24oKTsK
KyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8TWVz
c2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZD4o
bV9yZW5kZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246Oklu
dGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKK2Jvb2wgUmVtb3RlUmVu
ZGVyaW5nQmFja2VuZDo6d2FpdENvbW1pdEltYWdlQnVmZmVyRmx1c2hDb250ZXh0KCkKK3sKKyAg
ICBSZWY8SVBDOjpDb25uZWN0aW9uPiBjb25uZWN0aW9uID0gV2ViUHJvY2Vzczo6c2luZ2xldG9u
KCkuZW5zdXJlR1BVUHJvY2Vzc0Nvbm5lY3Rpb24oKS5jb25uZWN0aW9uKCk7CisgICAgcmV0dXJu
IGNvbm5lY3Rpb24tPndhaXRGb3JBbmREaXNwYXRjaEltbWVkaWF0ZWx5PE1lc3NhZ2VzOjpSZW1v
dGVSZW5kZXJpbmdCYWNrZW5kOjpDb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dD4obV9yZW5k
ZXJpbmdCYWNrZW5kSWRlbnRpZmllciwgMV9zLCBJUEM6OldhaXRGb3JPcHRpb246OkludGVycnVw
dFdhaXRpbmdJZlN5bmNNZXNzYWdlQXJyaXZlcyk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Y3JlYXRlSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRTaXplJiBzaXplLCBSZW5kZXJpbmdNb2RlIHJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29s
dXRpb25TY2FsZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChyZW5kZXJpbmdN
b2RlID09IFJlbmRlcmluZ01vZGU6OlJlbW90ZUFjY2VsZXJhdGVkKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tl
bmQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5oCmluZGV4IGM2NzIwM2ZiZDJhLi4yMGNmOTk0M2YyZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTY0LDYgKzY0LDEwIEBAIHB1YmxpYzoKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6SW1hZ2VCdWZmZXI+IGNyZWF0ZUltYWdlQnVmZmVyKGNvbnN0IFdl
YkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJlc29sdXRp
b25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSk7CiAgICAgdm9pZCByZWxlYXNlSW1hZ2VCdWZm
ZXIoSW1hZ2VCdWZmZXJJZGVudGlmaWVyKTsKIAorICAgIC8vIEJsb2NrZXJzCisgICAgYm9vbCB3
YWl0Q3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0Q29tbWl0SW1hZ2VC
dWZmZXJGbHVzaENvbnRleHQoKTsKKwogcHJpdmF0ZToKICAgICBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392194</attachid>
            <date>2020-03-02 14:37:41 -0800</date>
            <delta_ts>2020-03-02 15:27:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200302143740.patch</filename>
            <type>text/plain</type>
            <size>17859</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNjYzkwMTM0NmRkMGFk
MDk5Y2Q4ODlmNzRiYTY1ZmQ2MGNjNWFhMC4uYzg2Mzk5NWRkMTNjNmNkNjQ3ODFmN2IzMDFlOWNi
YmNjZDU5MTI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAzLTAyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisgICAgICAgIEltcGxlbWVu
dCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIExlZS4K
KworICAgICAgICBQcmVwYXJlIENvbmNyZXRlSW1hZ2VCdWZmZXIgdG8gYmUgY3JlYXRlZCB3aXRo
b3V0IGltbWVkaWF0ZSBiYWNrZW5kLgorICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlciwgd2hpY2gg
aXMgYSBzdXBlcmNsYXNzIG9mIENvbmNyZXRlSW1hZ2VCdWZmZXIsIHdpbGwgYmUKKyAgICAgICAg
Y3JlYXRlZCBpbml0aWFsbHkgd2l0aG91dCBhIGJhY2tlbmQuIEl0IHdpbGwgYmUgY3JlYXRlZCB3
aGVuIGl0cyB0d2luCisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgaW4gdGhlIEdQVVBy
b2Nlc3Mgc2hhcmVzIGl0cyBiYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1
ZmZlcjo6ZW5zdXJlQmFja2VuZENyZWF0ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
Y3JldGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6IERlbGV0ZWQuCisKIDIwMjAt
MDMtMDIgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBQYXRoOjpQYXRoKGNvbnN0IFBhdGgmKSBhbmQgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBh
dGgmKSBjaGVhcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBkODMzZmNjYjFlNTY0NjdmMzczMzEzZWE2NDg1Y2M0OTNh
NGE1ZDY0Li5kNmIyM2ZjOGUzOWNiODQzNzlhYzIxMjVmZDg0NmQ4ZjQ5MDFhYzVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTAzLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVu
ZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBKb24gTGVlLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6d2FpdEZvckNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZUhhbmRsZXI6OndhaXRGb3JDb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dCk6
CisgICAgICAgIFN5bmNocm9uaXplIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlciBiYWNrZW5kIHN1Y2gg
dGhhdCB0aGUgY29udGV4dCBhbmQgdGhlCisgICAgICAgIERyYXdpbmdDb250ZXh0IGFyZSBmbHVz
aGVkIHRvIHRoZSBiYWNrZW5kIGluIHRoZSBHUFVQcm9jZXNzIG9ubHkgd2hlbgorICAgICAgICBp
dHMgcGl4ZWxzIGFyZSBuZWVkZWQgaW4gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmg6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OmlzUGVuZGlu
Z0ZsdXNoIGNvbnN0KToKKyAgICAgICAgVGVsbHMgd2hldGhlciB0aGUgcGl4ZWxzIG9mIHRoZSBi
YWNrZW5kIGlzIHJlYWR5IHRvIHVzZSBvciBhIGZsdXNoaW5nIGlzCisgICAgICAgIGJlaW5nIGNv
bW1pdHRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Ojp3YWl0Rm9yQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6d2FpdEZvckNvbW1pdEltYWdlQnVmZmVyRmx1c2hDb250ZXh0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmg6CisgICAgICAgIFRoZXkgYmxvY2sgZXhlY3V0aW9uIHRpbGwgY2VydGFpbiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkgbWVzc2FnZXMKKyAgICAgICAgYXJlIHJlY2VpdmVkLgorCiAy
MDIwLTAzLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRl
eCBiYjcxZGMyNTY3NWFiOWY3MTdkNTI3NDg3NWEwMzBkMzUyNTU4ZGMzLi4wNGQyYjQwY2M1ZTZl
OGE0MjhiYzc2YmI4NzkyZmJmNDdhMjUyNzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC01OSw3ICs1OSw3
IEBAIHByb3RlY3RlZDoKIAogICAgIENvbmNyZXRlSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAK
LSAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kLmdldCgpOyB9CisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KIAogICAgIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpAQCAtNjksMTEwICs2
OSwxNTIgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQog
ICAgIHsKLSAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICBtX2JhY2tlbmQt
PmZsdXNoQ29udGV4dCgpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CiAgICAgfQogCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2JhY2tlbmQtPmJhc2VUcmFuc2Zvcm0oKTsgfQotICAgIEludFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCk7IH0KLSAgICBJ
bnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5i
YWNrZW5kU2l6ZSgpOyB9Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKTsgfQorICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSA/IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCktPmJhc2VUcmFuc2Zvcm0oKSA6
IEFmZmluZVRyYW5zZm9ybSgpOyB9CisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkgPyBlbnN1cmVCYWNrZW5kQ3Jl
YXRlZCgpLT5sb2dpY2FsU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAgSW50U2l6ZSBiYWNrZW5k
U2l6ZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkgPyBl
bnN1cmVCYWNrZW5kQ3JlYXRlZCgpLT5iYWNrZW5kU2l6ZSgpIDogSW50U2l6ZSgpOyB9CisgICAg
ZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSA/IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCktPnJlc29sdXRpb25TY2FsZSgp
IDogMTsgfQogCi0gICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biBtX2JhY2tlbmQtPm1lbW9yeUNvc3QoKTsgfQotICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNv
c3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmV4dGVybmFsTWVtb3J5Q29z
dCgpOyB9CisgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBl
bnN1cmVCYWNrZW5kQ3JlYXRlZCgpID8gZW5zdXJlQmFja2VuZENyZWF0ZWQoKS0+bWVtb3J5Q29z
dCgpIDogMDsgfQorICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpID8gZW5zdXJlQmFja2VuZENyZWF0ZWQo
KS0+ZXh0ZXJuYWxNZW1vcnlDb3N0KCkgOiAwOyB9CiAKICAgICBOYXRpdmVJbWFnZVB0ciBjb3B5
TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2luZ1N0
b3JlKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUlt
YWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJu
IG1fYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAgIGlmIChh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJlaGF2
aW9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBS
ZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9IENv
cHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24gPSBQ
cmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgY29u
c3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQo
KTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weUltYWdlKGNvcHlCZWhhdmlvciwgcHJl
c2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VCdWZm
ZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9wdGlv
bnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAg
ICAgIG1fYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlv
bnMpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tl
bmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBkZXN0
Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNS
ZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZsb2F0
UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFpbnRp
bmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmx1c2hEcmF3aW5n
Q29udGV4dCgpOwotICAgICAgICBtX2JhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBk
ZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlv
bnMpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkp
IHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tl
bmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRy
YW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CiAgICAgfQogCiAg
ICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCiAgICAgewot
ICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiBtX2JhY2tlbmQt
PnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1
cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7
CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFn
ZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uID0g
UHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNoRHJh
d2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFnZShw
cmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJh
Y2tlbmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1dGlv
bik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdm9p
ZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWlu
dGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdp
bmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29udGV4
dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0Nv
bnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRleHQs
IGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZv
aWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVz
aERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+Y29udmVydFRvTHVtaW5hbmNl
TWFzaygpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVk
KCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJh
Y2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9y
U3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdp
bmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmND
b2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4
dCgpOworICAgICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xvclNw
YWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBTdHJpbmcgdG9E
YXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0eSwg
UHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUKICAg
ICB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVz
aENvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVUeXBl
LCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29u
Y3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAogICAg
IFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8
ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAg
ICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4
dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxpdHkp
OworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsK
KyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVz
aENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0RhdGEobWltZVR5cGUs
IHF1YWxpdHkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
VmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAg
ICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgp
OwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgICAgIGlmIChh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAg
ICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0
YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYgc3Jj
UmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJ
bWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFj
a2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIGlmIChh
dXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgY29u
c3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOworICAg
ICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNyY1Jl
Y3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIHZv
aWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNvbnN0
IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRQ
b2ludCYgZGVzdFBvaW50ID0geyB9KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmx1c2hDb250
ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBpbWFn
ZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0g
ZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7Cisg
ICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0YSwg
c3JjUmVjdCwgZGVzdFBvaW50KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFBsYXRmb3JtTGF5
ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9
IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cGxh
dGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBib29s
IGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4dCwg
R0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwgR0NH
TGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlwWSkg
Y29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlUb1Bs
YXRmb3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50ZXJu
YWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgaWYgKGF1dG8qIGJh
Y2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tl
bmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4
dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlwZT4g
bV9iYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4IGUwMTI0YzQ4OThmOWNmZjE4OGI2MWY3
OGJmZTUyYjYyYWFlZWQyODQuLmI3YzBlOWI0NWYwZDcwMjY0OTRlM2NlMDk1YzQ2NTRjOTc5ZjI4
YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTYzLDYgKzYzLDE1IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgYmFja2Vu
ZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShoYW5kbGUpKTsKICAg
ICB9CiAgICAgCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tlbmQp
CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyJj4oKnRoaXMpLlJlbW90
ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OndhaXRGb3JDcmVhdGVJbWFnZUJ1ZmZlckJhY2tl
bmQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKICAgICB2b2lk
IGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBmbHVzaERyYXdpbmdDb250
ZXh0KCk7CkBAIC03NCw2ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYXV0byYgZGlzcGxh
eUxpc3QgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7CiAgICAgICAgIGlmIChkaXNw
bGF5TGlzdC5pdGVtQ291bnQoKSkgewogICAgICAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXJNZXNz
YWdlSGFuZGxlcjo6Zmx1c2hEcmF3aW5nQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAgICAg
ICBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyOjp3YWl0Rm9yQ29tbWl0SW1hZ2VCdWZm
ZXJGbHVzaENvbnRleHQoKTsKICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVy
LmNwcAppbmRleCA1NmUyODQ1MmQyZjk2MmQ2ZmRjYjIxMzQxOTQ1ZjVmZmU0OGJkYmFhLi41ZTBk
NWY1NWYzZTBjODhmYmU1ZTBkNDk1MWZlMTk5MmM2NGZlYzAzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhh
bmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5jcHAKQEAgLTQ5LDYgKzQ5LDE4IEBAIFJlbW90
ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6On5SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5k
bGVyKCkKICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQtPnNlbmQoTWVzc2FnZXM6OlJlbW90
ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZmZXJJ
ZGVudGlmaWVyKSwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLT5yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllcigpKTsKIH0KIAordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyOjp3
YWl0Rm9yQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBpZiAobV9yZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kICYmICFpc0JhY2tlbmRDcmVhdGVkKCkpCisgICAgICAgIG1fcmVtb3RlUmVu
ZGVyaW5nQmFja2VuZC0+d2FpdEZvckNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworfQorCit2
b2lkIFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OndhaXRGb3JDb21taXRJbWFnZUJ1
ZmZlckZsdXNoQ29udGV4dCgpCit7CisgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZCAm
JiBpc1BlbmRpbmdGbHVzaCgpKQorICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQtPndh
aXRGb3JDb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dCgpOworfQorCiB2b2lkIFJlbW90ZUlt
YWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29y
ZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKIHsKICAgICBpZiAoIW1f
cmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3Nh
Z2VIYW5kbGVyLmgKaW5kZXggOTYyMWZmNDkwNjc3MWE1OGI2ZDFhNTM5ZGRlYjRlZTc1N2RlODQy
ZS4uM2FlMWE5ODc5ZWZkMTkzYTljYTcwZjhkNGEzYjk4NWU3M2FmMzU2NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmgKQEAgLTUyLDYgKzUyLDEyIEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyKGNv
bnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0IHJl
c29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCYpOwogCisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7Cisg
ICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRlbnRp
ZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICB2b2lkIHdhaXRGb3JD
cmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKyAgICB2b2lkIHdhaXRGb3JDb21taXRJbWFnZUJ1
ZmZlckZsdXNoQ29udGV4dCgpOworCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4gU2VlIFJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbi4KICAgICB2b2lkIGZsdXNoRHJh
d2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IDFhMzdlZjhiZDA4OGZkMGExZTBj
NGZmYjhkZmUzMDE1ZTMzNmEzM2IuLjM3ZjU4YWQ5YTEyMDIyMWIxY2RjZGFkNmQyNzZiZjU5ZTcx
Yjk1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsNiArNzIsMTgg
QEAgdWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3RpbmF0
aW9uSUQoKSBjb25zdAogICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLnRv
VUludDY0KCk7CiB9CiAKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6d2FpdEZvckNyZWF0
ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29ubmVj
dGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0aW9u
KCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlzcGF0
Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRlSW1h
Z2VCdWZmZXJCYWNrZW5kPihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQQzo6
V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30K
KworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWl0Rm9yQ29tbWl0SW1hZ2VCdWZmZXJG
bHVzaENvbnRleHQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24gPSBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNvbm5l
Y3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1tZWRp
YXRlbHk8TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNvbW1pdEltYWdlQnVmZmVy
Rmx1c2hDb250ZXh0PihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQQzo6V2Fp
dEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30KKwog
c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpjcmVh
dGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7
CiAgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxlcmF0
ZWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggZmViODFlODc1MzI0MTRlODZh
MTkwNDRkMmI0YjU3N2UxZWQ4OGY5YS4uZDViOTc2NmRmYzc3OGViMjBiZjU3ODE4OTE0ZDY1NDgy
ZmM5NWJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTY0LDYgKzY0LDkgQEAg
cHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3JlYXRl
SW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVyaW5n
TW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlKTsKICAgICB2
b2lkIHJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwogCisgICAgYm9v
bCB3YWl0Rm9yQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0Rm9yQ29t
bWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQoKTsKKwogcHJpdmF0ZToKICAgICBSZW1vdGVSZW5k
ZXJpbmdCYWNrZW5kKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>392201</attachid>
            <date>2020-03-02 15:27:28 -0800</date>
            <delta_ts>2020-03-02 16:39:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-204955-20200302152728.patch</filename>
            <type>text/plain</type>
            <size>18147</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU3NzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNjYzkwMTM0NmRkMGFk
MDk5Y2Q4ODlmNzRiYTY1ZmQ2MGNjNWFhMC4uYzg2Mzk5NWRkMTNjNmNkNjQ3ODFmN2IzMDFlOWNi
YmNjZDU5MTI5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTAzLTAyICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisgICAgICAgIEltcGxlbWVu
dCBjYW52YXMgcmVtb3RlIHJlbmRlcmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjA0OTU1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSm9uIExlZS4K
KworICAgICAgICBQcmVwYXJlIENvbmNyZXRlSW1hZ2VCdWZmZXIgdG8gYmUgY3JlYXRlZCB3aXRo
b3V0IGltbWVkaWF0ZSBiYWNrZW5kLgorICAgICAgICBSZW1vdGVJbWFnZUJ1ZmZlciwgd2hpY2gg
aXMgYSBzdXBlcmNsYXNzIG9mIENvbmNyZXRlSW1hZ2VCdWZmZXIsIHdpbGwgYmUKKyAgICAgICAg
Y3JlYXRlZCBpbml0aWFsbHkgd2l0aG91dCBhIGJhY2tlbmQuIEl0IHdpbGwgYmUgY3JlYXRlZCB3
aGVuIGl0cyB0d2luCisgICAgICAgIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgaW4gdGhlIEdQVVBy
b2Nlc3Mgc2hhcmVzIGl0cyBiYWNrZW5kLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29uY3JldGVJbWFnZUJ1ZmZlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1
ZmZlcjo6ZW5zdXJlQmFja2VuZENyZWF0ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29u
Y3JldGVJbWFnZUJ1ZmZlcjo6ZW5zdXJlQmFja2VuZCBjb25zdCk6IERlbGV0ZWQuCisKIDIwMjAt
MDMtMDIgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
TWFrZSBQYXRoOjpQYXRoKGNvbnN0IFBhdGgmKSBhbmQgUGF0aDo6b3BlcmF0b3I9KGNvbnN0IFBh
dGgmKSBjaGVhcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBkODMzZmNjYjFlNTY0NjdmMzczMzEzZWE2NDg1Y2M0OTNh
NGE1ZDY0Li5kNmIyM2ZjOGUzOWNiODQzNzlhYzIxMjVmZDg0NmQ4ZjQ5MDFhYzVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTAzLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91
aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgSW1wbGVtZW50IGNhbnZhcyByZW1vdGUgcmVu
ZGVyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDQ5NTUKKworICAgICAgICBSZXZpZXdlZCBieSBKb24gTGVlLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlcjo6d2FpdEZvckNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZCk6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVm
ZmVyTWVzc2FnZUhhbmRsZXI6OndhaXRGb3JDb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dCk6
CisgICAgICAgIFN5bmNocm9uaXplIHRoZSBSZW1vdGVJbWFnZUJ1ZmZlciBiYWNrZW5kIHN1Y2gg
dGhhdCB0aGUgY29udGV4dCBhbmQgdGhlCisgICAgICAgIERyYXdpbmdDb250ZXh0IGFyZSBmbHVz
aGVkIHRvIHRoZSBiYWNrZW5kIGluIHRoZSBHUFVQcm9jZXNzIG9ubHkgd2hlbgorICAgICAgICBp
dHMgcGl4ZWxzIGFyZSBuZWVkZWQgaW4gdGhlIFdlYlByb2Nlc3MuCisKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmg6Cisg
ICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OmlzUGVuZGlu
Z0ZsdXNoIGNvbnN0KToKKyAgICAgICAgVGVsbHMgd2hldGhlciB0aGUgcGl4ZWxzIG9mIHRoZSBi
YWNrZW5kIGlzIHJlYWR5IHRvIHVzZSBvciBhIGZsdXNoaW5nIGlzCisgICAgICAgIGJlaW5nIGNv
bW1pdHRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5k
Ojp3YWl0Rm9yQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYktpdDo6UmVt
b3RlUmVuZGVyaW5nQmFja2VuZDo6d2FpdEZvckNvbW1pdEltYWdlQnVmZmVyRmx1c2hDb250ZXh0
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmg6CisgICAgICAgIFRoZXkgYmxvY2sgZXhlY3V0aW9uIHRpbGwgY2VydGFpbiBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kUHJveHkgbWVzc2FnZXMKKyAgICAgICAgYXJlIHJlY2VpdmVkLgorCiAy
MDIwLTAzLTAyICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAK
ICAgICAgICAgSW1wbGVtZW50IHRoZSByZW1vdGUgSW1hZ2VCdWZmZXIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIuaAppbmRl
eCBiYjcxZGMyNTY3NWFiOWY3MTdkNTI3NDg3NWEwMzBkMzUyNTU4ZGMzLi44MTRmMjVjMGUxMWZi
NTM4MzFiNmM1OTYyNjMyMWY3MTRhY2I4ZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC01OSw3ICs1OSw3
IEBAIHByb3RlY3RlZDoKIAogICAgIENvbmNyZXRlSW1hZ2VCdWZmZXIoKSA9IGRlZmF1bHQ7CiAK
LSAgICB2aXJ0dWFsIEJhY2tlbmRUeXBlKiBlbnN1cmVCYWNrZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9iYWNrZW5kLmdldCgpOyB9CisgICAgdmlydHVhbCBCYWNrZW5kVHlwZSogZW5zdXJlQmFja2Vu
ZENyZWF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KIAogICAgIEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpAQCAtNjksMTEwICs2
OSwxODYgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBmbHVzaENvbnRleHQoKSBvdmVycmlkZQog
ICAgIHsKLSAgICAgICAgZmx1c2hEcmF3aW5nQ29udGV4dCgpOwotICAgICAgICBtX2JhY2tlbmQt
PmZsdXNoQ29udGV4dCgpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tl
bmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAg
ICAgICAgIGJhY2tlbmQtPmZsdXNoQ29udGV4dCgpOworICAgICAgICB9CiAgICAgfQogCi0gICAg
QWZmaW5lVHJhbnNmb3JtIGJhc2VUcmFuc2Zvcm0oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2JhY2tlbmQtPmJhc2VUcmFuc2Zvcm0oKTsgfQotICAgIEludFNpemUgbG9naWNhbFNpemUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCk7IH0KLSAgICBJ
bnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5i
YWNrZW5kU2l6ZSgpOyB9Ci0gICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKTsgfQorICAgIEFmZmluZVRy
YW5zZm9ybSBiYXNlVHJhbnNmb3JtKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiBiYWNrZW5kLT5iYXNlVHJhbnNmb3JtKCk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgSW50U2l6ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpCisgICAgICAg
ICAgICByZXR1cm4gYmFja2VuZC0+bG9naWNhbFNpemUoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICBJbnRTaXplIGJhY2tlbmRTaXplKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5iYWNrZW5kU2l6ZSgpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KIAotICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9iYWNrZW5kLT5tZW1vcnlDb3N0KCk7IH0KLSAgICBzaXplX3QgZXh0ZXJuYWxNZW1v
cnlDb3N0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZW5kLT5leHRlcm5hbE1lbW9y
eUNvc3QoKTsgfQorICAgIGZsb2F0IHJlc29sdXRpb25TY2FsZSgpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkp
CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCk7CisgICAgICAg
IHJldHVybiAxOworICAgIH0KKworICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5tZW1vcnlDb3N0KCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIHNpemVfdCBleHRlcm5hbE1lbW9yeUNvc3QoKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVCYWNr
ZW5kQ3JlYXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmV4dGVybmFsTWVtb3J5
Q29zdCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBOYXRpdmVJbWFnZVB0ciBj
b3B5TmF0aXZlSW1hZ2UoQmFja2luZ1N0b3JlQ29weSBjb3B5QmVoYXZpb3IgPSBDb3B5QmFja2lu
Z1N0b3JlKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0
ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0
dXJuIG1fYmFja2VuZC0+Y29weU5hdGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAg
Y29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5jb3B5TmF0aXZlSW1hZ2UoY29weUJl
aGF2aW9yKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAg
ICBSZWZQdHI8SW1hZ2U+IGNvcHlJbWFnZShCYWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciA9
IENvcHlCYWNraW5nU3RvcmUsIFByZXNlcnZlUmVzb2x1dGlvbiBwcmVzZXJ2ZVJlc29sdXRpb24g
PSBQcmVzZXJ2ZVJlc29sdXRpb246Ok5vKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAg
Y29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoRHJhd2luZ0NvbnRl
eHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+Y29weUltYWdlKGNvcHlCZWhhdmlvciwg
cHJlc2VydmVSZXNvbHV0aW9uKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBlbnN1cmVC
YWNrZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBjb25zdF9jYXN0PENvbmNyZXRlSW1hZ2VC
dWZmZXImPigqdGhpcykuZmx1c2hEcmF3aW5nQ29udGV4dCgpOworICAgICAgICAgICAgcmV0dXJu
IGJhY2tlbmQtPmNvcHlJbWFnZShjb3B5QmVoYXZpb3IsIHByZXNlcnZlUmVzb2x1dGlvbik7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgdm9pZCBkcmF3
KEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQYWludGluZ09wdGlvbnMmIG9w
dGlvbnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0g
ICAgICAgIG1fYmFja2VuZC0+ZHJhdyhkZXN0Q29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9w
dGlvbnMpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVk
KCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJh
Y2tlbmQtPmRyYXcoZGVzdENvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAg
ICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0JiBk
ZXN0Q29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sIGNvbnN0IEZs
b2F0UG9pbnQmIHBoYXNlLCBjb25zdCBGbG9hdFNpemUmIHNwYWNpbmcsIGNvbnN0IEltYWdlUGFp
bnRpbmdPcHRpb25zJiBvcHRpb25zKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmx1c2hEcmF3
aW5nQ29udGV4dCgpOwotICAgICAgICBtX2JhY2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0
LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9w
dGlvbnMpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVk
KCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJh
Y2tlbmQtPmRyYXdQYXR0ZXJuKGRlc3RDb250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgcGhhc2UsIHNwYWNpbmcsIG9wdGlvbnMpOworICAgICAgICB9CiAgICAgfQog
CiAgICAgTmF0aXZlSW1hZ2VQdHIgc2lua0ludG9OYXRpdmVJbWFnZSgpIG92ZXJyaWRlCiAgICAg
ewotICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiBtX2JhY2tl
bmQtPnNpbmtJbnRvTmF0aXZlSW1hZ2UoKTsKKyAgICAgICAgaWYgKGF1dG8qIGJhY2tlbmQgPSBl
bnN1cmVCYWNrZW5kQ3JlYXRlZCgpKSB7CisgICAgICAgICAgICBmbHVzaERyYXdpbmdDb250ZXh0
KCk7CisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+c2lua0ludG9OYXRpdmVJbWFnZSgpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAgIFJlZlB0cjxJ
bWFnZT4gc2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9u
ID0gUHJlc2VydmVSZXNvbHV0aW9uOjpObykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+c2lua0ludG9JbWFn
ZShwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3Vy
ZUJhY2tlbmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsK
KyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT5zaW5rSW50b0ltYWdlKHByZXNlcnZlUmVzb2x1
dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAg
dm9pZCBkcmF3Q29uc3VtaW5nKEdyYXBoaWNzQ29udGV4dCYgZGVzdENvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW1hZ2VQ
YWludGluZ09wdGlvbnMmIG9wdGlvbnMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+ZHJhd0NvbnN1bWluZyhkZXN0Q29u
dGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wdGlvbnMpOworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2lu
Z0NvbnRleHQoKTsKKyAgICAgICAgICAgIGJhY2tlbmQtPmRyYXdDb25zdW1pbmcoZGVzdENvbnRl
eHQsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcHRpb25zKTsKKyAgICAgICAgfQogICAgIH0KIAogICAg
IHZvaWQgY29udmVydFRvTHVtaW5hbmNlTWFzaygpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBm
bHVzaERyYXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+Y29udmVydFRvTHVtaW5h
bmNlTWFzaygpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVh
dGVkKCkpIHsKKyAgICAgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgICAg
IGJhY2tlbmQtPmNvbnZlcnRUb0x1bWluYW5jZU1hc2soKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENv
bG9yU3BhY2UgZGVzdENvbG9yU3BhY2UpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBmbHVzaERy
YXdpbmdDb250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShz
cmNDb2xvclNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hEcmF3aW5nQ29u
dGV4dCgpOworICAgICAgICAgICAgYmFja2VuZC0+dHJhbnNmb3JtQ29sb3JTcGFjZShzcmNDb2xv
clNwYWNlLCBkZXN0Q29sb3JTcGFjZSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBTdHJpbmcg
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGRvdWJsZT4gcXVhbGl0
eSwgUHJlc2VydmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbikgY29uc3Qgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5m
bHVzaENvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1fYmFja2VuZC0+dG9EYXRhVVJMKG1pbWVU
eXBlLCBxdWFsaXR5LCBwcmVzZXJ2ZVJlc29sdXRpb24pOworICAgICAgICBpZiAoYXV0byogYmFj
a2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpIHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8
Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKKyAgICAgICAgICAg
IHJldHVybiBiYWNrZW5kLT50b0RhdGFVUkwobWltZVR5cGUsIHF1YWxpdHksIHByZXNlcnZlUmVz
b2x1dGlvbik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogICAgIH0KIAog
ICAgIFZlY3Rvcjx1aW50OF90PiB0b0RhdGEoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9u
YWw8ZG91YmxlPiBxdWFsaXR5ID0gV1RGOjpudWxsb3B0KSBjb25zdCBvdmVycmlkZQogICAgIHsK
LSAgICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29u
dGV4dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0RhdGEobWltZVR5cGUsIHF1YWxp
dHkpOworICAgICAgICBpZiAoYXV0byogYmFja2VuZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkp
IHsKKyAgICAgICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3JldGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5m
bHVzaENvbnRleHQoKTsKKyAgICAgICAgICAgIHJldHVybiBiYWNrZW5kLT50b0RhdGEobWltZVR5
cGUsIHF1YWxpdHkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IHRvQkdSQURhdGEoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAg
ICAgICAgY29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4
dCgpOwotICAgICAgICByZXR1cm4gbV9iYWNrZW5kLT50b0JHUkFEYXRhKCk7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAg
Y29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPnRvQkdSQURhdGEoKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIFJlZlB0cjxJbWFnZURhdGE+IGdldEltYWdl
RGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgY29uc3QgSW50UmVjdCYg
c3JjUmVjdCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGNvbnN0X2Nhc3Q8Q29uY3Jl
dGVJbWFnZUJ1ZmZlciY+KCp0aGlzKS5mbHVzaENvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIG1f
YmFja2VuZC0+Z2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCk7CisgICAgICAgIGlm
IChhdXRvKiBiYWNrZW5kID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAg
Y29uc3RfY2FzdDxDb25jcmV0ZUltYWdlQnVmZmVyJj4oKnRoaXMpLmZsdXNoQ29udGV4dCgpOwor
ICAgICAgICAgICAgcmV0dXJuIGJhY2tlbmQtPmdldEltYWdlRGF0YShvdXRwdXRGb3JtYXQsIHNy
Y1JlY3QpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAogICAg
IHZvaWQgcHV0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb24gaW5wdXRGb3JtYXQsIGNv
bnN0IEltYWdlRGF0YSYgaW1hZ2VEYXRhLCBjb25zdCBJbnRSZWN0JiBzcmNSZWN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdFBvaW50ID0geyB9KSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgZmx1c2hD
b250ZXh0KCk7Ci0gICAgICAgIG1fYmFja2VuZC0+cHV0SW1hZ2VEYXRhKGlucHV0Rm9ybWF0LCBp
bWFnZURhdGEsIHNyY1JlY3QsIGRlc3RQb2ludCk7CisgICAgICAgIGlmIChhdXRvKiBiYWNrZW5k
ID0gZW5zdXJlQmFja2VuZENyZWF0ZWQoKSkgeworICAgICAgICAgICAgZmx1c2hDb250ZXh0KCk7
CisgICAgICAgICAgICBiYWNrZW5kLT5wdXRJbWFnZURhdGEoaW5wdXRGb3JtYXQsIGltYWdlRGF0
YSwgc3JjUmVjdCwgZGVzdFBvaW50KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFBsYXRmb3Jt
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZQogICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYmFja2VuZC0+cGxhdGZvcm1MYXllcigpOworICAgICAgICBpZiAoYXV0byogYmFja2Vu
ZCA9IGVuc3VyZUJhY2tlbmRDcmVhdGVkKCkpCisgICAgICAgICAgICByZXR1cm4gYmFja2VuZC0+
cGxhdGZvcm1MYXllcigpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBi
b29sIGNvcHlUb1BsYXRmb3JtVGV4dHVyZShHcmFwaGljc0NvbnRleHRHTE9wZW5HTCYgY29udGV4
dCwgR0NHTGVudW0gdGFyZ2V0LCBQbGF0Zm9ybUdMT2JqZWN0IGRlc3RpbmF0aW9uVGV4dHVyZSwg
R0NHTGVudW0gaW50ZXJuYWxmb3JtYXQsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgYm9vbCBmbGlw
WSkgY29uc3Qgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2JhY2tlbmQtPmNvcHlU
b1BsYXRmb3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9uVGV4dHVyZSwgaW50
ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAgICAgaWYgKGF1dG8q
IGJhY2tlbmQgPSBlbnN1cmVCYWNrZW5kQ3JlYXRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGJh
Y2tlbmQtPmNvcHlUb1BsYXRmb3JtVGV4dHVyZShjb250ZXh0LCB0YXJnZXQsIGRlc3RpbmF0aW9u
VGV4dHVyZSwgaW50ZXJuYWxmb3JtYXQsIHByZW11bHRpcGx5QWxwaGEsIGZsaXBZKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxCYWNrZW5kVHlw
ZT4gbV9iYWNrZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlci5oCmluZGV4IGUwMTI0YzQ4OThmOWNmZjE4OGI2
MWY3OGJmZTUyYjYyYWFlZWQyODQuLmI3YzBlOWI0NWYwZDcwMjY0OTRlM2NlMDk1YzQ2NTRjOTc5
ZjI4YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyLmgKQEAgLTYzLDYgKzYzLDE1IEBAIHByb3RlY3RlZDoK
ICAgICAgICAgbV9iYWNrZW5kID0gQmFja2VuZFR5cGU6OmNyZWF0ZShsb2dpY2FsU2l6ZSwgYmFj
a2VuZFNpemUsIHJlc29sdXRpb25TY2FsZSwgY29sb3JTcGFjZSwgV1RGTW92ZShoYW5kbGUpKTsK
ICAgICB9CiAgICAgCisgICAgYm9vbCBpc0JhY2tlbmRDcmVhdGVkKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICBCYWNrZW5kVHlwZSogZW5zdXJlQmFj
a2VuZENyZWF0ZWQoKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tl
bmQpCisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbW90ZUltYWdlQnVmZmVyJj4oKnRoaXMpLlJl
bW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OndhaXRGb3JDcmVhdGVJbWFnZUJ1ZmZlckJh
Y2tlbmQoKTsKKyAgICAgICAgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsKKyAgICB9CisKICAgICB2
b2lkIGZsdXNoQ29udGV4dCgpIG92ZXJyaWRlCiAgICAgewogICAgICAgICBmbHVzaERyYXdpbmdD
b250ZXh0KCk7CkBAIC03NCw2ICs4Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgYXV0byYgZGlz
cGxheUxpc3QgPSBtX2RyYXdpbmdDb250ZXh0LmRpc3BsYXlMaXN0KCk7CiAgICAgICAgIGlmIChk
aXNwbGF5TGlzdC5pdGVtQ291bnQoKSkgewogICAgICAgICAgICAgUmVtb3RlSW1hZ2VCdWZmZXJN
ZXNzYWdlSGFuZGxlcjo6Zmx1c2hEcmF3aW5nQ29udGV4dChkaXNwbGF5TGlzdCk7CisgICAgICAg
ICAgICBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyOjp3YWl0Rm9yQ29tbWl0SW1hZ2VC
dWZmZXJGbHVzaENvbnRleHQoKTsKICAgICAgICAgICAgIGRpc3BsYXlMaXN0LmNsZWFyKCk7CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5k
bGVyLmNwcAppbmRleCA1NmUyODQ1MmQyZjk2MmQ2ZmRjYjIxMzQxOTQ1ZjVmZmU0OGJkYmFhLi41
ZTBkNWY1NWYzZTBjODhmYmU1ZTBkNDk1MWZlMTk5MmM2NGZlYzAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyTWVzc2Fn
ZUhhbmRsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5jcHAKQEAgLTQ5LDYgKzQ5LDE4IEBAIFJl
bW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6On5SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VI
YW5kbGVyKCkKICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQtPnNlbmQoTWVzc2FnZXM6OlJl
bW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eTo6UmVsZWFzZUltYWdlQnVmZmVyKG1faW1hZ2VCdWZm
ZXJJZGVudGlmaWVyKSwgbV9yZW1vdGVSZW5kZXJpbmdCYWNrZW5kLT5yZW5kZXJpbmdCYWNrZW5k
SWRlbnRpZmllcigpKTsKIH0KIAordm9pZCBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVy
Ojp3YWl0Rm9yQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCkKK3sKKyAgICBpZiAobV9yZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kICYmICFpc0JhY2tlbmRDcmVhdGVkKCkpCisgICAgICAgIG1fcmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC0+d2FpdEZvckNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpOworfQor
Cit2b2lkIFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OndhaXRGb3JDb21taXRJbWFn
ZUJ1ZmZlckZsdXNoQ29udGV4dCgpCit7CisgICAgaWYgKG1fcmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZCAmJiBpc1BlbmRpbmdGbHVzaCgpKQorICAgICAgICBtX3JlbW90ZVJlbmRlcmluZ0JhY2tlbmQt
PndhaXRGb3JDb21taXRJbWFnZUJ1ZmZlckZsdXNoQ29udGV4dCgpOworfQorCiB2b2lkIFJlbW90
ZUltYWdlQnVmZmVyTWVzc2FnZUhhbmRsZXI6OmZsdXNoRHJhd2luZ0NvbnRleHQoY29uc3QgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0JiBkaXNwbGF5TGlzdCkKIHsKICAgICBpZiAo
IW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFuZGxlci5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1l
c3NhZ2VIYW5kbGVyLmgKaW5kZXggOTYyMWZmNDkwNjc3MWE1OGI2ZDFhNTM5ZGRlYjRlZTc1N2Rl
ODQyZS4uM2FlMWE5ODc5ZWZkMTkzYTljYTcwZjhkNGEzYjk4NWU3M2FmMzU2NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZl
ck1lc3NhZ2VIYW5kbGVyLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyLmgKQEAgLTUyLDYgKzUyLDEyIEBA
IHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVy
KGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUsIGZsb2F0
IHJlc29sdXRpb25TY2FsZSwgV2ViQ29yZTo6Q29sb3JTcGFjZSwgUmVtb3RlUmVuZGVyaW5nQmFj
a2VuZCYpOwogCisgICAgdmlydHVhbCBib29sIGlzQmFja2VuZENyZWF0ZWQoKSBjb25zdCA9IDA7
CisgICAgYm9vbCBpc1BlbmRpbmdGbHVzaCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VudEZsdXNoSWRl
bnRpZmllciAhPSBtX3JlY2VpdmVkRmx1c2hJZGVudGlmaWVyOyB9CisKKyAgICB2b2lkIHdhaXRG
b3JDcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmQoKTsKKyAgICB2b2lkIHdhaXRGb3JDb21taXRJbWFn
ZUJ1ZmZlckZsdXNoQ29udGV4dCgpOworCiAgICAgLy8gTWVzc2FnZXMgdG8gYmUgc2VudC4gU2Vl
IFJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5tZXNzYWdlcy5pbi4KICAgICB2b2lkIGZsdXNo
RHJhd2luZ0NvbnRleHQoY29uc3QgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OkRpc3BsYXlMaXN0Jik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dy
YXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwCmluZGV4IDFhMzdlZjhiZDA4OGZkMGEx
ZTBjNGZmYjhkZmUzMDE1ZTMzNmEzM2IuLjM3ZjU4YWQ5YTEyMDIyMWIxY2RjZGFkNmQyNzZiZjU5
ZTcxYjk1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtNzIsNiArNzIs
MTggQEAgdWludDY0X3QgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6bWVzc2FnZVNlbmRlckRlc3Rp
bmF0aW9uSUQoKSBjb25zdAogICAgIHJldHVybiBtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVy
LnRvVUludDY0KCk7CiB9CiAKK2Jvb2wgUmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6d2FpdEZvckNy
ZWF0ZUltYWdlQnVmZmVyQmFja2VuZCgpCit7CisgICAgUmVmPElQQzo6Q29ubmVjdGlvbj4gY29u
bmVjdGlvbiA9IFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmVuc3VyZUdQVVByb2Nlc3NDb25uZWN0
aW9uKCkuY29ubmVjdGlvbigpOworICAgIHJldHVybiBjb25uZWN0aW9uLT53YWl0Rm9yQW5kRGlz
cGF0Y2hJbW1lZGlhdGVseTxNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3JlYXRl
SW1hZ2VCdWZmZXJCYWNrZW5kPihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQ
Qzo6V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsK
K30KKworYm9vbCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjp3YWl0Rm9yQ29tbWl0SW1hZ2VCdWZm
ZXJGbHVzaENvbnRleHQoKQoreworICAgIFJlZjxJUEM6OkNvbm5lY3Rpb24+IGNvbm5lY3Rpb24g
PSBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5lbnN1cmVHUFVQcm9jZXNzQ29ubmVjdGlvbigpLmNv
bm5lY3Rpb24oKTsKKyAgICByZXR1cm4gY29ubmVjdGlvbi0+d2FpdEZvckFuZERpc3BhdGNoSW1t
ZWRpYXRlbHk8TWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkNvbW1pdEltYWdlQnVm
ZmVyRmx1c2hDb250ZXh0PihtX3JlbmRlcmluZ0JhY2tlbmRJZGVudGlmaWVyLCAxX3MsIElQQzo6
V2FpdEZvck9wdGlvbjo6SW50ZXJydXB0V2FpdGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzKTsKK30K
Kwogc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpj
cmVhdGVJbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFNpemUmIHNpemUsIFJlbmRlcmluZ01vZGUgcmVu
ZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CiB7CiAgICAgaWYgKHJlbmRlcmluZ01vZGUgPT0gUmVuZGVyaW5nTW9kZTo6UmVtb3RlQWNjZWxl
cmF0ZWQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKaW5kZXggZmViODFlODc1MzI0MTRl
ODZhMTkwNDRkMmI0YjU3N2UxZWQ4OGY5YS4uZDViOTc2NmRmYzc3OGViMjBiZjU3ODE4OTE0ZDY1
NDgyZmM5NWJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmgKQEAgLTY0LDYgKzY0LDkg
QEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJbWFnZUJ1ZmZlcj4gY3Jl
YXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiwgV2ViQ29yZTo6UmVuZGVy
aW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNjYWxlLCBXZWJDb3JlOjpDb2xvclNwYWNlKTsKICAg
ICB2b2lkIHJlbGVhc2VJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlcklkZW50aWZpZXIpOwogCisgICAg
Ym9vbCB3YWl0Rm9yQ3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5kKCk7CisgICAgYm9vbCB3YWl0Rm9y
Q29tbWl0SW1hZ2VCdWZmZXJGbHVzaENvbnRleHQoKTsKKwogcHJpdmF0ZToKICAgICBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kKCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>